• 두 개 이상의 프로세스들이 서로 가진 자원을 기다리며 중단된 상태
  • 각 프로세스는 서로가 원하는 자원을 유지한채 다른 프로세스가 이미 가진 자원 얻기위해 기다림

원인

발생하기 위한 4가지 필요 조건

  • 상호 배제
    • 주어진 시간 내에 하나의 프로세스만 자원 독점 가능
  • 점유 대기
    • 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하며 대기하는 상태
  • 비선점
    • 다른 프로세스의 자원을 강제적으로 가져올 수 없음
  • 환형 대기
    • 갑은 을의 자원 요구하고, 을은 갑의 자원 요구하는 등 서로가 서로의 자원 요구하는 상황

해결 방법

  • 자원 할당 시 애초에 조건이 성립 되지 않도록 한다
  • 교착 상태 가능성이 없을 때만 자원 할당되며, 프로세스당 요청할 자원들의 최대치 통해 자원 할당 가능 여부 파악하는 은행원 알고리즘 사용
  • 교착 상태 발생하면 사이클 있는지 찾아보고 이에 관련된 프로세스 한 개 씩 지움
  • 교착 상태는 매우 드물게 일어나기 때문에 이를 처리하는 비용이 더 커서 발생시 그냥 작업을 종료한다. 현대 운영체제는 이거 채택
  • 그로킹 동시성
    • 해결책 1: 중재인 모델
      • 웨이터 처럼 젓가락 담당. 철학자는 젓가락 집기전에 웨이어테에 이 젓가락 집어도 되는지 허락 구함
      • 락을 하나 더 추가하는 것과 마찬가지
      • 공유 자원에대한 워크 스레드 접근을 순차적으로 이루어지도록 제어하지만, 동시성은 감소
    • 해결책 2: 자원의 우선순위
      • 항상 같은 젓가락 부터 먼저 집게 함
      • 첫 락을 두고 경쟁 발생하여 데드락 안발생
      • 우선순위 높은 젓가락 잡으려 경쟁
      • 단,
        • 작업에서 어떤 락이 필요한지 미리 알수없다면 우선순위 부여방법 사용할 수 없을수도있음
        • 자원 할당 그래프(RAG, resource allocation graph)같은 데드락 방지 조치는 락 우선순위와 함께 적용 할 수 있음
        • 이거써도 데드락 원천방지 아니니 설계외 테스트 주의깊게!
      • 3 대기 상태에 제한 시간 두는 방법