기아상태? 이를 위한 해결방법은?

2024. 1. 23. 16:00CS/운영체제

기아상태란?

Starvation

  • 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태
  • 예를 들어서, 50개의 task가 있고 50개 중 49개는 1번 우선순위를 갖고, 나머지 1개는 2번 우선순위를 갖는다고 가정하자. 또한 해당 프로그램은 10번의 실행과정을 거치면 종료된다.
  • 이때, 2번의 우선순위를 갖는 작업은 자원을 할당받을 수 없다. 자원을 할당받더라도 우선순위가 높은 자원에게 자원 할당을 뺏기기때문이다.

Starvation과 자주 비교되는 DeadLock?

  • 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기때문에 다음 단계로 진행하지 못하는 상태
  • 예를 들어서, a, b라는 임계 자원이 있다고 가정하자.
  • ThreadA에서는 a임계 자원을 요청하고 그 내부에서 b임계자원을 요청한다.
  • ThreadB에서는 b임계 자원을 요청하고 그 내부에서 a임계자원을 요청한다.
  • ThreadA에서는 b임계자원을 요청하려고 하지만, ThreadB에서 b임계자원을 이미 사용 중이기때문에 Lock이 걸려있다.
    • 즉, ThreadA에서 b임계자원을 사용하기 위해 대기하는 상황
  • ThreadB에서는 a임계자원을 요청하지만, ThreadA에서 b를 대기하는 상황이기에, ThreadA가 a를 내놓지 못하고 있어 Lock이 걸려있다.
    • 즉, ThreadB에서는 a임계자원을 사용하기 위해 대기하는 상황
  • DeadLock은 여러 프로세스가 동일 자원 점유를 요청할 때 발생한다.
  • Starvation은 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원할당이 안되는 경우를 주로 의미한다.

Starvation은 어떻게 해결할까?

  1. 오래 기다린 프로세스의 우선순위를 높여준다.
  2. 우선순위가 아닌 요청 순서대로 처리하는 FIFO기반 요청 큐를 사용한다.