-
7-1~2. Deadlocks 1,2OS/운영체제 강의정리 2021. 12. 31. 00:35
7-1 Deadlocks 1
교착상태(deadlock), The Deadlock Problem, Deadlock 발생의 4가지 조건, Resource-Allocation Graph(자원할당그래프), Deadlock Prevention, Deadlock의 처리 방법, Deadlock Avoidance, Resource Allocation Graph algorithm, Banker's Algorithm, Example of Banker's Algorithm
7-2 Deadlocks 2
Deadlock의 처리 방법, Deadlock Avoidance, Example of Banker's Algorithm, p1 request(1, 0, 2), Deadlock Detection and Recovery, Deadlock Ignorance
Deadlock
- deadlock
- 일련의 프로세스들이 서로가 가진 자원을 기다리며 block된 상태
- Resource
- 하드웨어, 소프트웨어 등을 포함하는 개념
- 예) I/O device, CPU cycle, memory space, semaphore 등
- 프로세스가 자원을 사용하는 절차
- Request, Allocate, Use, Release
Deadlock 발생 조건 4가지
- Mutual exclusion (상호배제)
- 매 순간 하나의 프로세스만이 자원을 사용할 수 있음 (독점적으로 사용)
- No preemption (비선점형)
- 프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않음
- Hold and wait (보유대기)
- 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있음
- Circular wait (순환대기)
- 자원을 기다리는 프로세스간 사이클이 형성되어야함
- 프로세스 P0, P1, ~~~, Pn이 있을 때,
- P0는 P1이 가진 자원을 기다림
- P1은 P2가 가진 자원을 기다림
- Pn-1은 Pn이 가진 자원을 기다림
- Pn은 P0이 가진 자원을 기다림

왼쪽은 데드락상태이고,
오른쪽은 데드락은 아님 : 자원이 2개가 있는데 하나는 3번한테 가있고, 3번은 2번한테 요청했는데 하나는 1번한테 가있고, 4번한테 가있음 만약 자원이 한개뿐이였으면 데드락이 만들어 졌을 것, 여분의 자원이 더 있고 그 여분의 자원은 2번프로세스와 4번 프로세스가 가지고 있는데 이건 데드락에 연류된 프로세스는 아닌것, 4번프로세스가 자원을 가지고 있지만!, 쓰고나서 반납을 하면 자원이 available 해지고 그때 자원을 3번 프로세스한테 줄 수 있으니!
Deadlock 처리 방법
Deadlock Prevention
- 자원 할당 시 Deadlock의 4가지 필요 조건 중 어느 하나가 만족되지 않도록 하는 것
- 가장 강력한 방법
- Mutual exclusion (상호배제)
- 공유해서는 안되는 자원의 경우 반드시 성립해야 함
- No preemption (비선점형)
- 프로세스가 어떤 자원을 기다려야 하는 경우 이미 보유한 자원이 선점됨
- 모든 필요한 자원을 얻을 수 있을 때 그 프로세스는 다시 시작된다.
- state를 쉽게 save하고, restore할 수 있는 자원에서 주로 사용 (CPU, memory)
- Hold and wait (보유대기)
- 프로세스가 자원을 요청할 때 다른 어떠한 자원도 가지고 있지 않아야함
- 방법1. 프로세스 시작 시 모든 필요한 자원을 할당받게 하는 방법
- 방법2. 자원이 필요할 경우 보유 자원을 모두 놓고 다시 요청
- Circular wait (순환대기)
- 모든 자원 유형에 할당 순서를 정하여 정해진 순서대로만 자원 할당
- 예를들어 순서가 3인 자원 Ri를 보유 중인 프로세스가 순서가 1인 자원 Rj를 할당받기 위해서는 우선 Ri를 release해야한다.
- Mutual exclusion (상호배제)
Deadlock Avoidance
- 프로세스가 시작될 때 이 프로세스가 평생에 쓸 자원의 최대량을 미리 알고있다고 가정
- 자원 요청에 대한 부가적인 정보를 이용해서 deadlock의 가능성이 없는 경우에만 자원을 할당
- 시스템 state가 원래 state로 돌아올 수 있는 경우에만 자원 할당
- 자원 요청에 대한 부가적인 정보를 이용해서 자원할당이 deadlock으로 부터 안전(safe)한지를 동적으로 조사해서 안전한 경우에만 할당
- 가장 단순하고 일반적인 모델은 프로세스들이 필요로하는 각 자원별 최대 사용량을 미리 선언하도록 하는 방법임
- safe state
- 시스템 내의 프로세스들에 대한 safe sequence가 존재하는 상태
- safe sequence
- 프로세스의 sequence<P1,P2,- - -, Pn>이 safe 하려면 Pi(1≤i≤n)의 자원 요청이 “가용자원 + 모든 Pj(J<i)의 보유자원”에 의해 충족되어야 함
- 조건을 만족하면 다음 방법으로 모든 프로세스의 수행을 보장
- Pi의 자원 요청이 즉시 충족될 수 없으면 모든 Pj(J<i)가 종료될 때 까지 기다린다.
- Pi-1이 종료되면 Pi의 자원요청을 만족시켜 수행한다.

