교착 상태 해결: 예방, 회피, 검출 후 회복
교착 상태 예방
애초에 교착 상태가 발생하지 않도록
교착 상태 발생 조건(상호 배제, 점유와 대기, 비선점, 원형 대기)중 하나를 없애버리기
- 상호 배제를 없애면?
모든 자원을 공유 가능하게 하면서 현실적으로 불가능
- 점유와 대기를 없애면?
특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분
자원의 활용률을 낮출 수 있기에 좋지 않은 방식
- 비선점 조건을 없애면?
선점이 가능한 자원(e.g. CPU)에 한해 효과적
하지만 모든 자원이 선점 가능한 것은 아니다
ex. 프린트 도중에 멈춰버린다면...
- 원형 대기 조건을 없애면?
자원에 번호를 붙이고 오름차순으로 할당하면 원형 대기는 발생하지 않음
하지만 모든 자원에 번호 붙이는 것은 어려운 작업이고
어떤 자원에 어떤 번호를 붙이느냐에 따라 활용률이 달라진다
따라서, 다른 조건을 없애는 것보다는 원형 대기 조건을 없애는 것이 괜찮지만 여전히 단점은 존재
교착 상태 회피
교착 상태를 무분별한 자원 할당으로 인해 발생했다고 간주하고
배분할 수 있는 자원의 양을 고려해서
교착 상태가 발생하지 않을 만큼만 조심히 자원 분배를 하는 방식이다
안전 상태에서 안전 상태로 움직이는 경우에만 자원을 할당해서
항시 안전 상태를 유지하도록 자원을 할당하는 방식이
c.f. 은행원 알고리즘
- 안전 순서열:
교착 상태 없이 안전하게 프로세스들에게 자원을 할당할 수 있는 순서
- 안전 상태:
교착 상태 없이 모든 프로세스가 자원을 할당받고 종료될 수 있는 상태
안전 순서열이 있는 상태
- 불안전 상태:
교착 상태가 발생할 수도 있는 상태
안전 순서열이 없는 상태
교착 상태 검출 후 회복
교착 상태의 발생을 인정하고 사후에 조치하는 방식
프로세스가 자원을 요구하면 일단 할당, 교착 상태가 검출되면 회복
선점을 통한 회복과 프로세스 강제 종료를 통한 회복으로 두 가지 종류의 회복이 있다
1. 선점을 통한 회복 (몰빵)
교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식
2. 프로세스 강제 종료를 통한 회복 (강종)
교착 상태에 놓인 프로세스 모두 강제 종료 (작업 내역을 잃을 위험)
교착 상태가 해결될 때까지 한 프로세스씩 강제 종료 (오버헤드)
교착 상태 무시
e.g. 타조 알고리즘
'CS > [혼자 공부하는] 운영체제' 카테고리의 다른 글
6-2] 가상 메모리: 페이징을 통한 가상 메모리 관리 (0) | 2023.06.09 |
---|---|
6-1] 가상 메모리: 연속 메모리 할당 (0) | 2023.06.08 |
5-1] 교착상태: 교착 상태란 (0) | 2023.06.07 |
4-2] 프로세스 동기화: 동기화 기법 (0) | 2023.06.07 |
4-1] 프로세스 동기화: 동기화란 (0) | 2023.06.06 |