[Operating System] 교착 상태

최민우·2024년 9월 23일

운영체제

목록 보기
7/10

프로세스가 실행되기 위해서는 자원이 필요한데, 두 개 이상의 프로세스가 서로 필요한 자원을 기다리기만 한다면, 어느 프로세스도 더 이상 진행할 수 없는 교착 상태가 발생합니다.

식사하는 철학자 문제

식사하는 철학자 문제는 교착 상태가 어떤 상황에서 발생하는지, 나아가 교착 상태를 어떻게 해결할 수 있는지를 엿볼 수 있는 가상의 시나리오입니다.

가정

동그란 원탁에 5명의 철학자가 앉아 있습니다. 이 철학자들 앞에는 맛있는 식사가 있습니다. 철학자들 사이 사이에는 식사에 필요한 포크가 있습니다. 그리고 철학자들 앞에 있는 식사는 두 개의 포크로 먹을 수 있습니다.

순서

철학자들은 아래와 같은 순서로 식사를 합니다.

  • 계속 생각을 하다가 왼쪽 포크가 사용 가능하면 집어듭니다.
  • 계속 생각을 하다가 오른쪽 포크가 사용 가능하면 집어듭니다.
  • 왼쪽과 오른쪽 포크를 모두 집어들면 정해진 시간동안 식사를 합니다.
  • 식사 시간이 끝나면 오른쪽 포크를 내려놓습니다.
  • 오른쪽 포크를 내려놓은 뒤 왼쪽 포크를 내려놓습니다.

문제

언뜻 보면 위 순서에는 아무런 문제가 없어 보입니다. 실제로 1 ~ 2명의 철학자가 식사할 때는 아무런 문제가 없습니다. 하지만, 모든 철학자가 동시에 포크를 집어 식사를 한다면 어떨까요? 모든 철학자가 동시에 포크를 집어 식사를 시도하면, 아무도 식사를 할 수 없고 모두가 다른 철학자가 포크를 내려놓기를 기다리는 상황이 발생할 수 있습니다.

교착 상태

식사하는 철학자 문제에서 철학자는 프로세스, 포크는 자원, 생각하는 행위는 자원을 기다리는 것에 빗댈 수 있습니다. 그리고 포크는 한번에 하나의 프로세스만 접근할 수 있는 임계 구역에 빗댈 수 있습니다. 이렇게 일어나지 않을 사건을 기다리며, 진행이 멈춰버리는 현상을 교착 상태(Deadlock)라고 합니다.

발생 조건

교착 상태는 왜 발생할까요? 교착 상태가 발생하는 조건에는 4가지가 있습니다. 바로 상호 배제, 점유와 대기, 비선점, 원형 대기입니다. 하나라도 만족하지 않으면 교착 상태가 발생하지 않지만, 모두 만족될 때 교착 상태가 발생할 수 있습니다.

  • 상호 배제: 해당 자원을 한 번에 하나의 프로세스만 사용합니다.
  • 점유와 대기: 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다립니다.
  • 비선점: 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못하는 상황입니다.
  • 원형 대기: 프로세스들이 원의 형태로 자원을 기다립니다.

해결 방법

교착 상태는 마치 차로 꽉 찬 도로처럼 꼼짝도 못하는 상황입니다. 운영체제는 교착 상태를 해결하기 위해 예방, 회피, 탐지 및 회복을 사용합니다.

  • 교착 상태 예방: 교착 상태의 발생 조건 중 하나를 충족하지 못하게 하는 방식입니다.
  • 교착 상태 회피: 교착 상태가 발생하지 않을 정도로만 조심 조심 자원을 할당하는 방식입니다.
  • 교착 상태 탐지 및 회복: 운영체제는 교착 상태 발생 여부를 주기적으로 검사하고, 교착 상태가 발생하면 그때그때 회복하는 방식입니다.

참고

교착상태
Deadlock(교착 상태)의 개념과 발생 원인
혼자 공부하는 컴퓨터구조+운영체제

profile
I'm Backend Developer

0개의 댓글