Dead Lock ( 교착 상태 )

2025. 5. 27. 19:38·Software Engineering/Software Development Principles

교착 상태란 여러 프로세스나 스레드가 자원을 요청할 때 발생할 수 있는 문제입니다. 각 프로세스가 다른 프로세스가 보유한 자원을 기다리면서, 그 자원들이 동시에 다른 프로세스에 의해 요구되어 아무도 진행하지 못하고 영원히 기다리는 상태를 말합니다. 흔히 다중프로세스나 다중스레드에 발생할 수 있는 문제이며 이 교착 상태가 발생할 수 있는 조건은 다음과 같이 있습니다.

  1. 상호배제 : 하나의 자원을 동시에 하나의 프로세스만 사용할 수 있어야 한다.
  2. 점유대기 : 어떤 프로세스가 하나 이상의 리소스를 점유하고 있으면서 다른 프로세스가 가지고 있는 리소스를 요구하고 있습니다.
  3. 비선점 : 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없어야 합니다.
  4. 환형대기 : 각 프로세스는 원을 그리며 다음 프로세스가 요구하는 자원을 가지고 있습니다.

교착 상태 예방

  • 상호배제 조건의 제거
    한 번에 하나의 프로세스만이 특정 자원을 사용할 수 있도록 하는 것입니다.  이 조건을 실질적으로 불가능한 경우가 많으니, 가능한 경우에는 자원 공유를 통해 해결 할 수 있습니다.
  • 점유와 대기 조건의 제거
    프로세스가 자원을 요청할 때, 다른 어떤 자원도 보유하지 않은 상태에서만 요청할 수 있도록 하는 방법입니다.  이 방법은 자원의 활용성을 낮출 수 있고 프로세스가 요구하는 자원을 파악하는 데에 대한 비용과 같은 단점이 있습니다.
  • 비선점 조건의 제거
    이미 할당된 자원을 프로세스가 사용중일때 다른 프로세스가 강제로 회수 할 수 있도록 합니다. 이 방법은 우선순위가 높은 프로세스부터 우선적으로 자원을 할당하며 자원의 우선순위 관리가 필요합니다.
  • 환형 대기 조건의 제거
    자원에 순서를 부여하고, 각 프로세스가 오름차순으로만 자원을 요청할 수 있도록 합니다.

교착 상태 회피

교착 상태 회피는 교착 상태를 무분별한 자원 할당으로 인해 발생했다고 간주하며 교착 상태가 발생하는 조건인지 확인하면서 적절히 회피하는 방법입니다. 프로세스가 자원을 요청할 때마다 시스템의 상태를 검사하여 그 요청이 시스템을 교착상태로 만들 가능성이 있는지를 판단합니다. 시스템을 교착 상태로 이끌 가능성이 있다면 요청을 거부 혹은 지연시키게 됩니다.

자원의 총 갯수와 할당된 자원의 수를 기준으로 시스템을 안정 불안정 상태로 나누고 시스템을 안정상태로 유지하는 은행원 알고리즘(Banker`s) 이 있습니다.


교착 상태 무시

예방 혹은 회피기법을 프로그래밍해서 넣으면 성능에 영향이 있기에 특별한 조치를 취하지 않는 방법입니다. 이를 타조 알고리즘( Ostrich Algorithm, 비용이 큰 예외 처리나 동기화를 일부러 생략하고 드물게 생기는 문제는 무시) 이라고 하며 교착 상태의 발생 확률이 낮은 상황에서 사용합니다. 유닉스나 윈도우 등의 운영체제는 이 방법을 사용합니다.


교착 상태 탐지 

교착상태 탐지는 주기적으로 또는 특정 조건 하에서 시스템을 검사하여 교착상태의 존재 여부를 확인하는 과정입니다. 탐지 알고리즘은  각 자원 유형이 하나의 인스턴스만 가지고 있는 경우에 그래프 변형을 사용하여 각 프로세스의 자원 요청이 안전 상태를 유지할 수 있는지 결정하는 자원 할당 그래프 알고리즘으로 확인할 수 있습니다.


교착 상태 회복

교착 상태를 탐지한 후에는 시스템을 다시 정상 상태로 복구해야 합니다. 교착 상태에서 회복하는 방법에는 선점을 통한 회복과 프로세스의 강제 종료를 통한 회복이 있습니다.

'Software Engineering > Software Development Principles' 카테고리의 다른 글

Hash Code (해시 코드)  (0) 2025.05.26
Process & Thread(프로세스 & 스레드)  (0) 2025.05.22
Callback Function (콜백 함수)  (0) 2025.05.21
큐 (Queue)  (0) 2025.05.19
Virtual Memory ( 가상 메모리 )  (0) 2025.05.16
'Software Engineering/Software Development Principles' 카테고리의 다른 글
  • Hash Code (해시 코드)
  • Process & Thread(프로세스 & 스레드)
  • Callback Function (콜백 함수)
  • 큐 (Queue)
Mr.Vulpes
Mr.Vulpes
여우비가 내리는 시간입니다.
  • Mr.Vulpes
    여우비 개발실
    Mr.Vulpes
  • 전체
    오늘
    어제
    • Browse All Categories (41) N
      • Unreal (10)
        • Core Concepts (7)
        • Unreal For C++ (3)
      • C++ Programming (3) N
        • C Basic (3) N
      • DirectX (3) N
      • Math & Physics (3)
        • Vectors (3)
      • Software Engineering (22) N
        • Software Development Princi.. (18) N
        • Design Pattern (3)
  • hELLO· Designed By정상우.v4.10.3
Mr.Vulpes
Dead Lock ( 교착 상태 )
상단으로

티스토리툴바