[운영체제] 6강 - 교착상태(1)

2026. 3. 20. 18:44·방송통신대학교/⚙️운영체제

✅ 1. 교착상태의 개요

(1) 프로세스의 자원 사용 절차

  • 프로세스의 자원 사용 절차: 요구, 사용, 해제 순으로 자원을 사용함.
  • 쉽게 말해, 프로세스1이 자원을 요구하고, 자원을 획득하게 되어 사용중에 프로세스 2가 자원을 요구하게 되면 프로세스 2의 자원 요구는 대기상태로 들어가게 된다.
  • 이후, 프로세스 1의 자원 사용이 모두 완료되어 해제가 되면, 프로세스 2의 요구가 대기 상태에서 사용으로 바뀌며, 사용됨.

(2) 교착상태(deadlock) 란?

  • 교착상태: 서로 가지고 있는 자원을 요구하며, 줄 때 까지 서로 무한으로 대기를 하는 상태를 의미함.
  • 프로세스1: 자원 1을 가지고 사용중에 자원 2요구
  • 프로세스2: 자원 2를 가지고 사용중에 자원 1요구
  • 이 상황에서 자원 1이나 2가 해제가 되어야 대기 상태가 끝나고 자원을 받아서 프로세스1이나 2가 처리가 가능해짐.
  • ** 즉, 서로 가지고 있는 자원을 요구하며 줄 때 까지 서로 무한으로 대기를 하는 상태를 교착상태라고 부름. **

(3) 교착상태와 기아상태 차이

  • 교착상태: 어느 누구도 더 이상 직진을 못하고, 멈춰 있는 상태 즉, 더 이상의 해결이 불가능한 상태를 의미할 수 있음.
  • 기아상태: 좌우로 끊임없이 가는 차들이 있다고 가정하면, 위 또는 아래에서 들어오는 차는 진입이 막혀 기아상태가 될 수 있지만, 시간이 지남에 따라 좌우로 들어온 차들이 안들어올 수 있기 때문에 해결이 가능한 상태임.

✅ 2. 교착상태의 특성

(1) 교착상태 - 필요조건

  • 교착상태 필요조건: 위의 상호배제, 점유대기, 비선점, 환형대기 4가지 조건이 존재할 때 교착상태가 발생 할 수 있다는 의미임.
  • ** 즉, 4개 다 만족해야만 교착상태가 발생 가능한 상태이지 그렇다고 무조건 교착상태가 발생하지는 않음. **

(2) 상호배제(mutual exclusion) 조건

  • 상호배제 조건: 프로세스 1이 자원 1을 사용 중에 프로세스 2가 자원 1을 요청한 경우 자원1이 임계영역에서 실행중이라 동시에 사용이 불가능한 자원 조건을 가지며, 프로세스 2가 자원 1을 받을 때 까지 대기하면 상호배제 조건에 성립한다고 함.

(3) 점유대기(hold and wait) 조건

  • 점유대기 조건: 프로세스가 자원을 할당받아 점유하고 있는 상태에서 다른 프로세스가 점유하고 있는 자원을 요구하며, 대기하는 상황이면, 점유대기 조건이 성립한다고 봄.
  • 쉽게말해, 프로세스가 자원을 점유한 상태에서 다른 프로세스가 사용 중인 자원을 요구하며 대기중인것임.
  • ** 핵심은 자원을 들고 있고 또 다른 자원을 달라고 하는 상태가 핵심임. **

(4) 비선점(no preemption) 조건

  • 비선점 조건: 자원을 가진 프로세스가 스스로 반납하기 전까지 절대 못 뺏으며, 다른 프로세스는 기다릴 수밖에 없을 때 비선점 조건이 성립한다고 보며, 교착상태의 필요조건 중 하나임.
  • 반대로 선점이라면 여러 프로세스가 서로가 사용중인 자원을 뺏어올 수 있음.
  • ** 즉, 할당된 자원은 본인을 제외한 타의에 의해서는 해제되지 않고 계속 점유를 하고 있는 상태의 조건을 말하는 것임. **

