교착상태(Deadlock)
프로세스가 발생 가능성이 없는 이벤트를 기다리는 경우로 시스템 내에 하나라도 교착상태에 빠진 프로세스가 있다면 시스템은 교착상태인 것
기다린다는 점에서 starvation과 비슷한 점이 있기 때문에 헷갈리는 경우가 있지만 starvation은 발생할 수 있지만 우선순위와 같은 이유로 계속해서 밀리는 경우를 말한다. 또한 Starvation은 CPU스케줄링에서 쓰이는 용어로 기다리는 대상이 CPU이다. (ready상태에서 발생)
하지만 교착상태는 발생가능성이 없는 이벤트에 대한 기다림이고 CPU가 아닌 다른 자원이 대상이다.(blocked상태에서 발생)
교착상태는 아래 4가지 경우를 모두 만족하면 발생합니다
교착상태를 해결하는 방법 중 첫번째로 예방입니다. 교착상태가 일어나는 것을 미리 감지하고 일어나지 못하도록 막는 것입니다. 그럼 예방은 어떻게 할 수 있을까요? 앞에서 살펴봤던 교착상태 발생 필요조건 중 하나를 제거해주면 됩니다.
공유허용
선점허용
한번에 모두 할당
순서를 부여
절대
발생하지 않음심각한 자원낭비
비현실
적
두 번째 해결방법은 회피입니다. 시스템을 계속해서 감시하며 교착상태가 될 가능성이 있는 자원의 할당요청을 보류하는 것입니다. 즉 시스템을 항상 safe state
로 유지하면 됩니다. 이 방법은 아래와 같은 전제가 필요합니다
프로세스의 수
고정자원의 종류와 수
고정요구하는 자원
과 최대 수량
을 알고있음반납함
모든 프로세스가 정상적으로 종료가 가능한 상태 즉 교착상태가 되지 않음을 보장하는 것입니다. safe state는 safe sequence
의 존재를 통해 확이할 수 있습니다.
교착상태가 발생할 가능성이 있는 상태로 safe sequence가 존재하지 않는 상태입니다. (반드시 발생하는 것 아님)
한 종류
의 자원이 여러개 있음아래는 하나의 자원에 대해서 여러 프로세스가 이미 할당받은 개수(Has)와 필요한 개수(Max)를 나타낸 것입니다.
이제부터 Safe Sequence를 찾아봅시다.
총 10개가 있던 자원이기 때문에 현재 3개의 여유가 있습니다. 그러면 B -> C -> A 순으로 자원을 빌려주고 반납받으면 모든 프로세스가 정상종료를 할 수 있습니다. 따라서 safe state인 것을 알 수 있습니다.
banker's algorithm의 확장판으로 자원의 종류가 여러개
인 것이 특징입니다. 나머지는 banker's와 동일합니다.
아까와 비슷하지만 자원이 a,b,c 세 종류로 늘어났습니다.
이제부터 Safe Sequence를 찾아봅시다.
자원이 각각 3,3,2개씩 여유가 있기 때문에 p2 -> p4 -> p1 -> p3 -> p5순서로 자원을 할당해주고 반납받으면 모든 프로세스가 정상종료를 할 수 있습니다. 따라서 safe state인 것을 알 수 있습니다.
감시
해야함자원 활용도가 낮아
짐비현실
적 그래서 나온 방법이 방지나 예방없이 교착상태가 탐지되면 해결하는 방식입니다. 이 방법은 주기적으로 교착상태의 발생을 확인합니다.
이는 프로세스가 리소스를 요청하고 할당받은 관계를 그래프로 나타낸 것입니다.
이 방법은 RAG를 활용해서 교착상태를 확인하는 방법입니다.
1. 필요한 자원을 모두 할당 받을 수 있는 프로세스를 찾아서 모든 edge(선)를 제거해줍니다.
2. 이를 계속해서 반복합니다
3. 결과