시스템은 경쟁하는 스레드들 사이에 분배되어야 할 유한한 수의 자원들로 구성
자원은 인스턴스들로 구성됨
프로세스는 다음 순서로만 자원을 사용 간으
1. 요청 : 요청 스레드는 자원을 얻을 때까지 대기
2. 사용 : 자원에 대해 수행
3. 방출 : 스레드가 자원 방출
이런 정보들은 기록됨
한 스레드 집합 내의 모든 스레드가 그 집합 내의 다른 스레드에 의해서만 발생될 수 있는 이벤트를 기다린다면, 그 스레드 집합은 교착 상태에 있다고 함
교착 상태는 한 시스템에 다음의 조건이 동시에 성립될 때 발생
자원 할당 그래프에서 사이클을 포함하지 않으면, 시스템 내에 어느 프로세스도 교착상태가 아님
resource type이 여러 개의 인스턴스를 가지면, 사이클이 반드시 교착상태는 아님
교착 상태 예방은 위의 4가지 조건 중 적어도 1개라도 성립되지 않도록 하는 것
교착 상태 회피는 스레드가 사용할 자원에 대한 부가적인 정보를 미리 제공할 것을 요구
상호 배제 조건인 적어도 하나의 자원은 공유가 불가능한 자원이어야 한다.
공유 가능한 자원은 배타적인 접근을 요구하지 않는다.
프로세스가 자원을 요청할 때, 다른 자원을 점유하지 않을 것을 보장한다.
1. 스레드가 자원을 전혀 갖고 있지 않을때만 자원 요청 가능
(다른 추가 자원을 요청 시, 갖고 있던 자원을 모두 방출
자원이 할당되었지만 장기간 사용되지 않을 수 있어서 자원 이용률이 낮다.
기아 문제가 발생할 수 있음
이미 할당된 자원이 선점되지 않아야 교착 상태가 된다.
어떤 자원을 점유하고 있는 스레드가 즉시 할당할 수 없는 다른 자원을 요청하면, 현재 점유하고 있는 모든 자원이 선점된다.
모든 자원 유형에 전체적인 순서를 부여하여, 각 프로세스가 열거된 순서대로 오름차순으로 자원을 요청하도록 요구하는 것
교착 상태를 예방하는 것은 4가지 조건 중 한개라도 허용하지 않으면 되지만, 성능 저하가 됨
교착 상태를 회피하는 방법은 자원이 어떻게 요청될지에 대한 추가 정보를 제공하도록 요구하는 것이다.
가장 단순하고 유용한 모델은 각 스레드가 자신이 필요로 하는 각 유형의 자원마다 최대 수를 선언하도록 요구하는 것이다.
각 스레드가 요청할 각 유형의 자원의 최대 수 정보를 미리 안다면, 교착 상태에 들어가지 않는다.
시스템 상태가 안전하다는 말은 시스템이 어떤 순서로든 스레드들이 요청하는 모든 자원을 교착 상태를 야기시키지 않고 차례로 모두 할당해 줄 수 있다는 것
시스템이 안전 순서를 찾으면 안전하다.
찾을 수 없다면 교착 상태가 될 수 있는 확률이 있다.
안전한 알고리즘을 짜서, 프로세스의 안전 순서를 실행시키면 되지만, 시스템이 더 많은 자원을 갖고있더라도 때에 따라 프로세스를 기다리게 할 수도 있음.
사이클이 안생기게 하여 교착상태를 피할 수 있음.
요청, 할당, 예약 간선
자원 할당 그래프 알고리즘은 종류마다 자원이 여러 개씩 있게되면 사용할 수 없다.
은행원 알고리즘에서는 자원이 여러 개씩 있더라도 사용가능
스레드가 시작할 때 스레드가 가지고 있어야 할 자원의 최대 개수를 자원 종류마다 미리 신고하여야 한다. 시스템은 안전 상태에 머무르게 되면, 자원 요청을 들어주고, 그렇지 않으면 그 스레드는 다른 스레드가 끝날 때까지 기다리게 된다.
교착 상태가 발생했는지 결정하기 위해 시스템의 상태를 검사하는 알고리즘
교착 상태로부터 회복하는 알고리즘
모든 자원들이 1개의 인스턴스만 있다면, 대기 그래프를 이용하여 교착 상태 탐지 알고리즘을 정의 가능
사이클을 탐지하는 알고리즘이 있어얗마
대기 그래프는 사용 못함
은행원 알고리즘을 사용해야함
교착 상태가 얼마나 자주일어나는지
몇개의 스레드가 연루되는지
교착 상태가 자주 일어난다면, 탐지 알고리즘도 자주 돌려야함
오버헤드가 너무 크게 됨
자동으로 교착상태로부터 회복되게 하는 것
스레드를 중지시키거나 하나 이상의 스레드들로부터 자원을 선점하는 것
교착 상태 프로세스를 모두 중지 : 비용이 크긴함, 프로세스가 오랫동안 연산했을 가능성도 있고 결과들은 반드시 폐기해야함
교착 상태가 제거될 때까지 한 프로세스씩 중지 : 각 프로세스가 중지될 대마다 탐지 알고리즘을 호출해야 하므로 오버헤드가 큼
프로세스의 우선순위
일을 종료하는데 필요한 시간
프로세스가 사용한 자원 유형과 수
프로세스가 종료되기 위해 더 필요한 자원의 수
얼마나 많은 수의 프로세스가 종료되어야 하는지
자원 선점을 이용하여 데드록을 제거하려면, 교착 상태가 깨어질때까지 프로세스로부터 자원을 계속 선점해나가야 함