(5) 환형대기(circular wait) 조건

  • 환형대기 조건: 프로세스간 점유하는 자원을 서로가 가지고 있는 자원을 요구하는 경우에 환형을 이루며 대기하게 되는 상황이 환형대기 조건에 성립이 되었다고 봄.

(6) 자원할당 그래프

  • 교착상태가 되기 위한 필수조건 4가지를 자원할당 그래프를 통해서 시각적으로 명확하게 볼 수 있음.
  • 자원할당 그래프: 프로세스와 자원 사이의 관계를 그래프로 표현해서 교착상태를 분석해주는 도구로 볼 수 있음.
  • 쉽게말해, 누가 어떤 자원을 가지고 있고, 누구를 기다리는지 시각적으로 표현한 그래프임.
  • P 는 n개의 프로세스, R은 m개의 자원을 의미한다.
  • Q 는 프로세스(P)가 자원(R)을 요구한다는 의미이며, 요구간선으로 표시가 됨.
  • S 는 자원(R)이 프로세스(P)에 할당이 되어있다는 의미이며, 할당간선으로 표시가 됨.
  • ** 또한, 자원은 디스크, 프린터 등 다양한 자원이 존재하기 때문에 r1, r2, r3 등으로 표현하며, 디스크의 자원이 10개가 될 수도 아니면 프린터의 자원이 5개가 될 수도 있는 여러개가 존재 할 수 있기 때문에 단위 자원의 개수(K)를 표기함. **

  • 정점의 집합: P에는 프로세스 집합으로 3개가 존재하며, R에는 자원 집합으로 3개가 존재함.
  • 방향 있는 간선의 집합: 요구간선 집합 Q는 빨간색 간선으로 표시하며, 할당간선 집합 S는 파란색 간선으로 표시함.
  • r3자원의 개수는 2개라는 의미에서 위에 2를 표시함.

  • 프로세스와 자원의 관계는 계속적으로 변화하기 때문에 자원할당 그래프 또한, 계속해서 변화되어야 함.
  • 즉, 위의 해당 그래프는 계속해서 변하며, 현재 상태의 그래프가 될 수 있음.
  • ** 쉽게말해, 요구간선 (p2, r3)가 추가된 경우 빨간색 화살표로 p2 는 r3에게 자원을 요구하게 된다. 이때, r3는 p3에게 자원을 빌려주고 있지만, r3의 자원의 개수는 2개이므로, p2에게 자원을 빌려줄 수 있기 때문에 화살표는 요구간선(빨간색)에서 할당간선(파란색)으로 r3 -> p2 로 자원에서 프로세스로 할당간선으로 바뀌게 되는 것이다.  **
  • 이와 같이 자원할당 그래프로 프로세스와 자원간의 할당 및 자원 요구에 대한 그래프로써 표현이 가능함.

