DeadLock
교착 상태
- 교착 상태란 두개 이상의 작업이 서로 상대방의 작업이 끝나기를 기다리기 때문에 결국 아무것도 완료 되지 못하는 상태로 "다중 프로그래밍 환경"에서 발생한다.
현재 교착상태에 대한 해결방법이 없으므로 예방을 해주어야한다.
1. 교착 상태 조건
상호배제 - 프로세스들이 필요로하는 자원에 대하요 배타적 통제권을 요구(자원은 공유 자원인데 지만쓰려고함)
점유대기 - 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다
비선점 - 프로세스가 어떤 작업이 끝날때까지 그 자원을 사용할 수 없다
순환대기 - 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
위의 4개의 조건을 만족하면 교착상태, 즉 DeadLock이 발생하게 된다.
따라서 예방을 하기위해서는 위의 상태조건 4개중 하나를 막음으로써 예방을 할 수 있다.
2. 교착 상태 예방
1. 상호 배제 예방 - 교착상태는 두대 이상의 프로세스가 공유 가능한 자원을 사용할때 발생 하므로 자원 사용시 임계영역을 지정하여 사용하도록 한다.
2. 점유와 대기 예방 - 한 프로세스가 작동 하기위해 필요 자원을 모두 충족 했을때 작동 하도록 한다.
(단점으로 자원이 모두 충족했는지 체크하는 비용과 충족을 못했다면 반환하는 복원비용이 발생하며 자원을 받지못한 프로세스는 기아 상태, 무한대기 등의 문제점이 생길 수 있다.)
3. 비선점 조건 예방 - 비선점 프로세스에 대하여 선점 가능한 프로토콜을 만들어 준다.
(비선점이란 자원을 스스로 반환할 때까지 그 자원을 계속 사용하도록 하는 것을 의미 한다)
4. 환형 대기 조건 예방 - 자원 유형에 따라 순서를 매긴다.