학습(공부)하는 블로그 :: 7. 교착상태
 

 
반응형
블로그 이미지
학습하고 공부한 것을 보고 싶을때 다시 볼려고 요약해서 정리한 블로그입니다. 좋은 정보는 서로 공유합시다. 깨비형
« 2026/6 »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Archive»


Category»

Notice»

Recent Post»

Recent Comment»

Recent Trackback»

06-22 10:23

7. 교착상태

이전 수업 노트/운영체제 | 2026. 6. 20. 10:40 | Posted by 깨비형
반응형

 

💡 1분 핵심 요약 (TL;DR)

  • 교착 상태란 2개 이상의 프로세스가 서로의 자원 해제만 기다리며 무한정 멈춘 상태
  • 필요조건 4가지 : 상호 배제 · 비선점 · 점유와 대기 · 원형 대기 (모두 충족해야 발생)
  • 해결 방법 4가지 : 예방 · 회피 · 검출 · 회복 — 실무에서는 검출+회복이 가장 현실적
  • 자원 할당 그래프로 프로세스의 자원 점유·대기 관계를 시각적으로 파악 가능
  • ✅ 교착 상태 vs 기아 상태 — 발생 원인과 대기 상태가 서로 다름

 

 

 

01 교착 상태(Deadlock)란?

서로의 자원을 기다리며 영원히 멈춰버린 프로세스들

 

📖 핵심 개념
2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 더 이상 작업을 진행하지 못하는 상태입니다. 다중 프로그래밍 시스템에서 결코 일어나지 않을 사건(event)을 기다리는 셈입니다. 프로세스가 교착 상태에 빠지면 작업이 정지되어 더는 명령을 진행할 수 없으며, 운영체제가 해결하지 못하면 시스템 운영자나 사용자가 작업을 강제 종료하는 외부 간섭으로 해결해야 합니다.

 

⚠️ 왜 더 심각한 문제인가
교착 상태는 시스템 자원에 대한 요구가 뒤엉킨 상태로, 두 프로세스가 서로 사용 중인 자원을 기다리고 있을 때 발생합니다. 하나 이상의 작업에 영향을 주기 때문에 무한 대기나 기아 상태보다 더 심각한 문제를 야기합니다. 자원 해제 요청이 받아들여질 때까지 프로세스들은 작업을 진행할 수 없고, 현재 보유한 자원도 해제할 수 없습니다.

 

🔒 교착 상태 (Deadlock)

· 여러 프로세스가 작업을 진행하다
  자연 발생적으로 일어나는 문제
· 대기 상태에 존재
  (자원·사건을 무한정 기다림)
  🍽️ 기아 상태 (Starvation)

· 운영체제가 잘못된 정책을 사용해
  특정 프로세스의 작업이 지연
· 준비 상태에 존재
  (CPU 할당을 기다림)

 

교착 상태가 발생하는 대표 사례

 

사례 발생 원인
스풀링 시스템 디스크 스풀 공간 출력 미완료 상태에서 다른 작업이 공간을 모두 차지하면 발생.
스풀링 파일의 포화 임계치를 설정해 예방
디스크 공유 디스크 사용 제어가 없으면 프로세스들이 서로 충돌하는 명령을 요청할 때 발생.
디스크 제어기가 프로세서와 독립적으로 작동할 때도 발생
네트워크 네트워크가 붐비거나 입출력 버퍼 공간이 부족할 때, 메시지 흐름을 제어하는
적절한 프로토콜이 없으면 발생

 

 

 

02 교착 상태의 발생 원인 & 자원 할당 그래프

시스템 자원, 공유 변수, 응용 프로그램에서 비롯되는 문제들

 

원인 내용
시스템 자원 다른 프로세스와 공유할 수 없는 자원을 사용할 때 발생. 임계구역으로 보호되는
프린터, 스캐너, CD 레코더 등을 할당받은 후 양보하지 않는 경우
공유 변수 임계구역 문제를 해결하기 위한 코드가 무한 대기를 막지 못해 발생하는 경우
응용 프로그램 데이터베이스처럼 데이터 일관성 유지를 위해 잠금(Lock)을 사용하는 과정에서
발생할 수 있음

 

📊 자원 할당 그래프 (Resource Allocation Graph)
프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것입니다. 이 그래프를 사용하면 어떤 프로세스에 자원이 할당되어 있는지, 어떤 프로세스가 자원을 기다리고 있는지를 한눈에 파악할 수 있습니다.