(7) 자원할당 그래프 - 교착상태의 필요조건 표현

  • 자원할당 그래프에서는 교착상태의 필요조건 4가지가 모두 표현이 가능함.
  • 상호배제: 하나의 자원은 하나의 프로세스에게만 빌려줄 수 있는 조건으로, 하나의 할당간선으로 표현이 가능함. 예를들면, r1 이 p1 에게 할당간선(파란색)을 할당해주면 다른 프로세스에게 더 이상 자원을 빌려 줄 수 없으므로, 조건 충족이 됨.
  • 점유대기: 프로세스가 자원을 점유한 채로 또 다른 자원을 요구하는 것이므로, 그래프상에서 할당간선과 요구간선의 연결로 점유대기를 표현이 가능함.
  • 비선점: 다른 프로세스가 자원을 사용중이라면 뺏어올 수 없다는 조건이며, 요구간선(빨간색)으로 표현이 가능하며, 해당 요구간선은 요구는 하고 있지만 대기하고 있다는 의미를 가지므로, 비선점을 표현 할 수 있음.
  • 환형대기: 서로 가진 자원을 요구하며, 해제하지 않는 모습이 환형으로 대기하는 모습을 의미함. 그래프이기 때문에 사이클로 표현이 가능함.

  • 단, 필요조건 4가지를 충족한다고해서 교착상태가 반드시 발생하는 것은 아니며, 발생 가능성이 생긴다는 의미임.
  • 사이클이 없는 경우: 교착상태 없음
  • 사이클이 있는 경우: 점유대기 조건에 의해 교착상태 발생 가능성이 있음.
  • 또한, 위의 예시 같은 경우에는 교착상태가 맞는 상황임.

  • 위의 예시는 사이클이 존재한다고해서 모두 교착상태가 아닌 상태를 나타내는 예시임.
  • ** 이유는, p1과 p2가 각각 r1과 r2의 자원을 사용하면서 사이클이 되어, 교착상태로 볼 것 같지만 다른점은 r1 의 자원의 개수는 2개이며, p4가 해당 자원 r1의 자원을 할당받고 있으므로, p4가 자원을 다 사용하고 해제한다면 p2 는 r1의 자원을 할당받아 사용하기 때문에 교착상태가 아니게 된다. **

(8) 교착상태 - 처리기법

  • 교착상태 처리기법: 교착상태가 발생하게 된다면 생기지 않도록 도와주는 기법을 의미함.
  • 교착상태 예방: 교착상태의 네 가지 조건이 만족이 되어야지만 교착상태의 가능성이 생기기 때문에 만족되는 것을 피하여 교착상태가 발생하지 않도록 하는 방법을 의미함.
  • 교착상태 회피: 프로세스들이 필요한 자원의 양을 사전에 미리 체크를 해두고 이러한 정보를 통해서 교착상태에 발생할 위험을 미리 할당을 하지 않는 회피 방법임.
  • 교착상태 탐지 및 복구: 이미 교착상태로 들어간 프로세스들이 존재 할 때 이것을 탐지하고 복구하는 방식을 의미함. 앞선 예방과 회피는 교착상태가 생기지 않도록 미리 처리하는 방식이지만, 이 방식은 교착상태가 발생했다면 어떻게 처리를 할건지 다루는 방식임.

✅ 3. 교착상태 예방

  • 교착상태 예방: 교착상태의 네 가지 조건을 만족하지 못하도록 피하여 교착상태가 발생하지 않도록 하는 방법임.

(1) 상호배제 조건 제거

  • 상호배제 조건 제거: 상호배제를 제거하기 위해서는 임계영역을 둘 만큼 데이터의 일관성 보장이 중요한 작업을 제외한 읽기 전용 파일 등과 같이 read 작업만 한다면 상호배제 조건이 제거되기 때문에 교착상태를 미연에 해결 할 수 있음.
  • 공유할 수 있는 자원: 임계영역이 없는 읽기 작업만 하는등의 일관성을 보장하기 때문에 상호배제 필요없음.
  • 공유할 수 없는 자원: 프린터같은 경우에는 한 프로세스가 프린터를 할 때 다른 프로세스는 못하는 임계영역이 생기므로, 상호배제가 반드시 필요함.
  • ** 공유할 수 없는 자원이 반드시 존재하기 때문에 상호배제 조건은 무조건적으로 제거가 될 수 없기 때문에 상호배제 조건 제거로는 교착상태 예방은 불가능이라고 보면 된다. **

