교착 상태
프로세스 혹은 스레드가 회수되지 않을 자원을 요청하며 무한히 대기하는 현상
예시)
스캐너와 프린터가 각각 1개씩 존재할 때, 프로세스 A가 스캐너를 점유한 상태에서 프린터를 요청하고 프로세스 B는 프린터를 점유한 상태에서 스캐너를 요청한다면 두 프로세스는 영영 완료되지 못할 것입니다
교착 상태 발생 조건
교착 상태는 다음의 네 가지 조건이 동시에 성립할 때 발생하고 각각의 예방 방안은 다음과 같습니다.
1. 상호 배제 : 자원은 한 번에 하나의 프로세스 혹은 스레드만 사용 가능
- 자원을 공유, 자원을 공유하는 것을 사실상 힘듬
2. 점유와 대기 : 프로세스 혹은 스레드가 적어도 하나의 자원을 점유한 상태에서 다른 자원을 요청하며 대기
- 필요한 자원을 모두 할당하거나 아예 할당하지 않음, 자원의 활용률이 낮아짐
3. 비선점 : 프로세스 혹은 스레드가 점유한 자원을 뺏을 수 없음
- 자원을 빼앗을 수 있도록 함, 자원을 빼앗는 것이 불가능한 자원이 존재
4. 원형 대기 : 두 개 이상의 프로세스 혹은 스레드가 서로 자원을 순환적으로 요청
- 자원에 고유한 순서를 붙이고 순서대로 요청, 모든 자원에 순서를 붙이는 것에 비용이 들고 자원의 활용률이 떨어짐
이전의 예시를 다시 생각해볼까요?
프린터와 스캐너는 공유가 불가능 하며 각각의 프로세스가 한 자원을 점유한 상태로 다른 자원을 대기하고 있습니다.
프린터와 스캐너의 작업을 빼앗을 수 없으며 프로세스 A와 B는 순환하는 형태로 요청을 보내고 있기에 교착 상태가 발생했습니다.
교착상태 해결 방안
1. 회피
은행원 알고리즘 : 프로세스 혹은 스레드가 자원 요청 시 안전 여부를 계산하여 안전 상태일 경우에만 자원을 할당
- 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
- 안전 상태 : 모든 프로세스가 정상적으로 자원을 할당 받고 종료 될 수 있는 상태, 안전 순서열대로 프로세스들에 자원을 배분
- 불안전 상태 : 교착 상태가 발생할 수도 있는 상황, 안전 순서열이 없는 상
안전 상태 예시)
프로세스 | 최대 요구량 | 현재 사용 | 남은 필요량 |
P1 | 7 | 3 | 4 |
P2 | 5 | 2 | 3 |
P3 | 3 | 2 | 1 |
가용 자원 : 3
P1의 필요량은 4이므로 가용 자원으로 실행 불가능 하지만 P2는 실행 가능하고 이후 5의 자원을 반환 , P3의 경우도 실행 후 총 가용 자원이 5가 되므로 안전 순서열이 존재(대표적으로 P2 -> P1 -> P3, 다른 안전 순서열도 존재)
불안전 상태 예시)
프로세스 | 최대 요구량 | 현재 사용 | 남은 필요량 |
P1 | 7 | 3 | 4 |
P2 | 6 | 2 | 4 |
P3 | 3 | 2 | 1 |
가용 자원 : 1
가용 자원으로 실행할 수 있는 프로세스는 P3 뿐이지만 이후 생기는 가용 자원은 3으로 P1도 P2도 실행할 수 없으므로 불안전 상태
2. 교착 상태 검출 후 회복
1) 선점을 통한 회복 : 교착 상태가 해결될 때까지 자원을 뺏어서 하나의 프로세스에 몰아주는 방식
2) 강제 종료를 통한 회복 : 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료
3. 무시
타조 알고리즘 : 교착상태가 드물게 발생하는 경우 무시하는 방식
교착 상태가 드물게 일어나거나 교착 상태를 완벽히 대처하는 비용이 크거나 시스템 중단의 비용이 크지 않은 경우 교착 상태를 무시하는 선택을 할 수 있습니다.
'CS > 운영체제' 카테고리의 다른 글
운영체제란 무엇인가 : 핵심 개념과 역할 (0) | 2024.11.03 |
---|---|
메모리: RAM, 캐시 메모리, 그리고 CPU 접근 방식 이해하기 (0) | 2024.10.27 |
프로세스와 스레드 (0) | 2024.10.20 |