
데드락(교착상태)

2개 이상의 프로세스가 특정 공유 데이터를 확득하지 못하고 무한정 대기하는 상태
발생 조건
다음 4가지 조건 중 하나라도 만족하면 발생한다.
비선점 상태
다른 프로세스가 가지고 있는 공유 데이터의 권한을 뺏어오지 못하는 상태
비선점 상태에서는 자원을 점유한 프로세스가 자원을 강제로 반납할 수 없다
환형 대기
프로세스들이 원형 형태로 공유 데이터를 대기하는 상태
점유와 대기
어떤 자원을 획득한 상태에서 다른 자원을 획득하고자 대기하는 상황
상호배제
여러 프로세스가 동시에 자원을 사용할 수 없는 상황
해결 방법
예방
4가지 발생 조건 중 하나 이상의 조건이 발생하지 않도록 강제하는 방법
- 상호배제 부정 : 여러 프로세스가 공유 자원 사용
- 현실적으로는 모든 자원의 상호배제를 없애는 것은 어렵기 떄문에 사용 무리.
- 점유대기 부정 : 프로세스 실행전 모든 자원을 할당 또는 아예 어떤 자원도 획득하지 못하도록 하는 것
- 자원 이용률(Resource Utilization) 이 낮아진다는 치명적인 단점
- 점유와 대기를 금지하면 한 프로세스에 필요한 자원들을 몰아주고, 그 다음에 다른 프로세스에 필요한 자원들을 몰아줘야 한다.
- 즉, 여러 프로세스가 동시간대에 병렬적인 작업을 하지 못하고, 한 프로세스만 작업해야 하므로 효율성이 떨어진다.
- 비선점 부정 : 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원 반납
- 순환대기 부정 : 자원에 고유번호 할당 후 순서대로 자원 요구
- 모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하면 원형 대기가 발생하지 않는다
- 앞서 3가지 방식들보다 비교적 현실적이고 실용적
- 수 많은 자원에 번호를 붙이는 일은 다소 번거로운 작업
- 각 자원에 어떤 번호를 붙이는지에 따라 특정 자원에 이용률(utilization) 이 떨어질 수 있으므로 설계 측면에서 어렵다는 것이 단점
회피
회피 기법은 데드락이 발생하지 않을 정도로만 조심스럽게 자원을 할당하는 방식이다.
이 기법에선 데드락을 한정된 자원의 무분별한 할당으로 인해 데드락이 발생한다고 가정하여,
마구잡이로 자원을 할당하지 않고 더욱 신중하게 자원을 할당하는 방식이다.
- 안전 상태(Safe State) : 자원을 할당받고 종료될 수 있는 상태
- 불안정 상태(Unsafe State) : 교착 상태가 발생할 수도 있는 상태
- 안전 순서(Safe Sequence) : 데드락 발생없이 안전하게 프로세스들이 자원을 할당할 수 있는 순서
- 운영체게가 데드락을 회피하기 위해서는 시스템 상태가 안전 상태 에서 안전 상태 로 움직이는 경우에만 자원을 할당
즉, 데드락 회피 기법은 항상 안전 상태를 유지하도록 자원을 할당하는 방식이다.
탐지와 회복
데드락 탐지 & 회복 기법은 데드락이 발생했을 때가 되어서야 그떄가서 조치를 취하는 방법이다.
-
선점을 통한 회복
데드락이 해결될 때 까지 한 프로세스씩 자원을 몰아주는(일명 몰빵) 방식이다. 데드락이 해결될 떄 까지 다른 프로세스로부터 자원을 강제로 빼앗아 버린뒤, 빼앗은 자원들을 한 프로세스에 할당한다.
-
프로세스 강제 종료를 통한 회복
프로세스를 강제로 종료시켜서 데드락을 회복할 수 있다. 가장 단순하면서 확실한 방식이다. 운영체제는 데드락에 빠진 프로세스들을 모두 강제 종료할 수도 있고, 데드락이 없어질 떄 까지 한 프로세스만 강제 종료할 수도 있다. 하지만 많은 프로세스들이 작업한 내역을 잃게 될 수 있다.