(2) 점유대기 조건 제거

  • 점유대기 조건: 프로세스가 자원을 할당 받아 사용 중에 다른 프로세스가 사용 중이던 자원을 요청하며, 기다리는 상황임.
  • 점유대기 조건 제거: 점유대기 조건에 대해서 제거를 하려면, 자원을 점유했을 때 대기를 하지 않아야 하거나 대기를 할 때 자원을 점유하고 있지 않아야 점유대기 조건에 부합하게 되는 것임.
  • 자원을 점유했을 때 대기하지 않아야 함: 프로세스가 앞으로 필요한 모든 자원을 처음에 한꺼번에 할당을 해줘버리는 방법이 있지만, 자원이용률이 낮아질 수 있고 기아상태가 발생 할 수 있다는 단점이 있음.
  • 즉, 하나의 프로세스가 많은 자원을 차지하고 있고, 프로세스가 자원을 사용안하고 있더라도 점유를 하고 있는 문제가 있음.
  • 대기할 때 자원을 점유하고 있지 않아야 함: 새로운 자원이 필요해서 요구를 할 때 할당받았던 자원들을 모두 해제버리는 방법이 있지만, 점유 도중 해제할 수 없는 자원에는 적용이 불가능하다는 단점이 있음.
  • 즉, 프린터와 같은 점유 도중에 해제할 수 없는 자원이 존재하기 때문에 해당 방법은 적용이 불가능한 방법으로 볼 수 있음.

(3) 비선점 조건 제거

  • 비선점 조건 제거: 프로세스가 자원을 사용하고 있을 때 다른 프로세스가 해당 자원을 사용하지 못하도록 하는 것을 비선점이라고 하는데 선점이 가능하도록 바꾸는 것과 다른 프로세스가 대기할 가능성을 줄이는 것으로 생각 할 수 있음. 
  • 선점이 가능하도록 해야 함: 자원의 특성에 따라 불가능한 경우 존재함.
  • 즉, 프린터와 같은 자원은 선점을 하고 모든 작업을 다 수행하고 자원을 반납해야 하는데, 중간에 다른 프로세스가 선점을 해버리면 데이터의 일관성 등이 깨질 수 있는 문제가 있기 때문에 사실상 불가능한 방법임.
  • 다른 프로세스가 대기할 가능성 줄이기: 프로세스가 점유대기 상황이 되면, 자신이 할당받은 모든 자원을 해제함으로써, 교착상태를 막는 방법이지만 위와 동일하게 프린터 같은 자원에는 적용이 불가능해서 사실상 불가능한 방법임.
  • 결론은 비선점 조건 제거는 말이 안되는 방법으로 보면 됨.

(4) 환형대기 조건 제거

  • 환형대기 조건: 프로세스간 점유하는 자원을 서로가 가지고 있는 자원을 요구하는 경우에 환형을 이루며 대기하게 되는 상황
  • 모든 자원에 일련번호를 지정: 자원에 서열(번호, 일련번호)을 정해주고, 번호에 맞게 자원을 획득하도록 강제함으로써 환형 대기를 방지하는 방식임.
  • 즉, 함수를 통해 자원 집합에 따라서 자연수 집합을 부여하는 느낌이며, 자원의 유형이 다를 때 일련번호 또한 다르게 세팅이됨.
1. 환형 대기가 발생 이유 (문제 상황)
- 프로세스 A: 자원 **[스캐너]**를 가진 채로 **[프린터]**를 기다림.
- 프로세스 B: 자원 **[프린터]**를 가진 채로 **[스캐너]**를 기다림.
- 결과: 서로 양보 안 함 -> 원형(Cycle) 발생 -> 교착상태

