기아상태? 이를 위한 해결방법은?
2024. 1. 23. 16:00ㆍCS/운영체제
기아상태란?
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은 어떻게 해결할까?
- 오래 기다린 프로세스의 우선순위를 높여준다.
- 우선순위가 아닌 요청 순서대로 처리하는 FIFO기반 요청 큐를 사용한다.
'CS > 운영체제' 카테고리의 다른 글
preemptive / non-preemptive (0) | 2024.01.23 |
---|---|
cpu스케줄링의 의미와 종류? (0) | 2024.01.23 |
Thread-Safe의 의미와 설계방법 (0) | 2024.01.19 |
스레드, tcb, 사용자 수준 스레드 및 커널 수준 스레드, 멀티 프로그래밍, 멀티스레드? (0) | 2024.01.18 |
프로세스끼리 협력하는 방법 (0) | 2024.01.17 |