[운영체제] 교착상태 해결 방법

Local Gaji·2024년 1월 2일
0

운영체제

목록 보기
11/15

교착상태는 예방하거나, 회피하거나, 검출 후 회복해서 해결할 수 있다.


🎈 예방

교착 상태 발생 조건 4가지에 해당하는 상호 배제, 점유와 대기, 비선점, 원형 대기 중 하나의 조건이라도 없애면 교착 상태는 발생하지 않는다.

  • 상호 배제
    • 모든 자원을 공유 가능하게 만든다
    • 단점 : 현실적으로 힘듦
  • 점유와 대기
    • 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분한다. (포크를 두개 동시에 들게 하거나, 아예 못들게 한다.)
    • 단점 : 자원의 활용률이 낮아지고, 프로세스가 모든 자원을 할당 받을 수 있는 타이밍을 확보하기가 어렵다.
  • 비선점
    • 자원을 이용 중인 프로세스로부터 자원을 빼앗는다.
    • 대표적으로 CPU 를 각 프로세스가 일정 시간동안 선점해서 사용한다.
    • 단점 : 프린터와 같이 한 프로세스가 시작부터 끝까지 사용해야 하는 경우 사용이 불가능하다.
  • 원형 대기
    • 모든 자원에 번호를 부여해서 오름차순으로 자원을 할당한다.
    • 철학자들에게 번호가 낮은 포크에서 높은 포크 순으로 집어들게 한다.
    • 단점 : 시스템에 존재하는 수많은 자원에 일일이 번호를 붙이기 힘들다.

원형 구조를 없애면 일자 테이블에서 식사하는 상황과 유사해진다.


🎈 회피

자원이 충분히 많은 상황에서 프로세스가 적은 자원만 요구한다면 교착 상태는 발생하지 않는다.
(포크를 100개, 1000개로 늘리면 교착 상태가 발생하지 않는다.)
교착 상태 회피를 위해서는 시스템이 계속 안전 상태를 유지할 수 있게 자원을 할당하면 된다

  • 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에게 자원을 할당할 수 있는 순서
  • 안전 상태 : 안전 순서열대로 프로세스에 자원을 배분해 교착 상태가 발생하지 않는 상태
  • 불안전 상태 : 안전 순서열이 없는 상황으로 교착 상태가 발생할 위험이 있다.

🎈 검출 후 회복

  • 선점을 통한 회복 : 교착 상태가 해결될 때까지 자원을 강제로 한 프로세스에게 몰아주는 방식
  • 강제 종료를 통한 회복 : 교착 상태에 놓인 프로세스를 모두 또는 하나씩 강제종료시켜 해결하는 방식

교착 상태를 그냥 무시하는게 효율적일 때도 있다. (타조 알고리즘)

0개의 댓글