Software Courses/Operating System

[Deadlock] Deadlock Solutions

김 정 환 2020. 12. 6. 23:15
반응형

Deadlock prevention methods

    - 4개의 deadlock 발생 필요 조건 중 하나를 제거

 

1) Exclusive use of resources 조건 제거

    - 모든 자원을 공유 자원으로 사용

    - 독립적 실행이 불가능

    - 비현실적

 

2) Non-preemptible resources 조건 제거

    - 모든 자원을 선점 가능하게 사용

    - 선점 당할 경우 모든 자원 반납하고 다시 처음부터 시작 -> 비효율

    - 선점 당할 경우 모든 자원 반납하고 그 지점 저장 -> 복잡해짐

    - 비현실적

 

3) Hold and wait 조건 제거

    - 필요한 자원을 한 번에 할당 받기

    - 필요하지 않는 상황에도 자원을 가지고 있음

    - 자원 낭비

 

4) Circular wait 조건 제거

    - 자원들에게 순서를 부여하여 순서대로 사용

    - 사용할 수 있는 자원이 있어도 사용 못함

    - 예시 : P1은 R1, R2, R3를 사용할 예정. P2는 R1, R2 사용할 예정. P1이 먼저 R1을 요청 -> P2는 R1을 사용 못하니 대기 -> P2는 R3를 사용할 수 있으나 사용 못하므로 자원 낭비

    - 자원 낭비

 

 

 

Deadlock avoidance methods

    - 시스템의 상태를 계속 감시

    - 시스템을 항상 safe state로 유지

        * safe state : 모든 프로세스가 정상적으로 종료 가능한 상태

        * unsafe state : deadlock 상태가 될 가능성이 있는 상태

    - 가정 상황이 있기 때문에 비실용성

 

   - Avoidance 방법을 위한 4가지 가정

        * 프로세스의 수가 고정

        * 자원의 종류와 수가 고정

        * 프로세스가 요구하는 자원 및 최대 수량을 알고 있음

        * 프로세스는 자원을 사용 후 반드시 반납

 

    - 장점

        * Deadlock 발생하지 않음

 

    - 단점

        * high overhead : 항상 시스템을 감시하기 때문에

        * low resource utilization : additional need(아래 표에서)는 무조건 필요한 자원이 아닌 추정 값, 따라서 필요없는 자원을 가지고 있을 수 있어서 자원 활용도가 낮음 

    

 

 

 

1) Banker's algorithm

    - 한 종류의 자원이 여러 개 일 때

 

    - 동작

        * 자원 종류 : R, 자원 개수: 10, 프로세스 개수: 3

        * 현재 자원 할당 상태 : P1 - 1, P2 - 5, P3 - 2

        * 여유 자원 상태 : 2

        * 방법 : P1이 자원 1개를 요청 -> 자원 1개를 할당한다고 가정했을 때, 이후 나머지 자원으로 safe sequence를 만들 수 있으면 빌려주기, 아니면 빌려주지 않음

 

    - 예시 1

        * 자원 종류 : R, 자원 개수: 10, 프로세스 개수: 3

        * 현재 자원 할당 상태 : P1 - 1, P2 - 5, P3 - 2

        * 여유 자원 상태 : 2

        * 실행 종료 순서 : P1 -> P2 -> P3

        * 방법 : P1에게 여유 자원 2개를 할당하면, P1은 일을 마치고 자원 3개를 반환 -> P3에게 자원 3개를 할당하면, P3은 일을 마치고 자원 5개를 반환 -> P2 동일

 

    - 예시 2

        * 자원 종류 : R, 자원 개수: 10, 프로세스 개수: 3

        * 현재 자원 할당 상태 : P1 - 1, P2 - 5, P3 - 2

        * 여유 자원 상태 : 2

        * 방법 : P1, P2, P3에게 여유 자원 2개를 할당해도 safe sequence를 만들 수 없음 -> deadlock될 가능성

 

 

 

2) Habermann's algorithm

    - banker's algorithm의 확장판

    - 여러 종류의 자원을 고려

    - 동작은 동일

 

    - 예시

        * 자원 종류 : Ra, Rb, Rc

        * 각각의 자원 개수 : 10, 5, 7

        * 프로세스의 개수 : 5

        * 방법 : 처음 여유 자원 개수는 각각 2, 3, 0 -> 여유 자원으로 할당할 수 있는 프로세스는 P2와 P4 -> 과정 동일

 

 

 

 

Deadlock detection and deadlock recovery methods

    - 교착 상태 탐지 및 복구

 

1) Deadlock detection

    - Graph reduction : Resource allocation graph(RAG)를 사용해서 주기적으로 deadlock 탐지

        * RAG : 방향 그래프를 이용하는 방법

        * Node가 많을 경우, 검사 주기가 짧을 경우 high overhead

 

        * 동작

            + unblocked process에 연결된 모든 edge 제거

                ~ unblocked process : 자원을 요청했을 때 자원을 할당 받을 수 있는 프로세스

            + 위 과정을 반복

            + 모든 edge가 지워지면 deadlock 아님, edge가 남으면 deadlock 상태

초기 상태
unblocked process인 P1의 간선 제거
모든 간선이 지워짐으로 deadlock 아님

 

 

 

2) Deadlock recovery

    - deadlock 검출 후 해결하는 과정

    - checkpoint-restart method

        * 아래 두 방법은 모두 프로세스를 강제 종료하기 때문에 프로세스의 수행 중 특정 지점마다 context 저장

        * Rollback을 위해 사용

        * 프로세스 강제 종료 후, 가장 최근 checkpoint에서 재시작

 

 

(1) Process termination

    - deadlock 상태에 있는 프로세스를 강제 종료, 이후 다시 재시작

    - termination cost model : 종료 시킬 deadlock 상태의 프로세스 선택

        * cost 종류 : 우선 순위, 프로세스 종류, 남은 수행 시간, 종료 비용 등

 

(2) Resource preemption

    - Deadlock 상태 해결 위해 선점할 자원 선택, 이후 자원을 빼앗긴 프로세스는 강제 종료

    - termination cost model : 동일

 

 

 

본 내용은 한국기술교육대학교 김덕수 교수님의 유튜브 강의를 듣고 정리한 내용입니다.
반응형