데드락(DeadLock = 교착상태 )이란?
- 한정된 자원을 여러 프로세스가 사용하고자 할 때 발생하는 상황으로, 프로세스가 자원을 얻기 위해 영구적으로 기다리는 상태
예시
- 자원 A를 가진 프로세스 P1과 자원 B를 가진 프로세스 P2가 있을 때, P1은 B를 필요로 하고 P2는 A를 필요로 한다면 두 프로세스 P1, P2는 서로 자원을 얻기위해 무한정 기다리게 된다.
DeadLock 의 발생조건
1. 상호배제
- 한번에 오로지 하나의 프로세스만이 자원 선점이 가능
(제가 사용하고 있으니 제가 다쓸때까지 기다리세요!)
2. 점유 대기
- 공유 자원에 대한 접근 권한을 가지고 있는 프로세스가, 다른 자원에 대한 접근을 요구할 수 있음
(제가 지금 이걸 사용하고 있지만 다른것도 필요해요!)
3. 비선점
- 한 프로세스가 다른 프로세스의 자원 접근 권한을 강제로 취소할 수 없음
(제가 쓰고 있으니 아무도 뺏어가지 못합니다!)
4. 순환대기
- 두 개 이상의 프로세스가 자원 접근을 기다리는데, 그 사이에 순환이 생성됨
(여기서 끝일리가.. 또해결해야되네.. )
DeadLock 의 발생조건
1. 예방
- 발생조건 4가지중 한가지를 제거하는 방법
2. 회피
- 교착상태 발생시 피해가는 방식 ( 안정 상태/ 안전 순서/ 불안정 상태 / 은행원 알고리즘)
3. 회복
- 데드락 탐지 및 회복 ( 자원 선점하기 )
[ 참고 ]
'개발자 기술 면접 준비 > 정리' 카테고리의 다른 글
메모리 구조 (0) | 2021.06.07 |
---|---|
메모리란? (0) | 2021.06.07 |
멀티 프로세스 VS 멀티 쓰레드 (0) | 2021.06.07 |
컨텍스트 스위칭이란? (0) | 2021.06.07 |
프로세스 VS 스레드 (0) | 2021.06.07 |