설명 순서는 다음과 같습니다.
1. 데드락이란
2. 데드락의 발생 조건
3. 데드락 해결 방법
1. 데드락이란
- 두 개 이상의 프로세스가 서로가 가진 리소스를 기다려서 더 이상 진행되지 못하는 상태
2. 데드락의 발생 조건
- 아래의 4가지 조건을 모두 만족해야 데드락이 발생함
- 조건
① 상호 배제 : 한 리소스는 한번에 한 프로세스(스레드)만 사용할 수 있음. 동시에 같이 사용할 수 없음.
② 점유 대기 : 한 리소스를 점유하고 다른 프로세스(스레드)가 사용하는 리소스를 기다리는 상태.
③ 비선점 : 다른 프로세스가 사용하는 리소스를 강제로 빼앗을 수 없음.
④ 순환 대기 : 프로세스들이 순환 형태로 서로의 자원을 기다리고 있는 상태.
3. 데드락 해결 방법
- 해결 방법은 크게 3가지로 나누어 볼 수 있음. 예방, 회피, 탐지 & 회복.
- 예방은 데드락 발생 조건 중 하나라도 만족하지 못하게 해서, 데드락의 발생을 예방하는 방법.
- 회피는 자원을 할당하기 전에, 할당하더라도 데드락이 발생하지 않는지 확인 후 자원을 할당하는 방법.
- 탐지 & 회복은 데드락이 발생하게끔 둔 다음, 회복하는 방법.
- 예방
① 상호 배제를 부정 : 리소스를 같이 사용할 수 있게끔 만들어야함. 그렇지만, 이럴 경우 동기화 문제 발생. 사실상 불가능한 방법
② 점유 대기를 부정 : 사용할 리소스를 모두 얻은 후에 진행 가능. 대기하는 상황을 없애는 것임. 하지만, 지금 당장 사용하지 않는 리소스를 가져가는 바람에 다른 프로세스는 이 리소스를 사용하지 못함. 리소스 사용효율이 떨어짐. 또한, 사용할 리소스가 인기가 많아서 한꺼번에 확보하기가 쉽지 않다면, 진행할 수 없음.
③ 비선점을 부정 : 다른 프로세스가 리소스를 강제로 빼앗을 수 있게 만듬.(기아현상 발생 가능할 듯)
④ 순환 대기를 부정 : 자원에 번호를 붙이고, 번호가 작은 것부터 요청할 수 있도록 하는 것
- 회피
① 리소스를 요청했을 때, 데드락이 발생할 가능성이 있는지 확인 후에 없으면 할당하는 방법
② 리소스를 요청할 때마다 특별한 알고리즘으로 매번 확인해야하는 오버헤드가 발생함
③ 미리 어떤 자원을 요구할 지 알아야 함
- 탐지 & 회복
① 자원 할당 상태를 파악하여, 데드락이 발생했는지 탐지한 후에, 데드락을 해결(회복)하는 방법
② 데드락을 탐지하는 방법은 자원 할당 그래프 등을 통해서 알 수 있음
③ 회복하는 방법은 한 프로세스씩 종료하거나 아니면 일시적으로 리소스의 선점을 가능하도록 함
④ '어떤 프로세스를 종료' 하거나 '어떤 프로세스가 리소스를 선점' 할 때, '어떤 프로세스'를 정해야하는데 이 때 특정 프로세스만 자원을 할당받아 다른 프로세스는 '기아현상'이 벌어지지 않도록 해야함
⑤ 기아현상을 해결하기 위해 리소스를 오래 대기할 수록 우선순위를 높여주는 방식을 채택할 수 있음
데드락에 대해 알아볼 수 있었습니다.
'운영체제' 카테고리의 다른 글
동기화 (0) | 2023.08.11 |
---|---|
페이지 교체 알고리즘 (0) | 2023.08.10 |
Context Switching (0) | 2023.08.06 |
프로세스와 스레드 (0) | 2023.08.05 |
캐시(Cache) (0) | 2023.07.31 |