1. 데드락(Deadlock)의 개념
- 정의: 데드락은 두 개 이상의 프로세스 또는 스레드가 서로 자원을 점유한 상태에서, 상대방이 가지고 있는 자원을 기다리며 영원히 멈춰버리는 상황을 말합니다.
- 쉽게 말하면: 두 사람이 서로의 펜을 빌려야만 숙제를 마칠 수 있는데, 각자 자기 펜을 꼭 쥐고 상대방의 펜을 줄 때까지 기다리는 것과 같아요. 결국 둘 다 펜을 주지 않고 기다리기만 해서 아무도 숙제를 끝내지 못하는 상황이에요.
2. 데드락 발생 조건 (Coffman Conditions)
데드락이 발생하려면 다음 네 가지 조건이 모두 성립해야 합니다:
- 상호 배제 (Mutual Exclusion)
- 자원은 한 번에 한 프로세스만 사용할 수 있습니다.
- 쉽게 말하면: 펜은 한 번에 한 사람이 사용할 수 있어요. 둘이 동시에 쓸 수는 없죠.
- 점유 대기 (Hold and Wait)
- 자원을 점유한 프로세스가 추가 자원을 요청하면서, 기존에 가진 자원을 놓지 않고 계속 기다립니다.
- 쉽게 말하면: A가 자기 펜을 쥐고 있으면서 B의 펜을 받기를 기다리고, B는 자기 펜을 쥐고 있으면서 A의 펜을 받기를 기다려요.
- 비선점 (No Preemption)
- 다른 프로세스가 이미 점유한 자원을 강제로 빼앗을 수 없습니다.
- 쉽게 말하면: 누군가가 펜을 쓰고 있을 때, 다른 사람이 그 펜을 강제로 뺏을 수 없어요. 상대방이 펜을 줄 때까지 기다려야 해요.
- 순환 대기 (Circular Wait)
- 자원을 기다리는 프로세스들이 원형으로 서로 연결된 상태입니다. 예를 들어, A는 B의 자원을 기다리고, B는 C의 자원을 기다리고, C는 다시 A의 자원을 기다리는 식입니다.
- 쉽게 말하면: A는 B의 펜을, B는 C의 펜을, C는 A의 펜을 기다리며 서로 줄 서 있는 상황이에요.
이 네 가지 조건이 동시에 만족되면 데드락이 발생합니다.
3. 데드락 해결 방법
데드락 문제를 해결하기 위해 몇 가지 전략을 사용할 수 있습니다. 각 방법은 장단점이 있으므로 상황에 맞게 선택해야 합니다.
데드락 예방 (Deadlock Prevention)
네 가지 조건 중 하나 이상이 성립하지 않도록 시스템을 설계하는 방법입니다.
쉽게 말하면: 처음부터 문제가 생기지 않게 방지책을 만드는 거예요.
예방 방법:
상호 배제 조건 완화
: 자원을 공유할 수 있도록 설계하여, 한 번에 여러 프로세스가 자원을 사용할 수 있게 합니다.
- 쉽게 말하면: 펜을 여러 개 준비해서 두 사람이 동시에 사용할 수 있도록 하는 거예요.
점유 대기 방지
: 프로세스가 자원을 요청할 때, 필요한 모든 자원을 한꺼번에 요청하게 합니다.
- 쉽게 말하면: A와 B가 각자 필요할 때마다 펜을 한 개씩 요청하지 말고, 처음부터 필요한 모든 펜을 다 가져가게 하는 거예요.
비선점 허용
: 자원을 사용하는 프로세스가 다른 프로세스에게 자원을 뺏기도록 허용합니다.
- 쉽게 말하면: A가 B의 펜을 사용 중이라면, B가 강제로 A에게서 펜을 빼앗아 사용할 수 있도록 하는 거예요.
순환 대기 방지
: 자원에 순서를 정해 놓고, 각 프로세스가 순서대로 자원을 요청하게 합니다.
- 쉽게 말하면: 펜을 순서대로 요청해서 A가 B의 펜을 요청하기 전에 C의 펜을 받아야만 한다는 규칙을 만드는 거예요.
데드락 회피 (Deadlock Avoidance)
- 시스템이 실행 중인 상태에서 데드락이 발생할 가능성을 미리 예측하고, 안전한 상태에서만 자원을 할당하는 방법입니다.
- 대표적인 알고리즘으로 은행원 알고리즘(Banker's Algorithm)이 있습니다.
- 쉽게 말하면: 자원을 주기 전에 “지금 이걸 주면 문제가 생기진 않을까?” 하고 미리 계산해보는 거예요.
- 은행원 알고리즘:
- 각 프로세스가 요청할 자원의 최대치를 미리 알려주고, 시스템은 현재 자원을 할당했을 때 안전한 상태인지 판단합니다.
- 쉽게 말하면: 은행에서 대출을 할 때, 이 사람이 돈을 다 갚을 수 있을지 미리 계산해보고 대출을 해주는 것과 같아요.
데드락 탐지 및 회복 (Deadlock Detection and Recovery)
데드락이 발생할 수 있도록 허용하되, 발생 시 이를 탐지하고 문제를 해결하는 방법입니다.
쉽게 말하면: 문제가 발생할 때까지 기다렸다가, 문제가 생기면 그때 해결하는 방식이에요.
탐지 방법:
- 자원 할당 그래프를 사용해 순환 대기를 확인합니다. 순환이 발견되면 데드락 상태임을 알 수 있습니다.
- 쉽게 말하면: 사람들이 줄을 서서 서로의 펜을 기다리고 있는지 지도에 그려서 확인해보는 거예요.
회복 방법:
프로세스 종료
: 데드락 상태에 있는 프로세스 중 하나를 강제로 종료하여 자원을 회수합니다.
- 쉽게 말하면: 펜을 기다리는 사람 중 한 명에게 숙제를 포기하게 해서 펜을 내놓게 하는 거예요.
자원 선점
: 일부 프로세스에서 자원을 뺏어서 다른 프로세스에 할당합니다.
- 쉽게 말하면: A가 쓰고 있던 펜을 강제로 빼앗아서 B에게 주는 거예요.
데드락 무시 (Deadlock Ignorance)
- 일부 시스템에서는 데드락 발생 가능성이 낮거나, 발생해도 큰 문제가 되지 않기 때문에 그냥 무시하는 방법을 선택할 수 있습니다. 대표적인 예로 Unix, Windows 같은 운영체제가 있습니다.
- 쉽게 말하면: “문제가 잘 안 생길 테니, 발생하면 그때 가서 생각하자”라는 접근 방식이에요.
요약
데드락: 서로 자원을 기다리느라 프로세스나 스레드가 멈춰버리는 상황.
해결 방법
:
- 예방: 데드락 조건을 처음부터 피하도록 설계.
- 회피: 자원 할당 전 미리 안전한지 계산.
- 탐지 및 회복: 데드락을 발견하고 해결.
- 무시: 데드락 발생 가능성이 낮을 때 그냥 신경 쓰지 않음.
'운영체제' 카테고리의 다른 글
컨텍스트 스위칭(Context Switching)의 정의와 비용 (1) | 2024.10.26 |
---|---|
메모리 관리 기법(예: 페이징, 세그멘테이션) (1) | 2024.10.26 |
페이지 교체 알고리즘(예: LRU, FIFO, LFU)의 설명 (1) | 2024.10.26 |
멀티스레딩과 멀티프로세싱 차이점 (1) | 2024.10.26 |
프로세스와 스레드 차이점 (0) | 2024.10.26 |