13-1 상태
교착 상태 발생 조건
아래 조건이 모두 만족될 때 교착 상태가 발생할 가능성이 생긴다.
- 상호 배제
- 자원을 한 번에 하나의 프로세스만 이용 가능한 상태
- 점유와 대기
- 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태
- 비선점
- 자원을 이용하는 프로세스의 작업이 끝나야만 비로소 이용할 수 있는 상태
- 즉, 다른 프로세스의 자원을 강제로 빼앗지 못하는 상태
- 원형 대기
- 자원 할당 그래프가 원의 형태로 그려진 상태
13-2 교착 상태 해결 방법
교착 상태를 해결하는 방법은 예방 / 회피 / 검출 후 회복 이 있다.
교착 상태 예방
교착 상태를 예방하는 방법은 교착 상태 발생 조건 중 하나라도 발생하지 않도록 하는 것이다.
- 자원의 상호 배제 없애기
- 현실적으로 모든 자원의 상호 배제를 없애기는 어렵다.
- 점유와 대기 없애기
- 자원 활용률이 낮아질 수 있다.
- 특정 프로세스에 필요한 자원들을 몰아주면, 당장 자원이 필요해도 기다릴 수밖에 없는 프로세스와 사용되지 않으면서 오랫동안 할당되는 자원이 발생되기 때문에 자원 활용률이 낮아질 수 있다.
- 많은 자원을 사용하는 프로세스는 불리해진다. 많은 자원을 동시에 사용할 타이밍을 확보하기가 어렵기 때문이다.
- 비선점 조건 없애기
- 비선점 조건을 없애면, 자원을 이용 중인 프로세스로부터 해당 자원을 빼앗을 수 있다.
- 이 방법은 일부 자원에 대해서 효과적이다.
- ex(효과적) CPU : 한 프로세스가 CPU를 이용하다가 일정 시간이 지나면 작업이 끝나지 않았더라도 다른 프로세스가 CPU를 할당받아 사용할 수 있다.
- ex(비효과적) 프린트 : 한 프로세스가 프린트를 사용하고 있다면 도중에 프린트 자원을 빼앗을 수는 없다.
- 원형 대기 조건 없애기
- 모든 자원에 번호를 붙이고 오른차순으로 자원을 할당한다.
- 시스탬 내에 존재하는 모든 자원에 번호를 붙이는 일이 간단한 작업이 아니다.
- 어떤 번호를 붙이느냐에 따라 자원의 활용률이 떨어질 수 있다.
교착 상태의 발생 조건을 원천적으로 제거하여 교착 상태를 방지하는 예방 방식은 여러 부작용이 따른다.
교착 상태 회피
교착 상태 회피란 교착 상태가 발생하지 않을 정도로만 자원을 조심히 할당하는 방식이다.
- 안전 상태 : 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태
- 불안전 상태 : 교착 상태가 발생할 수도 있는 상태
- 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
즉, 교착 상태 회피란 안전 순서열에 맞춰 항시 안전 상태를 유지하도록 자원을 할당하는 방식이다.
교착 상태 검출 후 회복
교착 상태 검출 후 회복이란 교착 상태 발생을 인정하고 사후에 조치하는 방식이다.
- 선점을 통한 회복
- 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식
- 프로세스 강제 종료를 통한 회복
- 교착 상태에 놓인 프로세스를 모두 강제 종료하거나, 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료하는 방식