티스토리 뷰
OS에서 일어날 수 있는 DeadLock에 대해서 알아보겠습니다.
DeadLock 이란?
DeadLock은 다른 Process가 소유한 자원을 요청하는 행위가 서로에게 행해져 모든 Process가 Block이 된 상태를 의미합니다. 예제를 통해 알아보겠습니다. 다음과 같은 2개의 Process가 있습니다.
1 2 3 | Process1 owns lock A requests lock B | cs |
1 2 3 | Process2 owns lock B requests lock A | cs |
Process1은 lock A를 가지고 있습니다. 즉, A라는 Semaphore를 가지고 있습니다. Process2는 lock B를 가지고 있습니다. Semaphore는 한 곳에서 사용중이면 다른 Process를 차단하는 목적으로 사용합니다. 따라서 Process1이 lock B를 요청할 시 lock B는 사용중이므로 Process1은 lock B가 release 될 때까지 Block 상태에서 대기하게 됩니다. Process2도 마찬가지로 lock A를 요청 후 Block에 들어가게 될 것입니다. 이를 그림으로 살펴보면 다음과같이 정리할 수 있습니다.
서로가 사용하고 있는 Semaphore를 요청하여 Block에 걸리게됩니다. 이렇게 여러 Process간 요청에의해서 Deadlock이 걸릴 수 있지만, 스스로도 Deadlock에 빠질 수 있습니다. 다음을 살펴보겠습니다.
Process1이 한 semaphore를 가지고 있습니다. 이제 이 semaphore는 Process가 접근할 수 없게됩니다. 이 때 Process1이 똑같은 semaphore를 요청하였습니다. 하지만 이 semaphore는 접근할 수 없는 semaphore이므로 Process1은 Deadlock에 빠지게 됩니다. 이러한 Self Deadlock은 Recursive Lock이라 부르기도 합니다.
'운영체제' 카테고리의 다른 글
[OS] Deadlock Prevention (0) | 2017.06.03 |
---|---|
[OS] Deadlock의 조건 (0) | 2017.05.12 |
[MicroC/OS-II] CPU Scheduling with Preemptive (0) | 2017.04.23 |
[MicroC/OS-II] CPU Scheduling with Non-Preemptive (0) | 2017.04.23 |
[MicroC/OS-II] OS_TCBInit (0) | 2017.04.23 |
- Total
- Today
- Yesterday