조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다
1. 개요
교착 상태
- 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리는 무한루프에 빠진 상태
- 여러 프로세스가 함께 작업을 수행하다 보니 자연스럽게 일어나는 문제
- OS는 감시를 하다 교착상태가 발생하면 강압적으로 해결해야 함
발생
구분 | 설명 |
시스템 자원 |
다른 프로세스와 공유할 수 없는 자원(예: 프린터, 레코더 등)을 사용할 경우,
한 프로세스가 자원을 점유한 상태에서 다른 프로세스가 해당 자원을 기다리면 교착 상태 발생 가능 |
공유 변수 |
공유 변수가 적절히 동기화되지 않으면, 특정 프로세스가 무한 대기 상태에 빠질 수 있음 (예: 잘못된 락 관리로 인한 데드락)
|
응용 프로그램 |
데이터베이스에서 특정 데이터에 락을 걸어 다른 트랜잭션이 접근하지 못하는 경우,
여러 트랜잭션이 서로의 락을 기다리면서 교착 상태 발생 가능 |
자원 할당 그래프
- 프로세스가 어떤 자원을 사용중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것
2. 필요 조건
조건 | 설명 |
상호 배제 (Mutual Exclusion) |
한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이여야 함.
배타적인 자원을 공유해서 사용하면 교착 상태 발생 가능 |
비선점 (No Preemption) |
사용 중인 자원은 중간에 다른 프로세스가 강제로 빼앗을 수 없음.
즉, 자원을 점유한 프로세스가 직접 해제해야 함 |
점유와 대기 (Hold and Wait) |
프로세스가 이미 어떤 자원을 할당받은 상태에서 추가적인 자원을 요청하며 대기해야 함.
즉, 일부 자원을 점유한 상태에서 다른 자원이 할당될 때까지 기다리는 상황 |
원형 대기 (Circular Wait) |
점유와 대기하는 프로세스들이 서로 자원을 기다리면서 원형 관계를 이루어야 함.
즉, P1 → P2 → P3 → P1 같은 순환 대기 상태가 발생해야 함 |
3. 해결 방법
방법 | 설명 |
예방 (Prevention) | |
- 상호 배제 예방 |
시스템 내에서 독점적으로 사용하는 자원을 없애거나, 공유 가능한 자원으로 변경함.
(예: 스풀링 기법으로 프린터 공유) |
- 비선점 예방 |
프로세스가 점유한 자원을 빼앗을 수 있도록 만듦
자원이 필요한 프로세스가 다른 프로세스의 자원을 강제로 회수 가능하도록 설정 |
- 점유와 대기 예방 |
프로세스가 필요한 모든 자원을 한 번에 할당받거나, 아무것도 할당받지 않는 방식을 적용하여 대기 상태를 방지함
|
- 원형 대기 예방 |
자원을 한 방향으로만 요청하도록 규칙을 설정하여 순환 대기를 방지함
(예: 계층적으로 자원을 할당하여 번호 순서대로 사용) |
회피 (Avoidance) |
자원 할당 시, 교착 상태가 발생할 가능성이 있는지 미리 파악하여 특정 임계 수준 이하로만 자원을 할당함
(예: 은행가 알고리즘) |
검출 (Detection) |
운영체제가 프로세스의 상태를 지속적으로 감시하여 교착 상태가 발생하는지 확인함
(예: 자원 할당 그래프 분석) |
회복 (Recovery) |
교착 상태가 발생한 경우, 이를 해결하기 위한 조치를 취함
프로세스를 강제 종료하거나 일부 자원을 회수하여 교착 상태를 해소 |
'OS' 카테고리의 다른 글
[쉽게 배우는 운영체제] 8. 가상 메모리의 기초 (0) | 2024.12.12 |
---|---|
[쉽게 배우는 운영체제] 7. 물리 메모리 관리 (0) | 2024.12.12 |
[쉽게 배우는 운영체제] 5-1. 프로세스 동기화: 임계 영역 (0) | 2024.12.12 |
[쉽게 배우는 운영체제] 4-2. CPU 스케줄링: 인터럽트 처리 (0) | 2024.12.12 |
[쉽게 배우는 운영체제] 4-1. CPU 스케줄링: 스케줄링 (0) | 2024.12.12 |