[운영체제] 08. Deadlocks

2024. 6. 19. 01:29·Computer Science/OS

What is Deadlock?

  • 세마포어 사용 예제
    • 두 개의 세마포어 S와 Q가 있고, 초기값은 1입니다. 

 

Deadlock : 한 집합의 차단된 프로세스들이 각자 하나의 자원을 잡고 있으며, 동시에 다른 프로세스가 가지고 있는 자원을 얻기 위해 기다리고 있는 상태.

 


Deadlock Characterization(데드락 특성)

  • 시스템 모델링 (System modeling)
    • 프로세스: P1, P2, ..., Pn.
    • 자원 유형(resource types): R1, R2, ..., Rm
      • CPU 사이클, 메모리 공간, I/O 장치, 파일 등.
    • 각 자원 유형 Ri는 Wi 인스턴스를 가짐.
    • 각 프로세스는 다음과 같이 자원을 이용합니다:
      • 요청 (request)
      • 사용 (use)
      • 해제 (release)
  • Deadlock은 네 가지 조건이 동시에 성립할 때 발생할 수 있습니다. (Deadlock can arise, 무조건 발생하는 것이 아님)
    • 상호 배제 (Mutual exclusion)
      • 한 번에 하나의 프로세스만 자원을 사용할 수 있음.
    • 점유 및 대기 (Hold and wait)
      • 적어도 하나의 자원을 보유하고 있는 프로세스가 다른 프로세스가 보유하고 있는 추가 자원을 획득하기 위해 대기하고 있다.
    • 비선점 (No preemption)
      • 자원은 이를 보유한 프로세스에 의해 자발적으로만 해제될 수 있음.
    • 순환 대기 (Circular wait)
      • P0, P1, ..., Pn의 대기 프로세스 집합이 존재하며, P0는 P1이 보유한 자원을 기다리고, P1은 P2가 보유한 자원을 기다리며, ... , Pn-1은 Pn이 보유한 자원을 기다리고, Pn은 P0가 보유한 자원을 기다림.
  • 자원 할당 그래프 (Resource allocation graph)
    • V는 두 가지 유형으로 나뉩니다:
      • P = {P1, P2, ..., Pn}, 시스템의 모든 프로세스 집합.
      • R = {R1, R2, ..., Rm}, 시스템의 모든 자원 유형 집합.
    • E도 두 가지 유형으로 나뉩니다:
      • Pi → Rj : 요청 (request)
      • Rj → Pi : 할당 (assignment)
  • 예제 (Examples)
    • Pi가 Rj의 인스턴스를 요청함.
      • 화살표 방향 : 프로세스에서 리소스로
    • Pi가 Rj의 인스턴스를 보유함.
      • 화살표 방향 : 리소스에서 프로세스로

 

  • 자원 할당 그래프를 통한 Deadlock 예제 
    • (a) Deadlock 없음 (No deadlock)
    • (b) Deadlock 발생 (Deadlock)
    • (c) Deadlock 없음 (No deadlock)
    • 그래프에 사이클이 없으면 Deadlock 없음.
    • 그래프에 사이클이 있으면,
      • 자원 유형 당 인스턴스가 하나만 있으면 Deadlock 발생.
      • 자원 유형 당 인스턴스가 여러 개 있으면 Deadlock 발생 가능성.
      • (글 맨위에서 말했듯이 resource(R)에는 여러 개의 인스턴스(W)가 있을 수 있음 )

Methods for Handling Deadlocks

Deadlock 처리 방법

  • 예방 (Prevention)
    • 시스템이 Deadlock 상태에 진입하지 않도록 합니다.
    • 네 가지 조건 중 적어도 하나가 성립되지 않도록 보장합니다.
  • 회피 (Avoidance)
    • 시스템이 Deadlock 상태에 진입하지 않도록 합니다.
    • 각 프로세스가 자원을 어떻게 사용할 것인지에 대한 사전 정보를 필요로 합니다.
  • 탐지 및 복구 (Detection and recovery)
    • 시스템이 Deadlock 상태에 진입하도록 허용한 다음 이를 복구합니다.

Deadlock Prevention

Deadlock 예방

  • 네 가지 조건 중 적어도 하나가 성립되지 않도록 보장합니다.
    • 상호 배제 (Mutual Exclusion)
      • 상호 배제를 부정하는 것은 불가능합니다.
    • 점유 및 대기 (Hold and Wait)
      • 프로세스가 실행을 시작하기 전에 모든 자원을 요청하고 할당받도록 요구합니다.
    • 비선점 (No Preemption)
      • 자원을 보유한 프로세스가 다른 자원을 요청하고 해당 자원이 즉시 할당될 수 없는 경우, 현재 보유 중인 모든 자원을 해제합니다.
      • 프로세스는 요청한 새로운 자원과 이전 자원을 모두 다시 획득할 수 있을 때만 재시작됩니다.
    • 순환 대기 (Circular Wait)
      • 모든 자원 유형에 총 순서를 부여하고, 각 프로세스가 증가하는 순서로 자원을 요청하도록 합니다.


