데드락 (DeadLock) 이란
<aside>
💡 멀티 프로그래밍 환경에서 두 개 이상의 프로세스가 하나의 자원을 점유하기 위해 다른 프로세스의 작업이 끝날 때까지 무한정 기다리는 상태
</aside>
발생 조건
<aside>
💡 데드락이 발생하는 조건은 4가지가 있으며, 이 중 하나라도 만족하지 않으면 데드락이 발생하지 않는다.
즉, 데드락을 회피하기 위해서는 데드락의 4가지 조건 중 하나라도 해결하면 된다.
</aside>
- 상호배제 (Mutual Exclusion) : 한 번에 오직 1개의 프로세스만 자원에 접근할 수 있다.
- 점유하고 대기 (hold and Wait) : 최소 한개의 자원을 가진 프로세스가 다른 프로세스가 가지는 자원을 얻기 위해 기다리는 상태이다.
- 비선점 (No Premption) : 해당 작업이 완료되기 전까지 자원이 반환되지 않는다.
- 순환대기 (Circular Wait) : A는 B를, B는 C를, C는 A의 작업이 완료되기를 기다리는 형태다.
예방 방법 (Prevention)
- 상호배제 → 여러 개의 프로세스가 공유 자원을 사용할 수 있게 한다.
- 점유대기 → 프로세스가 실행하기 전 필요한 모든 자원을 할당한다.
- 비선점 → 자원을 점유하고 있는 프로세스는 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 한다.
- 순환대기 → 자원에 고유한 번호를 할당하고, 번호 순서대로 자원을 요구하도록 한다.
회피 방법 (Avoidance)