728x90
프로세스나 스레드 간에 발생하는 상호 대기 현상으로, 작업의 완료를 기다리며 시스템이 정체되는 현상입니다.
증상:
- 작업이 진행되지 않고 시스템이 정체되는 상태가 됩니다.
- 프로세스 또는 스레드 간의 상호작용이 멈추고, 상호 대기 상태가 되는 것을 확인할 수 있습니다.
원인
데드락은 다음과 같은 네 가지 조건이 동시에 성립할 때 발생합니다:
- 상호 배제(Mutual Exclusion)
- 자원은 하나의 프로세스 또는 스레드에 의해 동시에 점유될 수 없습니다.
- 점유와 대기(Hold and Wait)
- 이미 점유한 자원을 기다리는 상황이 발생합니다.
- 비선점(Non-preemption)
- 다른 프로세스 또는 스레드가 이미 점유한 자원을 강제로 빼앗을 수 없습니다.
- 순환 대기(Circular Wait)
- 여러 프로세스 또는 스레드가 순환적으로 다음 작업을 기다리는 상황이 발생합니다.
방지 방법
- 상호 배제 제거
- 자원의 공유를 허용하거나 상호 배제를 최소화하여 여러 프로세스 또는 스레드가 동시에 접근할 수 있도록 합니다.
- 점유와 대기 제거
- 자원을 요청할 때 다른 자원을 점유하지 않고 요청합니다.
- 비선점 제거
- 자원을 강제로 빼앗지 않고, 자원을 점유한 프로세스 또는 스레드가 작업을 완료한 후에 자원을 반환하도록 합니다.
- 순환 대기 제거
- 자원에 고유한 번호를 할당하고, 번호 순서에 따라 자원을 요청하도록 합니다.
- 교착 상태 탐지 및 복구
- 교착 상태가 발생했을 때 이를 탐지하고 복구하는 알고리즘을 구현합니다.
- 자원 할당 순서 변경
- 자원을 할당할 때 일정한 순서를 유지하여 교착 상태가 발생할 가능성을 줄입니다.
데드락 방지는 시스템 설계와 애플리케이션 구현 단계에서 고려되어야 하며, 상황에 맞는 방법을 선택하여 적용해야 합니다.
728x90
'DB' 카테고리의 다른 글
Redis 기본 명령어 (0) | 2023.08.18 |
---|---|
DB 테스트 용 데이터 대량 만들기_TIP (0) | 2023.08.03 |
MySql DB 엔진 (0) | 2023.07.03 |
DB 격리 수준(ACID > Isolation) (0) | 2023.06.15 |
Redis란?_Sorted sets (0) | 2023.04.16 |