정의\
프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태로, ‘교착 상태’라고도 하며 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다.
철학자의 식탁\
1. 일정 시간 생각을 한다.
2. 왼쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다.
3. 오른쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다.
4. 양쪽의 포크를 잡으면 일정 시간만큼 식사를 한다.
5. 오른쪽 포크를 내려놓는다.
6. 왼쪽 포크를 내려놓는다.
7. 다시 1번으로 돌아간다.
만약 모두 동시에 왼쪽 포크를 들면 아무도 밥을 못먹는다. 이럴때는 4가지 발생조건을 만족한다.
1. 상호배제 : 포크를 두개다 들어야 식사가 가능하다.
2. 점유대기 : 오른쪽 철학자가 포크를 들어서 자원을 보유했고, 그 오른쪽 철학자를 또 기다린다.
3. 비선점 : 다른 철학자의 포크를 뺏는건 안된다.
4. 순환대기 : 이 식탁이 원형이라 그림이 원형으로 그려진다.
4가지 조건을 다 해결해야 deadlock이 해결될까?\
정답은 ~~~ 아니다!!\
위에 4조건이 모두 만족해야 deadlock상태가 되는 것이기에 하나만 해결한다면 deadlock은 해결된다.Deadlock 예방
4가지 조건을 부셔야 한다.
- 자원의 상호 배제 조건 방지 : 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 합니다.
- 그러나 추후 동기화 관련 문제가 발생할 수 있습니다.
- 점유 대기 조건 방지 : 프로세스 실행에 필요한 모든 자원을 한꺼번에 요구하고 허용할 때까지 작업을 보류해서, 나중에 또다른 자원을 점유하기 위한 대기 조건을 성립하지 않도록 합니다.
- 비선점 조건 방지 : 이미 다른 프로세스에게 할당된 자원이 선점권이 없다고 가정할 때, 높은 우선순위의 프로세스가 해당 자원을 선점할 수 있도록 합니다.
- 순환 대기 조건 방지 : 자원을 순환 형태로 대기하지 않도록 일정한 한 쪽 방향으로만 자원을 요구할 수 있도록 합니다.
은행가(은행원) 알고리즘은 자원의 할당 허용 여부를 결정하기 전에 미리 결정된 모든 자원의 최대 가능한 할당량을 시뮬레이션하여 안전 여부를 검사한다. 그런 다음 대기 중인 다른 모든 활동의 교착 상태 가능성을 조사하여 “안정 상태” 여부를 검사 확인한다.
대표적인 은행원 알고리즘으로 회피 방법을 설명한다.
은핼원 알고리즘이란 쉽게 말해 자원을 할당하면 데드락에 걸리니?
라고 미리 검사해보는 것이다.
그래서 '안정상태', '불안정상태'로 나눈다.
프로세스가 자원을 요구할때 자원을 할당한 후에도 안정 상태이면 자원을 할당하고, 그렇지 않으면 다른 자원이 해제될때까지 대기했다가 자원을 할당합니다.
은행원 알고리즘의 단점
순환 대기
에서 벗어나 데드락으로부터 회복하기 위한 방법을 사용합니다.