[컴퓨터공학] 선점 자원과 비선점 자원을 통한 교착상태의 이해

컴퓨터 시스템에서 교착상태(Deadlock)는 다수의 프로세스가 서로 자원을 기다리며 무한정 대기하는 상태를 말합니다. 이는 시스템의 효율성과 안정성을 크게 저해할 수 있는 심각한 문제입니다. 교착상태를 이해하고 예방하는 데 있어서 선점 자원(Preemptible Resource)과 비선점 자원(Non-preemptible Resource)의 개념은 매우 중요합니다. 이번 글에서는 이들 개념을 바탕으로 교착상태에 대해 자세히 알아보겠습니다.

교착상태(Deadlock)

1. 교착상태란?

교착상태는 여러 프로세스가 서로 다른 자원을 점유한 채, 다른 프로세스가 점유한 자원을 기다리며 무한정 대기하는 상황을 말합니다. 이는 시스템 자원의 비효율적 사용을 초래하며, 시스템 전체의 성능을 저하 시킬 수 있습니다.

교착상태가 발생하기 위한 네 가지 조건은 다음과 같습니다

  1. 상호 배제(Mutual Exclusion): 자원은 한 번에 하나의 프로세스만 사용할 수 있습니다.
  2. 점유 대기(Hold and Wait): 자원을 점유한 프로세스가 다른 자원을 기다리며 대기합니다.
  3. 비선점(Non-preemption): 자원이 강제로 회수되지 않습니다.
  4. 순환 대기(Circular Wait): 프로세스들이 순환 형태로 자원을 기다립니다.

2. 선점 자원과 비선점 자원

교착상태를 이해하기 위해서는 선점 자원과 비선점 자원의 개념을 명확히 이해하는 것이 중요합니다.

선점 자원(Preemptible Resource)

선점 자원은 필요에 따라 강제로 회수할 수 있는 자원입니다. 즉, 한 프로세스가 사용 중인 자원을 다른 프로세스가 강제로 빼앗을 수 있습니다. 대표적인 선점 자원으로는 CPU와 메모리가 있습니다. 이러한 자원은 운영체제가 스케줄링에 따라 강제로 회수하고 다른 프로세스에 할당할 수 있습니다.

비선점 자원(Non-preemptible Resource)

비선점 자원은 한 번 할당되면 프로세스가 자발적으로 해제할 때까지 회수할 수 없는 자원입니다. 즉, 자원을 점유한 프로세스가 자원을 해제할 때까지 다른 프로세스는 해당 자원을 사용할 수 없습니다. 대표적인 비선점 자원으로는 프린터, 파일 시스템, 네트워크 연결 등이 있습니다.

3. 선점 자원과 비선점 자원의 교착상태

교착상태는 주로 비선점 자원을 사용하는 프로세스들 사이에서 발생할 수 있습니다. 선점 자원을 사용하는 경우에는 자원을 강제로 회수할 수 있으므로 교착상태가 발생할 가능성이 적습니다.

다음은 비선점 자원을 사용하는 두 프로세스 간의 교착상태 예시입니다:

  1. 프로세스 A가 프린터를 점유하고, 파일 시스템을 요청합니다.
  2. 프로세스 B가 파일 시스템을 점유하고, 프린터를 요청합니다.
  3. 프로세스 A와 B는 서로가 점유한 자원을 기다리며 무한정 대기합니다.

이 상황에서 두 프로세스는 서로가 점유한 자원을 해제할 때까지 기다리므로 교착상태가 발생합니다.

4. 교착상태 예방과 회피

교착상태를 예방하고 회피하는 다양한 방법이 있습니다. 주요 기법은 다음과 같습니다:

교착상태 예방(Deadlock Prevention)

교착상태 예방은 교착상태 발생 조건 중 하나 이상을 제거하는 방법입니다. 대표적인 방법으로는 다음이 있습니다:

  1. 상호 배제 조건 제거: 자원을 여러 프로세스가 동시에 사용할 수 있도록 합니다. 예: 읽기 전용 자원.
  2. 점유 대기 조건 제거: 프로세스가 자원을 요청할 때, 이미 점유한 자원을 모두 해제하고 새로 요청합니다.
  3. 비선점 조건 제거: 자원이 비선점 자원인 경우, 프로세스가 자원을 강제로 회수할 수 있도록 합니다.
  4. 순환 대기 조건 제거: 자원에 일관된 순서를 부여하여, 프로세스가 자원을 요청하는 순서를 정합니다.

교착상태 회피(Deadlock Avoidance)

교착상태 회피는 시스템 상태를 동적으로 검사하여 교착상태가 발생하지 않도록 자원을 할당하는 방법입니다. 대표적인 알고리즘으로는 은행원 알고리즘(Banker’s Algorithm)이 있습니다.

  • 프로세스가 자원을 요청할 때, 시스템이 안전 상태(Safe State)에 있는지 확인합니다.
  • 안전 상태는 모든 프로세스가 기한 내에 자원을 할당받아 완료될 수 있는 상태를 의미합니다.
  • 시스템이 안전 상태에 있을 경우에만 자원을 할당합니다.

5. 교착상태 탐지와 회복

교착상태를 예방하거나 회피하는 것이 어려운 경우, 교착상태를 탐지하고 회복하는 방법을 사용할 수 있습니다.

교착상태 탐지(Deadlock Detection)

교착상태 탐지 알고리즘은 주기적으로 시스템 상태를 검사하여 교착상태가 발생했는지 확인합니다. 대표적인 방법은 **자원 할당 그래프(Resource Allocation Graph)**를 사용하는 것입니다.

자원 할당 그래프:

  • 노드: 프로세스와 자원을 나타냅니다.
  • 간선: 자원의 할당 상태와 요청 상태를 나타냅니다.
  • 순환이 발생하면 교착상태가 발생한 것입니다.

교착상태 회복(Deadlock Recovery)

교착상태가 탐지되면, 이를 해결하기 위한 회복 방법을 사용합니다. 대표적인 방법은 다음과 같습니다:

  1. 프로세스 종료: 교착상태에 있는 프로세스를 강제로 종료하여 자원을 해제합니다.
  2. 자원 회수: 프로세스에서 자원을 강제로 회수하여 다른 프로세스에 할당합니다. 이를 위해 선점 가능한 자원으로 변환할 수 있습니다.

6. 실제 사례

데이터베이스 시스템에서 다수의 트랜잭션이 동일한 자원을 동시에 요청할 때 교착상태가 발생할 수 있습니다. 또한, 다중 사용자 환경에서 프린터와 같은 공유 자원을 사용할 때도 교착상태가 발생할 수 있습니다.

결론

교착상태는 여러 프로세스가 자원을 기다리며 무한정 대기하는 상태로, 시스템의 성능과 안정성을 저하시킬 수 있는 심각한 문제입니다. 선점 자원과 비선점 자원의 개념을 이해하고, 이를 바탕으로 교착상태를 예방, 회피, 탐지, 회복하는 방법을 적용함으로써 시스템의 효율성과 안정성을 보장할 수 있습니다.

Leave a Comment