OS

[쉽게 배우는 운영체제] 6. 교착 상태

noahkim_ 2024. 12. 12. 11:45

조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다


1. 개요

교착 상태

  • 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리는 무한루프에 빠진 상태
  • 여러 프로세스가 함께 작업을 수행하다 보니 자연스럽게 일어나는 문제
  • OS는 감시를 하다 교착상태가 발생하면 강압적으로 해결해야 함

 

발생
구분 설명
시스템 자원
다른 프로세스와 공유할 수 없는 자원(예: 프린터, 레코더 등)을 사용할 경우,
한 프로세스가 자원을 점유한 상태에서 다른 프로세스가 해당 자원을 기다리면 교착 상태 발생 가능
공유 변수
공유 변수가 적절히 동기화되지 않으면, 특정 프로세스가 무한 대기 상태에 빠질 수 있음 (예: 잘못된 락 관리로 인한 데드락)
응용 프로그램
데이터베이스에서 특정 데이터에 락을 걸어 다른 트랜잭션이 접근하지 못하는 경우,
여러 트랜잭션이 서로의 락을 기다리면서 교착 상태 발생 가능

 

자원 할당 그래프

  • 프로세스가 어떤 자원을 사용중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것

 

2. 필요 조건

조건 설명
상호 배제 (Mutual Exclusion)
한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이여야 함.
배타적인 자원을 공유해서 사용하면 교착 상태 발생 가능
비선점 (No Preemption)
사용 중인 자원은 중간에 다른 프로세스가 강제로 빼앗을 수 없음.
즉, 자원을 점유한 프로세스가 직접 해제해야 함 
점유와 대기 (Hold and Wait)
프로세스가 이미 어떤 자원을 할당받은 상태에서 추가적인 자원을 요청하며 대기해야 함.
즉, 일부 자원을 점유한 상태에서 다른 자원이 할당될 때까지 기다리는 상황
원형 대기 (Circular Wait)
점유와 대기하는 프로세스들이 서로 자원을 기다리면서 원형 관계를 이루어야 함.
즉, P1 → P2 → P3 → P1 같은 순환 대기 상태가 발생해야 함

 

3. 해결 방법

방법 설명
예방 (Prevention)  
- 상호 배제 예방
시스템 내에서 독점적으로 사용하는 자원을 없애거나, 공유 가능한 자원으로 변경함.
(예: 스풀링 기법으로 프린터 공유) 
- 비선점 예방
프로세스가 점유한 자원을 빼앗을 수 있도록 만듦
자원이 필요한 프로세스가 다른 프로세스의 자원을 강제로 회수 가능하도록 설정 
- 점유와 대기 예방
프로세스가 필요한 모든 자원을 한 번에 할당받거나, 아무것도 할당받지 않는 방식을 적용하여 대기 상태를 방지함 
- 원형 대기 예방
자원을 한 방향으로만 요청하도록 규칙을 설정하여 순환 대기를 방지함
(예: 계층적으로 자원을 할당하여 번호 순서대로 사용) 
회피 (Avoidance)
자원 할당 시, 교착 상태가 발생할 가능성이 있는지 미리 파악하여 특정 임계 수준 이하로만 자원을 할당함
(예: 은행가 알고리즘)
검출 (Detection)
운영체제가 프로세스의 상태를 지속적으로 감시하여 교착 상태가 발생하는지 확인함
(예: 자원 할당 그래프 분석) 
회복 (Recovery)
교착 상태가 발생한 경우, 이를 해결하기 위한 조치를 취함
프로세스를 강제 종료하거나 일부 자원을 회수하여 교착 상태를 해소