Free Lines Arrow
본문 바로가기
Development/OS

[OS] Deadlock(교착상태), Starvation(기아상태)

by skahn1215 2021. 8. 18.
728x90
반응형

Deadlock(교착상태), Starvation(기아상태)

  • 교착상태와 기아상태를 알아봅니다.
  • 해결방법을 알아봅니다.

 

 

 

Dead Lock(교착상태)

둘이상의 프로세스가 각각의 프로세스가 점유 하고 있는 자원을 서로 기다릴때 무한대기에 빠지는 상황이다.

아래 그림을 보면 다음과 같다.

 

  • Process1 이 Resource1 을 점유하고 있다.
  • Process2 가 Resource2 를 점유하고 있다.
  • 여기까지는 괜찮다.
  • Process1 이 Resource2의 자원을 사용하기 위해 기다린다.
  • Process2 가 Resource1의 자원을 사용하기 위해 기다린다.
  • 이렇게 자원 해제가 안되어있고 무한정 기다리고 있는 상태이다.

 

 

 

 

Dead Lock 발생조건

아래 4개의 조건을 만족해야 Dead Lock이 발생한다.

  • 상호배제(Mutual exclusion):
    - 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다.

  • 점유대기(Hold and Wait):
    - 프로세스가 자원을 가진 상태에서 다른 자원을 기다린다.
  • 비선점(No preemption):
    - 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.

  • 순환대기(Circular wait):
    - 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

 

 

Dead Lock 해결 방법

예방

Dead Lock 발생 조건을 제거해준다.

  • 상호배제 제거
  • 점유대기 제거
  • 비선점 제거
  • 환형대기 제거

 

회피

자원할당 알고리즘, 은행원 알고리즘을 사용해서 교착상태를 회피한다.

 

 

 

무시

예방 혹은 회피를 쓰면 성능에 큰 문제가 생길수도 있다.

데드락이 심하지 않으면 그냥 무시하고 사용한다.

 

 

회복

교착상태가 발생 했을 경우 해결한다. 모니터링을 한다.

 

 

 

 

기아상태(Starvation)

여러 프로세스가 자원을 점유 할때 특정 프로세스에게 자원이 아예 할당 안되는 경우이다.

 

 

기아상태 해결방법

오래기다린 프로세스에게 우선순위를 높여준다.

 

728x90
반응형

댓글