교착상태: Difference between revisions
From IT위키
Line 33: | Line 33: | ||
* 사전에 교착상태가 발생하지 않도록 조치하거나, 발생한 뒤에 고치는 방법이 있다. 대표적으로 아래 세가지로 나눈다. | * 사전에 교착상태가 발생하지 않도록 조치하거나, 발생한 뒤에 고치는 방법이 있다. 대표적으로 아래 세가지로 나눈다. | ||
# '''방지(Prevention)''' | # '''방지(Prevention)''' | ||
#* 할당 구조 측면에서, 교착상태가 발생할 수 있는 요구조건을 만족시키지 않게 함으로써 | #* 할당 구조 측면에서, 교착상태가 발생할 수 있는 요구조건을 만족시키지 않게 함으로써 교착상태를 방지한다. | ||
# '''회피(Avoidance)''' | # '''회피(Avoidance)''' | ||
#* 리소스 할당의 측면에서, 교착상태가 발생할 가능성이 있는 자원 할당(unsafe allocation)을 하지 않는다. | #* 리소스 할당의 측면에서, 교착상태가 발생할 가능성이 있는 자원 할당(unsafe allocation)을 하지 않는다. | ||
Line 39: | Line 39: | ||
# '''탐지 및 회복(Detection and Recovery)''' | # '''탐지 및 회복(Detection and Recovery)''' | ||
#* 교착상태가 발생 할 수 있도록 놔 두고 교착상태가 발생 할 경우 찾아내어 고친다. | #* 교착상태가 발생 할 수 있도록 놔 두고 교착상태가 발생 할 경우 찾아내어 고친다. | ||
== 참고 == | == 참고 == |
Revision as of 16:21, 8 July 2020
개요
- 교착상태 : Deadlock
- 두개 이상의 프로세스가 서로의 작업이 끝나기만을 기다리고 있어 둘다 영원히 끝나지 않는 상황을 가리킨다.
예시
semaphores A and B, initialized to 1
Process1 | Process2 |
wait(A); | wait(B); |
wait(B); | wait(A); |
교착상태의 4가지 필요조건
- 아래 4가지 조건[1]이 모두 만족하면 데드락이 발생할 가능성이 있다.
- 하나라도 만족하지 않으면 절대 발생하지 않는다.
- 상호 배제(Mutual exclusion)
- 한 리소스는 한번에 한 프로세스만이 사용 할 수 있음
- 점유와 대기(Hold and wait)
- 어떤 프로세스가 하나 이상의 리소스를 점유하고 있으면서 다른 프로세스가 가지고 있는 리소스를 기다리고 있음
- 비선점(No preemption)
- 프로세스가 테스크를 마친 후 리소스를 자발적으로 반환할 때 까지 기다림 (강제로 빼앗지 않는다)
- 환형 대기(Circular wait)
- Hold and wait관계의 프로세스들이 서로를 기다림
교착상태의 방지법
- 사전에 교착상태가 발생하지 않도록 조치하거나, 발생한 뒤에 고치는 방법이 있다. 대표적으로 아래 세가지로 나눈다.
- 방지(Prevention)
- 할당 구조 측면에서, 교착상태가 발생할 수 있는 요구조건을 만족시키지 않게 함으로써 교착상태를 방지한다.
- 회피(Avoidance)
- 리소스 할당의 측면에서, 교착상태가 발생할 가능성이 있는 자원 할당(unsafe allocation)을 하지 않는다.
- 대표적으로 은행원 알고리즘이 있다.
- 탐지 및 회복(Detection and Recovery)
- 교착상태가 발생 할 수 있도록 놔 두고 교착상태가 발생 할 경우 찾아내어 고친다.
참고
- 초기 원문 출처 : [지식잡식 블로그]
- ↑ 순서나 우선순위는 없다.