西电计算机操作系统课程设计pintos-pro3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安电子科技大学
操作系统课程设计
(2016年度)
实
验
报
告
实验名称:Priority-Scheduling--Task 2 班级:
姓名:
学号:
一、实验内容
解决优先级反转的问题,在高优先级和低优先级之间竞争锁的问题。
二、分析及设计
使用多重优先级捐赠,解决优先级反转的问题。
1、一个线程获得锁,如果获得这个锁的线程比自己低就提高它的优先级,如果这个锁也是被锁着,那就递归捐赠优先级,在线程释放掉锁之后,恢复未捐赠的优先级。
2、在释放掉锁的时候,若优先级改变可以发生抢占。
3、将信号量的等待队列实现为优先队列。
4、将condition的等待队列实现为优先队列。
5、一个线程被多个线程捐赠,保持当前优先级为捐赠优先级中最大值。
6、在对一个线程设置优先级时,如果处于被捐赠状态,对original_priority进行设置,如果设置的优先级大于当前的优先级,改变当前的优先级,否则在捐赠完成时恢复
original_priority。
7、在释放锁对一个锁优先级有改变的时候应考虑其余被捐赠优先级和当前优先级。
三、详细实现
1、修改thread数据结构(thread.h)
2、在lock结构体中添加成员(synch.h)
3、修改lock_acquire函数(synch.c)
4、thread_hold_the_lock()函数的实现
5、thread_donate_priority()函数的实现
6、锁队列排序函数lock_cmp_priority实现
7、在lock_release函数加入以下语句
8、thread_remove_lock实现
9、thread_update_priority函数实现处理当前线程的优先级
10、在init_thread中加入初始化
11、修改thread_set_priority
12、把condition的队列改成优先级队列,修改cond_signal函数
13、比较函数的实现
14、把信号量的等待队列实现为优先级队列,修改sema_up
15、修改sema_down
四、实验结果
实现结果如图,priority全部完成
五、心得体会
在设计优先级捐赠这个任务的过程中,查过很多资料,发现虽然实现过程比较复杂,但是如果理解了操作系统的处理调度的解决优先级捐赠的具体方法,那么就是关于代码的实现的问题,所以在修改过程中也碰到很多的问题,很多细节方面的确是感觉考虑的不是很全面,想法还是很简单,所以在查找资料对比后,才完成本次实验。