운영체제(11) - 교착상태
교착상태
프로세스는 실행을 위해 여러 자원을 필요로 한다.
– 어떤 자원은 갖고 있으나 다른 자원은 갖지 못할 때 (e.g., 다른 프
로세스가 사용 중) 대기해야
– 다른 프로세스 역시 다른 자원을 가지려고 대기할 때 교착상태 가
능성!
- 교착상태 필요조건
– Mutual exclusion (상호배타)
– Hold and wait (보유 및 대기)
– No Preemption (비선점)
– Circular wait (환형대기)
자원 할당도 상에 원이 만들어져야 교착상태가 일어난다. (하지만 무조건은 아니다.)
교착상태 처리
- 교착상태 방지
– Deadlock Prevention - 교착상태 회피
– Deadlock Avoidance - 교착상태 검출 및 복구
– Deadlock Detection & Recovery - 교착상태 무시
– Don’t Care
교착상태 방지
필요조건 4가지가 만족해야 일어난다. 따라서 하나라도 만족안되게 한다.
상호배타
자원을 공유 가능하게 만든다. 하지만 현실적으로 어려운 방법이다. CPU, 메모리, 프린터 모두 공유할 수가 없다. 조금 부적절한 방법이다.
보유 및 대기
자원을 가지고 있으면서 다른 자원을 기다리지 않게 만든다. 식사하는 철학자를 예시로 들면 동시에 두 개의 젓가락을 잡도록 한다. 아니면 이미 오른쪽 젓가락을 잡고있고, 왼쪽 젓가락을 잡으려 하는데 이미 해당 다른 철학자가 젓가락을 잡고 있으면 오른쪽을 놓고 왼쪽을 잡는 방법도 있다.
하지만 이 방법은 잘못하면 starvation 상태에 놓일 수 있고, 자원 활용율이 저하될 수 있다는 단점이 있다.
비선점
자원을 선점 가능하게 만든다. 하지만 원천적으로 불가능할 수 있다. 예를 들어, 프린터를 중간에 선점할 수는 없는 노릇이다.
환형대기
자원에 번호를 부여하고 번호 오름차순으로 자원을 요청한다.
교착상태 회피
교착상태 회피에서는 교착상태가 생기는 원인을 자원에 대한 잘못된 승인으로 생각한다. 따라서 자원 요청을 효율적으로 함으로써 교착상태를 회피하는 것이다.
Process | Max needs | Current needs |
P0 | 10 | 5 |
P1 | 4 | 2 |
P2 | 9 | 2 |
위의 표처럼 할당을 하면 3개가 남는다. 뒤의 과정을 살펴보면 P0는 5개가 더 필요하지만 더 이상 줄수가 없다. P1은 2개가 더 필요하고 그를 채워줄 수 있다. 그러면 P1은 작업을 끝마치고 종료할 수 있다.
12 -> 3 -> 1 -> 5
그러면 다시 받은 5개를 P0에 할당하여 P0를 끝낸다
12 -> 3 -> 1 -> 5 -> 0 -> 10
그리고 마지막 P2까지 끝마칠 수 있다. 이를 살펴보면 아까의 자원 할당은 옳다는 것을 검증할 수 있다.
OS는 자원을 할당할 때 분안전 할당 되지 않도록 해야한다. 불안전 할당이 이루어지면 교착상태에 빠지게 된다. 이는 대출전문 은행과 유사하다.
교착상태 검출 및 복구
교착상태가 일어나는 것을 허용하고 이를 주기적으로 검사한다. 그리고 교착상태를 발견하면 복구한다.
하지만 이 방법은 교착상태를 검출하는데 오버헤드가 있고, 이를 다시 복구하려면 프로세스 일부를 강제로 종료하거나, 자원을 선점하여 일부 프로세스에게 할당한다.
교착상태 무시
교착상태는 실제로 잘 일어나지 않기 때문에 교착상태에 대해 아무런 조치를 하지 않고 무시한다. 혼자 쓰는 pc에서는 이러한 방법을 활용해도 상관없다.
Leave a comment