· 자원 2개 이상의 프로세스를 동시에 허용하는 경우도 있음
· 여러 프로세스가 하나의 자원을 동시에 사용하면 이를 다중 자원이라 함
· 다중 자원은 수용 가능한 프로세스 수를 사각형 안에 작은 동그라미로 표현

 

 

💡 시험 단골 함정 — 사이클이 곧 교착 상태일까?
자원당 인스턴스가 1개뿐이라면 사이클 발생 = 교착 상태가 맞습니다. 하지만 다중 자원(인스턴스가 여러 개)인 경우, 사이클이 존재하더라도 다른 프로세스가 자원을 반납해 사이클이 깨질 수 있으므로 교착 상태일 수도 있고 아닐 수도 있습니다.

 

 

 

03 교착 상태의 4가지 필요조건

네 조건을 동시에 충족해야만 교착 상태가 발생한다

 

① 상호 배제
배타적 자원 사용
+ ② 비선점
자원 강탈 불가
+ ③ 점유와 대기
보유하며 대기
+ ④ 원형 대기
순환 구조

 

 

① 상호 배제 (Mutual Exclusion)
한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야 합니다. 자원을 최소 하나 이상 비공유, 즉 한 번에 프로세스 하나만 해당 자원을 사용할 수 있어야 합니다. 사용 중인 자원을 다른 프로세스가 사용하려면 자원이 해제될 때까지 대기해야 합니다.

 

② 비선점 (Non-preemption)
한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야 합니다. 자원을 강제로 빼앗을 수 없고, 자원을 점유하고 있는 프로세스가 끝나야만 자원이 해제됩니다.

 

③ 점유와 대기 (Hold and Wait)
프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 합니다. 자원을 최소한 하나 정도 보유하면서, 다른 프로세스에 할당된 자원을 얻으려고 대기하는 프로세스가 있어야 합니다.

 

④ 원형 대기 (Circular Wait)
점유와 대기를 하는 프로세스 간의 관계가 원형을 이루어야 합니다. 단순히 점유와 대기를 한다고 모두 교착 상태에 빠지는 것은 아니며, 프로세스들이 서로 방해하는 방향이 원을 이루어 서로 양보하지 않을 때 교착 상태가 발생합니다.

 

 

💡 조건의 두 가지 성격
· 상호 배제 + 비선점 : 자원이 어떤 특징을 가지는지 나타내는 조건. 동시 공유도 안 되고 중간에 빼앗을 수도 없다면 자원을 가진 프로세스가 내놓을 때까지 무작정 기다리게 됨
· 점유와 대기 + 원형 대기 : 프로세스가 어떤 행위를 하는지 나타내는 조건. 점유·대기 상태에서 방해하는 방향이 원을 이루면 서로 양보하지 않아 교착 상태 발생

 

 

 

04 교착 상태 해결 방법 — 예방 · 회피 · 검출 · 회복

네 가지 접근법과 각각의 현실적 한계

 

해결 방법 특징
예방 교착 상태를 유발하는 네 가지 조건을 무력화한다
회피 교착 상태가 발생하지 않는 수준으로 자원을 할당한다
검출 자원 할당 그래프를 사용하여 교착 상태를 발견한다
회복 교착 상태를 검출한 후 해결한다

 

 

 

① 교착 상태 예방 — 네 조건을 하나씩 무력화

 

대상 조건 예방 방법 단점
상호 배제 독점적으로 사용 가능한 자원을 모두 없애 공유 자원으로 전환 사실상 무력화 어려움
비선점 모든 자원을 빼앗을 수 있도록 허용 (대기 시 보유 자원 해제) 기아 현상 유발
점유와 대기 "전부 할당 또는 전부 미할당" 방식 — 시작 초기에 모든 자원을 한꺼번에 점유 자원 활용성 저하, 일괄 처리화
원형 대기 모든 자원에 번호를 부여하고 숫자가 큰 방향으로만 할당 유연성 저하, 번호 부여 난이도

 

❌ 점유와 대기 예방의 추가 단점
· 프로세스가 자신이 사용할 모든 자원을 자세히 알기 어려움
· 앞으로 사용할 자원까지 미리 선점해버려 다른 프로세스의 작업이 지연됨
· 많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리함

 

② 교착 상태 회피 — 자원 할당량 조절

 

