📑 본 글은 <혼공컴운>을 읽고 정리한 글입니다.
식사하는 철학자 문제(dining philosophers problem) : 교착 상태를 설명하는 고전 문제
동그란 원탁 / 5명의 철학자 / 식사 5개, 포크 5개
왼쪽 포크 들기 → 오른쪽 포크 들기 → 밥 먹기 → 다 먹으면 오른쪽 포크 내려놓기 → 왼쪽 내려놓기
모든 철학자가 왼쪽 포크를 든다면?
교착 상태
교착 상태를 표현하는 그래프
→ 사이클이 있으면 교착 상태가 발생할 수 있다.
상호 배제(mutual exclusion)
점유와 대기(hold and wait)
: 자원을 할당받은 상태에서 다른 걸 기다림
비선점(non-preemtive)
: 자원을 강제로 뺏을 수 없음
원형 대기(circular wait)
: 자원 할당 그래프가 원의 형태
교착 상태 발생 조건 4가지 중 하나라도 만족하지 못하게 만들기
⇒ 교착 상태를 예방하는 방식은 부작용이 심하다.
교착 상태가 발생하지 않을 정도로만 조심히 자원을 할당한다.
프로세스 | 최대 요구량 | 현재 사용량
머 이런 표로 해서 자원 할당하는 부분
항시 안전 상태를 유지하도록 자원을 할당하는 방식
⇒ 비효율적임 어차피 별로 안 난다 교착상태는
교착 상태 발생을 인정하고 사후에 조치하는 방식
자원 요구하면 요구하는 대로 다 준다.
교착 상태 발생 여부를 주기적으로 검사한다.
검출되면 그 때 대처한다.
선점을 통한 회복
프로세스 강제 종료를 통한 회복
🦃🦃 타조 알고리즘(ostrich algorithm) 🦃🦃← 운체 pick!