Skip to content

dhrkawk/OS_project01

Repository files navigation

OS Project 01 — FCFS & MLFQ Scheduler

xv6 기반 운영체제에서 FCFSMLFQ 스케줄러를 직접 구현하고,
스케줄링의 **공정성(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()

💡 설계 사고 포인트

1. Running 프로세스의 공정성 고려

MLFQ 모드로 전환 시, 실행 중이던 프로세스는 즉시 enqueue하지 않고
yield 이후 L0으로 진입하도록 설계
→ 스스로 공정성을 판단하여 unfair scheduling을 방지

2. Time Quantum의 의미 유지

Time Quantum은 CPU 점유 시간 측정용이므로,
자발적 yield 시에는 증가하지 않도록 설계
→ 불필요한 priority 하락 방지, 의도적인 CPU 반납 보상

3. Lock 중 yield() 호출 문제 해결

lock이 걸린 상태에서 yield() 호출 시 panic 발생
do_yield flag를 도입해 lock 해제 후 yield 수행
→ deadlock 및 panic 방지, 안정적 스케줄 전환 보장


⚙️ 핵심 구조

struct proc {
    int level;        // 0~2
    int priority;     // 0~3
    int time_quantum; // 남은 타임 퀀텀
    int in_queue;     // 중복 enqueue 방지
};

🔄 Scheduling Logic

MLFQ

  • L0~L2 큐 순차 탐색
  • Level에 따라 time quantum 차등 부여
  • Boosting 시 모든 프로세스 Level 0, Priority 3으로 초기화

FCFS

  • pid 순서대로 실행 (Timer interrupt 미사용)

🧠 결과

  • FCFS와 MLFQ 모두 정상 동작
  • 모드 전환 시 running 프로세스의 공정성 확보
  • lock 관리 개선으로 panic 및 deadlock 제거
  • 스케줄링 정책의 공정성(fairness), 안정성(stability), 의도적 CPU 반납 설계를 직접 구현

✍️ 배운 점

  • 단순 스케줄러 구현이 아니라, 운영체제의 자원 분배 공정성을 설계적으로 판단하는 경험
  • lock, interrupt, yield 간 상호작용에 대한 실질적 이해
  • 코드보다 **“정책의 의미”**를 고려한 시스템 설계 감각을 얻음

About

xv6의 FCFS·MLFQ 스케줄러 / 프로세스 스케줄링의 공정성과 안정성 원리를 고려하여 구현

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors