본문 바로가기

별걸다하는 IT/운영체제 OS

[운영체제]교착상태 처리방법(Handling deadlocks) 예방법, 해결방안

[운영체제(OS) 목차 &책 추천]

교착상태 처리 방법 (Handling deadlocks)


저번 데드락 개념과 발생 조건에 이어서 이번에는 처리 방법에 대해서 알아볼게요!


1. Prevention 

말 그대로 데드락이 발생될 가능성을 아예 예방하자는 것이죠.

어떻게 예방?! 데드락이 발생될 가능성이 없게 알고리즘을 만드는거예요

아예 deadlock이 발생되지 않도록 설계를 하는 것이 deadlock prevention! 이것은 오로지 프로그램을 개발하는 개발자의 역할입니다.


2. Deadlock Avoidance

Require additional information about how resources are to be requested.

Decide to approve or disapprove requests on the fly


이게 무슨말이냐!

deadlock이 빠질 가능 성이 있는지 없는지 운영체제가 검사를 하고 빠질 가능성이 없을 경우에만 줘서 문제 발생을 피하는 방법입니다. 다시 한번 우려먹는 철학자 문제..

철학자 문제에서 첫 철학자가 왼쪽 젓가락(자원)을 요청을 했어! 그럼 deadlock에 빠질 가능성이 없으니까 운영체제가 젓가락을 쥐어줍니다. 그런데 둘러 앉은 철학자 중 마지막 철학자가 밥을 먹으려고 왼쪽 젓가락을 요청했어! 그럼 데드락에 빠질 가능성이 크기 때문에 운영체제는 젓가락을 안줍니다. 즉 철학자가 요구할 때마다 젓가락(shared data)의 개수를 감소시키면서 판단을 하고 할당을 안해주는 것. 안빠질 경우를 판단하고 그 때에만 줬더니 이게 배보다 배꼽이 큰겁니다. 그래서 나온 것이 3번째 방법이에요.


3. Detection and recovery

교착 상태 프로세스들을 모두 중지하는 방법 또는 교착 상태가 해결될 때까지 한 프로세스씩 중지.

희생자 선택의 원칙: 최소 비용으로 중지시키는 방법을 찾아야 함.


이 방법은 운영체제가 달라는데로 자원을 다 주고 주기적으로 데드락에 빠졌나 안빠졌나 검사를 합니다. deadlock에 빠졌다는 것을 발견(detect)하면 deadlock에 빠지기 전 상태로 회복(recover)하는 것을 detection and recovery라고 합니다.

철학자 문제에서 젓가락을 달라는 데로 다 줬어! 그리고 마지막으로 달라고 한 애까지 다 줬을 때도 데드락에 빠진 것을 모르지! 근데 좀 있다 보니까 얘네 deadlock에 빠져있네 이러면 빠지기 전 상황으로 복구하는 것!


근데 복구를 어떻게 하면 되는걸까요?

다섯 명 중에 가위바위보를 해서 진 사람이 젓가락을 내려놓으면 되겠지만 프로그램에서는 그렇게 할 수가 없죠! 사람이 아니니까...가위바위보부터 불가능...그러니까 다섯 개의 프로세스 또는 스레드 중에 한놈을 죽여서 강제로 자원을 내려놓게 합니다.


일단 회복 전에 deadlock problem이 발생했는지 검사하려고 하는 그 검사 알고리즘 자체도 엄청나게 복잡합니다.

운영체제가 검사만 하다가 아무것도 못하면 안되잖아요 즉 deadlock recovery도 큰 오버헤드를 가진다

.

4. Do Nothing

따라서 지금 현재 운영체제가 취하는 방법은 "니가 알아서 해라~! 나는 deadlock신경 안쓸란다" 입니다

여기서 니가 == 개발자

just ignore problem altogether

따라서 처음부터 프로그램을 만들 때 데드락에 빠질 가능성을 개발자인 우리가 원천적으로 봉쇄해야합니다.

그러니까 데드락의 개념은 매우 중요! 다음 포스팅에서는 개발자가 처리해야하는 prevention방법에 대해 더 자세하게 살펴보겠습니다. 요약으로 마무리~


요약

 구분

 세부 내용 

 교착상태 예방(Prevention)

 교착상태의 필요조건을 부정함으로써 교착상태가 발생하지 않도록 미리 예방하는 방법

 (ex 환형대기, 비선점, 점유와 대기, 상호배제 4가지 부정) 

 교착상태 회피(Avoidance) 

 교착상태 가능성을 배제하지 않고 적절하게 피해나가는 방법 (ex 은행원 알고리즘) 

 교착상태 탐지(Detection) 

 교착상태 발생을 허용하고 발생 시 원인을 규명하여 해결하는 방법 (ex 자원할당 그래프)

 교착상태 복구(Recovery) 

 교착상태 발견 후 환형대기를 배제시키거나 자원을 중단하는 메모리 할당 기법

 (ex, 선점, 프로세스 중지(희생자 선택)) 


도움이 됐다면 광고로 보답해주는 건 센스!ㅎㅎㅎ 동기부여 자극이 팍팍 됩니다.