교착상태란
두개 이상의 프로세스가 각자 갖고있는 각각의 자원들을 그저 기다리기만 하여 어떤 프로세스도 실행되지 못하는 상태를 말한다.
교착상태가 발생하는 원인 (4가지가 모두 해당될때 교착상태가 발생한다.)
1. 상호 배제 : 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태
2. 점유와 대기 : 자원을 할당 받은 상태에서 다른 자원을 할당 받기를 기다리는 상태
3. 비선점 : 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못하는 상태
4. 원형 대기 : 프로세스들이 원의 형태로 자원을 대기하는 상태
교착상태 해결방법
1. 예방
1) 교착 상태 발생 원인 4가지중 하나를 없앤다.
- 상호배제 없애기 : 모든 자원을 공유 가능하게 만든다? -> 불가능
- 점유와 대기 없애기 : 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분
-> 자원의 활용률이 낮아지는 단점이 있다.
- 비선점 조건을 없앤다. : 선점이 가능한 자원 (CPU)에 한해서 효과적, 모든 자원이 선점 가능한것이 아니다.
- 원형 대기 조건을 없앤다 : 자원에 번호를 붙이고 오름차순으로 할당할 경우 원형 대기는 발생하지 않는다.
-> 자원에 번호를 붙이는 것은 어려운 작업, 어떤 자원에 어떤 번호를 붙이느냐에 따라 활용률이 달라진다.(많이 쓰이는 자원이 많이 사용되지 못하고 적게 사용되는 자원이 쓸데 없이 할당될 수 있음)
2. 회피
1) 교착상태를 무분별한 자원 할당으로 인해 발생했다고 간주하여 발생하지 않을만큼 조심하여 할당한다. (안전순서열)
2) 배분할 수 있는 자원의 양을 고려하여 교착상태가 발생하지 않을 만큼만 자원을 배분한다.
3) 세가지 용어
- 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
- 안전 상태 : 교착 상태 없이 모든 프로세스가 자원을 할당 받고 종료될 수 있는 상태 (안전순서열이 있는 상태)
- 불안전 상태 : 교착 상태가 발생할 수도 있는 상태 (안전 순서열이 없는 상태)
예시
1. 컴퓨터 시스템에 총 12개의 자원이 있을경우를 가정한다.
2. 프로세스는 현재 아래와 같은 상태이다.
P1 -> 요구량 : 10 / 현재 사용량 : 5
P2 -> 요구량 : 4 / 현재 사용량 : 2
P3 -> 요구량 : 9 / 현재 사용량 : 2
여기서 안전 순서열은 : P2 -> P1 -> P3 이다.
요구량을 최대로 먼저 해결을 해줄 수 있는 순서이다.
계산식 : 총 12개 자원 - 현재 사용중 9 자원 = 3개 자원이 남는다.
3개 자원을 한 프로세스에 주어 해결할수있는 프로세스는 P2 하나뿐이다.
P2가 해결되고 나면 자원 4개가 반환이 된다. 즉 5개 자원이 남는다.
5개 자원을 통해 해결할 수 있는 프로세스는 P1 하나뿐이다.
때문에 P2 -> P1 -> P3 순서로 안전 순서열이 되고, 해결 할 수 있는 상태이므로 안전 상태라고 말한다.
3. 검출 후 회복
1) 교착 상태의 발생을 인정하고 사후에 조치하는 방식
2) 프로세스가 자원을 요구하면 일단 할당, 교착 상태가 검출되면 회복
3) 두가지 방식이 존재한다.
- 선점을 통한 회복 : 교착상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식
- 프로세스 강제 종료를 통한 회복
: 교착상태인 프로세스 모두 강제종료(작업 내역을 잃을 위험) or 교착상태 해결될때까지 한 프로세스 씩 강제종료(오버헤드 위험)
'프로그래밍 > 컴퓨터구조 및 운영체제' 카테고리의 다른 글
외부단편화 해결방식 (0) | 2023.11.23 |
---|---|
프로세스 연속 메모리 할당 (feat 외부 단편화) (0) | 2023.11.22 |
프로세스 동기화 (2) | 2023.11.19 |
CPU 스케줄링의 알고리즘 알아보기 (0) | 2023.11.18 |
CPU 스케쥴링 개념 (0) | 2023.11.16 |