230117 TIL

apwierk·2023년 1월 17일
0

TIL

목록 보기
33/33

교착 상태

프로세스를 실행하기 위해 자원이 필요한데, 두 개 이상의 프로세스가 각자 가지고 있는 자원을 무작정 기다려 어떤 프로세스도 더 이상 진행할 수 없는 상태

식사하는 철학자 문제

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

교착상태를 해결하기 위해

  • 상황을 정확히 표현해 본다.
  • 교착상태가 일어나는 근본적인 이유를 알아야 된다.

자원 할당 그래프

어떤 프로세스가 어떤 자원을 사용하고 있고, 또 어떤 프로세스가 어떤 자원을 기다리고 있는지를 표현하는 간단한 그래프
1. 프로세스는 원으로, 자원의 종류는 사각형으로 표현한다.
2. 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현한다.
3. 프로세스가 어떤 자원을 할당받아 사용 중이라면 자원에서 프로세스를 향해 화살표를 표시한다.
4. 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시한다.
교착 상태가 일어난 그래프의 특징은 원을 그리고 있다.

교착 상태 발생 조건

상호 배제

해당 자원을 한 번에 하나의 프로세스만 이용 가능했기 때문이다.
프로세스도 마찬가지로 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없을 때 상호 배제 상황에서 교착상태가 발생할 수 있다.

점유와 대기

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

비선점

비선점 자원은 그 자원을 이용하는 프로세스의 작업이 끝나야만 비로소 이용하 수 있다. 즉, 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못했기 대문에 교착 상태가 발생했다고 볼 수 있다.

원형 대기

프로세스들과 프로세스가 요청 및 할당받은 자원이 원의 형태를 이루었기 때문이다. 자원 할당 그래프가 원의 형태로 그려지면 교착상태가 발생한다.

핵심 포인트

  • 교착 상태는 일어나지 않을 사건을 기다리며 무한히 대기하는 현상을 의미한다.
  • 식사하지 않는 철학자 문제는 교착 상태의 발생을 보여 주는 예시이다.
  • 자원 할당 그래프를 이용해 교착 상태를 표현할 수 있다.
  • 교착 상태 발생 조건은 상호 배제, 점유와 대기, 비선점, 원형 대기이다.

교착 상태 해결 방법

예방, 회피, 회복

교착 상태 예방

교착 상태 발생 조건을 만족시키지 않는다.

상호 배제를 없애는 경우

모든 자원을 공유 가능하게 만든다는 것은 현실적으로 무리가 있다.

점유와 대기를 없애는 경우

교착 상태를 해결할 수 있지만, 자원 활용률이 낮아질 우려가 있다.

비선점 조건을 없애는 경우

일부 자원에 대해서는 효과적이다. 가령 CPU는 프로세스들이 선점할 수 있는 대표적 자원이다. 한 프로세스가 CPU를 이용하다가 일정 시간이 지나면 아직 작업이 모두 끝나지 않았다고 할지라도 다른 프로세스가 CPU를 할당받아 사용할 수 있기 때문이다.
하지만 모든 자원이 선점 가능한 것은 아니다. 한 프로세스의 작업이 끝날 때까지 다른 프로세스가 기다려야 하는 자원도 얼마든지 있다. 예를 들어 한 번에 하나의 프로세스만 이용 가능한 프린터 자원이 있을때, 한 프로세스가 이 프린터를 이용하는 도중에 다른 프로세스가 프린터 자원을 빼앗아 사용하기란 여렵다. 그렇기에 비선점조건을 없애 모든 자원을 빼앗을 수 있도록 하여 교착 상태를 예방하는 방법은 다소 범용성이 떨어지는 방안이다.

원형 대기 조건을 없애는 경우

모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하면 원형 대기는 발생하지 않는다.
비교적 현실적이지만 단점이 있다. 모든 컴퓨터 시스템 내에 존재하는 수많은 자원에 번호를 붙이는 일은 간단하지않고, 어떤 번호를 붙이는지에 따라 특정 자원의 활용률이 떨어질 수 있다.

교착 상태 회피

교착 상태가 발생하지 않을 정도로만 조신 조심 자원을 할당하는 방식이다.
프로세스들에 할당할 수 있는 자원이 충분한 상황에서 프로세스들이 한두 개의 적은 자원만을 요구한다면 교착 상태는 발생하지 않는다. 반면 프로세스들에 할당할 수 있는 자원이 한정된 상황에서 모든 프로세스들이 한 번에 많은 자원을 요구하면 교착 상태가 발생할 위험이 증가한다.
교착 상태를 회피하는 방법을 학습하기 위해서는 안전 상태와 불안전 상태, 그리고 안전 순서열이라는 용어를 알아야 한다. 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당 받고 종료될 수 있는 상태를 안전 상태라고 부르고, 교착 상태가 발생할 수도 있는 상황을 불안전 상태라고 부른다.

교착 상태 검출 후 회복

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

선점을 통한 회복

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

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

강제 종료를 통한 회복은 가장 단순하면서 확실한 방식이다.

운영체제는 교착 상태에 놓인 프로세스를 모두 강제 종료할 경우

가장 확실한 방법이지만, 프로세스들이 작업 내역을 잃게 될 가능성이 있다.

교착 상태가 없어질 때까지 한 프로세스씩 강제 종료할 경우

작업 내역을 잃는 프로세스는 줄일 수 있지만 교착 상태가 없어졌는지 여부를 확인하는 과정에서 오버헤드를 야기한다.

핵심 포인트

  • 교착 상태 예방은 교착 상태의 발생 조건 중 하나를 충족하지 못하게 하는 방법이다.
  • 교착 상태 회피는 안전 상태를 유지할 수 있는 경우에만 자원을 할당하는 방법이다.
  • 교착 상태 검출 후 회복은 교착 상태 발생 여부를 주기적으로 검사하고 , 교착 상태가 발생하면 그때그때 회복하는 방식이다.

교착상태란?
교착 상태 발생 조건은?
교착 상태를 해결하는 방법 3가지는 무엇인가?

profile
iOS 꿈나무 개발자

0개의 댓글