티스토리 뷰

운영체제

[OS] Deadlock Prevention

머어하지 2017. 6. 3. 00:36

 앞서 [운영체제] - [OS] Deadlock의 조건 에서 Deadlock을 일으키는 4가지 조건에 대해서 알아보았습니다. Deadlock은 일어나서는 안되는 일이니 막기위해서는 어떠한 조건을 피해야하나를 살펴보겠습니다.


1) Mutual Exclusion

 - 한 번에 1개의 Process만 Shared resource에 접근할 수 있는 조건이였습니다. 하지만 이 조건을 피해버리면 여러개의 Process가 Shared resource에 접근할 수 있게되므로 Race Condition 상태가 발생할 수 있습니다. 따라서 막으면 안되는 조건입니다.


2) Preemption Disable

  - 다른 Process가 소유하고 있는 lock을 선점(획득)할 수 없다는 조건이였습니다. 쉽게 풀어보면 공유 자원이 선점(Preemption)이 가능하면 실행되던 Process는 다른 Process가 실행될 때 자신의 자원을 잃게됩니다. 따라서 중요하게 쓰던 자원일경우 Process가 오류와 함께 비정상적인 종료를 하게될것입니다. 따라서 이 조건을 피해버리면 앞에서 알아보았듯 Mutual Exclusion과 마찬가지로 Race Condition 상태가 발생할 수 있습니다. 따라서 막으면 안되는 조건입니다.( Non - Preemption을 생각하시면됩니다. )


3) Hold and Wait

  - Process가 다른 소유의 lock을 얻으려면 그 lock이 release 될 때까지 기다려야한다는 조건이였습니다.( block 상태가됨 ) 이 조건을 피하는 방법은 All or Nothing이라는 방법이 있습니다. Hold and Wait이 1개 1개의 lock을 기다려야 했다면 All or Nothing은 한 번에 다 기다린다고 생각하시면 됩니다. 그림으로 살펴보면 다음과 같습니다. 



 다음과 같이 Process 1과 Process 2가 있고 서로 중복된 Lock을 가지고 있습니다. All or Nothing은 P1이 실행될 때 Lock 1,2,3에 대한 권한을 모두 요청합니다. 따라서 P2는 실행되고 싶어도 Lock 2와 3 에대한 권한을 얻을 수 없어 Block 상태가 되고 P1의 실행이 모두 끝날 때까지 기다리게 됩니다. 이러한 All or Nothing 방식은 실제 시스템에서 사용하기는 어렵습니다.(또한 Process의 평균시간도 크게 증가할 것입니다.)


4) Circular Wait

  - Circular 형태의 cycle을 가지면 Deadlock이 발생할 수 있다는 조건이였습니다. 이 조건은 cycle을 없애면 즉, Linear 하게 만들어주면 (순서를 정하고 Process 들이 이 순서대로 요청) Deadlock은 발생하지 않을것입니다.


 Deadlock의 4가지 조건에대한 예방법을 알아보았습니다. 어떠한 조건은 무시하는 순간 프로그램에 오류를 발생시키기도 하므로 놔둬야하지만 어떠한 조건은 발생하지 않도록하여 Deadlock을 막을 수 있었지만, 자원의 낭비는 있을것 입니다.

'운영체제' 카테고리의 다른 글

[OS] Deadlock의 조건  (0) 2017.05.12
[OS] DeadLock  (0) 2017.05.11
[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