Dead Lock 이란?
Dead Lock, 교착상태는 서로 다른 프로세스가 서로 점유하고 있는 자원의 반납을 대기하고 있는 상태를 의미한다.
발생 조건
- 상호배제 - 한 번에 한 프로세스만 해당 자원을 사용할 수 있어야 한다.
- 점유대기 - 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
- 비선점 - 다른 프로세스가 자원의 사용을 끝낼 때 까지 자원을 뺏을 수 없다.
- 순환대기 - 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
해결 방법
- 예방 - 4가지 조건 중 하나라도 만족하지 않도록 한다.
- 회피 - 교착상태가 발생하지 않도록 알고리즘을 설계한다.
- 회복 - 교착상태가 발생할 때 해결한다.
- 무시 - 회복과정의 성능저하가 심하다면 무시한다.
은행원 알고리즘
프로세스가 자원을 요구할 때 자원을 할당한 후에도 안정 상태로 남아있게 되는지 사전에 검사하여 교착상태를 회피하는 알고리즘이다. 안정 상태라면 자원을 할당하고 아니면 자원 해지까지 대기한다.
Starvation 이란?
Starvation, 기아상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 특정 프로세스가 영원히 자원 할당이 되지 않는 경우를 의미한다.
해결 방법
- 우선순위를 수시로 변경한다.
- 오래 기다린 프로세스의 우선순위를 높여준다.
- Queue 를 사용한다.