1054 단어
5 분
데드락
DeadLock
TIP
- 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만을 기다리며 작업을 더이상 진행하지 못하는 상태
- 다른 프로세스와 공유할 수 없는 자원을 사용할 때 발생
Resource
- 하드웨어, 소프트웨어 등을 포함하는 개념
- 프로세스가 자원을 사용하는 절자
DeadLock의 필요 조건(필요 조건)
아래 4 가지 조건이 모두 만족되어야 교착 상태
- Mutual exclusion(상호 배제) : 자원의 특징
- 가지고 있는동안은 독점적으로만 쓸 수 있음
- No preemption (비선점) : 자원의 특징
- 뻬앗기지 않음
- Hold and wait(보유 대기) : 프로세스의 행위
- 보유를 하면서 추가적인 자원을 기다림
- Circular wait(순환 대기) : 프로세스의 행위
- 자원을 기다리는 프로세스간에 사이클이 형성됨 자원의 특징은 바꿀 수 없기에, 프로세스의 행위를 예방하는 방식으로 교착 상태를 해결
Deadlock의 해결 방법
- Deadlock은 빈번히 발생하지 않기 때문에 미연에 방지하기 위해 오버헤드를 감수하는 것이 현대의 시스템에서는 비효율적
1️. 예방
교착 상태를 유발하는 네 가지 조건이 발생하지 않도록 무력화
상호 배제 예방
- 자원의 특성은 바꿀 수 없음
비선점 예방
- 자원을 선점할 수 있도록(빼앗을 수 있도록) 함.
- 마찬가지로 아무때나 뺏으면 문제가 될 수 있음
TIPCPU, Memory는 왜 빼앗을 수 있을까?
- State를 쉽게 save하고 restore할 수 있는 자원에서 주로 사용 (바로 다음 지점에서 재시작 가능)
점유와 대기 예방
자원을 점유한 상태에서 다른 자원을 기다릴 수 없음 (전부 할당 or 아예 할당 x)
- 프로세스 시작 시 필요한 모든 자원을 전부 할당
- 자원이 필요할 경우 보유 자원을 모두 놓고 다시 요청
하지만 자원의 활용성이 떨어지므로 좋은 방식은 X
원형 대기 예방 → 가장 쉬운 방법
- 점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막음
- 모든 자원에 순서를 부여해 정해진 순서대로만 자원 할당
2. 회피 (비효율적)
자원 할당량을 조절하여 교착 상태 해결
-
자원 요청에 대한 부가적인 정보를 이용해 deadlock의 가능성이 없는 경우에만 자원 할당
-
교착 상태가 발생하는 범위 내에 있으면 프로세스 대기
-
시스템 state가 원래 state로 돌아올 수 있는 경우에만 자원 할당
-
Available 범위 내의 Need인 프로세스의 요청을 받아들임
-
P0의 경우 Need(최대 요청)이 Available 내에선 만족할 수 없기 때문에 어떤 요청이 와도 자원을 내어주지 않음
-
P1의 경우Available 내에 Need가 충족이 되기 때문에(충분히 커버) P1은 어떤 요청이 와도 자원을 내어줌
3️. 검출과 회복
어떤 제약을 가하지 않고 자원 할당 그래프를 모니터링 하며 교착상태가 발생하는지 확인하고, 교착 상태가 발생하면 교착 상태 회복 단계 진행
검출
- Resource의 인스턴스가 1개인 경우 : 자원할당 그래프에서의 cycle로 검출
- Resource의 인스턴스가 여러개인 경우 : 테이블을 그려서 은행원 알고리즘으로 검출
회복
- 데드락에 연류된 프로세스들을 죽임
- 데드락에 연류된 프로세스들을 하나씩 죽여서 자원을 뺏음
4️. 무시
Deadlock이 일어나지 않는다고 생각하고 아무런 조취도 취하지 않음
- Deadlock이 매우 드물게 발생하므로 deadlock에 대한 조치가 더 큰 overhead일 수 있음
- 운영체제가 관여하지 않으므로, 사람이 프로세스를 직접 죽임