데드락

wjd15sheep·2024년 7월 23일

CS

목록 보기
6/9

#CS

데드락이란?

데드락은 컴퓨터 시스템에서 여러 프로세스나 스레드가 서로 자원을 기다리며 무한히 멈춰있는 상태를 의미합니다. 마치 두 대의 차가 좁은 길에서 서로 마주 보고 있어, 서로 양보하지 않으면 아무도 움직일 수 없는 상황과 같습니다.

데드락이 발생하는 조건

데드락이 발생하려면 다음 네 가지 조건이 동시에 충족되어야 합니다. 이를 데드락의 필요 조건이라고 합니다.

  1. 상호 배제(Mutual Exclusion): 자원은 한 번에 하나의 프로세스만 사용할 수 있습니다.
  2. 점유와 대기(Hold and Wait): 이미 자원을 점유하고 있는 프로세스가 다른 자원을 기다리는 상태입니다.
  3. 비선점(Non-Preemptive): 프로세스가 자원을 강제로 빼앗길 수 없습니다. 자원을 사용하고 있는 프로세스가 자원을 자발적으로 내놓을 때까지 기다려야 합니다.
  4. 순환 대기(Circular Wait): 자원을 기다리는 프로세스들이 원형으로 연결되어 있어, 순환 형태로 대기하는 상태입니다. 예를 들어, 프로세스 A는 자원 B를 기다리고, 프로세스 B는 자원 C를 기다리고, 프로세스 C는 자원 A를 기다리는 경우입니다.

데드락의 예시

이해를 돕기 위해 간단한 예시를 들어보겠습니다.

  • 프로세스 A가 자원 1을 점유하고 있고, 자원 2를 기다리고 있습니다.
  • 프로세스 B가 자원 2를 점유하고 있고, 자원 1을 기다리고 있습니다.

이 경우, 프로세스 A와 B는 서로 상대방이 점유한 자원을 기다리며 무한히 멈춰있게 됩니다. 이것이 바로 데드락입니다.

데드락을 예방하는 방법

데드락을 피하기 위해서는 위에서 설명한 필요 조건 중 하나를 충족하지 않도록 해야 합니다. 몇 가지 예방 방법을 소개합니다.

  1. 상호 배제 조건 없애기: 가능하다면 자원을 여러 프로세스가 동시에 사용할 수 있게 합니다. 예를 들어, 읽기 전용 파일은 여러 프로세스가 동시에 읽을 수 있습니다.
  2. 점유와 대기 조건 없애기: 프로세스가 자원을 요청할 때, 다른 자원을 점유하고 있지 않도록 합니다. 모든 자원을 한꺼번에 요청하거나, 점유한 자원을 먼저 놓고 나서 다른 자원을 요청하게 합니다.
  3. 비선점 조건 없애기: 프로세스가 자원을 오래 점유하지 않도록 합니다. 예를 들어, 프로세스가 자원을 점유한 상태에서 일정 시간 이상 지나면 강제로 자원을 회수할 수 있습니다.
  4. 순환 대기 조건 없애기: 자원에 순서를 부여하고, 프로세스가 자원을 요청할 때 순서대로 요청하도록 합니다. 예를 들어, 자원 1을 가진 프로세스는 자원 2를 요청할 수 있지만, 자원 2를 가진 프로세스는 자원 1을 요청할 수 없습니다.

데드락을 해결하는 방법

만약 데드락이 발생했다면, 이를 해결하기 위한 몇 가지 방법이 있습니다.

  1. 교착 상태 탐지(Deadlock Detection): 주기적으로 시스템 상태를 검사하여 데드락을 탐지하고, 데드락이 발견되면 일부 프로세스를 강제로 종료하거나 자원을 회수하여 데드락을 해결합니다.
  2. 교착 상태 회복(Deadlock Recovery): 데드락을 탐지한 후, 데드락을 해결하기 위해 특정 프로세스를 종료하거나 자원을 강제로 회수하여 데드락 상태를 해소합니다.

데드락은 컴퓨터 시스템에서 발생할 수 있는 중요한 문제 중 하나입니다. 데드락이 발생하면 시스템의 성능이 크게 저하될 수 있으므로, 이를 예방하고 해결하는 방법을 잘 이해하는 것이 중요합니다.


[참조]

profile
성장 위해 노력하는 웹 개발자 주니어

0개의 댓글