...
extern bool thread_mlfqs; //true로 변경됨
void thread_init(void);
void thread_start(void);
...
우선순위 계산식
priority = PRI_MAX - (recent_cpu / 4) - (nice * 2)
load_avg, recent_cpu 계산식
recent_cpu = (2 * load_avg) / (2 * load_avg + 1) * recent_cpu + nice
이 계산은 초당 1회, timer_ticks() % TIMER_FREQ == 0일 때 모든 스레드에 적용
실행 중인 스레드에 대해서는 매 틱마다 recent_cpu += 1
(단, idle thread는 제외)
int ready_threads = list_size(&ready_list);
if (thread_current() != idle_thread)
ready_threads += 1;
load_avg = (59/60) * load_avg + (1/60) * ready_threads
donation 로직 비활성화
nice 관련 함수 구현
각 스레드는 nice라는 정수를 가집니다. 이는 다른 스레드에게 얼마나 양보할지를 나타내는 값입니다.
초기 스레드는 nice = 0
자식 스레드는 부모의 nice 값을 상속
다음 두 함수를 구현해야 합니다 (threads/thread.c에 뼈대 존재):
int thread_get_nice(void);
int thread_set_nice(int nice);
set_nice()는 우선순위를 다시 계산하고, 현재 스레드가 최고 우선순위가 아니라면 yield()해야 합니다.