6-3.[os] 교착 상태 해결 방법
교착 상태 해결 방법
- 예방prevention,회피avoidance, 검출detection, 회복recovery
교착 상태 예방
- (상호 배제, 비선점, 점유와 대기, 원형 대기) 네 가지 조건이 발생하지 않도록 무력화
- 실효성 적음
교착 상태 회피
- 자원을 할당하다가 교착상태가 생길 것 같으면 자원 할당을 중단하고 지켜보는 것
- 실효성 적음
교착 상태 검출과 회복
- 어떤 제약을가하지 않고 자원 할당 그래프를 모니터링하면서 교착상태가 발생하는지 살펴보는 방식
교착상태 예방
상호 배제 예방
- 독점적으로 사용할 수 있는 자원을 없애버리는 방법
- 시스템 내의 모든 자원을 공유할 수 있다면 교착 상태가 발생하지 않는다
- 상호 배제를 무력화하는 것은사실상 어렵다
비선점 예방
- 모든 자원을 빼앗을수 있도록만드는방법
- 아사 현상
점유와 대기예방
- 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법
- '전부 할당하거나 아니면 아예 할당하지 않는all or nothing’ 방식
- 예시) 식사를 시작할 때 양손에 포크를 잡거나 아예 내려놓아야함
프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어렵다
- 프로세스가 필요한 자원을 모두 확보한 후 실행했는데 추가로 필요한 자원이 생기면 이를 다시 확보하기가 어렵다
자원의 활용성이 떨어진다.
- 당장 사용하지도 않을 자원을 미리 선점하여 자원 낭비가 심하다
많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리하다
- 자원을 많이 사용하는 프로세스는 자원을 적게 사용하는 프로세스보다 자원을 동시에 확보하기가 어렵다. 그러므로 많은 자원을 사용하는 프로세스의 작업이 지연되는 아사 현상이 발생한다.
결국 일괄작업 방식으로 동작한다
- 키보드, 마우스 등의 시스템 자원은 대부분의 프로세스가 필요로 하는 자원인데, 이러한 자원을 확보한 순서대로 실행하면 그 자원을 획득한 프로세스가 작업을 끝내야 다른 프로세스가 작업을 할 수 있다
원형 대기 예방
- 점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막는 방법
- 자원을 한 방향으로만 사용하도록 설정함
프로세스 작업 진행에 유연성이 떨어진다
- 프린트를 사용한 다음에는 마우스를 사용할 수 없음
자원의 번호를 어떻게 부여할 것인지가 문제이다
- 자원에 번호를 붙이는 데 매우 신중해야 함
교착상태 예방 정리
- 자원을 보호하기 위해 상호 배제와 비선점을 예방하기 어려우 며 점유와 대기, 원형 대기는 프로세스 작업 방식을 제한하고 자원을 낭비하기 때문에 사용할 수 없다
교착상태회피
교착상태 회피의 개념
- 어느 수준 이상의 자원을 나누어주면 교착 상태가 발생하는지 파악하여 그 수준 이하로 자원을 나누어주는 방법
교착 상태 회피는 시스템의 운영 방식에 변경을 가하지 않기 때문에 교착 상태 예방보다 좀 더 유연함
자원의 총수와 현재 할당된 자원의 수를 기준으로 시스템을 안정 상태(safe state)와 불안정 상태(unsafe state)로 나누고 시스템이 안정 상태를 유지하도록 자원을 할당
은행원 알고리즘
- banker’s algorithm
- 대출 금액이 대출 가능한 범위 내이면(안정 상태이면) 허용되지만 그렇지 않으면 거부됨
- 레스토랑 예시) 우동 10인분과 스파게티 20인분 재료가 있음 -> 10명 이내로 예약을 받음 -> 12명이 모두 우동을 시킨다면 문제
- 각 프로세스는 자신이 사용할 자원의 최대 수를 운영체제에 알려준다
- 전체자원 (Total) - 시스템 내 전체 자원의 수
- 가용자원 (Available) - 시스템 내 현재 사용할 수 있는 자원의 수(가용 자원=전체자원-모든 프로세스의 할당자원)
- 최대자원 (Max) - 각 프로세스가 선언한 최대 자원의 수
- 할당자원 (Allocation) - 각 프로세스에 현재 할당된 자원의 수
기대자원 (Expect) - 각 프로세스가 앞으로 사용할 자원의 수(최대자원=최대자원-할당자원)
가용자원(Available) > 기대자원(Expect) -> (안정상태) -> 자원할당
- 가용자원(Available) > 기대자원(Expect) -> (불안정상태) -> 할당하지 않음
안정 상태: 각 프로세스의 기대 자원과 비교하여 가용자원이 크거나 같은 경우가 한 번 이상인 경우를 말한다
은행원 알고리즘 (안정 상태)
은행원 알고리즘 (불안정 상태)
교착 상태 회피의 문제점
프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다
시스템의 전체 자원 수가 고정적이어야 한다
- 안정 상태나 불안정 상태를 파악하려면 시스템의 전체 자원 수가 고정적이어야 한다
자원이 낭비된다
- 스파게티 재료가 충분한데도 우동 재료에 맞추어 예약 손님을 10명만 받는 것은 자원 낭비
- 모든 불안정 상태가 교착 상태가 되는 것은 아님에도 불구하고 자원을 할당하지 않는 것은 자원 낭비
교착 상태 검출
교착상태 검출의 개념
- 교착 상태 예방 -> 구현 어려움
- 교착 상태 회피 -> 자원 낭비
교착 상태 검출 -> 가장 현실적
운영체제가 프로세스의 작업을 관찰하면서 교착 상태 발생 여부를 계속 주시하는 방식
- 교착 상태가 발견되면 이를 해결하기 위해 교착 상태 회복 단계를 밟는다
타임아웃을 이용한 교착 상태 검출
- 일정 시간 동안 작업이 진행되지 않은 프로세스를 교착상태로 간주하여 처리
- 교착 상태가 자주 발생하지 않을 것이라는 가정하에 사용
- 특별한 알고리즘이 없어 쉽게 구현 -> 가벼운 교착 상태 검출
문제점:
엉뚱한 프로세스가 강제 종료될 수 있다
- 교착 상태 외의 다른 이유로 작업이 진행되지 못하는 모든 프로세스가 강제 종료될 수 있다
모든 시스템에 적용할 수 없다
- 여러 군데에 데이터가 나뉘어 있는 분산 데이터베이스의 경우에는 타임아웃을 이용하는 방법을 적용하기가 어려움
- 원격지에 있는 프로세스의 응답이 없는 것이 교착 상태 때문인지,네트워크 문제 때문인지,단순히 처리가 늦어지는 것인지 정확히 알 수 없음
타임아웃 예시)
- 가벼운 교착 상태 검출 - 타임아웃 (쓰기 쉬워서)
- 무거운 교착 상태 검출 - 자원 할당 그래프
- 데이터의 일관성이 깨지면 안 됨
- 잠금을 얻은 후 작업
체크포인트와 롤백
체크포인트(check point): 작업을 하다가 문제가 발생하면 저장된 상태로 되돌아오기 위한 표시
- 스냅숏(snapshot) : 체크포인트를 설정할 때, 현재의 시스템 상태가 하드디스크에 저장된 데이터
- 롤백(roll back): 작업을 하다가 문제가 발생하여 과거의 체크포인트로 되돌아가는 것
체크포인트와 롤백을 사용하여 타임아웃을 처리
- 데이터에 잠금을 요청하면 체크포인트를 만들고 해당 시점의 스냅숏을 저장
- 잠금을 얻은 후에 작업을 계속 진행
- 타임아웃이 걸려서 프로세스를 중단하거나 잠금을 포기해야 한다면 롤백을 사용하여 체크포인트 시점으로 시스템을 복귀
자원 할당 그래프를 이용한 교착 상태 검출
교착 상태가 없는 자원 할당 그래프
교착 상태가 있는 자원 할당 그래프
교착 상태 회복
교착상태를 일으킨 모든 프로세스를 동시에 종료
- 종료된 프로세스들이 동시에 작업을 시작하면 다시 교착 상태를 일으킬 가능성
- 프로세스를 강제로 종료한 후 다시 실행할 때는 순차적으로 실행해야함
- 어떤 프로세스를 먼저 실행할 것인지 기준이 필요
교착상태를 일으킨 프로세스 중 하나를 골라 순서대로 종료
- 프로세스를 종료할 때 어떤 프로세스부터 종료할 것인지 다음과 같은 기준이 필요하다.
- 우선순위가 낮은 프로세스를 먼저 종료한다.
- 우선순위가 같은 경우 작업 시간이 짧은 프로세스를 먼저 종료한다.
- 위의 두 조건이 같은 경우 자원을 많이 사용하는 프로세스를 먼저 종료한다
- 프로세스를 강제로 종료 + 강제 종료된 프로세스가 실행되기 전에 시스템을 복구
시스템 복구는 명령어가 실행될 때 마다 체크포인트를 만들어 가장 최근의 검사 시점으로 돌아가는 식
-> 시스템에 부하↑ 체크포인트를 무분별하게 사용x