7 - 교착 상태

우하하·2024년 11월 21일

운영체제

목록 보기
7/7

1. 교착 상태(데드락)란?

💡 2개 이상의 작업이 동시에 이루어지는 경우, 다른 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태

  • 아사(기아) 현상과 다른점!
    • 아사 현상은 잘못된 정책으로 특정 프로세스의 작업이 지연되는 문제
    • 교착 상태는 여러 프로세스가 작업을 진행하다 보니 발생하는 자연적인 현상.
      따라서 강압적으로 해결해야 함(like 교통정리)
  • 식사하는 철학자🍴
    식사하는 철학자
    이미지 출처: 위키백과

✔️ 둥근 식탁에 앉은 철학자들은 왼쪽에 있는 포크를 잡은 뒤 오른쪽 포크를 잡아야만 식사가 가능함
✔️ 철학자들은 음식을 먹기 위해 왼쪽 포크를 잡은 뒤 오른쪽 포크를 봄
✔️ 하지만 이미 왼쪽 포크를 들고 있는 다른 철학자가 있음
✔️ 결과적으로 오른쪽 포크를 아무도 잡지 못해 모두 굶어 죽음💀

2. 교착 상태 필요조건

💡 아래 네 가지 조건을 동시에 만족해야만 교착 상태가 발생함

1. 상호 배제

  • 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태

2. 점유와 대기

  • 프로세스가 어떤 자원을 할당 받은 상태에서 다른 자원을 할당 받기를 기다리는 상태

3. 비선점

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

4. 원형 대기

  • 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 함

3. 교착 상태 해결 방법

1. 예방

  • 교착 상태를 유발하는 네 가지 조건이 발생하지 않도록 무력화 하는 방식(부작용 있음)

✔️ 상호 배제 예방

  • 시스템 내의 자원을 모두 공유하게 만든다?
    • 임계 구역이 보호 받지 못하면 작업 결과가 달라짐!
    • 결론: 사실상 어렵다

✔️ 비선점 예방

  • 모든 자원을 빼앗을 수 있도록 만드는 방법
    • 아사 현상 발생 가능
    • 모든 자원이 선점 가능한 것은 아님 ex) 프린터기

✔️ 점유와 대기 예방

  • 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법
    == 전부 할당하거나 아예 할당하지 않는 방식
    • 프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어려움(추가로 필요한 자원이 생기면 확보하기 어려움)
    • 자원의 활용성이 떨어짐

✔️ 원형 대기 예방

  • 점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막는 방법
  • 자원에 번호를 붙이고 오름차순으로 할당함
    • 자원에 번호를 어떻게 부여할지 문제가 됨(어떤 번호를 붙이는지에 따라 활용률이 달라지기 때문에)

2. 회피

  • 프로세스에 자원을 할당할 때 어느 수준 이상의 자원을 나누어주면 교착 상태가 발생하는지 파악하여 그 수준 이하로 나누어주는 방법
  • 교착 상태가 발생하지 않는 범위 내에서만 자원을 할당함
  • 교착 상태가 발생하는 범위에 있으면 프로세스를 대기 시킴

2.1 은행원 알고리즘

  • 은행에서 대출 금액이 가능한 범위 내(안정 상태)이면 대출을 허용하고 그렇지 않으면 거부되는 것과 비슷해서 이러한 명칭이 붙음
  • 안정 상태: 모든 프로세스가 요청한 자원을 순서대로 할당받아 실행될 수 있는 상태
안정 상태
 - 만약 P2가 자원을 요청하면 2만큼을 추가로 할당받고 실행을 종료한 뒤 6을 반환함
 - 이런식으로 전체 작업을 완료할 수 있기 때문에 안정 상태임
  • 불안정 상태
불안정 상태 - 사용 가능한 자원이 1인 상태인데 이는 현재 남은 자원으로는 어떤 프로세스도 끝낼 수 없다는 의미

2.2 교착 상태 회피의 문제점

1️⃣ 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 함(정확하지 않을 수 있음)
2️⃣ 시스템의 전체 자원 수가 고정적이어야 함(시스템의 자원수는 유동적임. 고장이나 새로운 자원 추가 등등)
3️⃣ 자원이 낭비됨

  • 프로세스에 따라 최대 자원을 사용하지 않고 종료되는 경우도 있음
  • 교착 상태 회피에서는 실제로 교착 상태가 발생하지 않는데도 발생할 것이라고 예상하고 자원을 할당하기 때문에 교착 상태가 발생하지 않을 경우 자원 낭비가 됨

3. 교착 상태 검출과 회복

  • 교착 상태의 발생을 인정하고 사후에 조치하는 방식
  • 프로세스가 자원을 요구하면 일단 할당, 교착 상태가 검출되면 회복

선점을 통한 회복

  • 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식

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

  • 교착 상태에 놓인 프로세스 모두 강제 종료
    • 작업 내역을 잃을 위험이 있음
  • 교착 상태가 해결될 때까지 한 프로세스씩 강제 종료
    • 교착 상태가 회복이 됐는지 안 됐는지 계속 확인하느라 오버헤드 발생

참조
📚 쉽게 배우는 운영체제
🧑🏻‍🏫 개발자를 위한 컴퓨터공학1: 혼자 공부하는 컴퓨터구조 + 운영체제

profile
Hello World!

0개의 댓글