2. 일련번호가 해결하는 방법 (해결책)
- (1) 자원에 일련번호 매핑 (1번: 스캐너, 2번: 프린터)
- (2) 프로세스 A: 1번(스캐너)을 빌림 -> 2번(프린터)을 요청 (가능)
- (3) 프로세스 B: 2번(프린터)을 먼저 빌린 상태에서 1번(스캐너)을 요청 (불가능)
- 결국 사이클은 발생하지 환형대기 조건을 제거 할수는 있음.
  • 방법1: 자원의 일련번호를 활용하여, 일련번호가 항상 오름차순이 되도록만 요구할 수 있도록 하는 방법이다.
  • ** 쉽게말해, 프로세스가 자원A(일련번호:3) 가지고 있는 상태에서 자원C(일련번호:4) 가 기존에 가지고 있는 자원보다 일련번호가 높기 때문에 빌릴 수 있으며, 만약 자원C의 일련번호가 3 미만인경우 자원을 빌리는 것을 불가능함. **
  • 이와 같은 방식으로 환형대기 조건은 제거할 순 있지만, 문제는 r1(3), r2(5), r3(7), r4(9) 이런식으로 r4(9) 의 자원을 사용 중에 있을 때 r1(3) 을 다시 사용하려고 한다면 일련번호가 낮기 때문에 사용이 불가능하다는 큰 문제점이 있음.
  • ** 결론은 이 방법만으로는 사실상 불가능하다고 보는게 맞음. **

  • 방법2: 방법1의 낮은 일련번호는 무조건 빌릴 수 없다는 문제점을 개선한 방식이며, 점유중인 자원에서 새롭게 요구되는 자원의 일련번호보다 작은 자원은 자진 반납을 하는 방식이다.
  • 예시: r1(1), r2(3), r3(7) 에서 r4(5) 를 빌리는 경우 r3(7) 을 자진반납하고 r4(5) 를 빌리는 것임.

  • 환형대기 조건 제거: 방법1,2 를 통해서 빌리고 있는 자원보다 일련번호가 큰 자원을 빌리는 오름차순으로 하면 환형대기 발생이 불가능해져 결국엔 환형대기 조건은 제거 할 수 있음.
  • 문제점: 프로세스마다 요구순서가 달라 자원의 일련번호 설정이 어렵고, 방법2와 같이 자원의 일련번호가 낮은 자원을 빌릴 때에는 보다 큰 자원은 반납을 해줘야하는데, 만약 프린터와 같이 반납이 불가한 자원은 분명히 존재하기 때문에 환형대기 조건을 제거하는 건 사실상 불가능에 가깝다고 봐야함.

(5) 교착상태 예방 - 결론

  • 교착상태 예방 방식으로는 거의 불가능한 가까운 접근 방법으로 보면된다.
  • ** 회피 또는 이미 발생한 교착상태에 대해서 탐지 및 복구 방식으로 해결을 해야 한다고 보면 됨. **

'방송통신대학교 > ⚙️운영체제' 카테고리의 다른 글

[운영체제] 8강 - 메모리 관리  (0) 2026.04.07
[운영체제] 7강 - 교착상태(2)  (0) 2026.04.02
[운영체제] 5강 - 병행 프로세스(2)  (0) 2026.03.18
[운영체제] 4강 - 병행 프로세스(1)  (0) 2026.03.06
[운영체제] 3강 - 프로세스 스케줄링  (0) 2026.02.27
'방송통신대학교/⚙️운영체제' 카테고리의 다른 글
  • [운영체제] 8강 - 메모리 관리
  • [운영체제] 7강 - 교착상태(2)
  • [운영체제] 5강 - 병행 프로세스(2)
  • [운영체제] 4강 - 병행 프로세스(1)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (233)
      • 방송통신대학교 (87)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (15)
        • 🔢자료구조 (14)
        • 🧬알고리즘 (10)
        • ⚙️운영체제 (14)
        • 🕸️이산수학 (11)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🖥️컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    운영체제
    C언어
    방송통신대학교
    방송대
    spring
    파이썬
    그래프
    이산수학
    알고리즘
    자료구조
    Python
    컴퓨터과학 개론
    배열
    컴퓨터의 이해
    Java
    유비쿼터스
    방통대
    자바
    컴퓨터과학과
    함수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[운영체제] 6강 - 교착상태(1)
상단으로

티스토리툴바