OS

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

noahkim_ 2024. 12. 12. 11:45

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


1. 교착 상태

  • 2개 이상의 프로세스가 서로가 점유한 자원을 기다리며 무한 대기에 빠진 상황
  • ✅ 자원 할당과 동기화 설계가 잘못되었을 때 발생함

 

사례

더보기
  • 시스템 자원: 프린터, 디스크, 파일 락 등
  • 공유 변수: 락 순서 불일치, 이중 락 등
  • 응용 프로그램: 데이터베이스 트랜잭션 락 충돌

 

2. 발생 조건

조건 설명
상호 배제 (Mutual Exclusion) 한 프로세스가 사용하는 자원은 다른 프로세스와 동시에 공유할 수 없는 배타적인 자원이여야 함
비선점 (No Preemption) 사용 중인 자원은 중간에 다른 프로세스가 강제로 빼앗을 수 없음.
점유와 대기 (Hold and Wait) 프로세스가 이미 어떤 자원을 점유한 상태에서 추가적인 자원을 요청하며 대기하는 상황
원형 대기 (Circular Wait) 점유와 대기하는 프로세스들이 원형으로 자원을 기다리는 관계

 

3. 해결 방법

방법 설명 예시
예방 (Prevention) 교착 상태 발생 조건 중 하나 이상을 원천적으로 제거  
회피 (Avoidance) 교착 상태가 발생할 가능성이 있는 상태면 자원 할당하지 않기
은행가 알고리즘
검출 (Detection) 교착 상태 발생을 허용하되, 발생 여부를 주기적으로 검사
자원 할당 그래프 분석
회복 (Recovery) 이미 발생한 교착 상태를 강제로 해소함 - 프로세스 강제 종료
- 자원 회수

 

예방 - 상호 배제

더보기
  • 시스템 내에서 독점적으로 사용하는 자원을 없애거나, 공유 가능한 자원으로 변경함. 
  • ➡️ 스풀링 기법으로 프린터 공유

 

예방 - 비선점

더보기
  • 프로세스가 점유한 자원을 빼앗을 수 있도록 만듦
  • ➡️ 선점형 알고리즘 사용

 

예방 - 점유와 대기

더보기
  • 필요한 모든 자원을 한 번에 할당받기
  •  아무 자원도 점유하지 않은 상태에서만 요청 가능함

 

예방 - 원형 대기

더보기
  • 자원을 한 방향으로만 요청하도록 만들기
  • ➡️ 모든 자원에 번호를 부여하고 항상 번호가 증가하는 방향으로만 요청하도록 하기

 

회피 - 은행가 알고리즘

더보기
  • 어떤 프로세스에게 자원을 더 할당해도 모든 프로세스가 결국 작업을 끝낼 수 있는 순서가 존재하면 할당함
  • ✅ 은행이 대출해줄 때 파산하지 않을지를 계산하는 방식과 비슷하여 지어진 알고리즘

 

검출 - 자원 할당 그래프

더보기
  • 프로세스와 자원의 관계를 방향 그래프로 표현한 것
  • ✅ 사이클 여부를 통해 시스템의 교착 상태 여부를 파악할 수 있음