PromleeBlog
sitemapaboutMe

posting thumbnail
교착 상태란? - 하루 10분 운영체제 8일차
What is a Deadlock? - 10 Minutes of OS Day 8

📅

🚀

들어가기 전에🔗

image
썸네일 이미지는 자원을 서로 점유하고 대기하는 프로세스들이 원형으로 얽힌 데드락 상황을 gpt가 그려준 그림입니다. 가운데가 자원인 것 같죠? 회로를 굉장히 입체적으로 그린 그림이네요 ㅋㅋㅋ
컴퓨터가 갑자기 멈추거나 아무 반응이 없는 경우, 그 원인이
교착 상태(deadlock)
일 수 있습니다. 교착 상태는 여러 프로세스가 서로의 자원을 기다리며
서로를 막고 있는 상황
을 말합니다.
이번 글에서는 교착 상태가 발생하는 조건부터 이를 해결하는 다양한 방법까지 차근차근 정리해보겠습니다. 특히 면접에서 자주 나오는 이론이므로, 예제와 함께 정확히 이해해두는 것이 중요합니다.

🚀

교착 상태란 무엇인가요?🔗

교착 상태는 두 개 이상의 프로세스가 서로 자원을 점유한 채, 상대가 가진 자원을 기다리느라 영원히 진행되지 못하는 상황입니다.
예시: P1은 프린터를, P2는 스캐너를 점유한 상태에서 각각 상대의 자원을 요청하고 기다리는 경우, 두 프로세스는 서로를 기다리느라 멈춰버립니다.
(서로) 언제 끝나시지...?
(서로) 언제 끝나시지...?
P1은 프린터를 점유하고 있고, P2는 스캐너를 점유하고 있습니다. 이 상태에서 P1은 P2의 스캐너를 기다리고, P2는 P1의 프린터를 기다립니다. 이렇게 서로를 막고 있는 상태가 교착 상태입니다.

🚀

교착 상태 발생 조건 - Coffman 조건🔗

교착 상태는 다음 네 가지 조건이 모두 만족될 때 발생합니다
  1. 상호 배제 (Mutual Exclusion)
    : 한 자원은 동시에 하나의 프로세스만 사용 가능
  2. 점유 대기 (Hold and Wait)
    : 자원을 보유한 채 다른 자원을 기다리는 상태
  3. 비선점 (No Preemption)
    : 자원을 강제로 회수할 수 없음
  4. 순환 대기 (Circular Wait)
    : 여러 프로세스가 서로 자원을 요구하며 원형으로 기다리는 상태
이 중 하나라도 깨지면 교착 상태는 발생하지 않습니다. 따라서 해결 전략은 이 조건 중 최소 하나를 없애는 방식으로 접근합니다.

🚀

교착 상태 해결 방법🔗

예방 (Prevention)🔗

Coffman 조건 중 하나를
애초에 성립하지 않도록 설계
하는 방법입니다.

회피 (Avoidance)🔗

프로세스가 자원을 요청할 때, 그 요청을 허용했을 때 시스템이 안전 상태인지 확인한 후 허용하는 방식입니다. 대표적으로
은행원 알고리즘(Banker's Algorithm)
이 있습니다.
예시: 은행에서 고객에게 대출을 해줄 때, 전체 자금이 부족해질 위험이 있는지를 계산하고 승인 여부를 판단하는 방식과 비슷합니다.

탐지 (Detection)🔗

교착 상태가 발생하는 것을 허용하되, 주기적으로 시스템을 검사하여 교착 상태를 감지합니다.
탐지를 위해
자원 할당 그래프(Resource Allocation Graph)
대기 그래프(Wait-for Graph)
를 활용합니다.
탐지 알고리즘은 시스템에 부하를 줄 수 있으므로 사용 시 주의가 필요합니다.

회복 (Recovery)🔗

교착 상태를 탐지한 후, 시스템을 정상 상태로 되돌리는 방식입니다. 주요 방법은 다음과 같습니다

🚀

다중 스레드 응용에서의 교착 상태🔗

스레드 환경에서도 교착 상태는 자주 발생합니다. 예를 들어 Java에서 두 개의 스레드가 서로 다른 객체 락을 얻고 상대 객체를 기다리면 교착 상태가 발생할 수 있습니다.
Java
// Thread 1
synchronized(objA) {
  synchronized(objB) {
    // 작업
  }
}
// Thread 2
synchronized(objB) {
  synchronized(objA) {
    // 작업
  }
}
이 문제를 해결하려면 락을 얻는 순서를 고정하거나, 락 타임아웃 등을 설정해야 합니다.

🚀

요약🔗

이번 글에서는 교착 상태의 개념과 발생 조건, 그리고 예방, 회피, 탐지, 회복이라는 대표적인 해결 전략을 예시와 함께 정리했습니다.
기술 면접에서는 단순한 정의보다는
예시를 통해 이해했는지
를 확인하는 질문이 많으므로, 각 조건과 전략을 실제 상황에 연결해보는 연습이 중요합니다.
드디어 길고 긴 프로세스 관련 글이 끝났습니다. 다음 편에서는 컴퓨터 메모리의 기본 단위인
메인 메모리
구조에 대해 알아보겠습니다.

참고🔗