hmk run dev

교착 상태 해결 방법 본문

OS

교착 상태 해결 방법

hmk run dev 2024. 3. 16. 21:10

교착 상태 해결

- 예방 

- 회피

- 검출 후 회복

 

 

 

교착 상태 예방

참고로, 교착 상태 조건 중 하나라도 충족되지 않는다면 교착상태는 절대로 발생하지 않는다.

 

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

- 교착 상태 발생 조건(상호 배제, 점유와 대기, 비선점, 원행 대기) 중 하나를 없애버리기

 

 

 

상호배제 없애기

 

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

=> 이론적으로 가능하지만 현실적인 해결법은 아니다.

 

 

 

 

점유와 대기 없애기(자원을 할당받은 상태에서 자원을 대기하는 것)

 

특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분

=> 자원의 활용률을 낮출 수 있는 방식

 

 

 

비선점 조건을 없애기

 

선점이 가능한 자원(e.g CPU)에 한해 효과적

=> 모든 자원이 선점 가능한 것은 아니다. (한 프로세스의 작업이 끝날 때까지 다른 프로세스는 이용할 수 있는 자원이 꽤 있음. ex 프린터)

 

 

 

원형 대기 조건 없애기(서로가 서로의 자원을 기다리는 방식)

 

모든 자원에 번호를 붙이고 오름차순으로 할당하면 원형 대기는 발생하지 않음

=> 자원에 번호를 붙이는 것은 어려운 작업, 어떤 자원에 어떤 번호를 붙이느냐에 따라 활용률이 달라진다.

=> 그나마 가장 실용적이고 현실적인 방법

 


교착 상태 회피

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

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

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

 

 

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

 

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

=> 안전 순서열이 있는 상태

 

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

=> 안전 순서열이 없는 상태

 

 

회피 예시

 

- 컴퓨터 시스템에 총 12개의 자원

- 프로세스 P1, P2, P3가 각각 5개, 2개, 2개의 자원을 할당받아 실행 중 (운영체제가 배분할 수 있는 자원의 개수는? 3개)

- 프로세스 P1, P2, P3는 각각 최대 10개, 4개, 9개 자원을 요구할 수 있다고 가정

 

안전 순서열이 존재: P1 -> P2 -> P3

 

 

 

 

프로세스 P1, P2, P3이 모두 최대로 자원을 요구한 최악의 상황 가정

 

 

 

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

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

- c.f. 은행원 알고리즘

 

 

교착 상태 검출 후 회복

- 교착 상태의 발생을 인정하고 사후에 조치하는 방식

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

- 선점을 통한 회복, 프로세스 강제 종료를 통한 회복

 

 

 

 

선점을 통한 회복

 

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

 

 

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

 

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

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


Reference

 

https://www.youtube.com/watch?v=zQDNXklvdUw&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=38

 

'OS' 카테고리의 다른 글

교착상태(Dead lock)  (0) 2024.03.15
CPU 스케줄링  (0) 2024.03.05
스레드란?  (0) 2024.03.05
프로세스의 개요  (0) 2024.03.03
운영체제의 큰 그림  (0) 2024.03.02
Comments