오늘은 deadlock을 다루는 방법 중 deadlock prevention에 대해 알아보겠습니다.
deadlock prevention은 deadlock이 발생하지 않도록 미리 예방하는 방법을 말합니다.
deadlock이 발생하기 위해 충족해야 하는 네가지 조건(mutual exclusion, hold and wait, no preemption, circular wait) 이 있는데, 이 중 하나라도 만족하지 않으면 deadlock이 발생하지 않습니다.
deadlock prevention에서는 네가지 조건 중 하나를 만족하지 않도록 하는 방법입니다.
1. No Mutual Exclusion
모든 자원들을 동시에 접근할 수 있도록 허용해준다.
->동시에 접근할 수 없는 자원도 있기 때문에 불가능 (예: 프린터, mutex lock 등)
2. No Hold and Wait
자원을 요청할 때 어떠한 자원도 이용하고 있으면 안된다.
->자원 효용성 감소
->Starvation(자원을 영원히 기다리게 되는 현상)발생 가능
3. Allow Preemption
자원 선점을 허용한다.
->선점이 불가능한 자원도 있기 때문에 불가능 (예: 프린터, mutex lock 등)
4. No Circular Wait
모든 자원에 우선순위를 부여하여 우선순위가 높은 것 부터 이용할 수 있도록 하여 circular wait이 발생하는 것을 방지한다.
Deadlock Prevention은 현실적으로 불가능한 방법도 있고, 현실적으로 가능하더라도 심각한 자원 낭비와 높은 비용을 필요로 하기 때문에 좋은 방법은 아닙니다.
Deadlock Prevention 이후 Deadlock Avoidance, Detection, Recovery 등의 방법도 등장했습니다.
나머지 방법들은 다음 글에서 차례대로 알아보도록 하겠습니다.
[운영체제] Deadlock Handling #3(deadlock detection) (0) | 2021.07.27 |
---|---|
[운영체제] Deadlock Handling #2(deadlock avoidance) (0) | 2021.07.26 |
[운영체제] Bounded Buffer Problem (0) | 2021.07.23 |
[운영체제] 프로세스 스케줄링(process scheduling) (0) | 2021.06.19 |
[운영체제] 부모 프로세스(parent process)와 자식 프로세스(child process) (0) | 2021.06.18 |
댓글 영역