운영체제 7장 - 교착 상태(Deadlock)
목차
- 7.1 시스템 모델
- 7.2 교착상태의 특징
- 7.3 교착상태 처리 방법
- 7.4 교착상태 예방
- 7.5 교착상태 회피
- 7.6 교착상태 탐지(Deadlock Detection)
- 7.7 교착상태로 부터의 복구
7.1 시스템 모델
- 자원
- 유한한 개수의 자원
- 물리적 자원(CPU 사이클, 메모리 공간, I/O 장치), 논리적 자원(파일, 세마포어, 뮤텍스 락)
- 프로세스의 자원 이용 과정은 요청, 사용, 방출 및 해제 과정으로 이루어짐
- 교착 상태(Deadlock)
- 모든 프로세스가 한 자원을 점유하고, 같은 집합의 다른 프로세스가 점유한 자원의 획득을 기다리는 상태. 모든 프로세스가 진행되지 못하는 상태
7.2 교착상태의 특징
교착 상태가 발생하는 필요 조건
- 상호 배제(Mutual exclusion) : 한번에 한 프로세스만 사용할 수 있는 자원이 적어도 하나 이상 존재
- 점유 대기(Hold and Wait) : 최소 하나의 자원을 점유하고, 다른 프로세스가 점유한 자원을 대기
- 비선점(Non-promption) : 자원이 강제 방출 불가, 자발적으로만 방출만 가능
- 순환 대기(Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음
- 자원 할당 그래프
- 교착상태 발견을 위해 프로세스와 자원과의 관계와 할당 상태를 표현하는 그래프
- 자원 할당 그래프에 사이클이 있다면, deadlock이 발생 가능성 있음
7.3 교착상태 처리 방법
- 교착 상태 예방(prevention)
- 4가지 필요 조건 중, 하나 이상을 만족하지 않게 함
- 교착 상태 회피(avoidance)
- 부가적인 정보를 사용하여, 자원 요청을 위해 프로세스가 대기할지 여부를 결정함.
- 자원 할당 상태의 부가 정보를 통해 자원을 할당함
- 교착 상태 탐지(detection) 후 복구(recovery)
- deadlock 상태 허용
- deadlock detection 알고리즘과 deadlock recovery 알고리즘으로 구성됨
- 교탁 상태 무시
- deadlock이 자주 발생하지 않기 때문에, 무시해버림
- 수작업으로 복구해야함
- 대부분의 운영체제에 사용. 응용프로그램의 deadlock 방지는 응용 프로그래머 책임
7.4 교착상태 예방
- 교착상태 4가지 필요 조건 중, 적어도 한개를 만족하지 않도록 한다
- 상호 배제 거부
- 동시 공유 가능 자원을 상호배제 하지 않음(ex) 읽기전용 파일)
- 동시 공유 불가능 자원은 상호배제 해야함
- 점유 대기 조건 거부
- 자원을 요청할 때에 다른 자원을 점유하지 않은 상태에서 자원을 요청하도록 함
- 자원 할당시 두가지 방법 가능
- 필요 자원을 한꺼번에 모두 할당 받는 방법
- 가지고 쓰지 않을 수 있어 자원 이용율이 떨어짐
- 점유 자원을 반납 후, 필요한 자원을 추가 요청하는 방법
- 쓰고 반납해야하므로 오버헤드가 발생. 기아 가능성
- 필요 자원을 한꺼번에 모두 할당 받는 방법
- 비선점 조건 거부
- 어떤 자원을 점유한 프로세스가 다른 자원을 요청하여 즉시 받을 수 없다면
- 두가지 방법이 가능
- 현재 모든 자원 반납 후 대기 상태로 전환
- 요청한 자원을 이용할 수 없거나, 다른 대기 프로세스가 점유하지 않았다면 대기 상태가 됨
- 순환 대기 거부
- 모든 자원에 전체적인 순서 부여
- 여러개의 자원이 필요한 경우 오름차순
- 교착상태 예방의 문제점
- 장치 이용률의 저하, 시스템 처리율 감소
7.5 교착상태 회피
- 상황을 보고 순환대기라도 할당함
- 자원이 어떻게 요청되는지에 대한 추가 정보가 필요함
- 자원 할당 상태를 조사하여 순환 대기 조건이 발생하지 않도록 자원 요청을 제어함
- 안전 상태
- 현재 가용 자원과 점유한 자원으로 처리 가능
- 불안정 상태 : deadlock 가능성
- 교착 상태 회피 알고리즘 : 시스템이 불안정 상태로 진입하지 않도록 보장해야함
- 단일 인스턴스 : 자원 할당 알고리즘
- 다중 인스턴스 : 은행원 알고리즘 (Banker’s Alogorithm)
- 프로세스가 시작할 때, 자원 유형마다 필요한 최대 개수를 선언
- 자원을 요청할 때, 자원 할당이 safe 상태를 유지하지 못하면, 다른 프로세스가 끝나길 대기해야함
- 자원을 할당받으면 유한한 시간 후에 반납해야함
7.6 교착상태 탐지(Deadlock Detection)
- 현재 교착 상태인지 확인 후 복구
- 탐지 알고리즘 수행빈도 결정 방법
- 요청이 즉시 승인되지 않을 때마다 수행
- 교착 상태를 유발한 프로세스가 누구인지 식별 가능
- 오버헤드가 큼
- 가끔식(한시간에 한번, 이용율이 저하될 때 등) 수행
- 누가 원인 프로세스인지 확인 불가
- 오버헤드는 작음
- 요청이 즉시 승인되지 않을 때마다 수행
7.7 교착상태로 부터의 복구
- 프로세스 종료
- 교착상태에 있는 모든 프로세스 중지
- 한번에 한 프로세스 중지
- 어떤 프로세스를 종료할 것인지 선택할 고려사항 필요
- 자원 선점
- 교착상태가 제거될 때 까지 프로세스의 자원을 선점하여 다른 프로세스에게 제공
- 희생자 선택
- 어떤 프로세스가 희생할 것인가
- Rollback
- safe 상태로 되돌린 후, 그 상태에서 다시 시작하는 방법
- total rollback : safe 상태의 결정이 어려우므로 프로세스 중지 후 다시 시작
- 부분 rollback : 교착 상태를 제거하는데 필요한 만큼 rollback
- 기아상태 고려
- 같은 프로세스가 항상 victim으로 선택되는 기아 상태가 발생하지 않도록 선정
- rollback 회수를 비용에 포함하는 방법으로 해결 가능
- 같은 프로세스가 항상 victim으로 선택되는 기아 상태가 발생하지 않도록 선정
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.