4BSD
nice
4 : CPU 스케줄링
MLFQ에 대한 설명
다단계 큐 스케줄링과 비슷하게 동작하지만, 프로세스들이 큐 사이를 이동할 수 있는 차이 존재
새롭게 진입하는 프로세스는 먼저 우선순위가 가장 높은 우선순위 큐에 삽입되고, 타임 슬라이스 동안 실행
- 해당 큐에서 프로세스의 실행이 끝나지 않으면 다음 우선순위 큐에 삽입되어 실행
- 결국 오래 CPU를 사용해야 하는 프로세스의 우선순위는 점차 낮아짐
- CPU 집중 프로세스들의 우선순위는 낮아짐(CPU 사용시간이 길기 때문)
- 입출력 집중 프로세스들의 우선순위는 높아짐
- 아사 현상 예방을 위해 우선순위 큐에서 오래 기다리고 있는 프로세스들을 높은 우선순위 큐로 이동시키는 에이징 기법을 적용 가능
- Feedback : 스레드가 CPU를 얼마나 썼는지, 얼마나 I/O 대기를 했는지 등의 실행 패턴을 기반으로 우선순위를 동적으로 조정하는 것

4BSD 스케줄러
- PintOS의 MLFQS는 4BSD 스케줄러(UNIX에서 쓰던 CPU 스케줄링 알고리즘)를 모델로 함
- 4BSD에서는 CPU 사용량(
recent_cpu
)과 프로세스의 nice 값(유저가 지정하는 힌트
)을 기반으로 우선순위를 조정
- 결과 : CPU를 너무 많이 쓰는 스레드는 priority가 점점 낮아지고, I/O 위주로 대기 시간이 많은 스레드는 priority가 높아져서 CPU를 더 빨리 얻을 수 있게됨
<aside>
🥕
결론 : 4BSD 스케줄러를 기반으로 만들어진 MLFQS는, 피드백을 통해 우선순위를 동적으로 조정하며 이 결과에 대한 문제를 해소했다
</aside>
nice 값
유닉스 계열 시스템에서 nice 값은, “내 우선순위를 좀 낮춰줄게”라는 힌트를 의미
- 값 범위 : -20 ~ +20
- nice값이 클수록 우선순위가 낮아짐 → CPU 양보(
yield
)
- nice값이 작을수록 우선순위가 높아짐 → CPU 선점
<aside>
🥕
결론 : nice값과 CPU 사용량, 부하를 반영해서 priority를 계속 조정 → 최대한 시스템 전체가 공정하게 CPU를 나눠쓰도록 설계
</aside>