OS - 교착상태

최정훈·2024년 11월 6일

교착상태(Deadlock)

식사하는 철학자 문제

원형의 탁자에 5명의 철학자가 있고, 철학자들 사이에는 포크가 1개씩 있다고 가정하자. 한 철학자가 음식을 먹으려면 2개의 포크를 모두 사용해야한다고 할때, 모든 철학자들이 동시에 식사할 수 있는가?

  • 할 수 없다. 철학자들이 왼쪽 포크를 잡고, 오른쪽 포크를 잡으려고 할 때, 남아있는 포크가 없다.

교착상태란?

일어나지 않을 일을 기다리며, 진행이 멈춰버리는 상태.

이를 식사하는 철학자 문제에 빗대어 설명하면, 모든 철학자들은 식사를 하기 위해서 왼쪽 포크를 잡은 상태에서, 오른쪽 포크를 잡기를 기다리고 있다. 하지만, 잡을 수 있는 포크가 없으므로 아무도 식사를 할 수 없다.

만약 게임과 웹 브라우저 프로세스가 있고, 두 프로세스 모두 동작하기 위해서는 자원 A, B가 모두 필요하다고 가정하자. 만약 게임 프로세스가 A를 점유한 채 B를 기다리고 있고, 웹 브라우저는 B를 점유한 채 A를 기다리고 있다면, 어느 프로세스도 작동할 수 없다.

교착상태가 발생하는 조건

  • 상호 배제(Mutual Exclusive) - 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태
  • 점유와 대기(Hold and Wait) - 자원이 이미 할당되어 있는 상황에서 자원을 할당받기를 기다리는 상태
  • 비선점(Nonpreemptive) - 어떤 프로세스도 다른 프로세스의 자원을 강제로 뺏지 못하는 상태
  • 원형 대기(Circular Wait) - 프로세스들이 원의 형태로 자원을 대기하는 상태

위의 4가지 조건 중 하나라도 만족하지 않으면 교착상태가 발생하지 않는다. 4가지 조건을 모두 만족하면 교착상태가 발생할 수 있다.

교착상태 해결방법

  • 예방 - 처음부터 교착상태가 발생하지 않도록 하는 것. 교착상태가 발생하는 4가지 발생조건 중에서 하나라도 충족하지 않도록한다.
  • 회피 - 한정된 자원 안에서 무분별한 자원할당으로 인해 교착상태가 발생한다고 간주하고, 교착상태가 발생하지 않을만큼만 할당하는 것.
  • 검출 후 회복 - 교착상태의 발생을 인지하고, 추후에 조치하는 방식.
    • 선점을 통한 회복 - 교착 상태가 해결될 때까지 한 프로세스에게 자원을 몰아주는 방식
    • 프로세스 강제종료를 통한 회복 - 교착상태에 놓인 프로세스 모두 강제종료하거나, 교착상태가 해결될 때까지 한 프로세스 씩 강제종료하는 것.
profile
게임개발자(희망)의 공부일지

0개의 댓글