[혼공컴운]5주차_Chap13 | 교착 상태

곽나현·2024년 2월 4일
0

혼공컴운

목록 보기
14/16
post-thumbnail

<학습목표>

  • 교착 상태가 무엇인지 이해한다.
  • 교착상태는 어떤 상황헤서 발생하는지 이해한다.
  • 교탁 상태를 예방하고, 회피하고, 검출하는 방법에 대해 학습한다.

🎇 교착 상태

일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상

🔍 교착 상태를 해결하기 위한 방법

  • 교착 상태가 발생했을 때의 상황을 정확히 표현해 보기
  • 교착 상태가 일어나는 근본적인 이유에 대해 알기

🔗 자원 할당 그래프

어떤 프로세스가 어떤 자원을 사용하고 있고, 또 어떤 프로세스가 어떤 자원을 기다리고 있는지를 표현한 간단한 그래프

◼ 자원 할당 그래프 그리는 규칙

  • 프로세스는 원, 자원의 종류는 사각형으로 표현
  • 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현
  • 프로세스가 어떤 자원을 할당받아 사용 중이라면 자원에서 프로세스를 향해 화살표를 표시
  • 프로세스가 어떤 자원을 기다리고 있으면 프로세스에서 자원으로 화살표 표시

🔍 교착 상태를 표현한 자원 할당 그래프


교착 상태가 발생한 상황은 자원 할당 그래프가 원의 형태를 띄고 있음

  • 단, 자원 할당 그래프가 원형을 띄고 있다고 해서 모두 교착 상태인 것은 아님

🔗 교착 상태 발생 조건

  • 상호 배제
  • 점유와 대기
  • 비선점
  • 원형 대기

⚪ 상호 배제

한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상황에서 교착 상태가 발생할 수 있음

⚪ 점유와 대기

어떠한 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다린다면 교착 상태가 발생할 수 있음

⚪ 비선점

프로세스가 자원을 비선점(강제로 빼앗을 수 없음)하고 있으면 교착상태가 발생할 수 있음

⚪ 원형 대기

자원 할당 그래프가 원형으로 그려지면 교착 상태가 발생할 수 있음

네 가지 조건 중 하나라도 만족하지 않는다면 교착 상태가 발생하지 않지만, 모두 만족한다면 교착 상태가 발생할 가능성이 있음

🎇 교착 상태 해결 방법

  • 예방
  • 회피
  • 검출 후 회복

🔗 교착 상태 예방

교착 상태를 예방하는 방법은 교착 상태 발생 필요 조건 네가지 중 하나를 충족 못 하게 하는 방법

⚪ 상호 배제 없애기

  • 상호 배제를 없애는 것은 모든 자원을 공유 가능하게 만든다는 것 ➡ 현실적으로 무리

⚪ 점유와 대기 없애기

  • 운영체제는 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분함

    • 단점 1 : 자원의 활용률이 낮아질 우려가 있음
      • 당장 자원이 필요해도 기다려야 하고, 사용하지 않으면서 오랫동안 할당되는 자원을 다수 양산하기 때문임
    • 단점 2 : 많은 자원을 사용하는 프로세스가 불리해짐
      • 자원을 많이 사용하는 프로세스는 자원을 적게 사용하는 프로세스에 비해 동시에 자원을 사용할 타이밍을 확보하기가 어려움 많은 자원을 필요로 하는 프로세스가 무한정 기다리게 되는 기아현상 야기

⚪ 비선점 조건 없애기

선점하여 사용할 수 있는 일부 자원에 대해서는 효과적이나, 모든 자원이 선점 가능한 것은 아니기 때문에 다소 범용성이 떨어지는 방안

⚪ 원형 대기 조건 없애기

모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하면 원형 대기는 발생하지 않음

  • 장점 : 앞선 세가지 방식보단 비교적 현실적이고 실용적인 방식
  • 단점 1 : 모든 컴퓨터 시스템 내에 존재하는 수많은 자원에 번호를 붙이는 것이 간단하지 않음
  • 단점 2 : 각 자원에 어떤 번호를 붙이는지에 따라 특정 자원의 활용률이 떨어질 수 있음

⭐ 교착 상태 예방 방식은 교착 상태가 발생하지 않음을 보장할 수는 있지만, 여러 부작용이 따름


🔗 교착 상태 회피

프로세스들에 배분할 수 있는 자원의 양을 고려하여 교착상태가 발생하지 않을 정도의 양만큼만 자원을 배분하는 방법

  • 안전 상태 : 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태

  • 불안전 상태 : 안전 순서열이 없어서 교착 상태가 발생할 수도 있는 상황

  • 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서

➡ 운영체제가 교착 상태를 회피하기 위해서는 시스템 상태가 안전상태에서 안전상태로 움직이는 경우에만 자원을 할당하면 됨

➡ 즉, 교착 회피 방식은 항시 안전 상태를 유지하도록 자원을 할당하는 방식


🔗 교착 상태 검출 후 회복

교착 상태 발생을 인정하고 사후에 조치를 하는 방식

⚪ 선점을 통한 회복

  • 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식
  • 즉, 다른 프로세스로부터 자원을 강제로 빼앗고 한 프로세스에 할당하는 방식

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

  • 가장 단순하면서 확실한 방식

강제 종료 1번 - 교착 상태에 놓인 프로세스를 모두 강제 종료

  • 장점 : 한 방에 교착 상태를 해결할 수 있는 가장 확실한 방식
  • 단점 : 프로세스들이 작업 내역을 잃게 될 가능성이 있음

강제 종료 2번 - 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료

  • 장점 : 작업 내역을 잃는 프로세스는 최대한 줄일 수 있음
  • 단점 : 교착 상태가 없어졌는지 여부를 확인하는 과정에서 오버헤드 야기

0개의 댓글