프로그래밍/컴퓨터구조 및 운영체제

프로세스 교착상태

gameObject 2023. 11. 21. 20:02
728x90

교착상태란

두개 이상의 프로세스가 각자 갖고있는 각각의 자원들을 그저 기다리기만 하여 어떤 프로세스도 실행되지 못하는 상태를 말한다.

 

교착상태가 발생하는 원인 (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 교착상태 해결될때까지 한 프로세스 씩 강제종료(오버헤드 위험)

728x90