✔ 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태.
✔ 교착상태라고도 한다.
✔ 멀티 프로세스 환경에서는 한정된 자원을 얻기 위해 서로 경쟁한다.
✔ 한 프로세스가 자원을 요청했지만 그 자원을 사용할 수 없는 상황이 발생할 수 있다.
✔ 프로세스는 대기 상태로 들어가고, 대기 상태의 프로세스들이 실행 상태로 변경될 수 없을 때 교착상태가 발생한다.
프로세스1과 프로세스2가 자원1과 자원2를 모두 얻어야 한다고 가정한다.
t1 : 프로세스1이 자원1을 얻음, 프로세스2가 자원2를 얻음.
t2 : 프로세스1은 자원2를 기다림, 프로세스2는 자원1을 기다림.
서로 원하는 자원이 상대에게 할당되어 있어서 두 프로세스는 무한정 기다리게 된다.
이러한 상태를 DeadLock 상태라고 한다
아래 4가지 모두 성립해야 DeadLock이 발생한다.
자원은 한번에 한 프로세스만 사용할 수 있다.
최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용중인 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재한다.
다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다.
프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야한다.
① 교착상태를 예방 & 회피
교착 상태 발생 조건들을 하나씩 제거하며 해결한다. (자원 낭비가 심하다.)
: 여러 프로세스가 공유 자원을 사용.
: 프로세스 실행 전 모든 자원을 할당.
: 자원 점유 중인 프로세스가 있어도 다른 프로세스가 자원을 요구하면 자원 반납.
교착 상태 발생 시 피해가는 방법.
자원 최대 가능 할당량을 사전에 파악하고 시뮬레이션을 해서 안전 상태에 들 수 있는지 검사.
안전 상태면 자원을 할당하고, 불안전 상태면 자원이 반납될 때까지 대기.
② 교착상태를 탐지 & 회복
교착 상태가 되도록 허용한 다음 회복시키는 방법.
교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복하는 방법.
💛 참고 :
https://chanhuiseok.github.io/posts/cs-2/
https://jwprogramming.tistory.com/12