CS/운영체제

교착상태(Deadlock, 데드락)이란 무엇일까?

개발자 May 2024. 10. 31.

Deadlock(교착 상태)

Deadlock은 여러 프로세스가 서로 자원을 기다리며 무한 대기 상태(멈춤)에 빠지는 현상이다. 이는 자원이 적절히 해제되지 않아 발생하며, 시스템의 성능에 부정적인 영향을 미친다.

Deadlock 발생 조건

Deadlock이 발생하려면 다음 네 가지 조건이 모두 만족되어야 한다.

  1. 상호 배제(Mutual Exclusion): 자원은 하나의 프로세스만 사용할 수 있다.
  2. 점유와 대기(Hold and Wait): 프로세스가 이미 점유한 자원을 보유한 채 추가 자원을 기다리는 상태이다.
  3. 비선점(Non-preemption): 자원을 강제로 빼앗을 수 없다. 다른 프로세스가 자원을 해제할 때까지 기다려야 한다.
  4. 순환 대기(Circular Wait): 프로세스들이 원형으로 자원을 대기한다. 예를 들어, 프로세스 A는 B의 자원을, B는 C의 자원을, C는 다시 A의 자원을 기다리는 구조가 순환 대기 구조이다.

이 조건 중 하나라도 충족되지 않으면 Deadlock이 발생하지 않는다.

조건이 충족되지 않는 경우?

  1. 상호 배제 조건 미충족: 자원을 여러 프로세스가 동시에 사용할 수 있다면 Deadlock은 발생하지 않는다.
  2. 점유와 대기 조건 미충족: 프로세스가 자원을 요청할 때 이미 점유한 자원을 모두 반환한다면 다른 프로세스가 자원을 점유하고 대기하는 상황이 발생하지 않는다.
  3. 비선점 조건 미충족: 다른 프로세스가 자원을 강제로 선점할 수 있다면 Deadlock이 발생하지 않는다.
  4. 순환 대기 조건 미충족: 자원 대기 관계가 순환적이지 않다면, 최종적으로 자원을 점유한 프로세스가 자원을 해제하면서 순차적으로 대기 상태가 해소되므로 Deadlock이 발생하지 않는다.

Deadlock 처리 방법

Deadlock을 처리하기 위해 예방, 회피, 검출 후 회복하는 방법이 있다.

  1. Deadlock 예방: 네 가지 조건 중 하나라도 성립하지 않도록 시스템을 설계한다.
    • 상호 배제 방지: 모든 자원을 공유할 수 있으면 예방할 수 있으나, 현실적으로 불가능하다.
    • 점유와 대기 방지: 프로세스가 한 번에 자원을 모두 점유하거나 점유하지 못하게 한다. 그러나 자원의 활용도가 낮아지고 효율성이 떨어질 수 있다.
    • 비선점 방지: 다른 프로세스가 자원을 강제로 뺏게 하지만, 특정 자원(CPU 등)에서만 유효하고 범용적이지 않다.
    • 순환 대기 방지: 자원에 순서를 부여하고 오름차순으로만 요청하도록 강제한다.
  2. Deadlock 회피: 자원 할당 전에 안전 순서열을 계산하여 안전한 경우에만 자원을 할당한다. 자원의 무분별한 할당을 방지하여 안전 상태를 유지한다.
  3. Deadlock 검출 후 회복: Deadlock 발생 시 검출 후 해결하는 방식이다.
    • 선점을 통한 회복: 특정 프로세스에 자원을 몰아줘서 Deadlock을 해소한다.
    • 프로세스 강제 종료: 교착 상태에 빠진 프로세스를 전부 혹은 하나씩 종료하여 Deadlock을 해소한다.

현대 OS에서 Deadlock을 처리하지 않는 이유

현대 OS는 Deadlock을 직접적으로 처리하지 않는 경우가 많다. 이는 Deadlock을 예방하거나 회복하기 위한 알고리즘이 복잡하고, 시스템 성능에 부담을 주기 때문이다. 많은 경우 개발자가 자원 관리 설계를 통해 교착 상태를 피할 수 있다.


Reference

  • 도서 - 혼자 공부하는 컴퓨터 구조+운영체제(강민철 저)

'CS > 운영체제' 카테고리의 다른 글

[그림 & 곁다리 궁금증과 함께] 운영체제 기초  (0) 2024.07.16

댓글