- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
操作系统课程设计-Priority-schedulingTask2--第1页
操作系统课程设计
实验名称:Priority-schedulingTask2
一、实验内容
1.解决由lock造成的优先级反转问题;
2.在实验二的基础上,加入优先级捐赠机制,防止系统在高优先级线程所
需资源被低优先级线程占有时出现优先级反转问题;
3.通过本实验的完成,熟悉优先级捐赠算法,锻炼自己修改内核代码的能
力。
二、分析及设计
1.实现优先级捐赠问题,首先需要考虑保存原优先级的问题:因此需
要定义一个包含原先优先级和被捐赠时捐赠者需要什么锁两个成员的结
构体pri_stack,并在thread结构体中加入类型为structpri_stack的
成员;考虑到多重捐赠的情况,该成员是栈结构;
2.在thread结构体中加入block_sema、block_lock两个成员,分别
记录被哪个信号量阻塞、在等待哪个lock;
3.修改init_thread()函数,使其在初始化时同时初始化这些新加入
的成员;
4.在调用thread_set_priority()时,为了保证线程在捐赠完毕时其
操作系统课程设计-Priority-schedulingTask2--第1页
操作系统课程设计-Priority-schedulingTask2--第2页
优先级回到新的优先级,在该函数中加入对线程是否被捐赠过的判断,
若是,只修改栈底存储的优先级;否则,修改线程当前优先级,并执行
第二次实验中加入的当前优先级确认;
5.在PV操作中,当调用P操作时,若此时该信号量为0,应在线程的
block_sema成员中记录当前被哪个信号量阻塞;当调用V操作时,需
在调用thread_unblock()后置空线程的block_sema;
6.在锁的acquire和release操作中,当线程发起对锁的索取时,需先
判断该锁对应的信号量是否为0,若是,则说明已被占用,这时应在线
程的block_lock成员中保存阻塞该线程的锁,并调用优先级捐赠函数;
7.而在释放锁的时候,如果该线程被捐赠过,会出现三种情况:该锁
在线程被捐赠栈的栈顶,则还原优先级,删除记录;该锁既不在栈顶也
不在栈底,直接删除记录;该锁在栈底,将栈底优先级赋值给其上一层
后,删除记录;
8.在实现优先级捐赠函数时,需要考虑被捐赠者是否在ready_list
中,若是,需调整其在ready_list中的位置。同时,我们还需考虑被
捐赠者是否在block_list中,若是,且被捐赠者也被某个锁阻塞,此
时调整其在信号量等待队列中的位置,并触发递归捐赠。
三、详细实现
1.在thread.h中加入结构体pri_stack,用于保存被捐赠前线程的
优先级以及被捐赠时捐赠者所需的锁。
2.修改thread.h中的thread结构体,为其加入保存步骤1中的数
据的栈,同时加入两个成员block_sema和block_lock
文档评论(0)