본문 바로가기
CS 지식/운영체제

[운영체제] 데드락(DeadLock)

by CSEGR 2024. 8. 22.
728x90

✔️ 데드락(DeadLock) 정의

데드락(DeadLock) 이란?

두 개 이상의 프로세스나 스레드가 서로서로 가진 공유 자원을 얻고자 기다리는 경우, 무한히 서로가 서로의 자원을 기다리게 되는 상태를 의미한다. 한정된 자원을 여러 프로세스가 사용하려고 할 때 발생한다. 

 

  • Thread 1은 공유 자원 L1을 갖고 있고, 공유 자원 L2 를 기다림. 
  • Thread 2은 공유 자원 L2을 갖고 있고, 공유 자원 L1 를 기다림. 

    이런 경우, 현재 서로 원하는 자원이 상대방에 할당되어 있어서 두 프로세스는 무한정 대기(wait) 상태에 빠짐 = DeadLock 상태

✔️ 데드락(DeadLock) 발생 조건

4가지 조건이 모두 성립해야 발생 ! ( 하나라도 성립하지 않으면 데드락 문제 해결 가능 )

  1. 상호 배제(Mutual Exclusion)
    • 자원은 한 번에 한 프로세스만 사용할 수 있음. 
  2. 점유 대기(Hold and Wait)
    • 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 공유 자원을 추가로 점유하기 위해 기다림.
  3. 비선점(No Preemption)
    • 다른 프로세스에 할당된 공유 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음.
  4. 순환 대기(Circular Wait)
    • 서로가 상대방이 쥔 공유자원을 기다림. 즉, 프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야함. 

 

✔️ 데드락(DeadLock) 처리

교착상태(= 대기 상태인 프로세스들이 실행 상태로 변경될 수 없는 상태)를 예방 & 회피

  1. 예방 (prevention)
    : deadlock 이 발생하지 않도록,  deadlock이 발생하는 4가지 조건이 동시에 발생하지 않도록 한다.
    • 상호배제 (Mutual Exclusion)  : 여러 프로세스가 공유 자원 사용 -> 변경 x
    • 점유대기(Hold and Wait) 부정 : 자원이 필요할 경우 보유 자원을 모두 내려 놓고 재요청
    • 비선점 (No Preemption) 부정 : 프로세스가 어떤 자원이 필요한 경우 상대가 보유한 자원을 빼앗아 선점
    • 순환대기 (Circular Wait) 부정 : 자원에 고유번호 할당 후 순서대로 자원을 요청
  2. 회피 (avoidance) 
    : 교착 상태가 되도록 허용한 다음 회복, 즉 교착 상태 발생 시 피함. 
    • 프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지 사전에 검사하여 교착 상태 회피
    • 안정 상태면 자원 할당, 아니면 다른 프로세스들이 자원 해지까지 대기


 

#참고

https://gyoogle.dev/blog/computer-science/operating-system/DeadLock.html

728x90