01. 교착상태란
다중 프로그래밍 환경에서 나타날 수 있는 문제점으로, 2개 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상입니다. 즉, 서로 원하는 자원을 얻기 위해 무한정한 기다림 상태에 빠지는 것을 말합니다.
-> 2개 이상의 작업이 한 개의 작업이 끝나는 것을 기다리는 상태
02. 교착상태 발생조건 [4개의 조건이 동시에 성립해야 교착상태 발생]
1. Mutual Exclusion [상호배제]
2. Hold and Wait [점유와 대기]
3. Non Preemptive [비선점]
4. Circular wait [순환대기]
02-1.상호배제
자원은 한 번에 한 프로세스만 사용 가능 -> 자원을 얻었으면 독점적으로 씀
02-2.점유와 대기
최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기위해 대기하는 프로세스가 있어야 함
02-3.비선점
다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음
02-4.순환대기
프로세스의 집합 {p0,p1,...,pn}이 있을 때, p0은 p1이 점유한 자원을 대기하고 p1은 p2가 점유한 자원을 대기하고 pn은 p0이 점유한 자원을 요구해야 함 -> 자원을 기다리는 프로세스간에 사이클이 형성되어야 한다.
03. 해결방법 [Handling Deadlocks]
- Deadlock prevention (예방)
- Deadlock avoidance (회피)
- Deadlock detection and recovery (탐지후 회복)
- Just ignore the problem altogether! (무시)
03-1[교착상태 예방]
교착상태 예방은 교착 상태 발생 조건 중 하나를 제거함으로써 해결합니다. -> 오로지 개발자 역할
1. 자원의 상호배제 조건 방지 -> 모든 자원을 공유 허용
2. 점유와 대기 조건 방지 -> 모든 자원에 대해 선점 허용 -> 효율성이 떨어지고 starvation 현상이 일어날 수 있음 -> 사실상 불가능한 방법
3. 비선점 조건 방지 -> 필요 자원을 한 번에 모두 할당하기 -> 가장 효과적인 방법
4. 순환 대기 조건 방지 -> 자원에게 순서 부여를 통해 프로세스 순서의 증가 방향으로만 자원 요청 ->권장 x
단점은 자원 낭비가 심하다.
03-2 [교착상태 회피]
프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있는가를 확인하여 교착상태를 회피하는 방법으로 데드락이 발생할 위험이 있는 자원이 생기면 자원 할당 요청을 보류하여 시스템을 안전하게 유지합니다.
프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정상태로 남아있는 지를 사전에 검사하여 교착 상태를 회피하는 기법이다. 안정 상태에 있으면 자원을 할당하고, 그렇지 않으면 다른 프로세스들이 자원을 해지할 때까지 대기한다.
즉, 데드락에 빠질 수 있나 없나 운영체제 검사 후 자원을 넘겨줌
단점은 오버헤드가 많이 발생한다
예시 ) 뱅커스 알고리즘
뱅커스 알고리즘은 safe state 요구만을 수락하는 알고리즘입니다.
- Multiple instances
- Each process must a priority claim maximum use
- When a process requests a resource it may have to wait
- when a process gets all its resources it must return them in a finite amount of time
safe state란?
데드락이 일어나지 않는 상태
시스템이 safe state다. -> 데드락 x
시스템이 unsafe state다 -> 데드락 가능성이 없는것은 아님
즉, 회피란 unsafe state가 발생하지 않도록 보장하는 시스템이다. (unsafe도 데드락에 걸릴 수도^^ 있다.)
03-3 [교착상태 탐지]
데드락이 발생하면 빠르게 발견하고 문제를 해결하는 것
자원 할당 그래프 (Resource Allocation Graph) 를 통해 교착상태 탐지 가능 -> if graph contains no cycles -> no deadlock
-> if graph contains a cycle -> if only one instance per resource type, then deadlock || if several instances per resource type, possibility of deadlock
단점 -> 자원을 요청할 때마다 탐지 알고리즘을 실행하면, 오버헤드 발생
03-3 [교착상태 회복]
교착 상태를 일으킨 프로세스를 종료하거나 할당된 자원을 해제하면서 반복
1. 프로세스 종료 방법
- 교착상태의 프로세스 모두 중지
- 교착 상태가 제거될 때까지 한 프로세스씩 중지
2.자원선점방법
- 자원을 뺴앗긴 프로세스는 강제 종료 이후 재시작
- 교착 상태에 빠진 프로세스가 필요로 하는 자원을 강제로 가져옴
-> 최소 비용으로 중지시키기
03-4 [교착상태 무시 ]
데드락이 매우 드물게 발생해서 데드락에 대한 조치 자체가 더 큰 오버헤드일 수 있어서
가장 현실적이고 좋은 방법인듯 ^^
'CS > 운영체제' 카테고리의 다른 글
[운영체제]CPU 스케줄링 (0) | 2023.08.21 |
---|---|
[운영체제] 프로세스와 스레드 (0) | 2023.08.19 |
[운영체제] 운영체제 기초 (0) | 2023.08.19 |
[컴퓨터구조]입출력장치 [I/O device] (0) | 2023.08.18 |
[컴퓨터구조]CPU의 성능향상기법 (0) | 2023.08.14 |