[CS][OS] 교착 상태

1. 정의

  • 2개 이상의 프로세스가 다른 프로세스 작업 끝나기만 기다리면서 진행 못하고 있는 상태

    • 시스템 자원, 공유 변수, 응용 프로그램 등을 사용하다가 발생
  • 아사starvation와 교착dead lock의 차이

    • starvation: 운영체제 잘못으로 프로세스가 계속 지연

      • 에이징(특정 횟수 이상 양보했다면 더 이상 양보하지 않도록 조정)으로 문제 해결
    • dead lock: 여러 프로세스가 작업 진행하면서 별도의 오류 없이도 자연적으로 발생

      • 에이징으로 해결 안 됨 → 예방, 회피, 검출 등의 방법으로 해결

2. 언제 발생하는가

  • 아래의 4가지 조건이 모두 충족시 교착 상태 발생

    • 상호배제: 한 프로세스 처리 중에는 다른 프로세스에서 접근 불가한 배타적인 자원 사용시

      • 배타적인 자원은 임계구역으로 처리 → 배타적 자원 사용시 교착상태 발생
      • 상호배제를 없애서 교착상태를 해결 시도시: 임계구역 보호 안되면 결과 달라질 수 있는 자원들 존재
    • 비선점: 한 프로세스가 사용하는 자원을 다른 프로세스에서 빼앗을 수 없을 때

      • 비선점을 없애서 교착상태를 해결 시도시: 어떤 기준으로 얼마나 시간을 쓸지 결정이 어렵고, 아사 현상이 발생할 우려도 있음
    • 점유, 대기: 다른 프로세스가 필요로 하는 자원을 점유하고 있으면서도 다른 자원을 대기하고 있을 때

      • 점유, 대기를 없애서 교착상태를 해결 시도시(이미 점유했다면 다른 자원 못 기다리게): 프로세스 실행 중에 추가로 필요한 자원 생길 때의 처리 어려움, 앞으로 사용할 자원까지 미리 선점해버려서 자원의 활용성 저하 & 전체 효율 저하, 많은 자원 필요로하는 프로세스이면 아사 현상 발생 가능
    • 원형 대기: 점유와 대기하는 프로세스들의 관계를 나타낸 자원할당그래프가 원형일 때

      • 원형 대기를 없애서 교착상태를 해결 시도시: 실질적 사용에 있어 불편 초래하는 자원 활용 발생

3. 어떻게 해결하는가

해결 방법

  • 예방: 4가지 조건 중 하나라도 막는다./ 실효성 ⬇️
  • 회피: 자원 할당하다가 교착 상태될 가능성 보이면 할당 멈추고 지켜봐서 조절

    • 단점: 프로세스가 어떤 자원 쓸지 미리 다 선언 어렵고, 시스템 전체 자원 수도 계속 고정적이지 않을 수 있고다. → 실효성 ⬇️
  • 검출, 회복: 자원할당 그래프 모니터링 → 교착상태 발생 → 회복 단계 진행

    • 검출: 일정 시간동안 작업 진행안된 프로세스를 교착상태로 간주

      • 가벼운 교착 상태 검출: 타임아웃 이용 /예:’프로그램이 응답이 없어 종료합니다’ alert

        • DB에서는 타임아웃으로 데이터 일관성 깨질 때를 대비해서 체크포인트와 스냅샷으로 시간과 데이터를 저장하고, 타임아웃 발생시 롤백으로 시스템을 체크포인트 이전 시점으로 되돌림

          • 체크 포인트: 문제 발생시 돌아올 지점. 잠금을 요청한 시점
          • 스냅샷: 현재의 시스템 상태를 하드디스크에 저장한 것
          • 롤백: 작업 하다가 타임아웃 발생 → 과거의 체크포인트로 돌아가서 스냅샷 복원
      • 무거운 교착상태 검출: 자원할당그래프 이용

        • 자원할당그래프를 유지, 갱신, 사이클 검사하는 추가작업으로 오버헤드 발생
    • 회복: 교착상태 유발한 프로세스 강제 종료 & 강제종료된 프로세스 실행되기 전에 시스템 복구(명령어가 실행될 때마다 체크포인트 만들어서 가장 최근의 검사시점으로 돌아가도록 함)

출처

  • 조성호, 쉽게 배우는 운영체제(한빛아카데미, 2022)

Written by
Sunmin
어제보다 나은 오늘을 만들기 위해 배우고, 기록하고, 회고합니다. Maker. Reader. Realistic optimist.