자원에 대한 인스턴스가 하나밖에 없는 상황

- 데드락의 위험성이 있다면, 애초부터 자원을 주지 않는 방식으로 avoidance함!
자원에 대한 인스턴스가 여러개 있는 상황


banker’s 알고리즘은 보수적이여서, 항상 최대 자원을 요청할 것이라 가정을하고 최대요청이 현재 가용자원을 가지고 충족이 되는가를 봄 충족이 되면, (예를들어, P1이 A 1개 C 2개를 요청했다치면, A가 3개 C가 2개 남아있기에 줄수있고, Need 부분을 봐서 P1이 추가 요청할 수 있는 양을 충족할 수 있는지를 확인해야함 추가로 요청해봐야 1 2 2 이니까 가용자원만으로도 Max 처리되니까 데드락으로부터 안전)그친구의 요청은 어떤 요청이든 받아들이고, need가 available로 처리가 안될경우(예를들어 P0이 B를 2개 요청했다치자, available은 B 여유있음. 하지만 2개 줘봤자 Need충족이 안되지 ) 그 요청은 받아들이지 않는 것임
데드락이 발생되지는 않겠으나, 너무나 비효율적인 방법. 혹시나 생길 데드락에 자원이 남아돌아도 주지않음!!
Deadlock Detecion and recovery
Deadlock 발생은 허용하되 그에 대한 detection 루틴을 두어 deadlock 발견 시 recover



P2는 현재 요청된게 000인데 여기서 다 반납할거라고 낙관적으로 가정을 할것임. 즉 그럼 available이 3 0 3이 생기겠지 이런식으로 아무것도 요청하지 않은 자원이 반납할 것을 가정해서 쌓고 쌓아서!! 요청된것들을 다 허용을 하고 요청된것들도 반납한다는 생각으로 이 시퀀스가 존재를 하면 데드락이없다!
데드락이 있는 지 판단 :
가용자원이 몇개 있는지를 보고, 가용자원으로 처리가능한게 있는지를 보고 요청하지 않은 프로세스들은 가용자원으로 합쳐놓고 (P0, P2), 이걸 가지고 처리가능한게 있는지 보고 할당 가능하면 할당해놓고, 끝까지 갈 수 있는지를 체크해보면됨.
데드락 발견되면 ? → recovery하면됨
- Process termination
- abort all deadlocked process 데드락에 연류된 것들을 죽이는것!
- aobrt one process at a time until the deadlock cycle is eliminated 데드락에 연류된 프로세스를 하나씩 죽여보는것 그랬음에도 또 데드락이면 또다른 하나를 죽여보고
- Resource Preemption
- 비용을 최소화 할 victim의 선정
- safe state로 rollback하여 process를 restart
- Starvation문제
- 동일한 프로세스가 계속 victim으로 선정되는 경우
- cost factor에 rollback 횟수도 같이 고려!
Deadlock Ignorance
- Deadlock을 시스템이 책임지지 않음
- 데드락이 매우 드물게 발생하므로 데드락에 대한 조치 자체가 더 큰 오버헤드일 수 있음
- 만약 시스템에 데드락이 발생한 경우 시스템이 비정상적으로 작동하는 것을 사람이 느낀 후 직접 프로세스를 죽이는 등의 방법으로 대처
- UNIX를 포함한 대부분의 OS가 채택
위의 2개는 데드락 생기지 않게 미연에 방지 밑에 두개는 데드락이 생기도록 놔두고, 세번째 방법은 시스템이 느려졌거나 그럴 때 혹시 데드락이 있는게 아닌가 그런상황에서 detection을 한 다음에 recover, 네번째는 아무것도 하지 않는 것
데드락은 빈번히 발생하는 이벤트가 아니기 때문에 미연에 방지하기 위해서 훨씬 더 많은 오버헤드를 들이는 것이 현대적 시스템에서는 비효율적이기 때문에, 데드락이 생기든말든 놔두는 방법 사용함.
'OS > 운영체제 강의정리' 카테고리의 다른 글
6-3~4. Process Synchronization 3,4 (0) 2021.12.30 6-2. Process Synchronization 2 (0) 2021.12.30 6-1. Process Synchronization 1 (0) 2021.12.30 5-2. Process Synchronization 1 (0) 2021.12.30 5-2. CPU Scheduling 2 (0) 2021.12.30 - deadlock