오늘부터 공부한다
(OS)교착상태 (Deadlock) 본문
교착 상태 (Deadlock)의 개념
멀티 프로그래밍 환경에서 한정된 자원을 사용하려고 서로 경쟁하는 상황이 발생 할 수 있다.
어떤 프로세스가 자원을 요청 했을 때 그 시각에 그 자원을 사용할 수 없는 상황이 발생할 수 있고
그 때는 프로세스가 대기 상태로 들어 간다.
대기 상태로 들어간 프로세스들이 실행 상태로 변경 될 수 없을 때 이러한 상황을 교착 상태라 한다.
즉 교착 상태는
두 개 이상의 프로세스가 아무리 기다려도 자원을 사용할 수 없는 무한 대기 상태를 말한다.
교착상태의 발생 원인
교착 상태는 한 시스템 내에서 다음의 네 가지 조건을 모두 동시에 충족할때 발생 한다.
- 따라서 네 가지 조건이 하나라도 성립하지 않아야 교착 상태를 해결할 수 있다.
원인 | 설명 |
상호배제(Mutual Exclusion) | - 한 번에 한개의 프로세스만이 공유 자원을 사용할 수 있어야 한다. |
점유와 대기(Block & Wait) | - 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다. |
비선점(Non-Preemption) | -다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야한다. |
환형대기(Circular Wait) | - 공유자원을 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야한다. |
교착상태 해결 방법
교착상태 해결 방법에는 예방, 회피, 회복, 무시의 4가지 방법이 있다.
1. 예방(Prevention)
교착상태 발생 조건은 위의 네 가지 경우를 모두 만족시켰어야했다.
교착 상태를 해결하기 위해서는 네 가지 조건중 하나만 해결하면 된다.
상호 배체 부정 : 한 번에 여러 개의 프로세스가 공유자원을 사용할 수 있도록 한다.
점유 및 대기 부정 : 프로세스가 실행되기 전 필요한 모든 자원을 할당하여 프로세스 대기를 없애거나 자원이 점유되지 않은 상태에서만 자원을 요구해야한다.
비선점 부정 : 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 한다.
환형대기 부정 : 자원을 선형 순서로 분류하여 고유 번호를 할당하고, 각 프로세스는 현재 점유한 자원의 고유 번호보다 앞이나 뒤 어느 한 쪽 방향으로만 자원을 요구하게 한다.
자원의 효율성이 떨어지고 비용이 많이 드는 문제점
성능에 큰 영향을 미칠 수 있다.
2. 회피 (Avoidance)
교착 상태의 발생조건을 없애기보다는 발생하지 않도록 알고리즘을 적용하는 방법으로,
자원 할당 그래프 알고리즘과 은행원 알고리즘이 있다.
은행원 알고리즘
1. 은행원 알고리즘은 다익스트라가 제안한 기법으로, 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는데서 유래한 기법이다.
2. 각 프로세스에게 자원을 할당하여 교착상태가 발생하지 않으며 모든 프로세스가 완료될 수 있는 상태를 안전상태, 교착상태가 발생할 수 있는 상태를 불안전 상태라고 한다.
3. 은행원 알고리즘을 적용하기 위해서는 자원의 양과 사용자(프로세스) 수가 일정해야 한다.
4. 은행원 알고리즘은 프로세스의 모든 요구를 유한한 시간안에 할당하는 것을 보장한다.
성능에 큰 영향을 미칠 수 있다.
3. 회복 (Recovery)
교착상태가 발생하는 것을 막지 않고, 만약 교착상태가 발생하면 발생 이후에 문제를 해결하는 방법
교착상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것을 의미한다.
프로세스 종료
교착상태에 있는 프로세스를 종료하는 것으로, 교착상태에 있는 모든 프로세스를 종료하는 방법과 교착상태에 있는 프로세스들을 하나씩 종료해가며 교착상태를 해결하는 방법이다.
자원선점
교착상태의 프로세스가 점유하고 있는 자원을 선점하여 다른 프로세스에게 할당하며, 해당 프로세스를 일시 정지시키는 방법입니다. 우선순위가 낮은 프로세스, 수행된 정도가 적은 프로세스, 사용되는 자원이 적은 프로세스 등을 위주로 해당 프로세스의 자원을 선점한다.
※ 자원 선점시 고려사항
1. 자원 을 선점할 프로세스 선택 문제 : 최소의 피해를 줄 수 있는 프로세스를 선택한다.
2. 자원을 선점한 프로세스의 복귀 문제 : 자원이 부족한 상태이므로 대부분 일시 중지시키고 다시 시작하는 방법을 사용한다.
3. 기아 현상 문제 : 한 프로세스가 계속하여 자원 선점 대상이 되지 못하도록 고려해야 한다.
4. 무시 (Ignore)
교착상태를 해결할때 문맥교환에 의한 오버헤드로 성능 저하가 생긴다.
교착상태에 의한 성능 저하보다 이를 해결할 때의 성능저하가 큰 경우 그냥 무시한다.
'소프트웨어 공학' 카테고리의 다른 글
QA와 QC (0) | 2019.10.16 |
---|---|
디자인 패턴 (0) | 2019.10.15 |
블록체인(Block Chain) (0) | 2019.10.14 |
클라이드 컴퓨팅 (Cloud Computing)이란? (0) | 2019.10.14 |
Use Case Diagram(유스케이스 다이어그램) (0) | 2019.10.08 |