voidtest_priority_donate_nest(void){structlocka,b;structlockslocks;/* This test does not work with the MLFQS. */ASSERT(!thread_mlfqs);/* Make sure our priority is the default. */ASSERT(thread_get_priority()==PRI_DEFAULT);lock_init(&a);lock_init(&b);lock_acquire(&a);locks.a=&a;...
4.thread_calc_priority使用公式实现即可,每4个ticks进行一次更新。 /* priority = PRI_MAX - (recent_cpu / 4) - (nice * 2) */ static void thread_mlfqs_update_priority(struct thread *t) /*重新计算当前进程的优先级*/ { ASSERT(thread_mlfqs); ASSERT(is_thread(t)); if (t == idle_thread...
current_thread->priority = new_priority; } }//捐赠过的但取消捐赠状态,更新当前优先级else{ current_thread->priority = new_priority; }//就绪队列中优先级比新设置的优先级低,则让出CPUif(list_entry(list_begin(&ready_list),structthread, elem)->priority > new_priority){thread_yield(); }intr_s...
这个测试点主要是改变了原始线程的优先级,但是因为它还持有其他线程正在等待的锁,所以优先级不能降低,但测试点要求我们保存该设置操作,在锁释放之后要能看到影响。 3.priority-donate-multiple 这个测试点主要是用优先级为31的主线程申请了两个锁a、b,先后用优先级为32、33的线程A,线程B(大写用来区分)来申请锁a...
1、西安电子科技大学实验名称:Priority-Scheduling-Task2班级:姓名:学号:一、实验内容解决优先级反转的问题,在高优先级和低优先级之间竞争锁的问题。二、分析及设计使用多重优先级捐赠,解决优先级反转的问题。1、一个线程获得锁,如果获得这个锁的线程比自己低就提高它的优先级,如果这个锁也是被锁着,那就递归捐赠...
所以期望的输出为:分析这个测试行为我们得出的结论就是:在设置一个线程优先级要立即重新考虑所有线程执行顺序,重新安排执行顺序。要实现这个功能,我们可以在创建新线程和更改线程优先级的时候调用thread_yield(),直接将其丢入就绪队列中即可。更改如下 66、:/* 5ets the current threads priority to NEW priqrity, ...
类型: void thread_action_func (struct thread *thread, void *aux) 执行一个线程中给定 aux 下的一些动作 函数: int thread_get_priority (void) 函数: void thread_set_priority (int new_priority) 设置和获取线程的优先级的存根。 函数: int thread_get_nice (void) 函数: void thread_set_nice (...
2. Priority 1)Preemption 基本思想:维护就绪队列为一个优先级队列,且正在运行的进程的优先级是最高的。 算法设计: 考虑一个进程何时进入就绪队列: thread_unblock init_thread thread_yield那么我们只要在这三种情况下维护就绪队列为优先级队列即可。 具体实现用list_insert_ordered完成。
pintos Lab1 实验报告
然后跑测试结果会是这样的:好, 我们还需要 pass 掉 alarm_priority 我们这个实验一就算完成了,继续搞~ Mission2: 实现优先级调度(2.2.3)先来分析一下线程, 线程成员本身就有一个 priority。 1 struct thread 2 { 3 /* Owned by thread.c. */ 4 tid_t tid; /* Thread identifier. */ 5 enum thread...