공유 자원에 여러 프로세스가 동시에 접근을 시도할 때, 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태
1) 커널 작업 중 인터럽트가 발생하여 같은 데이터 조작할 때
2) 프로세스가 시스템 콜을 하여 커널 모드로 작업을 수행 중 문맥 교환이 발생할 때
3) 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 경우
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 아무것도 완료되지 못하는 상태
아래 4가지 조건을 모두 충족시켜야 발생
상호배재 : 하나의 프로세스가 자원을 사용중일 때 다른 프로세스는 그를 사용할 수 없다.
점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
비선점 : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.
순환대기 : 프로세스의 집합에서 순환형태로 자원을 대기하고 있어야 한다.
예방 : 교착 상태 발생 조건 중 하나를 제거하면서 해결 👉 자원 낭비가 가장 심하다.
회피 : 교착 상태 발생 시 피해나가는 방법 👉 은행원 알고리즘
은행원 알고리즘
자원을 할당하면 문제가 발생하지 않는지 확인 후, 할당하는 방법
단점
할당할 수 있는 자원의 수와 사용자 수가 일정해야 함
항상 불안전 상태를 방지해야 하므로 자원 이용도가 낮음
최대 자원 요구량을 미리 알아야 함
프로세스들은 유한한 시간 안에 자원을 반납해야 함
👉 매우 복잡하고, 최대 자원 요구량을 미리 알기 힘들기 때문에 오버헤드가 크다. 현재 채택하고 있는 방식은 아니다.
탐지 : 자원 할당 그래프 혹은 알고리즘을 통해 교착 상태를 탐지
회복 : 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법
특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태
에이징(Aging)을 통해 시간이 지나면 우선 순위를 낮춘다.