두 개 이상의 작업이 서로 다른 작업이 끝나기만을 기다리고 있어 다음 단계를 진행하지 못하는 상태로 프로세스, 스레드 둘 다 일어날 수 있다.
A스레드에서 locking한 자원을 B스레드에서 요청하고, B스레드에서 locking한 자원을 A스레드에서 요청해서 서로 lock된 자원의 unlock을 기다릴 때 생길 수 있다.
다음 네 가지 조건이 모두 성립될 때, 교착상태 발생 가능성이 있다.
- 상호배제: 프로세스들이 필요로 하는 자원에 대한 배타적인 통제권을 요구한다.
- 점유대기: 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
- 비선점: 프로세스가 어떤 자원의 사용을 끝낼 때 까지 그 자원을 뻇을 수 없다.
- 순환대기: 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
따라서 위의 한 조건이라도 성립하지 않도록 하면 교착상태가 일어나지 않도록 할 수 있다.
프로세스가 자원을 요구할 때 시스템이 자원을 할당한 후 안정상태로 남아있게 되는지를 사전에 검사하여 교착상태를 회피하는 방법
- 할당할 수 있는 자원의 수가 일정해야 합니다.
- 사용자의 수가 일정해야 합니다.
- 항상 불안정 상태를 방지해야하므로 자원 이용도가 낮습니다.
특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태
교착상태는 여러 프로세스, 스레드가 동일 자원 점유를 요청할 떄 발생
기아상태는 여러 프로세스, 스레드가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원이 할당되지 않는 경우를 의미
https://velog.io/@underlier12/OS-24-%EA%B5%90%EC%B0%A9%EC%83%81%ED%83%9C%EC%99%80-%EA%B8%B0%EC%95%84%EC%83%81%ED%83%9C http://blog.naver.com/PostView.nhn?blogId=dong5053&logNo=220717510273&categoryNo=40&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView