-
[OS] 교착 상태(Deadlock) 해결 방법 _데드락운영체제 2023. 4. 9. 14:43728x90반응형
교착 상태(Deadlock) 해결 방법
지난 포스팅에서 프로세스 교착 상태에 대해 배웠습니다. 운영체제는 교착 상태를 회피할 수도 있고 예방할 수도, 검출 후 회복할 수도 있습니다. 오늘은 교착 상태를 해결하는 각각의 방법에 대해 공부해볼게요. 🧐
교착 상태 예방교착 상태가 발생하려면 필요 조건이 네 가지가 있었죠. 프로세스들에 자원을 할당할 때 상호 배제, 점유와 대기, 비선점, 원형 대기 네 가지 조건이 모두 만족되었을 때 교착 상태가 발생할 가능성이 생깁니다. 교착 상태를 예방하는 것은 이 네 가지 중 하나라도 만족시키지 않게 할당하는 것입니다.
🍊 상호 배제 없애기
자원의 상호 배제를 없앤다는 말은 모든 자원을 공유 가능하게 만든다는 말고 같습니다. 다만 이 방식대로 이론적으로는 교착 상태를 없앨 수 있지만, 현실적으로 모든 자원의 상호 배제를 없애는 것은 다소 무리가 있습니다.
🍊 점유와 대기 없애기
점유와 대기를 없애면 운영체제는 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분합니다. 이론적으로는 교착 상태를 해결할 수 있지만, 자원의 활용률이 낮아진다는 단점이 있습니다.
🍊 비선점 조건 없애기
비선점 조건을 없애면 자원을 이용 중인 프로세스로부터 해당 자원을 빼앗을 수 있습니다. 이 방식은 선점하여 사용할 수 있는 일부 자원에 대해서는 효과적입니다. 대표적으로 CPU가 있습니다. 하지만 모든 자원이 선점 가능한 것은 아니기 때문에 다소 범용성이 떨어지는 방안입니다.
🍊 원형 대기 조건 없애기
원형 대기를 없애는 방법은 모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하는 것입니다. 원형 대기를 없앰으로써 교착 상태를 예방하는 방식은 앞선 세 방식에 비하면 비교적 현실적이고 실용적인 방법이지만, 모든 컴퓨터 내에 존재하는 수많은 자원에 번호를 붙이는 일은 그리 간단한 작업이 아닙니다. 또 어떤 번호를 붙이는지에 따라 특정 자원의 활용률이 떨어질 수 있습니다.
이렇듯 교착 상태의 발생 조건을 원천적으로 예방하는 방식은 여러 부작용이 따릅니다.
교착 상태 회피교착 상태 회피는 프로세스들에 배분할 수 있는 자원의 양을 고려하여 교착 상태가 발생하지 않을 정도의 양만큼만 자원을 배분하는 방법을 말합니다.
- 안전 상태 : 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태
- 불안전 상태: 교착 상태가 발생할 수도 있는 상태
- 안전 순서열: 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
교착 상태 검출 후 회복교착 상태 검출 후 회복은 교착 상태 발생을 인정하고 사후에 조치하는 방식입니다. 운영체제는 교착 상태 발생 여부를 주기적으로 검사하고 교착 상태가 검출되면 아래의 방법들로 회복합니다.
🍊 선점을 통한 회복
선점을 통한 회복은 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식입니다. 다른 프로세스로부터 자원을 강제로 빼앗고 한 프로세스에 할당하는 방식이지요.
🍊 프로세스 강제 종료를 통한 회복
가장 단순하면서 확실한 방법입니다. 운영체제는 교착 상태에 놓인 프로세스를 모두 강제 종료할 수도 있고, 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료할 수도 있습니다.
🍊 타조 알고리즘
타조 알고리즘은 이름은 거창하지만 사실은 교착 상태를 무시하는 방법입니다. 드물게 발생하는 잠재적 문제를 적극적으로 해결하기 보다 무시로 대처하는 방식이죠. 효율을 추구하는 엔지니어 입장에서는 이 방식이 적합할 때도 많습니다.
LIST'운영체제' 카테고리의 다른 글
[OS] 페이징으로 가상 메모리 관리하기, 페이지 테이블, TLB (0) 2023.04.23 [OS] 스와핑과 연속 메모리 할당, 외부 단편화 (0) 2023.04.16 [OS] 데드락(교착 상태)과 자원 할당 그래프 (0) 2023.04.08 [OS] Linux IPC 프로세스간 통신에 대해서 알아보자 (0) 2023.04.04 [OS] 프로세스 동기화 기법, 뮤텍스 락, 세마포, 모니터 (0) 2023.04.02