
1. 교착 상태의 개요
1. 교착 상태의 정의
- 교착 상태: 다른 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태, 여러 프로세스가 작업을 진행하다 보니 발생하는 자연적인 현상
- 아사현상: 잘못된 정책으로 특정 프로세스의 작업이 지연되는 문제
- 교착상태 발생 예
- 시스템 지원: 다른 프로세스와 동시에 같이 사용할 수 없는 시스템 자원을 할당받은 후 양보하지 않는 경우
- 잠금: 무한 대기를 막지 못해 교착 상태가 발생한 경우
- 응용 프로그램: 여러 프로세스가 데이터 베이스에 저장된 데이터를 사용할 때는 일관성을 유지해야 한다
2. 자원 할당 그래프
- 프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프
- 자원이 2개 이상의 프로세스를 동시에 허용할 수 있다 (다중 자원)

2. 교착 상태 필요조건
1. 교착 상태 필요조건
- 상호배제: 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는
- 비선점: 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는
- 점유와 대기: 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태
- 원형대기: 서로 방해하는 방향이 원을 이루면 프로세스들이 서로 양보하지 않기 때문에 교착 상태에 빠진다.
2. 식사하는 철학자 문제와 교착 상태 필요조건
- 임계구역 -> 잠금장치 사용으로 해결
- 상호배제: 배타적 인 자원을 여러 프로세스가 사용하는 경우에 발생
- 비선점 조건: 자원을 빼앗을 수 있다는 것은 시간 간격을 두고 그 자원을 공유할 수 있다는 의미이므로 상호 배제가 성립되지 않으므로 빼앗을 수 없다.
- 점유와 대기: 모두 점유하거나, 모두 기다리는 상태
- 원형 대기: 선후 관계를 결정할 수 없어 문제가 계속 맴돈다는 의미, 서로 진행을 방해하는 상태가 되므로 교착 상태가 발생
- 교착 vs 아사 차이
- 아사 현상은 정책상 잘못이나 오류로 인해 특정 프로세스의 작업이 이루어지지 않는 것-> 상한선 (에이징)
- 교착 상태는 정책상 잘못이나 오류가 없어도 자연적으로 발생 -> 예방, 회피, 검사
3. 교착 상태 해결 방법
1. 교착 상태 해결
- 교착 상태 예방: 교착 상태를 유발하는 네 가지 조건이 발생하지 않도록 무력화하는 방식 ( 실효성이 적어 )
- 교착 상태 회피: 자원을 할당하다가 교착 상태를 유발할 가능성이 있다고 판단되면 자원 할당을 중단하고 지켜보는 것 ( 실효성이 적어 )
- 교착 상태 검출과회복: 자원 할당 그래프를 모니터링하면서 교착 상태 가 발생하는지 살펴보는 방식, 교착 상태가 발생하면 교착 상태 회복 단계가 진행
2. 교착 상태 예방
- 상호 배제 예방 (불가능): 시스템 내의 모든 자원을 공유할 수 있다면 교착 상태가 발생하지 않는다
- 현실적으로 모두 공유하는 것은 불가능하다.
- 시스템 내에는 공유할 수 없는 자원이 있다.
- 임계구역 보호가 불가능하다.
- 비선점 예방 (불가능): 모든 자워을 빼앗을 수 있도록 만드는 방법이다,
- 임계구역을 보호하기 위해 잠금을 사 용하면 자원을 빼앗을 수 없을 뿐만 아니라 상호 배제 예방도 보장할 수 없다.
- 뺏앗더라도 아사 현상을 일으킨다.
- 점유와 대기 예방: 전부 할당하거나 아예 할당하지 않는, 한꺼번에 점유하거나, 그렇지 못할 경우 자 원을 모두 반납해야 한다.
- 프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어렵다 : 추가로 필요한 자원을 확보하기가 어렵다.
- 자원의 활용성이 떨어진다: 프로세스가 앞으로 사용할 자원까지 선점해 버리기 때문에 그 자원을 필요로 하는 다른 프 로세스의 작업이 진행되지 않는다.
- 많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리하다: 아사 현상
- 결국 일괄 작업 방식으로 동작한다
- 원형 대기 예방: 프로세스들이 원형을 이루지 못하도록 막는 방법, 자원을 한 방향으로만 사용하도록 설정하면 원형 대기를 예방할 수 있다 (모든 자원에 숫자 부여), 프로세스들이 자원을 사용하려고 할 때 작은 번호의 자워을 할당받은 후 큰 번호의 자원을 할당받도록 한다
- 프로세스 작업 진행에 유연성이 떨어진다
- 자원에 번호를 어떻게 부여할지가 문제다
자원을 보호해야 하므로 상호 배제 예방과 비선점 예방은 사용 하기 어렵고 점유와 대기 예방, 원형 대기 예방은 프로세스 작업 방식을 제한하고 자원을 낭비하기 때문에 사용할 수 없다.
3. 교착 상태 회피
교착 상태 회피의 개념
- 교착 상태가 발생하 지 않는 범위 내에서만 자원을 할당하고, 교착 상태가 발생하는 범위에 있으면 프로세스를 대기시 킨다.
- 할당되는 자원의 수를 조절하여 교착 상태를 피한다
- 안정상태 / 불안정 상태
은행원 알고리즘
- 최악의 경우를 기준으로 삼음으로써 문제 상황을 철저히 피하여 교착 상태를 막는다.
- 가용자원 >= 기대자원 : 안정상태


