-
[Operating System] 교착 상태 : 교착 상태 해결 방법Operating System 2024. 5. 20. 12:48
교착상태 해결 방법 중 예방, 회비, 검축 후 회복에 대해 정리하였습니다.참조 : 인프런 '개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제'
< 교착 상태 예방 >
애초에 교착 상태가 발생 하지 않도록 교착 상태 발생 조건( 상호 배제, 점유와 대기, 비선점, 원형 대기 ) 중 하나를 없애버림으로써 교착 상태를 예방합니다.
교착 상태가 발생하지 않음은 보장할 수 있으나 부작용이 따르는 방식입니다.[ 상호 배제 없애기 ]
: 모든 자원을 공유 가능하게 만들기

상호 배제 없애기 예시 → 이론적으로는 가능할 수 있겠지만 현식적인 방법은 아닙니다.
[ 점유와 대기 없애기 ]
: 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분
→ 자원의 활용률을 낮출 수 있습니다.
[ 비선점 조건 없애기 ]
→ 선점이 가능한 자원(ex. CPU)에 한해 효과적일 수 있지만, 모든 자원이 선점 가능한 것은 아닙니다.
[ 원형 대기 없애기 ]
: 모든 자원에 번호를 붙이고 오름차순으로 할당하면 원형 대기는 발생하지 않습니다.

원형 대기 없애기 예시 : 식사하는 철학자 문제 → 모든 자원에 번호를 붙이는 것은 어렵고, 어떤 자원에 어떤 번호를 붙이느냐에 따라 활용률이 달라집니다.
< 교착 상태 회피 >
교착 상태를 한정된 자원을 무분별한 자원 할당으로 인해 발생했다고 간주합니다.
배분할 수 있는 자원의 양을 고려하여 교착 상태가 발생하지 않을 만큼만 자원을 배분함으로써 교착 상태를 회피합니다.
즉, 항상 안전상태만을 유지하게끔 자원을 할당하는 방식입니다.- 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
- 안전 상태 : 교착 상태 없이 모든 프로세스가 자원을 할당 받고 종료될 수 있는 상태(안전 순서열이 존재하는 상태)
- 불안전 상태 : 교착 상태가 발생할 수도 있는 상태(안전 순서열이 존재하지 않는 상태)
Ex 1 : 안전 상태(안전 순서열이 존재하는 상태)
프로세스 자원 최대 요구량 현재 자원 사용량 P1 10 5 P2 4 2 P3 9 2 - 할당 가능한 자원 : 12개
- 할당한 자원(P1, P2, P3의 현재 자원 사용량 총합) : 9개
- 남은 자원 (할당 가능 자원 - 할당한 자원) : 3개
여기서 안전 순서열은 존재합니다 : P2 → P1 → P3
- P2가 남은 자원 3개 중 2개를 추가 사용 후 프로세스 종료 → 4개의 자원 반환(남은 자원 : 5)
- P1이 남은 자원 5개중 5개를 추가 사용 후 프로세스 종료→ 10개의 자원 반환(남은 자원 : 10)
- P3가 남은 자원 10개 중 7개를 추가 사용 후 프로세스 종료→ 9개의 자원 반환(남은 자원 : 12)
Ex 2 : 불안전 상태(안전 순서열이 존재하지 않는 상태)
프로세스 자원 최대 요구량 현재 자원 사용량 P1 10 5 P2 4 2 P3 9 3 - 할당 가능한 자원 : 12개
- 할당한 자원(P1, P2, P3의 현재 자원 사용량 총합) : 10개
- 남은 자원 (할당 가능 자원 - 할당한 자원) : 2개
여기서 안전 순서열은 존재하지 않습니다.
- P1, P3의 추가 자원 요구량에 맞춰줄 수 없음. P2에게 자원 2개 할당 후 프로세스 종료 → 4개의 자원 반환(남은 자원 : 4)
- 남은 자원 4개로 역시 P1, P3의 추가 자원 요구량을 맞춰줄 수 없음.
< 교착 상태 검출 후 회복 >
프로세스가 자원을 요구하면 일단 할당, 이후 교착 상태가 검출되면 조치하는 방식입니다.
선점을 통한 회복, 프로세스 강제 종료를 통한 회복이 있습니다.[ 선점을 통한 회복 ]
: 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식
[ 프로세스 강제 종료를 통한 회복 ]
: 교착 상태에 놓인 프로세스를 모두 강제종료
→ 작업 내역을 잃을 위험성 존재
: 혹은, 교착 상태가 해결될 때까지 한 프로세스씩 강제 종료
→ 교착 상태가 회복되었나 프로세스를 종료할 때마다 확인해야할기 때문에 오버헤드 발생 가능성 존재
'Operating System' 카테고리의 다른 글
[Operating System] 가상 메모리 : 페이징 (0) 2024.06.13 [Operating System] 가상 메모리 : 연속 메모리 할당 (0) 2024.05.20 [Operating System] 교착 상태 : 교착 상태란 (0) 2024.05.20 [Operating System] 프로세스 동기화 : 동기화 기법 (0) 2024.05.20 [Operating System] 프로세스 동기화 : 동기화란 (0) 2024.05.19 - 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서