Deadlock의 발생 조건과 Deadlock을 깨기 위해서 어떻게 해야하나요?

Deadlock의 발생 조건과 Deadlock을 깨기 위해서 어떻게 해야하나요?

면접용 답변

데드락의 발생 조건으로는 상호 배제, 점유 대기, 비선점, 순환대기가 있습니다. 4가지 조건을 만족하였을 때, 발생할 가능성이 있습니다.

상호 배제는 한 번에 한 개의 프로세스만이 공유자원을 이용할 수 있음을 의미하고, 점유 대기는 프로세스가 자원을 할당받은 상태에서 다른 자원을 기다리는 것입니다. 비선점은 할당된 자원을 강제로 뺏을 수 없음을 의미합니다. 마지막으로 순환 대기는 프로세스의 자원 점유 및 점유된 자원의 요구 관계가 원형을 이루면서 대기하는 것입니다.

데드락을 해결하기 위한 방법으로는 크게 예방과 회피가 있습니다. 예방은 데드락 발생 조건 4가지 중 하나를 부정함으로써 교착 상태를 피하는 것이고, 회피는 교착 상태가 발생할 가능성이 있는 자원을 할당하지 않고 안전한 상태에서만 자원 요청을 허용하는 방법입니다.

개념 설명

데드락이란?

프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태로 영원히 기다리는 것

데드락의 발생 조건(4가지 모두 충족시켜야함)

  1. 상호 배제: 한 번에 한 개의 프로세스만이 공유자원을 이용할 수 있는 것

  2. 점유 대기: 프로세스가 자원을 하나 이상 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 함

  3. 비선점: 이미 할당된 자원을 강제로 빼앗을 수 없음

  4. 순환 대기: 대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야함

데드락 해결 방법

예방: 발생조건 4가지 중 하나라도 발생하지 않도록 하는 것

  1. 상호 배제 방지: 한 번에 여러 프로세스가 공유 자원을 사용할 수 있도록 함

  2. 점유 대기 방지: 프로세스 실행에 필요한 모든 자원을 한번에 요구하고 허용할 때까지 작업을 보류함

  3. 비선점 방지: 높은 우선순위 프로세스가 해당 자원을 선점하도록 함(강제로 빼앗기 가능)

  4. 순환 대기 방지: 자원을 한 쪽 방향으로만 요구할 수 있도록 함

  • 예방 방식의 장점

    • 교착 상태 발생을 원천 차단함

    • 별도의 교착 상태 탐지 로직이 필요하지 않아서 설계가 단순함

  • 예방 방식의 단점

    • 자원 활용률이 저하됨 → 자원을 한 번에 요구하거나 자원 선점을 허용하면 비효율적 자원 사용을 초래할 수 있음

    • 프로세스 실행 지연: 필요한 자원을 모두 확보할 때까지 대기하거나, 선점에 의해 프로세스가 중단될 수 있음

회피: 교착 상태 발생 이전에 교착 상태를 예상해서 안전한 상태에서만 자원 요청을 허용하는 방법

  • 안전 상태: safe sequence가 존재하여 모든 프로세스가 정상적으로 종료할 수 있는 상태

  • 회피 알고리즘

    • 자원 할당 그래프 알고리즘

    • 은행원 알고리즘

탐지: 데드락이 발생하였을 때, 데드락을 탐지하고 회복하는 알고리즘을 사용

  • 대표적인 알고리즘

    • 대기 그래프 → 프로세스 간의 자원 요청 및 점유 관계를 그래프 형태로 표현하여 순환이 발생했는지를 확인

    • 은행원 알고리즘 → 시스템에 남아 있는 자원과 프로세스가 필요로하는 자원량을 비교하여 프로세스가 다 완료될 수 있는지 탐지

추가 질문

교착상태에서 회복하는 방법은?

  • 프로세스 종료: 교착 상태에 있는 프로세스 중 일부 또는 전부를 종료하여 자원을 회수하는 방법

  • 자원 선점: 자원을 점유한 프로세스로부터 자원을 강제로 회수하여 다른 프로세스에게 할당

  • 체크포인트 복구: 교착 상태 발생 전에 저장해둔 상태로 시스템을 되돌리는 방법

은행원 알고리즘이 작동하기 위한 전제 조건은?

  • 최대 필요 자원량(Max)을 시스템에 미리 선언해야함

  • 시스템은 현재 사용 가능한 자원 수(Available), 할당된 자원 수(Allocation), 필요한 자원 수(Need)에 대한 정보를 알고 있어야함

예방 방식과 회피 방식 중 어떤 것을 선택해야하나요?

예방 방식은 단순하고 안정적이지만 자원 활용률이 낮고 비효율적인 경우가 많습니다. 반면 회피 방식은 자원 활용률이 높고 유연성이 있지만, 자원의 최대 요구량을 사전에 알아야 하며 계산 오버헤드가 있습니다. 따라서 시스템의 자원 사용 특성과 중요도, 안전성 요구 수준에 따라 적절한 방식을 선택해야 합니다.

Last updated