OperatingSystems:ASpiralApproach(Hardcover)ASpiralApproach
카테고리
지은이 Elmasri, Ramez/ Carrick, A. G./ Levine, David (McGraw-HillCollege, 2009년)
상세보기

위의 Figure는 위의 도서에서 발췌함을 밝힘.

Deadlock은 교착 상태라고 이야기를 하기도 하고, 이런 저런 예제를 보여주면서 이러한 경우에 어떻게 해결을 할 것인가에 대한 내용도 제법 된다. 요점을 요약하면 위의 Figure로 모든 것이 표현이 되기 때문에 특별히 다른 예제에 대한 언급을 하지는 않는다.

Deadlock에 대한 모든 이야기를 할 수 없지만 그래도 웬만한 내용은 언급하고 넘어갈 것이다.

결론은 세마포어 혹은 Mutex와 같이 lock이 걸려있는 상황에서 다른 lock이 걸려있는 자원을 필요로 할 때, 이러한 문제점이 발생하는 것이다. R1과 R2로 표현이 되어있는데, 프로세스 A와 B가 각기다른 자원을 lock을 걸고 잡은 상태에서 서로의 자원을 얻기 위해서는 어떻게 할 것인가? 둘 중 하나가 양보를 하면 되는 상황이지만, 프로그램에게 양보를 가르치는 일은... 방법을 알려달라... -_-;


위의 Figure는 보다 잘 설명하고 있다.저 Point X에서 바로 교착상태에 빠지는 것이다. 이 Deadlock의 어원은 교통에서 나온 언어로 서로 다른 교차로에서 생겨난 문제점으로 꽉 막혀버린 상황을 의미한다.

Deadlock에 대한 설명은 충분히 했으리라 생각된다. (부족하면 검색을 더 하면 Deadlock에 대한 자료는 훨씬 많이 나온다.)


Deadlock 발생의 조건
* Mutex
* Hold and Wait
* Circular Wait

Mutex에 대한 설명은 이전 글에서 했고, Hold and Wait는 위의 Figure 9.3과 같이 Resource 1을 붙잡은 상태로 Resource 2를 기다리는 상황을 이야기한다. 그리고 Circular Wait은 서로 돌아가면서 자신이 원하는 자원을 얻기 위해서 기다리는 상황을 이야기한다.

위의 발생 조건은 3가지를 모두 만족해야 하는 것으로, 이 중 하나를 방지하면 Deadlock이 발생하는 것을 막을 수 있다.
* Mutex
공유 자원을 사용하지 않도록 한다.
* Hold and Wait
해당 프로세스가 필요로 하는 자원을 한번에 잡는다. (굉장히 비효율적임.)
* Circular Wait
자원 요청을 순서에 맞추어 하도록 한다.

Deadlock의 해결 방법
* Avoidance
* Detection
* Ignorance

* Avoidance
안전한 상태와 그렇지 않은 상태로 나누어, 어떠한 프로세스가 Resource를 요청하면, Unsafe state로 넘어가지 않도록 한다. 따라서 들어오는 요청에 대해서 모든 가정을 시험한다. (운영체제가 지속적으로 safe state를 유지하도록 도와주는 것인데, 잘 생각을 해보자 과연 이를 실현하였을 때, 소비자의 갑갑함이란... -_-)
* Detection
Deadlock이 발생하였는지 감지한다. 계속해서 발생하였는지 감지하는데, 문제는 역시 Deadlock이라는 것이 자주 발생하는 것이 아니기 때문에, 이를 지속적으로 감시한다는 것은 비용면에서 혹은 CPU를 Detector가 점유하는 시간을 보아도 비효율적이라는 것은 뻔하다.
* Ignorance
무시한다. 어차피 자주 발생하는 문제가 아니기 때문에, 무시를 하고 발생한다면, 사용자가 수동으로 1개씩 죽여본다.
저작자 표시 비영리 변경 금지
신고

'Theory > CA & OS' 카테고리의 다른 글

OS, Memory Relocation  (0) 2011.09.12
OS, Priority Inversion  (0) 2011.09.12
OS, Deadlock  (0) 2011.09.12
OS, Semaphore and Mutex  (2) 2011.09.12
OS, Synchronization  (0) 2011.09.12
OS, Thread (스레드, 쓰레드)  (0) 2011.09.12
by 가우초 2011.09.12 18:11
| 1 |

티스토리 툴바