Operating System

데드락(deadlock)이란

worldint 2024. 10. 15. 19:31

데드락이란

  •  프로세스가 다른 자원을 기다리면서 영원히 실행이 멈추는 상태
  • ‘교착 상태’라고도 하며 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생합니다.

process 1은 resource 2를 필요로하고
Process 2는 resource 1을 필요로해서 대기중이지만

 

process 2가 끝나야 Process 1이 가능하고 Process1이 끝나야 Process2가 가능한 상태

그래서 계속 물고 물려서 어느것도 끝나지 않고 멈춰있는 상태

 

데드락의 발생 조건

 

  • 상호 배제(Mutual Exclusion): 자원은 한 번에 하나의 프로세스만 사용할 수 있어야 함
  • 점유 및 대기(Hold and Wait): 자원을 점유한 상태에서 다른 자원을 요청하면서 기다려야 합니다.
  • 비선점(Non-preemption): 한 프로세스가 점유한 자원을 다른 프로세스가 강제로 가져갈 수 없어야 합니다.
  • 순환 대기(Circular Wait): 프로세스 간에 자원을 기다리는 순환적인 의존 관계가 형성되어야 합니다.

위의 4가지 조건이 모두 만족했을 때 데드락이 발생

즉, 하나만 해결해줘도 데드락을 피할 수 있다

 

교착상태 예방(Prevention)

  • 상호 배제(Mutual Exclusion) 제거: 자원을 여러 프로세스가 동시에 사용할 수 있게 설계함으로써 데드락을 방지한다
    예를 들어, 읽기 전용 자원은 여러 프로세스가 동시에 접근할 수 있으므로 데드락이 발생하지 않는다
  • 점유 및 대기(Hold and Wait) 방지: 프로세스가 자원을 요청하기 전에 필요한 모든 자원을 한꺼번에 할당받게 하여, 자원을 점유하면서 다른 자원을 기다리지 않도록 하는 방식
    이 방식은 자원의 비효율적 사용을 초래할 수 있음

  • 비선점(Non-preemption) 방지: 프로세스가 자원을 점유한 상태에서 다른 자원이 필요할 경우, 기존에 점유한 자원을 강제로 반납하게 하여 데드락을 방지하는 방식

  • 순환 대기(Circular Wait) 방지: 자원에 순서를 부여하고, 프로세스가 자원을 요청할 때 반드시 그 순서대로 요청하게 함으로써 순환적인 대기 상황이 발생하지 않도록 합니다.

교착 상태 회피(Avoidance)

교착 상태 회피는 운영체제가 자원을 할당할 때, 데드락이 발생할 위험이 있는지 미리 판단하고,
위험이 있는 경우 자원 할당을 피하는 방식
예방과 달리, 회피는 자원을 동적으로 관리하면서 데드락 위험을 미리 계산하고 회피함

  • 은행가 알고리즘(Banker's Algorithm): 가장 유명한 교착 상태 회피 알고리즘
    • 자원을 할당하기전에 미리 계산해서 시뮬레이션 한번 돌려보고 자원을 할당 했을때 문제가 생길꺼 같으면 할당을 안함
  • 단점 : 시스템 상태를 지속적으로 추적하고 계산해야 하므로, 오버헤드가 발생할 수 있습니다.

 

*오버헤드 : 어떤 작업을 수행하기 위해 직접적으로 필요한 것 외에 추가적으로 들어가는 모든것