데드락(DeadLock)

invisible_thorn·2024년 11월 25일
0

안녕하세요?
저는 데드락이 게임하고 발로란트 요원 밖에 몰랐는데
'교착 상태'를 의미하는 데드락이 어떤 일을 벌이고 있는지 확인해봅시다.

데드락(DeadLock)

두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해 다음 처리를 하지 못하는 상태
(무한히 다음 자원을 기다림, 서로 원하는 자원이 상대방에게 할당되어 있어서 두 프로세스가 무한정 wait 상태에 빠짐)

이러한 상태를 말하는 데요, 그렇다면 어떤 상황에서 데드락이 발생할까요?

데드락의 발생 조건

  1. 상호 배제
    : 프로세스가 소유 중인 자원에 다른 프로세스가 접근할 수 없음(자원은 한 번에 한 프로세스만 사용)
  2. 점유 대기
    : 자원을 최소한 하나 보유한 상태에서 다른 프로세스가 가지고 있는 자원을 요청
  3. 비선점
    : CPU나 메모리같은 자원을 강제로 뺏어올 권한이 없는 상태(프로세스간 분쟁 사이 개입 못함)
  4. 순환 대기
    : 프로세스가 서로의 자원을 요청하는 무한 굴레에 빠짐

그림을 보면 쉽게 이해가 될 것입니다.
서로를 계속 요청하는 상태입니다. 손에 손잡고 강강술래

아래와 같이 선형 구조는 헤드와 꼬리를 통해 빠져나올 수 있답니다. -> 데드락은 환형구조여야함

[사진 참조] https://wikidocs.net/217376

이게 정상적으로 작동하는 상태는 아니기 때문에 해결을 해줘야겠죠?
해결법에 대해 알아봅시다!

데드락 해소하기

이에는 3가지 방법을 둔다고 합니다.
1. 데드락이 일어나지 않도록 예방하거나,
2. 데드락이 일어날 가능성을 염두해두면서 적절히 회피하거나,
3. 데드락이 일어났지만 데드락을 탐지하여 데드락에서 회복하는 법이 있슴니다.

1. 데드락 예방 (Deadlock Prevention)

(1) 상호 배제(Mutual Exclusion) 차단
자원을 공유할 수 있도록 설계합니다.
예: 읽기 전용 자원은 여러 프로세스가 동시에 접근 가능하도록 함.

(2) 점유 대기(Hold and Wait) 차단
프로세스가 자원을 요청할 때 이미 필요한 모든 자원을 한 번에 할당받도록 강제합니다.
문제점:
자원을 비효율적으로 사용하게 됨.
모든 자원을 한꺼번에 기다려야 하므로 지연이 발생할 수 있음.

(3) 비선점(No Preemption) 차단
자원을 점유 중인 프로세스가 요청한 자원을 획득하지 못하면 이미 점유 중인 자원을 강제로 해제하도록 설계합니다.
예: CPU 스케줄링에서 선점형 알고리즘 사용.

(4) 순환 대기(Circular Wait) 차단
자원에 고유한 순서를 부여하고, 각 프로세스가 자원을 요청할 때 반드시 그 순서대로 요청하도록 합니다.
예: 자원 A→B→C 순서로만 요청 가능.

2. 데드락 회피 (Deadlock Avoidance)

데드락이 발생할 가능성을 예측하고 안전 상태를 유지하도록 설계하는 방법입니다.

은행원 알고리즘(Banker's Algorithm)

(1) 은행원 알고리즘
프로세스의 자원 요청을 허용하기 전에 시스템이 "안전 상태(Safe State)"인지 확인합니다.
안전 상태(Safe State): 모든 프로세스가 요구하는 자원을 순차적으로 할당하여 데드락 없이 종료될 수 있는 상태.
시스템이 안전 상태에 있다면 요청을 허용하고, 그렇지 않다면 요청을 거부.

(2) 장단점
장점: 데드락 발생 가능성을 사전에 방지.
단점: 프로세스의 최대 자원 요구량을 미리 알아야 하며, 계산 비용이 증가.

3. 데드락 탐지 및 회복 (Deadlock Detection and Recovery)

데드락이 발생할 가능성을 허용하지만, 발생한 이후 이를 탐지하고 해결합니다.

(1) 데드락 탐지
주기적으로 자원 할당 그래프(Resource Allocation Graph)를 분석하여 순환 대기(Circular Wait)를 찾습니다.
순환 대기가 발견되면 데드락이 발생한 것으로 간주.

(2) 데드락 회복
데드락 상태를 해결하기 위해 다음과 같은 방법을 사용:
프로세스 종료
데드락에 연루된 프로세스를 하나씩 강제 종료하거나, 모든 관련 프로세스를 종료.
단점: 데이터 손실이나 작업 지연 가능성.
자원 선점
자원을 점유한 프로세스에서 자원을 강제로 해제하고 다른 프로세스에 재할당.
단점: 해당 프로세스가 다시 자원을 요청해야 함.

0개의 댓글

관련 채용 정보