본문 바로가기
카테고리 없음

교착상태란 무엇인가?

by nono22 2023. 11. 29.

교착상태 (Deadlock)

개요

교착상태란 보통 두 개 이상의 프로세스(또는 스레드)가 서로가 가진 리소스를 점유하고 있어서 서로 상대방이 점유한 리소스를 사용하기 위해서 기다리는 상태입니다. 이때, 점유한 리소스를 놓아주지 않으면 해당 프로세스들은 영원히 기다리게 되어 작업을 끝내지 못하는 상태에 빠집니다.

교착상태 발생 조건

교착상태는 다음의 네 가지 조건들이 동시에 성립할 때 발생합니다.

  1. 상호배제 (Mutual exclusion): 리소스는 한 번에 한 프로세스만이 사용할 수 있어야 합니다.
  2. 점유대기 (Hold and wait): 프로세스는 최소한 하나의 리소스를 점유한 상태에서 다른 리소스를 기다려야 합니다.
  3. 비선점 (No preemption): 다른 프로세스가 이미 점유한 리소스를 강제로 뺏을 수 없습니다. 해당 프로세스에서 작업을 마치거나, 다른 리소스를 요청할 때만 놓아줄 수 있습니다.
  4. 순환대기 (Circular wait): 프로세스들이자 리소스들 간에 순환적으로 대기할 수 있는 상태가 존재해야 합니다. 즉, 프로세스 P1은 P2가 점유하고 있는 리소스를 기다리고, 동시에 P2는 P1이 점유하고 있는 리소스를 기다려야 합니다.

교착상태 예방 및 회피

교착상태를 예방을 위해서는 네 가지 발생 조건 중에 하나를 방지하면 됩니다.

  1. 상호배제 조건: 리소스를 공유할 수 있는 방법 도입
  2. 점유대기 조건: 프로세스가 실행 전에 필요한 모든 리소스를 할당받도록 보장
  3. 비선점 조건: 자원을 선점 가능하게 설정
  4. 순환대기 조건: 프로세스들에 고유한 번호 할당하여 순환대기 방지

또한 교착상태를 회피하기 위해서는 자원할당 그래프를 통해 교착상태를 이용하기 전에 미리 감지하는 방법을 사용할 수 있습니다.

교착상태 해결

교착상태를 해결하기 위해서는 다음의 세 가지 방법을 사용할 수 있습니다.

  1. 교착상태 무시: 교착상태가 발생하지 않는 환경이라고 가정하고 문제 무시
  2. 교착상태 감지 및 회복: 교착상태 발생 시 해당 상태를 감지하고 회복시킴
  3. 교착상태 예방: 교착상태의 발생 조건인 네 가지 조건 중 하나를 예방하여 교착상태 발생을 미리 방지

마무리

교착상태는 프로세스/스레드 관리에서 매우 중요한 개념입니다. 교착상태를 피하기 위한 방법들을 알고, 항상 안정적인 시스템 운용을 위해 주의해야 합니다.

댓글