오래 못 할 짓 하지 않기

[ 운영체제 ] 11. 교착 상태 해결 방법 본문

3학년 1학기/운영체제 (OS)

[ 운영체제 ] 11. 교착 상태 해결 방법

쫑알bot 2024. 1. 13. 12:34
728x90

교착 상태 해결 방법 3가지

 

1. 예방 : 애초에 교착 상태가 발생하지 않도록

  : 교착 상태 발생 조건 중 하나를 없애버리기

    ( 상호 배제, 점유와 대기, 비선점 , 원형 대기 )

 

 

- 상호 배제를 없애기

   : 모든 자원을 공유하게 만든다?

    → 현실적으로 불가능

 

 

- 점유와 대기 없애기

   : 특정 프로세스에 자원을 모두 할당 or 아예 할당 X 인 방식으로 배분

    → 자원의 활용률을 떨어뜨린다.

 

 

- 비선점 없애기

   : 선점이 가능한 자원 (ex:CPU)에 한해 효과적

     하지만 모든 자원이 선점 가능한 것은 아니다. ex) 프린터

 

 

- 원형 대기 조건 없애기

   : 

 

- 한계점

1) 모든 자원에 번호를 붙이는 것은 어렵다.

2) 어떤 자원에 어떤 번호를 붙이냐에 따라 활용률이 달라진다.

 

 

[ 교착 상태 예방 : 결론 ]

교착 상태가 발생하지 않음은 보장 가능하지만 

부작용이 따른다.

 



2. 회피

● 교착 상태를 무분별한 자원 할당으로 인해 발생했다고 간주

   교착 상태가 발생하지 않을 만큼 조심히 할당하기

   = 배분할 수 있는 자원의 양을 고려하여 교착 상태가 발생하지 않을 만큼만 자원 배분

 

[ 방법 ]

 

1) 안전 순서열

: 교착 상태 없이 안전하게 프로세스들에게 자원을 할당할 수 있는 순서

 

ex) a-b-c 이렇게 할당하면 교착 상태 발생 

     c-a-b 이렇게 할당하니까 교착 상태 X  => c-a-b가 안전 순서열

 

 

12개의 자원이 있음 / P1,P2,P3가 할당 받은 걸 합하면 9개

= 12 - 9 = 자원 3개가 남아있음  (배분 할 수 있음)

 

 

안전 순서열 : P2→ P1→P3  

 

 

 

만약 P3에게 자원을 하나 더 할당한 채로 시작했다면

불안전 상태로, 교착 상태가 발생할 수 있다.

 

[ 요약 ] 

- 안전 상태 → 안전 상태로 움직이는 경우에만 자원을 할당하는 방식

   = 항시 안전 상태를 유지하도록 자원을 할당하는 방식

 

ex) 은행원 알고리즘

 

 

2) 안전 상태

: 교착 상태 없이 모든 프로세스가 자원을 할당 받고 종료될 수 있는 상태

  = 안전 순서열이 있는 상태

 

3) 불안전 상태

: 교착 상태가 발생할 수도 있는 상태

  = 안전 순서열이 없는 상태

 

 

 



2. 검출 후 회복

: 교착 상태가 일어난 이후에 조치하는 방식

 

- 프로세스가 자원을 요구하면 일단 할당하고 , 교착 상태가 검출되면 회복

 

● 회복 방법 2가지

1. 선점을 통한 회복

: 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식

 

2. 프로세스 강제 종료를 통한 회복

   1) 교착 상태에 놓인 프로세스 모두 강제 종료 ( → 작업 내역을 잃을 위험 )

   2) 교착 상태가 해결될 때까지 한 프로세스씩 강제 종료 ( → 오버헤드) 

 


추가

 

교착 상태 무시

▶ 타조 알고리즘

교착 발생 빈도를 고려하여 효율성있게 무시하는 방법도 있다.

 

 

(출처)

유튜브 한빛미디어