본문 바로가기
OS

교착 상태 Deadlock 정의, 필요조건, 유의사항

by tovantablack 2020. 8. 24.
728x90
728x90

정상적인 상황일 때, 프로세스는 요청 request -> 사용 use -> 방출 release 의 순서로 자원을 이용한다.

 

이러한 정상적인 상황을 방해하는 것이 바로 교착 상태!

교착 상태가 되려면 4가지의 필요조건을 모두 충족해야 하고, 이 4가지 조건의 상태가 깨지는 순간이 있으면 안 된다.

  1. 상호 배제 Mutual Exclusion
    한 번에 한 프로세스만 자원을 사용하는 상태
  2. 점유와 대기 Hold and wait
    프로세스는 최소 하나의 자원을 점유하는데, 이때 동시에 다른 프로세스에 의해 점유된 자원을 추가로 얻으려고 대기로 들어가는 상태이다. (이미 점유한 자원은 내가 당장 쓸 수 있음과 상관없이 점유한다.. selfish의 전형적인 예,,)
  3. 비선점 Non-preemption
    자원들을 선점하지 못한 상태
  4. 순환 대기 Circular wait
    ㅍ1은 ㅍ2가 점유한 점유한 자원을 기다리고, ㅍ2는 ㅍ3가 점유한 자원을 기다리고 ㅍ3은 ㅍ1이 점유한 자원을 기다리는 ㅍ1,2,3이 존재하여 사이클을 만들어버리는 상태

위의 상태가 깨지는 순간이 있으면 안 된다는 말이 이해가 어려울 수 있어 부가설명을 해보자면,

순환 대기를 형성한 ㅍ1,2,3 중 ㅍ1은 여러 자원을 소유하고 있고, 각 자원의 반납 시간이 다르다. 그리고 ㅍ2는 ㅍ1의 자원 중 어느 것이나 받으면 상관없는 상황이라면, ㅍ2는 ㅍ1이 들고 있던 자원 중 하나의 선점을 반납하는 순간 ㅍ2의 욕구가 해소되면서 순환이 깨지기 때문에 교착상태가 아닌 순간이 존재하게 된다. 이처럼 순환이 어어어ㅓㅇ어ㅓㅁ청 길게 진행되어도 순환이 깨지는 순간이 있다면 그건 교착 상태가 아니라는 것이다.

=> 그래프에 순환이 없을 경우: 교착 상태 아님
     그래프에 순환이 있을 경우: 교착 상태일 수도, 아닐 수도 있음. 상황마다 다름

728x90
728x90

댓글