조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다
1. 교착 상태
- 2개 이상의 프로세스가 서로가 점유한 자원을 기다리며 무한 대기에 빠진 상황
- ✅ 자원 할당과 동기화 설계가 잘못되었을 때 발생함
사례
더보기
- 시스템 자원: 프린터, 디스크, 파일 락 등
- 공유 변수: 락 순서 불일치, 이중 락 등
- 응용 프로그램: 데이터베이스 트랜잭션 락 충돌
2. 발생 조건
| 조건 | 설명 |
| 상호 배제 (Mutual Exclusion) | 한 프로세스가 사용하는 자원은 다른 프로세스와 동시에 공유할 수 없는 배타적인 자원이여야 함 |
| 비선점 (No Preemption) | 사용 중인 자원은 중간에 다른 프로세스가 강제로 빼앗을 수 없음. |
| 점유와 대기 (Hold and Wait) | 프로세스가 이미 어떤 자원을 점유한 상태에서 추가적인 자원을 요청하며 대기하는 상황 |
| 원형 대기 (Circular Wait) | 점유와 대기하는 프로세스들이 원형으로 자원을 기다리는 관계 |
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 |