본 글은 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 (데드락 무시) : 데드락? 몰?루
요즘 운영체제는 데드락을 처리하지 않는 경우가 대부분이다. 특정 상황에서만 발생하는 것을 운영체제가 계속 모니터링하는 것은 비효율적이고 알고리즘이 복잡해지기 때문. 개발자가 해결하는 것이 훨씬 좋다.
'Computer Science > 운영체제' 카테고리의 다른 글
Operating System - Ch10. Virtual memory (0) | 2022.06.16 |
---|---|
Operating System - Ch09. Main memory (0) | 2022.06.16 |
Operating System - Bootstrapping (0) | 2022.06.01 |
Operating System - Ch07. Synchronization example (0) | 2022.06.01 |
Operating System - Ch05. CPU Scheduling (0) | 2022.04.21 |
댓글