설명 순서는 다음과 같습니다.

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

+ Recent posts