📖 핵심 개념
어느 수준 이상의 자원을 나누어 주면 교착 상태가 발생하는지 파악하여, 그 수준 이하로만 자원을 할당하는 방법입니다. 교착 상태가 발생할 범위에 있는 프로세스는 대기시킵니다.

문제점
· 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 함
· 시스템의 전체 자원 수가 고정적이어야 함
· 자원이 낭비됨

 

🏦 대표 알고리즘 — 은행원 알고리즘 (Banker's Algorithm)
교착 상태 회피의 대표적인 방법은 다익스트라(Dijkstra)가 제안한 은행원 알고리즘입니다. 시스템을 안전 상태(Safe State)불안전 상태(Unsafe State)로 나누고, 자원을 할당한 후에도 시스템이 안전 상태를 유지할 수 있을 때만 자원을 빌려주는(할당하는) 보수적인 방식입니다.

 

③ 교착 상태 검출 — 발생 여부를 계속 주시

 

⏱️ 타임아웃 이용 검출

일정 시간 동안 작업이 진행되지 않는 프로세스를 교착 상태로 간주.

· 교착 상태가 자주 발생하지 않는다는 가정
· 별도 알고리즘 없이 쉽게 구현 가능
  📊 자원 할당 그래프 이용 검출

그래프를 모니터링하며 사이클 발생 여부를 확인.

· 프로세스 작업 방식을 제한하지 않고 정확히 파악 가능
· 그래프 유지·갱신·사이클 검사로 오버헤드 발생

 

④ 교착 상태 회복 — 강제 종료로 마무리

 

📖 핵심 개념
교착 상태가 검출된 후, 이를 푸는 후속 작업입니다. 회복 기법은 크게 두 가지 축으로 나뉩니다.

① 프로세스 종료 (Process Termination)
교착 상태를 유발한 프로세스를 강제로 종료합니다.
· 교착 상태를 일으킨 모든 프로세스를 동시에 종료하는 방법
· 교착 상태를 일으킨 프로세스 중 하나씩 순서대로 종료하는 방법

② 자원 선점 (Resource Preemption)
교착 상태가 깨질 때까지 특정 프로세스(희생자)의 자원을 강제로 빼앗아 다른 프로세스에게 할당하는 방식입니다.

 

✓ 실무적 결론
예방과 회피는 자원 활용성 저하·실효성 부족 문제로 잘 사용되지 않습니다. 교착 상태를 검출한 후 회복시키는 방식이 결론적으로 교착 상태를 해결하는 가장 현실적인 접근 방법입니다.

 

 

 

📌 핵심 정리

· 교착 상태 : 2개 이상의 프로세스가 서로의 자원 해제만 기다리며 정지된 상태
· 교착 상태 vs 기아 상태 : 교착은 대기 상태(자원 대기), 기아는 준비 상태(CPU 대기)
· 자원 할당 그래프 : 프로세스의 자원 점유·대기 관계를 방향성 그래프로 표현
· 필요조건 4가지 : 상호 배제 + 비선점 + 점유와 대기 + 원형 대기 (모두 충족 시 발생)
· 예방 : 네 조건 중 하나를 무력화 — 실효성 낮음
· 회피 : 자원 할당량을 조절 — 은행원 알고리즘(안전 상태 유지)이 대표적, 자원 낭비 발생
· 검출 : 타임아웃 또는 자원 할당 그래프로 발생 여부 모니터링
· 회복 : 프로세스 종료 또는 자원 선점(희생자 선택) — 검출+회복이 가장 현실적
· 사이클 vs 교착 : 단일 인스턴스 자원이면 사이클=교착, 다중 자원이면 사이클≠교착일 수 있음

 

 

태그 : 교착상태란데드락 발생 조건교착상태 기아상태 차이자원 할당 그래프상호배제 비선점이란원형대기 점유와대기교착상태 예방 회피 차이교착상태 검출 회복운영체제 데드락 정리운영체제 교착상태 해결

반응형

'이전 수업 노트 > 운영체제' 카테고리의 다른 글

9. 가상 메모리  (0) 2026.06.22
8. 메모리 관리  (0) 2026.06.21
6. 프로세서 동기화  (0) 2026.06.19
5. 스케줄링 알고리즘  (0) 2026.06.14
4. 스레드와 CPU 스케줄링  (0) 2026.04.11
: