西电Pintos操作系统课程设计 实验四
实验四:Priority Scheduling—Donation for Locks
一、实验目的
解决由lock造成的优先级反转问题。
二、实验方案
使用优先级捐赠(Priority Donation)来解决由lock造成的优先级反转问题。
优先级捐赠是指高优先级的线程将自身优先级捐给与其竞争资源的低优先级线程,以促使其尽快释放资源,进而保证自身能尽快得到运行所需资源的策略。
优先级捐赠主要分以下几种情况:
1.简单捐赠,这是最为平常和简单的一种捐赠情况。lock、优先级流动及线程执行时间顺序如下图所示:
2.递归捐赠,这是一种较为复杂的情况。lock、优先级流动及线程执行时间顺序如下图所示:
3.多重捐赠,这种情况也较为复杂。lock、优先级流动及线程执行时间顺序如下图所示:
三、详细实现
- 修改数据结构
(1) 修改thread结构体,新增三个量,一个base_priority记录线程的初始优先级,一个locks记录线程当前拥有的锁(多个),一个lock_waiting用来记录线程等待被释放的锁。
(2) 修改lock结构体,新增两个量,一个elem记录优先级捐赠的列表元素,一个max_priority记录请求锁的所有线程的最大优先级。 - 修改函数
(1) 修改init_thread()函数,实现对thread结构体中新增变量base_priority和lock_waiting的初始化。
(2) 修改lock_acquire()函数,在获取锁之前循环更新所有参与嵌套的线程的优先级,即在P操作之前解决递归捐赠的情况。然后在线程被唤醒之后让该线程持有该锁。
(3) 定义函数thread_hold_the_lock实现将一个锁资源赋给线程。
(4) 定义函数thread_donate_priority实现较高优先级线程将优先级捐赠给某一持有锁的较低优先级的线程。这里的优先级捐赠是通过修改锁的最高优先级, 然后调用thread_update_priority ()更新被捐赠线程的当前优先级实现的。
(5) 定义函数thread_update_priority ()实现线程优先级的更新。该函数一方面被thread_donate_priority()函数调用以实现优先级捐赠操作,另一方面考虑到当某线程释放锁之后,该线程的优先级可能发生变化,可用thread_update_priority()函数来处理这个逻辑。
(6) 定义函数lock_cmp_priority()实现锁队列的排序。
(7) 定义函数thread_remove_lock()实现线程释放锁时进行的操作,该函数将被synch.c中的lock_release()函数调用。
(8) 在lock_release()函数中添加相应的语句调用(6)中的thread_remove_lock()函数。
(9) 在lock_release()函数中添加相应的语句调用(6)中的thread_remove_lock()函数。
(10) 修改thread_set_priority()函数。如果没有锁,那么优先级捐赠的情况不用考虑,直接更新;如果更新的优先级大于当前线程的优先级,则更新当前线程优先级。总之,base_priority一定要在该函数中得到更新。
(11) 修改sema_up()和seme_down()函数,将信号量的wait_list实现为优先级队列,即将wait_list中的线程按优先级降序排列,该过程在实验三中已经完成过一遍。
(12) 定义cond_sema_cmp_priority()函数实现条件变量wait_list中线程的优先级比较,便于(12)中使用该函数作为list_sort()排序函数的参数。
(13) 修改 cond_signal()函数,将条件变量的wait_list也改成优先级队列,其中list_sort()排序函数使用(11)中的定义的比较函数作为参数。
四、实验结果
西电Pintos操作系统课程设计 实验四相关推荐
- 西电Pintos操作系统课程设计 实验二
实验二:Alarm-Clock 一.实验目的 重新实现timer_sleep()函数,避免"忙等待"的发生.通过阅读Pintos部分源码,初步了解Pintos操作系统内核的关键函数 ...
- 西电微机系统课程设计——步进电机开环控制系统设计
西电微机系统课程设计--步进电机开环控制系统设计 一.课程设计目的 1.掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力. 2.加深对 A/D 和并行接口芯片的工作方式和编程方法的 ...
- 西工大计算机操作系统实验报告,西工大计算机操作系统课程设计实验报告bh05xh5...
<西工大计算机操作系统课程设计实验报告bh05xh5>由会员分享,可在线阅读,更多相关<西工大计算机操作系统课程设计实验报告bh05xh5(7页珍藏版)>请在人人文库网上搜索. ...
- HDU操作系统课程设计实验三
HDU操作系统课程设计实验三 一.设计目的 二.内容要求 三.实验内容 信号量的使用 1.实现一个模拟的shell,基本功能加find.grep命令 2.实现一个管道通信程序,基本功能加有名管道通信 ...
- 西电微机系统课程设计步进电机开环控制系统
** 微机系统与应用课程设计 课题二 步进电机开环控制系统设计** 一.程设计目的 掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力. 加深对 A/D 和并行接口芯片的工作方式和编 ...
- 操作系统课程设计---实验六 银行家算法的模拟与实现
实验六 银行家算法的模拟与实现 完整课程设计源码及其报告查看:陈陈的操作系统课程设计 1.实验目的 (1) 进一步理解进程的并发执行. (2) 加强对进程死锁的理解,理解安全状态与不安全状态的概念. ...
- 操作系统课程设计---实验十 简单shell命令行解释器的设计与实现
实验十 简单shell命令行解释器的设计与实现 完整课程设计源码及其报告查看:陈陈的操作系统课程设计 1.实验目的 本实验主要目的在于进一步学会如何在 Linux 系统下使用进程相关的系统调用,了解 ...
- 操作系统课程设计---实验七 磁盘调度算法的模拟与实现
实验七 磁盘调度算法的模拟与实现 完整课程设计源码及其报告查看:陈陈的操作系统课程设计 1.实验目的 (1) 了解磁盘结构以及磁盘上数据的组织方式. (2) 掌握磁盘访问时间的计算方式. (3) 掌握 ...
- c语言报告西电,c语言课程设计报告西安电子科技大学.docx
C语言课程设计 题目名称: 7组 姓 名 学 号 130403100 专 业 自动化专业 班 级 1304031 指导教师 冯兰胜 编写日期 2016.5.16 需求分析 4.19 递归反向输出字符串 ...
- 西电李航 操作系统课程笔记 day10 IO hardware principles
文章目录 Principles of IO hardware IO设备 块设备(block device) 字符设备(character device) 设备控制器(device controller ...
最新文章
- mysql行格式化_MySQL数据格式化语句
- angular 兼容ie7 bootstrap2兼容ie6
- 协议森林08 不放弃 (TCP协议与流通信)
- 一段简单的模拟服务器的代码(Selector)
- Vue里 v-for原理
- python弱类型好处_JavaScript弱类型语言的优缺点有哪些
- OSG仿真案例(7)——osg自动驾驶
- Java 实现享元(Flyweight)模式
- 关于微信小程序使用腾讯地理位置服务,线上版本无法生效的问题
- php function overridden,php在函数外声明global变量有什么用?
- 微信小程序“IU同学”使用方法,一起来找同学!
- Linux 打开 Xbrowser 可视化操作界面
- 荒野行动8月1日服务器维护,荒野行动手游12月21日服务器维护到几点 12月21日具体开服时间公告...
- linux系统不能用投影仪,Linux连接投影仪(ubuntu)失败或显示不正常
- PTA习题【python】 7-5 特立独行的幸福
- sql语句批量导入数据库数据
- 360linux面试题,奇虎360运维工程师面试题
- python读取Excel文件是报(xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; fo
- SoloPi APP性能测试用
- 简信CRM直观展示客户分布图,让客户拜访更加省力