본문 바로가기
Computer Science/운영체제

Operating System - Ch08. Deadlock

by NCTP 2022. 6. 1.

본 글은 Operating System Concepts 10판을 기준으로 작성되었습니다...!

 

 

 

생각하는 철학자 알고리즘에서 서로가 서로를 기다리는 데드락 문제가 발생하는데, 

데드락에 대해서 알아보자.

데드락이란 자신이 어떤 자원을 사용하고자 할 때 그 자원이 다른 누군가가 사용중이라면,

그 자원을 쓸 수 있을 때까지 대기하는데 그 대기가 영원히 지속되는 것을 말한다.

결국에는 모든 프로세스가 하나의 프로세스의 이벤트를 기다리는 총체적 난국의 상황이 된다. 

 

 


 

데드락이 발생할 네 가지 충분 조건은 다음과 같다. 넷 모두 만족하면 데드락이 발생함.

1. Mutual exclusion (상호배제): 동시에 오직 하나의 프로세스만 자원을 사용할 수 있다. 멀티 프로세스 환경에서 필연적으로 발생하는 경우. (mutex)

2. Hold and wait (점유대기): 공유 자원에 접근중인 상태에서 다른 공유 자원을 기다리는 경우에 데드락이 발생할 수 있음.

3. No preemption (비선점): 프로세스나 스레드가 작업을 완료하면 스스로 공유 자원을 반납해야함.

4. Circular wait (순환대기): 서로가 서로를 계속 기다리고 있는 상황을 의미함.

 

 Mutual exclusion은 멀티프로세스환경에서 무조건 발생한다. 따라서 나머지 셋중 하나만 막으면 데드락이 발생하지 않으므로 주의하자.

 

데드락을 해결하는 네가지 방법

1. Deadlock prevention (데드락 예방) : 개발자가 알고리즘을 짤 때 데드락이 발생되지 않도록 짜는 것.

2. Deadlock avoidance (데드락 회피) : 운영체제가 데드락이 발생할 지 테스트하고, 발생하지 않을 때 실행되거나 공유 자원을 제공하는 알고리즘. 오버헤드가 굉장히 크고 알고리즘이 복잡하여 사용되지 않음.

3. Deadlock detection and recovery : 데드락을 미리 처리하는 앞의 두 방법과 다르게 사후처리를 해주는 것. 데드락이 발생하면 운영체제가 데드락이 발생되기 이전 상태로 되돌리는 알고리즘. 이 알고리즘도 복잡하여 사용되지 않음. 

4. Deadlock ignorance (데드락 무시) : 데드락? 몰?루

 

요즘 운영체제는 데드락을 처리하지 않는 경우가 대부분이다. 특정 상황에서만 발생하는 것을 운영체제가 계속 모니터링하는 것은 비효율적이고 알고리즘이 복잡해지기 때문. 개발자가 해결하는 것이 훨씬 좋다.

댓글