Home 데드락
Post
Cancel

데드락

데드락(교착상태)

: 여러 프로세스가 서로 다른 프로세스의 작업이 끝나기를 기다리다가 아무도 작업을 진행하지 못하는 상태로 즉, 멈춰있는 상태이다.

  • 공유자원 때문에 발생한다.
  • 교착상태의 필요조건
    • 상호배제
      • 한 프로세스에게 공유자원이 할당되었다면 다른 프로세스는 사용하지 않는다.
    • 비선점
      • 프로세스가 리소스를 사용하고 있을때 다른 프로세스가 뺏어서 사용할 수 없다.
    • 점유와 대기
      • 프로세스가 이미 하나의 리소스를 점유하고 있으면서 다른 리소스를 원하는 상태이어야 한다.
    • 원형대기
      • 점유와 대기를 하고 있는 프로세스들이 원형을 이루고 있다. 한가지라도 충족되지 않는다면 교착상태가 발생하지 않는다. 모두 충족이 되어야지 교착상태가 된다? 교착상태가 안되게 하는건 어렵기때문에 교착상태를 어떻게 해결할지에 대해 고민하기 시작한다.

교착상태 해결

  • 교착상태 회피 어느 정도 자원을 할당해야 교착상태가 발생하는지 파악해서 교착상태가 발생하지 않는 수준의 자원을 할당한다. “전체 자원의 수”와 “할당된 자원”의 수에 따라 “안정상태”와 “불안정상태”로 나뉘는데, “불안정상태”라고 해서 무조건 데드락에 걸리는 건 아니지만 안정상태로 유지하는게 좋다.

“시스템의 총 자원”과 “현재 프로세스에 할당된 자원의 수”를 확안해서 “현재 사용가능한 자원의 수”를 확인한다.

  • 시스템의 총 자원 - 프로세스들에 할당된 자원의 수 = 사용가능한 자원

이때 프로세스들은 할당된 자원이 있지만 작업에 따라 최대로 요구할 수 있는 자원이 있는데, 현재 사용가능한 자원의 수를 잘 계산해서 프로세스들에게 할당해야한다. (은행원 알고리즘)

하지만 은행원 알고리즘은 비용이 비싸고 비효율적이다.

  • 교착상태를 알아채는 법
    • 가벼운 교착상태 검출
      • 프로세스가 일정시간동안 작업하지 않으면 교착상태에 빠졌다고 생각
    • 해결방안
      • 일정시점마다 체크포인트를 만들어 작업을 저장하고 교착상태에 빠졌다고 생각되면 체크 포인트로 롤백한다.
    • 무거운 교착상태 검출
      • 운영체제가 프로세스가 어떤 자원을 사용하는지 지켜보다가 데드락에 걸리면 해결한다.
    • 해결방안
      • 프로세스들이 각자 자원을 이용하고 있고, 다른 자원을 요청하고 있는 그래프가 순환구조이면 교착상태로 인지한다.
      • 교착상태인 프로세스를 강제종료 시키고 체크포인트로 롤백한다.
    • 특징
      • 운영체제가 계속해서 자원 할당 그래프를 유지하고 검사해여함 -> 오버헤드
      • 하지만 억울하게 프로세스가 종료되는 일은 없다.(가벼운 검출에서는 생길수도 있음)
This post is licensed under CC BY 4.0 by the author.

프로세스 동기화

중간정리