공부/OS

데드락(Deadlock)이란?

셩잇님 2023. 3. 2. 14:58
반응형

 

 

1. 데드락(deadlock)의 개념

데드락(교착 상태)은 멀티프로세스나 멀티스레드 환경에서 발생하는 문제 중 하나입니다. 데드락이란 각 프로세스나 스레드가 서로 상대방이 가진 자원을 사용하고 있기 때문에 더 이상 진행할 수 없는 상태를 말합니다. 즉, 각 프로세스가 다른 프로세스가 계속 진행하기 위해 필요한 리소스를 보유하고 있기 때문에 순환 의존성이 발생하여 어느 프로세스도 진행할 수 없는 상황이 발생합니다.

 

2. 데드락(deadlock)의 예제

데드락의 간단한 예는 두 프로세스인 A와 B가 모두 공유 리소스에 액세스해야 하지만 서로 다른 순서로 리소스를 획득하고 보유하는 시스템에서 발생할 수 있습니다. 프로세스 A가 리소스 X를 획득한 후 리소스 Y를 획득하려고 하고, 프로세스 B가 리소스 Y를 획득한 후 리소스 X를 획득하려고 하면 데드락이 발생할 수 있습니다. 프로세스 A는 리소스 Y를 얻을 때까지 리소스 X를 해제할 수 없지만, 프로세스 B는 리소스 Y를 보유하고 있으며 리소스 X를 얻을 때까지 해제할 수 없으므로 해결할 수 없는 순환 종속성이 생성됩니다.

 

 

이러한 상황에서는 각 프로세스나 스레드가 서로 기다리며 멈춰있기 때문에, 작업이 중단되어 시스템의 성능이 떨어지거나 정지될 수 있습니다. 이러한 문제를 해결하기 위해서는 데드락 상태를 방지하거나, 데드락이 발생할 경우 이를 해결할 수 있는 방법을 사용해야 합니다.

 

3. 데드락(deadlock) 해결

데드락는 감지 및 해결이 어려울 수 있으며, 시스템이 응답하지 않고 비생산적으로 될 수 있습니다. 데드락를 방지하기 위해 운영 체제 및 기타 동시 시스템에서는 리소스 할당 알고리즘, 프로세스 스케줄링 정책, 데드락 감지 및 복구 메커니즘과 같은 기술을 사용하는 경우가 많습니다. 이러한 기술은 프로세스 간의 순환 종속성을 방지 또는 감지하고 데드락에 빠지기 전에 이를 해결하는 것을 목표로 합니다.

 

데드락은 시스템의 안정성과 성능을 저하시키는 중요한 문제 중 하나이므로, 이를 이해하고 방지하는 방법을 학습하는 것이 중요합니다.

 

4. 데드락(deadlock)의 발생 조건

데드락이 발생하려면 다음의 4가지 조건이 모두 충족되어야 합니다.

 

  1. 상호 배제 (Mutual exclusion): 최소한 1개의 자원이 비공유 모드로 점유되어, 여러 프로세스/스레드가 동시에 그 자원을 사용할 수 없도록 합니다.
  2. 점유와 대기 (Hold and wait): 최소한 하나의 자원을 가지고 있으면서 다른 프로세스/스레드가 점유한 자원을 추가로 얻기 위해 대기하는 상황이 하나 이상 발생합니다.
  3. 비선점 (Non-preemptive): 다른 프로세스/스레드가 이미 점유한 자원을 강제로 빼앗을 수 없습니다. 자발적으로 자원을 놓아주어야만 합니다.
  4. 순환 대기 (Circular wait): 각 프로세스/스레드가 순환적으로 다음 프로세스/스레드가 요구하는 자원을 가지고 있는 상황이 발생합니다.

4가지 조건 중 하나라도 만족하지 않는다면 데드락은 발생하지 않습니다. 따라서 데드락을 예방하는 방법은 이러한 조건 중 하나라도 만족하지 않도록 하는 것입니다.

 

5. 데드락(deadlock)의 예방 및 회피 방법

 

5-1. 예방

데드락을 예방하는 기법은 교착 상태를 유발할 수 있는 조건 중 하나 이상을 제거하여 교착 상태가 발생하지 않도록 하는 것을 목표로 합니다. 이러한 조건에는 상호 배제, 보류 및 대기, 선점 금지, 순환 대기 등이 있습니다. 예방 기법에는 다음이 포함됩니다:

  • 리소스 할당: 리소스를 정적이 아닌 동적으로 할당하여 프로세스가 필요할 때 필요한 리소스를 얻을 수 있도록 합니다
  • 리소스 순서 지정: 각 리소스에 우선순위 또는 고유한 숫자 식별자를 할당하고 프로세스가 식별자 또는 우선순위에 따라 일관된 순서로 리소스를 요청하도록 합니다.
  • 교착 상태 방지: 프로세스가 교착 상태가 발생하지 않도록 하는 방식으로 리소스를 요청할 수 있는 알고리즘을 사용합니다.

 

5-2. 회피
회피 기술은 리소스 요청이 교착 상태로 이어질지 여부를 동적으로 결정하여 교착 상태를 피하는 것을 목표로 합니다. 이러한 기법은 리소스 할당 그래프를 기반으로 하며 다음을 포함합니다:

  • 뱅커 알고리즘: 리소스 요청이 향후 모든 요청을 충족할 수 있는 충분한 리소스를 남기는지 확인하여 시스템이 교착 상태가 발생할 수 없는 안전한 상태를 유지하도록 하는 리소스 할당 알고리즘입니다.
  • Wait-die 및 wound-wait: 리소스 요청이 있을 때 프로세스를 대기할지 종료할지를 결정하기 위해 수명 또는 우선순위를 사용하는 두 가지 리소스 할당 알고리즘입니다.

 

일반적으로 예방 기법은 회피 기법보다 강력하고 효율적이지만 더 많은 시스템 리소스가 필요하고 항상 실용적이지 않을 수 있습니다. 따라서 교착 상태를 방지하거나 신속하게 감지하고 해결하기 위해서는 신중한 시스템 설계 및 테스트와 함께 예방 및 회피 기법을 조합해야 하는 경우가 많습니다.


 

반응형

'공부 > OS' 카테고리의 다른 글

세그멘테이션(Segmentation)이란?  (0) 2023.03.04
페이징(Paging)이란?  (0) 2023.03.04
멀티 쓰레드(multi-threading)란 무엇인가?  (0) 2023.03.01
멀티 프로세스(multi-process)란?  (0) 2023.02.27
메모리 단편화란?  (0) 2023.02.11