교착상태

교착 상태란?

프로세스 A는 자원 B를 점유한 채 프로세스 C가 점유하고 있는 자원 D의 사용이 끝나길 기다리고, 프로세스 C는 자원 D를 점유한 채 프로세스 A의 자원 B 사용이 끝나기를 기다리고 있다. 이렇게 각 프로세스는 실행이 되지 못하고 상대가 가진 자원을 기다리기만 하는 상황을 교착 상태라고 한다.

자원 할당 그래프

자원 할당 그래프(resource-allocation graph)는 어떤 프로세스가 어떤 자원을 사용하고 있고, 또 어떤 프로세스가 어떤 자원을 기다리고 있는지를 표현하는 간단한 그래프다. 자원 할당 그래프를 통해 교착 상태를 단순하게 표현할 수 있다.

규칙
1. 프로세스는 원으로, 자원의 종류는 사각형으로 표현

2. 사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현

CPU가 두 개 있는 경우 자원의 종류는 하나더라도 사용 가능한 CPU 개수는 두 개이므로 자원 사각형 안에 두 개의 점으로 표현 한다.


3. 프로세스가 어떤 자원을 할당받아 사용 중이라면 프로세스를 향해 화살표를 표시


4. 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자우너으로 화살표 표시

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

교착 상태 발생 조건

4가지 조건 중 하나라도 만족하지 않는다면 교착 상태가 발생하지 않지만, 모든 조건이 만족한다면 교착 상태가 발생할 가능성이 생긴다.

  • 상호 배제(mutual exclusion): 교착 상태가 발생하는 근복적인 원인은 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없을 때 교착 상태가 발생할 수 있다.

  • 점유와 대기(hold and wait): 어떠한 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다린다면 교착 상태가 발생할 수 있다.

  • 비선점(nonpreemptive): 다른 프로세스의 자원을 강제로 빼앗지 못했기 때문에 교착 상태가 발생할 수 있다.

  • 원형 대기(circular wait): 프로세스들과 프로세스가 요청 및 할당받은 자원이 원의 형태를 이루었기 때문이다.

교착 상태 해결 방법

운영체제는 교착 상태가 일어나지 않도록 교착 상태 발생 조건에 부합하지 않게 자원을 분배하여 교착 상태를 예방할 수 있고, 교착 상태가 발생하지 않을 정도로 조금씩 자원을 할당하다가 교착 상태의 위험이 있다면 자원을 할당하지 않는 방식으로 회피할 수도 있다. 그리고 자원을 제약 없이 할당하다가 교착 상태가 검출되면 교착 상태를 회복하는 방법을 취할 수도 있다.

(p.376~, to be continued)

0개의 댓글