개발공부/CS

[운영체제] 데드락이란?

카슈밀 2025. 2. 16. 01:30
반응형

**데드락(Deadlock)**은 두 개 이상의 프로세스스레드서로 자원을 기다리며 무한정 대기 상태에 빠지는 현상을 말합니다.

데드락이 발생하면 각 프로세스가 필요한 자원을 얻을 수 없어 실행이 중단되며,

이로 인해 시스템 전체가 멈추게 되는 상황이 발생할 수 있습니다.

1. 데드락 발생 조건 (4대 필수 조건)

데드락이 발생하기 위한 조건은 다음 네 가지가 동시에 충족되어야 합니다:

  1. 상호 배제(Mutual Exclusion):
    • 자원은 한 번에 한 프로세스만 사용할 수 있어야 한다는 조건입니다. 즉, 자원이 배타적으로 할당되어 있어, 동시에 여러 프로세스가 하나의 자원을 사용할 수 없습니다.
  2. 점유와 대기(Hold and Wait):
    • 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리는 조건입니다. 즉, 프로세스가 자원을 사용하고 있는 상태에서 다른 자원을 요청할 때 발생합니다.
  3. 비선점(Non-preemption):
    • 이미 자원을 점유한 프로세스는 다른 프로세스가 그 자원을 강제로 빼앗을 수 없다는 조건입니다. 즉, 자원을 가진 프로세스는 자원을 자발적으로 반환하지 않는 한, 다른 프로세스가 그 자원을 사용할 수 없습니다.
  4. 순환 대기(Circular Wait):
    • 여러 프로세스가 자원을 대기하면서 서로 순환적인 대기 관계를 형성하는 조건입니다. 즉, 프로세스 A는 자원 X를 기다리고, 프로세스 B는 자원 Y를 기다리며, 프로세스 Y는 자원 X를 기다리는 상태입니다.

이 네 가지 조건이 동시에 만족될 때, 시스템에서 데드락이 발생할 수 있습니다.

2. 데드락 예시

  • 프로세스 A는 자원 X를 점유하고 있고 자원 Y를 기다리고 있습니다.
  • 프로세스 B는 자원 Y를 점유하고 있고 자원 X를 기다리고 있습니다.
  • 이 경우, 프로세스 A와 B는 서로 자원을 기다리기만 하며, 자원 교환이 일어나지 않아 무한 대기 상태에 빠지게 됩니다.

3. 데드락 해결 방법

데드락을 방지하거나 해결하기 위해 다양한 방법을 사용할 수 있습니다:

  1. 자원 할당 그래프(Resource Allocation Graph) 사용:
    • 프로세스가 자원을 요청하는 관계를 그래프 형태로 표현하고, 순환 대기가 발생하지 않도록 시스템을 관리합니다. 순환 대기가 발생하면 자원을 할당하지 않고, 다른 방법으로 대기 상태를 처리합니다.
  2. 데드락 회피(Deadlock Avoidance):
    • 시스템이 자원을 할당할 때 미래의 요청을 고려하여, 데드락이 발생하지 않도록 자원을 동적으로 할당합니다. 예를 들어, **은행가 알고리즘(Banker's Algorithm)**은 자원을 요청할 때, 그 요청이 데드락을 초래하지 않는지 검사하고, 안전한 경우에만 자원을 할당합니다.
  3. 데드락 탐지(Deadlock Detection):
    • 시스템이 주기적으로 데드락이 발생했는지 탐지하고, 데드락이 발견되면 적절한 조치를 취합니다. 예를 들어, 특정 프로세스를 종료하거나 자원을 회수하는 방법이 있습니다.
  4. 데드락 회복(Deadlock Recovery):
    • 데드락이 발생한 후, 데드락을 해결하기 위해 프로세스를 종료하거나, 자원을 강제로 회수하여 데드락을 해결하는 방법입니다. 예를 들어, 프로세스 강제 종료자원 재할당 등을 통해 데드락 상태를 벗어날 수 있습니다.

4. 데드락 예방법

데드락을 방지하기 위한 몇 가지 전략은 다음과 같습니다:

  • 상호 배제 최소화: 자원에 대한 독점적인 접근을 줄이고, 가능한 경우 공유 가능한 자원을 사용합니다.
  • 점유와 대기 방지: 프로세스가 자원을 요청할 때, 필요한 모든 자원을 한 번에 요청하도록 하여 점유와 대기 상태를 피할 수 있습니다. 그러나 이것은 자원을 낭비할 수 있는 단점이 있습니다.
  • 비선점 방지: 자원을 강제로 반환할 수 있도록 시스템을 설계하여 비선점 조건을 피할 수 있습니다. 예를 들어, 자원을 사용 중인 프로세스가 다른 자원을 요청할 때, 이미 가진 자원을 반환하게 할 수 있습니다.
  • 순환 대기 방지: 자원 요청 순서를 정해두고, 프로세스가 자원을 요청할 때 순서를 따르도록 합니다. 이렇게 하면 순환 대기 조건을 피할 수 있습니다.

5. 데드락과 관련된 용어

  • 자원 할당 그래프(Resource Allocation Graph, RAG): 시스템 내에서 자원의 할당 및 요청 관계를 그래프 형태로 나타낸 것입니다. 이를 통해 데드락이 발생했는지를 탐지할 수 있습니다.
  • 안전 상태(Safe State): 시스템이 데드락을 피할 수 있는 상태를 의미합니다. 즉, 모든 프로세스가 자원을 안전하게 요청할 수 있는 상태입니다.
  • 불안전 상태(Unsafe State): 데드락이 발생할 위험이 있는 상태입니다. 이 상태에서는 자원의 할당을 신중하게 관리해야 합니다.

6. 데드락의 영향

  • 데드락이 발생하면 시스템 자원이 비효율적으로 사용되며, 프로세스 실행이 중단되기 때문에 시스템 성능이 급격히 저하될 수 있습니다. 또한, 데드락 해결을 위한 추가 작업이 필요하기 때문에 시스템의 복잡도관리 비용이 증가합니다.

7. 결론

데드락은 시스템에서 여러 프로세스가 자원을 기다리며 무한 대기에 빠지는 현상입니다. 이를 방지하거나 해결하기 위해서는 상호 배제, 점유와 대기, 비선점, 순환 대기 조건을 잘 관리해야 하며, 자원 할당, 데드락 회피 및 탐지, 회복 등의 기법을 활용하여 시스템이 원활하게 동작하도록 해야 합니다.

728x90

'개발공부 > CS' 카테고리의 다른 글

[운영체제] LRU (Least Recently Used)  (0) 2025.02.16
[운영체제] 메모리구조  (0) 2025.02.16
[운영체제] 컨텍스트 스위칭이란?  (0) 2025.02.16
[운영체제] 스레드란?  (0) 2025.02.16
[운영체제] 프로세스란?  (0) 2025.02.16