CS/Operating System

[운영체제] 교착상태(Deadlock)

테리는당근을좋아해 2020. 6. 18. 22:02

교착상태(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) 무시

- 에방 혹은 회피기법을 사용했을 때, 성능에 큰 영향을 미칠 수 있음

- 따라서 교착상태의 발생 확률이 비교적 낮거나 교착상태에 의한 성능 저하가 작을 경우, 별다른 조치를 취하지 않음