운영체제의 Deadlock 개념과 관련한 식사하는 철학자 문제 해결 과정을 (1)Multi-threading, (2)Multi-processing으로 시뮬레이션한 프로젝트입니다.
Deadlock 발생 필요조건
- Mutual Exclusion -> shm 을 ME 못하게하는 것은 불가능
- Hold&Wait -> 알고리즘으로 해결
- No preemption -> 쉽게 구현하기 힘들다.
- Circular Wait -> 문제 자체가 Circular wait가 일어날 수 밖에 없는 상황이라 바꿀 수 없는 경우도 존재한다.
4가지 조건을 모두 만족해야 deadlock 에 빠짐
어느 하나라도 만족시키지 않도록 하면 deadlock에 빠지지 않는다.
식사하는 철학자 해결 방법
- 철학자들이 식사하는 동안 데드락과 기아가 발생하면 안 됨
- 본 프로젝트에서는 데드락 발생 필요조건 중 1가지를 만족하지 않도록 하여 데드락이 발생하지 않도록 하고, monitor 쓰레드가 철학자가
time_die 시간동안 식사를 하지 못했는지를 주기적으로 확인하여 해당 상황이 발생하면 기아라고 판단하여 시뮬레이션을 종료한다.
방법 1
왼쪽 포크 들고, 오른쪽 포크 들고, 식사하고, 왼쪽 포크 내려놓고, 오른쪽 포크 내려놓는다.