Deadlock Avoidance

Deadlock 회피

  • Deadlock 회피 알고리즘 (Deadlock avoidance algorithm)
    • 프로세스가 사용 가능한 자원을 요청할 때, 시스템은 "즉시 할당이 시스템을 안전한 상태로 유지하는지" 결정해야 합니다.
      • 시스템이 각 프로세스에 자원을 할당하고 Deadlock을 피할 수 있는 순서가 있다면 상태는 안전합니다.
    • 시스템이 추가적인 사전 정보를 가지고 있어야 합니다.
  • 시스템이 안전 상태(safe state)에 있으면 Deadlock이 없습니다.
  • 시스템이 비안전 상태(unsafe state)에 있으면 Deadlock이 발생할 가능성이 있습니다.

 

  • 자원 할당 그래프 (Resource allocation graph)
    • 예약 간선 (Claim edge) Pi → Rj:
      • Pj가 Rj를 요청할 수 있음을 나타냅니다. 점선으로 표시됩니다.
      • (프로세스가 새로 요구하는 자원)
    • 예약 간선이 요청 간선(request edge)으로 변환됩니다:
      • 프로세스가 자원을 요청할 때.
    • 요청 간선이 할당 간선(assignment edge)으로 변환됩니다:
      • 자원이 프로세스에 할당될 때.
    • 할당 간선이 예약 간선으로 재변환됩니다:
      • 프로세스가 자원을 해제할 때.
  • 참고 [Note]
    • 여러 인스턴스의 자원 유형이 있는 경우 은행원 알고리즘(banker's algorithm)을 사용합니다.

Claim edge Pi -> Rj

  • 프로세스 Pi가 자원 Rj를 미래에 요청할 수 있음을 뜻함 (점선으로 표시)
  • 프로세스가 해당 자원 요청 시 request edge로 바뀜 (실선)
  • Rj 가 realse 되면 assignment edge는 다시 claim edge로 바뀐다

Unsafe state(비안전 상태) 예시

 

R2에 대한 P2의 request를 grant 하면 사이클이 형성되어 데드락의 발생 가능성이 생기는 것

 

Deadlock Detection & Recovery

Deadlock 탐지 및 복구

  • Allow system to enter deadlock state.
    • 시스템이 deadlock에 들어가도록 허용합니다.
  • Detection algorithm.
    • 탐지 알고리즘
      • 주기적으로 알고리즘을 호출하여 그래프에서 사이클을 검색합니다.
        • 사이클이 존재하면 deadlock이 발생한 것입니다.
      • [참고] 자원 유형의 인스턴스가 여러 개인 경우 더 복잡한 알고리즘을 사용합니다.
  • Recovery scheme.
    • 복구 계획
      • 프로세스 종료
        • 모든 deadlock 상태의 프로세스를 중단합니다.
        • deadlock 사이클이 제거될 때까지 한 번에 하나의 프로세스를 중단합니다. (피해의 최소화)
      • 자원 선점
        • 프로세스로부터 일부 자원을 선점하고, 이러한 자원을 다른 프로세스에 할당하여 deadlock 사이클이 깨질 때까지 진행합니다.

'Computer Science > OS' 카테고리의 다른 글

[운영체제] 10. Virtual Memory  (0) 2024.06.19
[운영체제] 09. Main Memory  (0) 2024.06.19
[운영체제] 07. Synchronization Examples  (0) 2024.06.19
[운영체제] 06. Synchronization Tools  (0) 2024.06.19
[운영체제] 05. CPU Scheduling  (0) 2024.06.19
'Computer Science/OS' 카테고리의 다른 글
  • [운영체제] 10. Virtual Memory
  • [운영체제] 09. Main Memory
  • [운영체제] 07. Synchronization Examples
  • [운영체제] 06. Synchronization Tools
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Spring
        • MVC
        • DB
        • 핵심 원리
        • JPA
      • WEB
        • HTML
        • CSS
        • HTTP
        • Application
      • Computer Science
        • Network
        • Database
        • OS
        • 시스템 프로그래밍
        • 컴퓨터구조
      • Algorithm
        • Divide&Conquer
        • Sort
        • Greedy
        • DP
        • Backtracking
        • NP-Complete
        • Graph
      • Data Structure
        • 자료구조
        • C++ STL
        • Java Collection
      • 소프트웨어 공학
        • 시험 공부 정리
        • Theorem
      • Programming Language
        • Python
        • Java
        • C
        • C++
        • Rust
        • Theory
      • Unix_Linux
        • Common
      • React
      • PS
        • BOJ
        • Tip
        • 프로그래머스
        • CodeForce
      • Book Review
        • Clean Code
      • Math
        • Linear Algebra
      • AI
        • DL
        • ML
        • DA
        • Concepts
      • 우아한테크코스
        • 프리코스
      • Project Review
      • LegacyPosts
      • Android
      • Apple
        • Mac
        • IPhone
        • IPad
      • 모니터
      • Diary
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
lumana
[운영체제] 08. Deadlocks
상단으로

티스토리툴바