From 1fb101c365bb886f86f80ef5738f86ff48a3256e Mon Sep 17 00:00:00 2001 From: EDiasAlberto Date: Wed, 23 Oct 2024 18:56:48 +0100 Subject: [PATCH] remove repeated comparator and reorder thread_init operations --- src/threads/thread.c | 41 +++++++++-------------------------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/src/threads/thread.c b/src/threads/thread.c index aa9761d..c64bc87 100644 --- a/src/threads/thread.c +++ b/src/threads/thread.c @@ -73,8 +73,6 @@ static bool is_thread (struct thread *) UNUSED; static void *alloc_frame (struct thread *, size_t size); static int calculate_bsd_priority (fp32_t recent_cpu, int nice); static void thread_update_recent_cpu (struct thread *t, void *aux UNUSED); -static bool thread_priority_less (const struct list_elem *a, - const struct list_elem *b, void *aux UNUSED); static void schedule (void); void thread_schedule_tail (struct thread *prev); static tid_t allocate_tid (void); @@ -164,7 +162,7 @@ thread_tick (void) size_t ready = threads_ready (); if (t != idle_thread) ready++; - fp32_t old_coeff = fp_mul (fp_div_int (int_to_fp (59), 60), load_avg); + fp32_t old_coeff = fp_div_int (fp_mul_int(load_avg, 59), 60); fp32_t new_coeff = fp_div_int (int_to_fp (ready), 60); load_avg = fp_add (old_coeff, new_coeff); @@ -293,11 +291,9 @@ thread_unblock (struct thread *t) old_level = intr_disable (); ASSERT (t->status == THREAD_BLOCKED); - if (thread_mlfqs) - list_insert_ordered (&ready_list, &t->elem, thread_priority_less, NULL); - else - /* Insert the thread back into the ready list in priority order. */ - list_insert_ordered(&ready_list, &t->elem, priority_more, NULL); + + /* Insert the thread back into the ready list in priority order. */ + list_insert_ordered(&ready_list, &t->elem, priority_more, NULL); t->status = THREAD_READY; intr_set_level (old_level); @@ -371,16 +367,10 @@ thread_yield (void) if (cur != idle_thread) { - if (thread_mlfqs) - { - list_insert_ordered (&ready_list, &cur->elem, thread_priority_less, - NULL); - } - else - { - /* Insert the thread back into the ready list in priority order. */ - list_insert_ordered(&ready_list, &cur->elem, priority_more, NULL); - } + + /* Insert the thread back into the ready list in priority order. */ + list_insert_ordered(&ready_list, &cur->elem, priority_more, NULL); + } cur->status = THREAD_READY; @@ -643,8 +633,6 @@ init_thread (struct thread *t, const char *name, int nice, int priority, strlcpy (t->name, name, sizeof t->name); t->stack = (uint8_t *) t + PGSIZE; - t->priority - = thread_mlfqs ? calculate_bsd_priority (recent_cpu, nice) : priority; t->nice = nice; t->recent_cpu = recent_cpu; @@ -653,7 +641,7 @@ init_thread (struct thread *t, const char *name, int nice, int priority, t->magic = THREAD_MAGIC; list_init (&t->donors_list); - t->priority = t->base_priority; + t->priority = thread_mlfqs ? calculate_bsd_priority (recent_cpu, nice) : t->base_priority; t->waiting_lock = NULL; old_level = intr_disable (); @@ -746,17 +734,6 @@ calculate_bsd_priority (fp32_t recent_cpu, int nice) return priority; } -/* Returns true if thread a's priority is strictly greater than - thread b's priority. */ -static bool -thread_priority_less (const struct list_elem *a, const struct list_elem *b, - void *aux UNUSED) -{ - struct thread *ta = list_entry (a, struct thread, elem); - struct thread *tb = list_entry (b, struct thread, elem); - return ta->priority > tb->priority; -} - /* Schedules a new process. At entry, interrupts must be off and the running process's state must have been changed from running to some other state. This function finds another