프로세스들이 서로가 가진 자원을 요청하며 기다리는 상태
: 주어진 시간 안에 하나의 프로세스만 자원 사용이 가능하지만 그렇지 못한 경우
: 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있는 경우
: 프로세스는 자원을 강제로 빼앗기지 않고 스스로 내놓는 특성때문에 발생 가능.
즉, 자원을 내놓지 않기 때문에 교착상태 발생
👉 자원을 빼앗기는 특성이 있었다면, 교착상태는 발생하지 X
: 자원을 기다리는 프로세스간에 사이클이 형성되는 경우
ex.
📍프로세스 이 있을 때
은 이 가진 자원을 기다림
🔻
은 가 가진 자원을 기다림
🔻
n-1은 이 가진 자원을 기다림
🔻
은 가 가진 자원을 기다림
자원 할당 시 위 조건이 성립되지 않도록 설계
⚠️ 어려움
은행원 알고리즘 사용
교착상태 발생 시 사이클이 있는지 확인 후 이와 관련된 프로세스를 한 개씩 지움
교착상태 무시
👉 교착상태 처리 비용이 크고 발생 가능성이 적기 때문에 프로세스 내에서 해결하지 않고 무시
👉 사용자가 프로세스 종료 또는 대기를 선택할 수 있게 함
교착상태를 회피하는 알고리즘으로 자원의 양에 따라 교착상태를 일으키지 않는 상태로 가도록 자원을 할당하는 알고리즘
프로세스가 자원을 요청할 때, 시스템은 해당 자원이 요청 가능한지 확인
요청이 가능하다면, 시스템은 요청한 자원을 일시적으로 할당한 뒤, 안전 상태를 유지하도록 확인
안전 상태를 확인하기 위해 시뮬레이션을 수행하며, 자원을 반납하거나 할당할 수 있는지 판단
안전 상태가 유지되면, 요청한 자원을 실제로 할당하고 프로세스를 실행. 만약 안전 상태가 유지되지 않으면 프로세스는 대기
🤔 Q. 은행원 알고리즘(Banker's Algorithm)은 무엇이며, 어떻게 교착상태를 방지하나요?
🙋♀️ A. 은행원 알고리즘은 교착상태를 방지하기 위한 알고리즘 중 하나로, 프로세스가 자원을 요청할 때마다 시스템이 안정 상태를 유지하면서 자원을 할당하는 방식입니다. 이는 시스템은 자원을 요청한 후의 상태를 가정하여 자원을 할당해보는 자원 할당 시뮬레이션을 통해 교착상태를 방지합니다.
⭐ 효율적인 프로세스를 선택하기 위해 충족해야하는 조건
현대 운영체제가 쓰는 방식으로 알고리즘에 의해 강제로 다른 프로세스에 CPU를 할당하는 방식
🤔 Q. CPU 스케줄링 알고리즘이란 무엇인가요? 어떤 목적으로 사용되나요?
🙋♀️ A. 다중 프로세스 환경에서 CPU의 할당 방식을 결정하는 방법을 말합니다. 어떤 프로세스에게 CPU를 할당할지, 언제 할당할지, 얼마나 오랫동안 할당할지 등을 결정하여 시스템 성능을 최적화하고, 응답 시간을 최소화하며, 자원 활용을 극대화하는 것이 목적입니다.
좋은 글이네요. 공유해주셔서 감사합니다.