13-1 교착 상태란

식사하는 철학자 문제

식사하는 철학자 문제

  • dining philosophers problems
  • 원탁에서 모두가 자신의 오른쪽 포크를 들고 왼쪽 포크를 기다리는 상태
  • 교착상태(deadlock)

자원 할당 그래프

  • 자원 할당 그래프(resource-allocation graph)

    자원 할당 그래프

    출처: https://www.geeksforgeeks.org/operating-systems/resource-allocation-graph-rag-in-operating-system/

    • 프로세스는 원, 자원의 종류는 사각형
    • 자원 사각형 내의 점은 사용할 수 있는 자원의 갯수
    • 프로세스가 자원을 할당받아 사용 중이라면 자원 내 점 → 프로세스 화살표 표시
    • 프로세스가 자원을 기다리고 있다면 프로세스 → 자원 화살표 표시
  • 교착 상태가 발생한 상황은 보통 자원 할당 그래프가 원의 형태를 띄고 있음.

교착 상태 발생 조건

4가지 조건이 모두 만족해야 발생

상호 배제

mutual exclusion

한 자원을 한 번에 하나의 프로세스만 이용 가능한 경우

점유와 대기

hold and wait

자원을 보유한 채 다른 자원을 기다리는 경우

비선점

nompreemptive

어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못하는 경우

원형 대기

circular wait

자원 할당 그래프가 원으로 그려지듯이 프로세스들이 원의 형태로 자원을 대기하는 것

원형 대기라고 해서 반드시 교착 상태가 발생하는 것은 아님

13-2 교착 상태 해결 방법

교착 상태 예방

교착 상태 발생 조건 네 가지 중 한 가지를 방지

상호 자원 배제 방지

모든 자원을 공유 가능하게 함 ⇒ 현실적으로 불가능

점유와 대기 방지

  • 하나를 점유한 채 다른 것을 대기하지 않도록
    • 한 프로세스가 모든 자원을 점유하거나
    • 한 프로세스가 모든 자원을 대기하거나
  • 자원 활용률이 낮아짐
    • 사용하지 않는 자원도 점유하고 있는 경우가 생김(A만 쓰는데 A,B를 모두 점유하므로)
  • 자원을 많이 사용하는 프로세스에게 기아 현상을 야기할 우려

비선점 조건 방지

  • 비선점 조건을 없애면 자원을 이용 중인 프로세스로부터 자원을 빼앗을 수 있음
  • 어떤 자원은 한 프로세스의 작업이 끝날때 까지 기다려야 하므로 범용성이 떨어지는 방법(ex. 프린터)

원형 대기 조건 방지

  • 모든 자원에 번호를 붙이고 오름차순으로 자원을 할당
  • 모든 자원에 번호를 붙이는 비효율성과 번호로 인해 특정 자원의 활용률이 떨어질 수 있음

교착 상태 회피

  • 교착 상태는 프로세스의 수에 비해 자원이 부족하여 발생하므로 교착 상태가 발생하지 않을 만큼만 자원 할당
  • 안전 상태(safe state): 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태
  • 불안전 상태(unsafe state): 교착 상태가 발생할 수도 있는 상황
  • 안전 순서열(safe sequence): 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
    • 안전 상태는 안전 순서열대로 프로세스들에 자원을 배분한 것
    • 불안전 상태는 안전 순서열이 없는 상황
  • 운영체제는 안전 순서열이 존재하는 안전 상태인 수준에서 자원을 배분함

예시

프로세스가 3개, 자원이 12개 있을 때

프로세스요구량현재 보유 자원
P1105
P242
P392
  • 현재 남은 자원은 3개인 상태
  • P2에게 2개를 분배하면 남은 자원은 1개가 됨
  • P2의 작업이 종료되면 P2는 보유한 모든 자원을 반환하므로 다시 5개가 됨
  • 이후 남은 자원 5개를 P1에게 분배하여 P1의 작업을 완료함
  • P1이 반환하면 남은 자원은 10개가 되므로 P3에게 분배
  • P2 → P1 → P3 라는 안전 순서열이 존재하므로 안전 상태임

만약 P3에게 1개를 더 분배한다면?

프로세스요구량현재 보유 자원
P1105
P242
P393
  • 위와 달리 P3는 3개를 보유하므로 남은 자원은 2개
  • P2에게 남은 2개를 분배하여 작업을 완료
  • P2는 자원을 반환하여 남은 자원은 4개가 됨
  • 이 4개는 P1과 P3 그 누구의 작업도 끝낼 수 없음(P1은 5개, P3는 6개가 필요함)
  • 교착상태가 발생
  • 5개, 2개, 3개를 분배한 상태는 불안전 상태

교착 상태 검출 후 회복

선점을 통한 회복

교착 상태가 해결될 때까지 다른 프로세스로부터 자원을 강제로 빼앗고 한 프로세스에 할당

프로세스 강제 종료를 통한 회복

  • 교착 상태에 놓인 프로세스를 모두 강제 종료
  • 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료