[운영체제] 교착상태(Deadlock)
교착상태(Deadlock)
- 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상
1) 교착상태의 4가지 조건
(1) 비선점(Nonpreemptive)
- 한 프로세스가 다른 프로세스의 자원을 강제로 빼앗을 수 없음
(2) 순환대기(Circular Wait)
- 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 그 관계가 순환적인 구조
(3) 점유대기(Busy and Wait)
- 공유 자원에 대한 접근 권한을 가지고 있는 프로세스가 다른 자원에 대한 접근 권한을 요구
(4) 상호배제(Mutual Exclusion)
- 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 공유 자원에 대한 접근 권한이 제한
2) 교착상태 처리 방법
(1) 방지
- 교착상태의 4가지 조건 중 하나를 제거
- 대부분 순환 대기를 제거하는 알고리즘을 사용
(2) 회피
- 자원이 어떻게 요청될 지에 대한 추가 정보를 제공하도록 요구
- Circular Wait이 발생하지 않도록 자원 할당 상태를 검사
a. 자원 할당 그래프 알고리즘(Resource Allocation Graph Algorithm))
- 자원이 한 개일 때 사용할 수 있는 기법
- 요청선과 할당선으로 이루어진 그래프를 이용해 사이클이 생기는지 확인
b. 은행원 알고리즘(Banker's Algorithm)
- 자원이 두 개 이상일 때 사용할 수 있는 기법
- 프로세스가 자원을 요구할 때, 시스템이 자원을 할당한 후, 안정 상태로 남아있게 되는지 사전에 검사
(3) 검출 및 복구
- 감시/발견하는 Detection 알고리즘으로 교착상태 발생을 체크
(4) 무시
- 에방 혹은 회피기법을 사용했을 때, 성능에 큰 영향을 미칠 수 있음
- 따라서 교착상태의 발생 확률이 비교적 낮거나 교착상태에 의한 성능 저하가 작을 경우, 별다른 조치를 취하지 않음