
•
일련의 프로세스가 서로가 이미 가지고 있는 자원을 기다리면서 block되어 있는 상태

•
상호배제: 매 순간 하나의 프로세스만 자원을 사용할 수 있음
•
비선점: 프로세스가 자원을 강제로 빼앗기지 않고 스스로 내어놓음
•
점유 대기 : 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유한 자원을 내놓지 않고 계속 가짐
•
순환 대기 : 자원을 기다리는 프로세스 간에 사이클이 형성되어야 함


•
사이클이 생기면 Deadlock
•
근데 자원 안의 instance의 개수가 중요한데, instance의 개수가 여러 개면 데드락이 발생하는지 따져봐야함


•
데드락을 미연에 방지하는 방법 중 Prevention은 가장 강력한 방법들임
•
상호배제 x : 주어진 시간에 오직 하나의 프로세스나 스레드만이 공유 자원에 들어가야 한다는 상호배제 특성 상 이 요소가 깨져버리면, 일관성이나 무결성이 유지되지가 않음
•
점유 대기 : 내가 가진 자원은 그대로 유지하면서 다른 자원을 기다리는 점유 대기. 프로세스가 자원을 요청할 때 자원을 가진 상태로는 요청 못하게 하는 방법
•
비선점 : 필요한 자원이 있어서 대기할 때 이미 가지고 있는 자원은 선점 가능하도록 설정
•
순환 대기 : 모든 자원 유형에 할당 순서를 먼저 정해놓고 정해진 순서로만 할당 가능하도록 설정
•
이러한 Deadlock Prevention방법은 쓸데없이 자원을 줬다가 뺐었다가 내놓았다가 하는 방식 때문에 비효율적임

•
Deadlock의 조건이 존재하도록 허용하지만 프로세스나 스레드가 자원을 요청했을 때 Deadlock이 발생할 수 있는지 여부를 동적으로 결정하는 방법

•
안전한 상태
•
안전하지 않은 상태
•
교착 상태 방지 알고리즘은 시스템의 현재 상태와 잠재적인 향후 요청을 기반으로 자원 요청을 허용할지 여부를 동적으로 결정

•
자원 타입 당 인스턴스가 하나인 경우
•
그래프를 통해 해결하는 RAG알고리즘

•
프로세스는 최대 자원 요구 사항을 미리 선언함
•
시스템은 그럼 현재 할당된 자원, 요청된 자원의 할당을 시뮬레이션, 어떤 순서로 모든 프로세스의 요구 사항을 충족할 수 있는지 결정
•
만약 안전한 상태로 유지된다면 자원이 부여됨
•
안전하지 않다면 프로세스는 대기하게 됨

•
자원이 충분한데 데드락이 발생할 수 있을 가능성 때문에 자원을 안 주는 것은 비효율적이므로 뭔저 자원을 줘놓고 데드락이 발생했을 때 처리하는 방식

•
a그래프는 사이클이 2개가 있음 ⇒ 데드락 발생
•
하지만 일단 자원을 다 줌. 자원의 최대 사용량은 관심사항이 아님


•
리커버리 방법
•
프로세스 종료
•
자원 선점

•
OS가 데드락에 대해서는 관여안함
•
현대 운영체제는 이 방식을 채택함