15.교착상태 필요조건, 교착상태의 해결법

교착상태

발생이유 : 프로세스들이 자원을 많이 필요로 한다. 하지만 누가 사용하고 있으면 기다려야한다.
이러한 형태가 원을 이루면 교착상태가 발생한다.

교창상태 필요조건.

Mutual exclusion (상호배타) : 자원을 서로 공유하지 못함
Hold and wait (보유 및 대기) : 하나를 잡고있으면서 다른것을 원함
No Preemption (비선점) : 다른것을 강제로 뺏어오지 못함.
Circular wait (환형대기) : 자원을 갖고있으면서 기다리는데 원형형태

네가지가 만족되면 일어날 수 있다. 반드시 일어나는것은 아님

교착상태 처리

교착상태 처리는 크게 네가지가 있다.
1.교착상태 방지
Deadlock Prevention

2.교착상태 회피
Deadlock Avoidance

3.교착상태 검출 및 복구
Deadlock Detection & Recovery

4.교착상태 무시
Don’t Care

1.교착상태 방지

설명 : 필요조건 중 네가지 조건중에 하나라도 깨도록 하는것.
상호베타 조건을 깨기: 이를 위해 공유가 가능하게 해야한다. 현실적으로 어렵다. 읽어내기만 하는 파일 같은 경우에는 가능하지만 일반적으로는 부적절

보유 및 대기 깨기: 동시에 젓가락 갖게하기. 왼쪽 젓가락 잡고 오른쪽 젓가락 잡을라 했는데 누가 오른쪽을 갖고있으면 왼쪽도 놓기. 이는 굶어 죽을 확률이 생김. 자원의 활용도가 떨어진다. 상호베타 조건깨는것보다는 쉽다.
자원을 가지고 있으면서 다른 자원을 기다리지 않게 즉 자원이 없는 상태에서 모든 자원 대기; 일부 자원만 가용하면 보유 자원을 모두 놓아주기
단점: 자원 활용률 저하, 기아 (starvation)

비선점 깨기: CPU의 경우에는 일부 가능하겠으나 일반적으로 불가능

환형대기 깨기 : 자원에다 번호 부여하고 자원의 오름차순으로 자원을 요청토록 함. 즉 R1,R2,R3 가 있을때 R1, R2 요청/ R2,R3 요청/ R1,R3요청처럼 구현. 자원의 활용도가 떨어진다.

보통 보유 및 대기 깨기 혹은 환형대기 깨기를 사용한다.

2.교착상태 회피

설명 : 자원을 할당할 때 위험한 할당이 되지 않도록 하는것.
자원을 프로세스 한테 골고루 나눠주는것을 OS가 한다. 이를 리소스 매지저 / 올로케이터라 한다.
교착상태는 자원요청에 대한 잘못된 승인에 기인한다고 본다.

불안전한 할당 (Unsafe allocation)
운영체제는 자원을 할당할 때 불안전 할당 되지 않도록
불안전 할당 → 교착상태 유발
대출전문 은행과 유사: Banker’s Algorithm

3.교착상태 검출 및 복구

설명 : 프로세스가 필요한 대로 자원을 나눠주고 데드락이 발생하면 OS의 프로세스 복구.
교착상태가 일어나는 것을 허용 그리고 주기적 검사진행. 주기적 검사는 이를 하기 위한 오버헤드가 크다.
교착상태 발생 시 복구하기위해 주기적으로 이전의 상태를 기억하고 있어야 한다.
이를 위해 한 프로세스를 강제로 종료시키거나 혹은 자원을 선점하여 일부 프로세스에게 할당.

4. 교착상태 무시

설명 : 교착상태는 실제로 잘 일어나지 않으므로 그냥 무시해버린다.
교착상태 발생 시 재시동.

컴퓨터에서 가장 중요한것은 메모리 관리이다. 이를 프로세스 매니지먼트 부서가 하는데 이는 CPU 스케줄링 부서, 프로세스 싱크로나이즈 부서로 구성된다. 싱크로나이즈에서는 데드락관리또한 중요.

메인메모리 관리가 메모리 매니지 부서가 있다. 다음부터 공부한다.

Share