OS

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

noahkim_ 2024. 12. 12. 11:45

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


1. 개요

교착상태

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

 

발생
  • 시스템 자원: 다른 프로세스와 공유할 수 없는 자원을 사용할 경우 (printer, recorder)
  • 공유 변수: 제대로 동기화되지 않아 무한 대기 발생
  • 응용 프로그램: 데이터베이스의 특정 데이터 락을 걸어 다른 트랜잭션이 접근하지 못할 경우

 

자원 할당 그래프

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

 

2. 필요조건

상호 배제

  • 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이여야 함
  • 만약 배타적인 자원을 공유해서 사용하게 된다면 교착 상태가 발생함

 

비선점

  • 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원이여야 함

 

점유와 대기

  • 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 함

 

원형 대기

  • 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 함
  • 서로 방해하는 방향이 원을 이루면 프로세스들이 서로 양보하지 않기 때문에 교착 상태에 빠짐

 

3. 해결 방법

예방

상호 배제 예방
  • 시스템 내 독점적으로 사용할 수 있는 자원을 없애기

 

비선점 예방
  • 모든 자원을 빼앗을 수 있도록 만드는 방법

 

점유와 대기 예방
  • 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법
  • 전부 할당하거나 아예 할당하지 않는 방식을 적용함

 

원형 대기 예방
  • 프로세스들이 원형을 이루지 못하도록 막는 방법
  • 자원을 한 방향으로만 사용하도록 설정함으로써 예방 가능

 

회피

  • 자원을 할당할 때, 어느 수준 이상의 자원을 나누어주면 교착 상태가 발생하는지 파악
  • 해당 수준 이하로 자원을 나누어주는 방식

 

검출

  • 운영체제가 프로세스의 작업을 관찰하면서 교착 상태 발생 여부를 계속 주시하는 방식

 

회복

  • 교착 상태가 검출되면, 교착 상태를 푸는 후속 작업을 하기
  • 교착 상태를 유발한 프로세스를 강제로 종료함