책 "쉽게 배우는 운영체제"를 참고하여 쓴 글입니다
교착 상태의 개요
교착 상태의 정의
교착 상태: 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태, 여러 프로세스가 작업을 진행하다가 자연적으로 일어나는 문제
아사 현상: 운영체제가 잘못된 정책을 사용하여 특정 프로세스의 작업이 지연
교착 상태의 발생
- 시스템 자원
- 다른 프로세스와 공유할 수 없는 자원을 사용할 때 교착 상태 발생
- 공유 변수
- 공유 변수를 사용할때 교착 상태 발생
- 한 변수를 할당받은 상태에서 다른 변수를 기다리면 교착 상태 발생
- 응용 프로그램
- 데이터베이스는 데이터의 일관성을 유지하기 위해 잠금을 사용, 이때 교착 상태 발생 가능
자원 할당 그래프
프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것
프로세스: 원 / 자원: 사각형
교착 상태 필요조건
교착 상태 필요조건
상호 배제: 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야 한다
비선점: 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야 한다
점유와 대기: 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 한다
원형 대기: 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 한다
교착 상태 해결 방법
교착 상태 해결 방법
예방: 교착상태를 유발하는 네가지 조건을 무력화 한다, 실효성 적음
회피: 교착 상태가 발생하지 않는 수준으로 자원을 할당한다, 실효성 적음
검출: 자원 할당 그래프를 사용하여 교착 상태를 발견한다, 그래프 모니터링, 현실적 접근 방법
회복: 교착 상태를 검출한 후 해결한다
교착 상태 예방
- 상호 배제 예방
- 시스템 내의 모든 자원을 공유할 수 있도록 즉, 독점적으로 사용할 수 있는 자원을 없에버린다
- 현실적으로는 불가능
- 비선점 예방
- 모든 자원을 빼앗을 수 있도록
- 아사 현상 일으킴
- 점유와 대기 예방
- 전부 할당하거나 아니면 아예 할당하지 않는 방식을 적용
- 단점
- 프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어렵다
- 자원의 활용성이 떨어진다
- 많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리하다
- 일괄 작업 방식으로 동작한다
- 원형 대기 예방
- 자원을 한 방향으로만 사용하도록 설정 = 모든 자원에 숫자를 부여하고 숫자가 큰 방향으로만 자원을 할당
- 단점
- 프로세스 작업 진행에 유연성이 떨어진다
- 자원의 번호를 어떻게 부여할 것인지가 문제
교착 상태 회피
할당되는 자원의 수를 조절하여 교착 상태를 피한다
할당된 자원이 적으면 안정 상태가 큼 <->할당된 자원이 늘어날수록 불안정 상태가 큼
안정 상태를 유지할 수 있는 범위 내에서 자원을 할당한다
은행원 알고리즘

- 단점
- 프로세스가 자신이 사용할 모든 자원을 미리 선언해야한다
- 시스템의 전체 자원 수가 고정적이어야 한다
- 자원이 낭비된다
교착 상태 검출
운영체제가 프로세스의 작업을 관찰하면서 교착 상태 발생 여부를 계속 주시하는 방식
타임아웃을 이용하는 방법, 자원 할당 그래프를 이용하는 방법
- 타임아웃을 이용하는 방법(가벼운 교착 상태 검출)
- 일정 시간 동안 작업이 진행되지 않은 프로세스를 교착상태가 발생한 것으로 간주하여 처리
- 문제점
- 엉뚱한 프로세스가 강제 종료될 수 있다
- 모든 시스템에 적용할 수 없다
- 데이터 베이스의 교착 상태 처리
- 체크포인트: 작업을 하다가 문제가 발생하면 저장된 상태로 되돌아오기 위한 표시
- 스냅숏: 체크포인트를 설정하였을때 현재의 시스템 상태가 하드디스크에 저장되는데 이 저장된 데이터
- 롤백: 작업을하다가 문제가 발생하여 과거의 체크포인트로 되돌아가는것
- 자원 할당 그래프를 이용하는 방법(무거운 교착 상태 검출)
- 자원을 요청하거나 할당할 때마다 자원 할당 그래프 갱신, 사이클이 발생하면 교착 상태 검출된 것
- 프로세스의 작업 방식을 제한하지 않으면서 교착 상태를 정확하게 파악할 수 있다
- 단점
- 자원 할당 그래프를 유지, 갱신, 사이클을 검사하는 추가 작업으로 인해 오버헤드가 발생
교착 상태 회복
교착 상태를 유발한 프로세스를 강제로 종료
강제 종료된 프로세스가 실행되기 전에 시스템을 복구
시스템 복구: 명령어가 실행될 때마다 체크포인트를 만들어 가장 최근의 검사 시점으로 돌아간다
- 교착 상태를 일으킨 모든 프로세스를 동시에 종료
- 종료된 프로세스들이 동시에 작업을 시작하면 다시 교착상태 일으킬 가능성 큼
- 교착 상태를 일으긴 프로세스 중 하나를 골라 순서대로 종료
- 우선순위가 낮은 프로세스를 먼저 종료한다
- 우선순위가 같은 경우 작업 시간이 짧은 프로세스를 먼저 종료한다
- 위의 두 조건이 같은 경우 자원을 많이 사용하는 프로세스를 먼저 종료한다.
'전공 > 운영체제' 카테고리의 다른 글
[운영체제]7장 물리 메모리 관리 (3) | 2023.06.10 |
---|---|
[운영체제]5장 프로세스 동기화 (0) | 2023.04.22 |
[운영체제]4장 CPU 스케줄링 (0) | 2023.04.16 |
[운영체제]3장 프로세스와 스레드 (0) | 2023.04.15 |
[운영체제] 2장 컴퓨터의 구조와 성능 향상 (0) | 2023.04.14 |