교착 상태 회피의 문제점
- 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다: 어케 다 아니.. 새상이 맘대로 되나..
- 시스템의전체 자원 수가 고정적이어야한다: 새로운 자워이 추가되는 일이 빈번하므로 시 스템의 자원 수가유동적이다.
- 자원이 낭비된다: 모든 불안정 상태가 교착 상태가 되는 것은 아님에도 불구 하고 자원을 할당하지 않는 것은 자원 낭비다
4. 교착 상태 검출
타임 아웃
- 일정 시간 동안 작업이 진행되지 않은 프로세스 -> 교착상태 발생으로 처리
- 가벼운 교착 상태 검출: 타임아웃을 이용하는 방법: 일정 시간 동안 작업이 진행되지 않으면 해당 프로세 스를 죽인다
- 엉뚱한 프로세스가 강제 종료될 수 있다
- 모든 시스템에 적용할 수 없다
- 타임아웃으로 데이터의 일관성이 깨지는 문제를 해결
- 체크포인트: 작업을 하다가 문제가 발생하면 저 장된 상태로 되돌아오기 위한 표시
- 스냅숏: 체크포인트를 설정하면 현재의 시스템 상태가 하드디 스크에 저장되며 이러한 데이터
- 롤백: 과거의 체크포인트로 되돌아가는 것

무거운 교착 상태 검출 : 자원 할당 그래프를 이용하는 방법
- 프로세스의 작업 방식을 제한하 지 않으면서 교착 상태를 정확하게 파악할 수 있다는 것이 장점
- 자원 할당 그래 프를 유지하고, 갱신하고, 사이클을 검사하는 추가 작업으로 인해 오버헤드가 발생한다는 단점

5. 교착 상태 획복
- 교착 상태가 검출되면 교착 상태를 푸는 후속 작업
- 프로세스를 강제로 종료하는 방법
- 교착 상태를 일으킨 모든 프로세스를 동시에 종료한다
- 교착 상태를 일으킨 프로세스 중 하나를 골라 순서대로 종료한다 (우선순위순, 작업 시간이 짧은 순, 자원을 많이 쓴 순)
- 강제 종료 전 시스템 복구를 해야 한다.
- 시스템 복구는 명령어가 실행될 때 마다 체크포인트를 만들어 가장 최근의 검사 시점으로 돌아가는 식으로 한다
출처 : 조성호 , 『IT CookBook, 쉽게 배우는 운영체제(2판)』한빛아카데미(2023).
'COMPUTER SCIENCE > OS' 카테고리의 다른 글
| [쉽게 배우는 운영체제 2판] 7. 물리 메모리 관리 (0) | 2025.05.21 |
|---|---|
| [쉽게 배우는 운영체제 2판] 6장 연습문제 (0) | 2025.04.16 |
| [쉽게 배우는 운영체제 2판] 5장 연습문제 (0) | 2025.04.16 |
| [쉽게 배우는 운영체제 2판] 5. 프로세스 동기화 (0) | 2025.04.16 |
| [쉽게 배우는 운영체제 2판] 4장 연습문제 (0) | 2025.04.16 |