CS/운영체제

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

초오오이 2025. 1. 7. 23:55

 


 

1. 예방

  • 상호배제 예방: 시스템 내 모든 자원을 공유할 수 있도록 함 => 현실적으로 불가능
  • 비선점 예방: 모든 자원을 빼앗을 수 있도록 함 => 현실적으로 불가능
  • 점유와 대기 예방: 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 함, 전부 할당하거나 할당하지 않음 => 자원의 활용성이 떨어짐
  • 원형 대기 예방: 자원을 한 방향으로만 사용하도록 설정하고 모든 자원에 숫자를 부여해 순서대로 할당 => 자원에 어떻게 번호를 부여할지가 문제

=> 결론적으로 예방은 실효성이 떨어지기 때문에 사용하기 어렵다.

 

2. 회피

  • 프로세스에 자원을 할당할 때 어느 수준 이상의 자원을 나누어주면 교착 상태가 발생하는지 파악하여 그 수준 이하로 자원을 할당하는 방법이다.
  • 예방은 프로세스의 작업 방식을 제약하기 때문에 사용하기 어렵지만, 회피는 시스템 운영 방식을 변경하는 것이 아니기 때문에 예방보다는 유연한 방법이다. 하지만 회피 방식도 각 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 하고, 자원이 낭비된다는 등의 문제점이 있어 실제 시스템에 적용이 어렵다.
  • 은행원 알고리즘: 시스템이 안전 상태인지 확인한 후 자원을 할당한다. 각 프로세스의 기대 자원과 가용 자원을 비교해서 가용 자원이 크거나 같은 경우가 한 번 이상인 경우를 안전 상태로 판단한다.

 

3. 검출

  • 타임아웃: 일정 시간 동안 작업이 진행되지 않은 프로세스를 교착 상태가 발생한 것으로 간주하여 처리한다. 특별한 알고리즘 없이 구현할 수 있기 때문에 ‘가벼운 교착 상태 검출‘이라고 하기도 한다. 일정 시간을 기준으로 잡기 때문에 엉뚱한 프로세스가 종료될 수 있고, 분산 시스템으로 원격으로 연결된 시스템에는 적용이 어렵다는 단점이 있다.
  • 자원 할당 그래프: 시스템 내의 프로세스가 어떤 자원을 사용하고 있는지 혹은 기다리고 있는 지를 알 수 있는 자원 할당 그래프를 이용해 교착 상태를 검출한다. 프로세스의 작업 방식을 제한하지 않으면서 교착 상태를 파악할 수 있다는 장점이 있지만 그래프를 유지하고, 갱신하고, 사이클을 검사하는 추가 작업으로 인해 오버헤드가 발생한다는 단점이 있다.

 

4. 회복

  • 교착상태가 검출된 후 교착상태를 해결하기 위해 교착상태를 유발한 프로세스를 종료하는 것이다. 회복 단계에서는 관련 프로세스를 종료한 뒤 종료된 프로세스가 실행되기 전에 시스템을 복구하는 일도 해야 한다.
  • 교착상태를 일으킨 모든 프로세스를 동시에 종료: 이 방법을 사용 후 강제된 프로세스들이 동시에 작업을 시작하면 다시 교착상태를 일으킬 가능성이 높기 때문에 순차적으로 프로세스를 실행해야 하고, 어떤 순서로 실행할 것인지 기준을 정해야 한다.
  • 교착상태를 일으킨 프로세스 중 하나를 골라 순서대로 종료: 기준에 따라 프로세스를 골라 하나씩 프로세스를 종료하며 나머지 프로세스의 상태를 파악하는 방법이다.