데드락
- 무한정 wait,,,
- 앞 질문에서 나왔던 비선점 스케줄링처럼 우선순위에서 밀려나 무한히 대기 상태에 빠지는 경우를 생각해보면 된다
- 시스템적으로 한정된 자원을 여러곳에서 사용하려고 할 때 발생
- 2개 이상의 프로세스가 서로 상대방에 의해 충족될 수 있는 이벤트를 무한정 기다리기
발생조건
상호배제
- 한번에 프로세스 하나만 해당 자원 사용
- 다른 프로세스가 사용하려면 현재 사용중인 프로세스가 사용을 끝낼때까지 기다려야한다
점유대기
- 자원을 최소한 하나 보유
- 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야함
비선점
순환대기
- 대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야한다
- 점유와 대기를 하는 프로세스들이 서로 방해하는 방향이 싸이클이 발생하여야함
- 프로세스들이 서로 양보하지 못해서 교착상태에 빠져버림,,
데드락 해결법
- 예방
- 4가지 중 하나라도 막는다면 교착상태 가능 → 근데 실효성이 적어서 잘 사용안돼
- 상호배제 부정 → 여러 프로세스가 공유 자원 사용
- 점유대기 부정 → 프로세스 실행 전에 모든 자원을 할당
- 비선점 부정 → 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원 반납
- 순환대기 부정 → 자원에 고유번호 할당 후 순서대로 자원 요구
- 회피
- 은행원 알고리즘..?
- 모든 고객의 요구가 충족되도록 현금을 할당하는것에서 유래,,
- 대기중인 프로세스들의 교착 상태 가능성을 미리 조사하는 것
- 회피의 목적 → 자원을 할당한 이후에도 시스템이 항상 safe state에 있을 수 있도록 할당을 허용하자
- safe state
- 데드락을 발생시키지 않으면서 차례로 모두에게 할당
- safe state에서 찾을 수 있는 것 → safe sequence
- 특정한 순서로 프로세스들에게 자원 할당하고 실행, 종료작업할 수 있다면 안전 순서라고 부름
- 불안정상태
- 말그대로 안정상태가 아닌 상황
- 데드락 발생 가능성이 있는 상황 → 교착상태는 불안정 상태일때 발생할 수 있다