프로세스 1,2가 자원 1,2를 모두 얻어야 한다고 가정하자.
프로세스1이 자원1을, 프로세스2가 자원2를 얻었다면
프로세스1은 자원2를, 프로세스2는 자원1을 기다리게 된다.
현재 서로 원하는 자원이 상대방에 할당되어 있어 두 프로세스는 무한정 wait상태에 빠지게 된다.
멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황 발생
한 프로세스가 자원을 요청했을 때, 동시에 그 자원을 사용할 수 없는 상황이 발생할 수 있음. 이때 프로세스는 대기 상태로 들어감
대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을 때 '교착 상태' 발생
1. 상호 배제 (Mutual exclusion) : 자원은 한번에 한 프로세스만 사용 가능
2. 점유 대기(Hold and wait) : 최소한 하나의 자원을 점유하고 있으면서, 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재
3. 비선점(No preemption) : 다른 프로세스에 할당된 자원은 사용이 끝날때 까지 강제로 빼앗을 수 없음
4. 순환대기(Circular wait) : 프로세스의 집합에서 순환형태로 자원을 대기하고 있어야 함
교착 상태 발생 시 피하기
은행원 알고리즘(Banker's Algorithm)
교착 상태 발생 허용하고 회복시키는 법
교착 상태를 일어킨 프로세스를 종료하건, 할당된 자원을 해제시켜 회복시키는 방법
<교착 상태 해결책>
특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태
<교착상태와 기아상태 비교>
- 교착상태는 여러 프로세스가 동일 자원 점유를 요청할때 발생
- 기아 상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원 할당이 안되는 경우를 주로 의미함