xv6 기반 운영체제에서 FCFS와 MLFQ 스케줄러를 직접 구현하고,
스케줄링의 **공정성(fairness)**과 **안정성(stability)**을 고려한 개선 설계를 수행했습니다.
| 기능 | 설명 |
|---|---|
| FCFS Scheduler | pid가 작은 순으로 실행. Timer interrupt 비활성화, 자발적 yield만 허용 |
| MLFQ Scheduler | 3단계 큐(L0~L2), priority/level/time_quantum 관리, boosting(50 tick마다) |
| System Calls | fcfsmode(), mlfqmode(), getlev(), setpriority(), yield() |
MLFQ 모드로 전환 시, 실행 중이던 프로세스는 즉시 enqueue하지 않고
yield 이후 L0으로 진입하도록 설계
→ 스스로 공정성을 판단하여 unfair scheduling을 방지
Time Quantum은 CPU 점유 시간 측정용이므로,
자발적 yield 시에는 증가하지 않도록 설계
→ 불필요한 priority 하락 방지, 의도적인 CPU 반납 보상
lock이 걸린 상태에서
yield()호출 시 panic 발생
do_yieldflag를 도입해 lock 해제 후 yield 수행
→ deadlock 및 panic 방지, 안정적 스케줄 전환 보장
struct proc {
int level; // 0~2
int priority; // 0~3
int time_quantum; // 남은 타임 퀀텀
int in_queue; // 중복 enqueue 방지
};- L0~L2 큐 순차 탐색
- Level에 따라 time quantum 차등 부여
- Boosting 시 모든 프로세스 Level 0, Priority 3으로 초기화
- pid 순서대로 실행 (Timer interrupt 미사용)
- FCFS와 MLFQ 모두 정상 동작
- 모드 전환 시 running 프로세스의 공정성 확보
- lock 관리 개선으로 panic 및 deadlock 제거
- 스케줄링 정책의 공정성(fairness), 안정성(stability), 의도적 CPU 반납 설계를 직접 구현
- 단순 스케줄러 구현이 아니라, 운영체제의 자원 분배 공정성을 설계적으로 판단하는 경험
- lock, interrupt, yield 간 상호작용에 대한 실질적 이해
- 코드보다 **“정책의 의미”**를 고려한 시스템 설계 감각을 얻음