ready list에 새로 추가된 thread의 우선순위가 현재 CPU를 점유중인 thread의 우선순위보다 높은 경우 기존 thread를 밀어내고 CPU를 점유하도록 한다.
→ 💡push_back 을 다른 함수로 고쳐보면 될 듯 하다.
❓모르는 부분
init.c
에서 thread_start
호출
thread_start
에서 idle 스레드 생성→ 모든 ready_list에 넣을때 우선순위로 정렬되도록 만들어 주었다.
ori_priority < new_priority
라고 생각했는데, 이건 ori_priority가 new_priority로 바뀌는 상황이니까 기존 ori_priority에서는 CPU를 선점할 수 있었는데, 이것보다 낮아지는 경우에 ready list의 원소들과 비교해줘야 함./* Sets the current thread's priority to NEW_PRIORITY. */
void
thread_set_priority (int new_priority) {
int ori_priority = thread_current()->priority;
thread_current ()->priority = new_priority;
if(ori_priority > new_priority){
test_max_priority();
}
}
static bool cmp_priority(struct list_elem *e1, struct list_elem *e2, void *aux UNUSED){
int64_t priority1 = list_entry(e1, struct thread, elem)->priority;
int64_t priority2 = list_entry(e2, struct thread, elem)->priority;
return priority1 > priority2;
}
‼️구현 완료, 해당 테스트 통과