눈송이의 개발생활
[운영체제]교착상태(Dead Lock) 본문
교착상태(Deadlock)
- 2개 이상의 프로세스 or 스레드가 서로가 가진 리소스(자원)를 기다리는 상태
- 무한정 기다리며 벗어나지 못함
데드락 만드는 필요충분 조건
Mutual Exclusion: 리소스를 공유해서 사용할 수 없음Hold and Wait: 프로세스가 이미 하나 이상의 리소스를 갖고 있는 상태(hold)에서 다른 프로세스가 사용 중인 다른 리소스를 추가로 기다리는 것(wait)No Preemption: 리소스 반환은 오직 그 리소스를 취득한 프로세스만 가능. 강제로 자원을 뺏을 수 없음Circular Wait: 프로세스들이 순환 형태로 리소스를 기다리는 것
해결 방법
방지/예방(Prevention)
1️⃣- 4가지 조건 중 하나가 충족되지 않게 시스템 디자인
- 자원 낭비가 가장 심한 방법
- 시스템의 처리량이나 효율성 떨어트릴 수 있음
Mutual Exclusion- 리소스 공유 가능하게 함
- 단점) 여러 프로세스가 자원을 공유하기 때문에 의도치 않은 결과 얻을 수 있음
Hold and Wait- 사용할 리소스 모두 획득한 뒤 시작(대기 없애기) or 리소스 전혀 없는 상태에서만 리소스 요청 가능
- 단점) 자원이 오랫동안 할당되고 사용되지 않으면서 낭비될 수 있음
No Preemption- 추가적인 리소스를 기다려야 한다면 이미 획득한 리소스를 다른 프로세스가 선점 가능하도록 함
- 단점) 공유 자원에 대한 동기화(상호배제) 의미가 없어짐
Circular Wait- 모든 리소스에 순서 체계를 부여해서 오름차순으로 리소스 요청(선형 대기로 만들기)
회피(Avoidance)
2️⃣- 실행 환경에서 추가적인 정보를 활용해서 데드락이 발생할 것 같은 상황을 회피 하는 것
- 자원을 할당한 후에도 시스템이 항상 Safe state에 있을 수 있도록 할당을 허용하는 것
Safe State(안정 상태): 시스템의 프로세스들이 요청하는 모든 자원을 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있을 때 (↔ 불안정 상태)Safe Sequence(안정 순서): 프로세스들에게 자원을 할당, 실행 및 종료 등의 작업을 할 때 데드락이 발생하지 않는 순서- 데드락은 불안정 상태에서 발생할 수 있음
Banker's Algorithm
- 리소스를 허락해줬을 때 데드락이 발생할 가능성이 있으면 리소스를 할당해도 안전할 때까지(safe state에 드는지 확인) 계속 요청을 거절하는 알고리즘
- 대기중인 다른 프로세스들의 활동에 대한 교착 상태 가능성 미리 조사하는 것
- 프로세스의 모든 요구를 유한한 시간 안에 할당하는 것 보장
🔴 단점
- 자원 사용률이 굉장히 낮음(안정 상태 유지해야 해서)
- 미리 최대 자원 요구량을 알아야 함
- 자원의 양과 프로세스 수가 일정해야 함
감지&복구(Detection & Recovery)
3️⃣- 데드락 허용하고 감지되면 복구
- 감지
- Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부를 탐색 (with 현재 시스템의 자원 할당 상태)
- 교착상태 발견 알고리즘과 자원 할당 그래프 사용할 수 있음
- 복구 전략(순환 대기에서 벗어나기 위함)
- 프로세스 종료
- 교착상태에 있는 프로세스 모두 종료 : 부분 결과가 폐기될 수 있음
- 하나씩 종료해가며 교착상태 해결 : 매번 탐지 알고리즘을 사용해야 하기 때문에 부담이 큼
- 리소스의 일시적인 선점 허용
- 교착상태에 있는 프로세스가 가진 리소스를 다른 프로세스에 할당
- 우선순위 낮은 or 수행된 정도가 적은 or 사용되는 리소스가 적은 프로세스를 위주로 해당 프로세스의 리소스 선점
- 프로세스 종료
참고
https://youtu.be/ESXCSNGFVto
https://coding-factory.tistory.com/311
https://chanhuiseok.github.io/posts/cs-2/
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제]CPU 스케줄링 (0) | 2023.02.28 |
---|---|
[운영체제]프로세스 사이 통신 - IPC(Inter Process Communication) (0) | 2023.02.27 |
[운영체제]PCB와 문맥 교환(Context Switching) (0) | 2023.02.27 |
[운영체제]인터럽트(Interrupt)와 시스템 콜(System Call) (0) | 2023.02.23 |
[운영체제]블로킹(Blocking)/논블로킹(Non-Blocking) & 동기(Synchronous)/비동기(Asynchronous) (0) | 2023.02.22 |
Comments