西电计算机操作系统课程设计pintospro3.docx

西电计算机操作系统课程设计pintospro3.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西安电子科技大学 操作系统课程设计 (2016年度) 实 验 报 告 告 TOC \o 1-5 \h \z 实验名称: Priority-Scheduling--Task 2 班 级: 姓 名: 学 号: 、实验内容 解决优先级反转的问题,在高优先级和低优先级之间竞争锁的问题。 二、 分析及设计 使用多重优先级捐赠,解决优先级反转的问题。 1、 一个线程获得锁,如果获得这个锁的线程比自己低就提高它的优先级,如果这个锁也是 被锁着,那就递归捐赠优先级,在线程释放掉锁之后,恢复未捐赠的优先级。 2、 在释放掉锁的时候,若优先级改变可以发生抢占。 3、 将信号量的等待队列实现为优先队列。 4、 将condition的等待队列实现为优先队列。 5、 一个线程被多个线程捐赠,保持当前优先级为捐赠优先级中最大值。 6、 在对一个线程设置优先级时,如果处于被捐赠状态,对 original_priority 进行设置,如 果设置的优先级大于当前的优先级,改变当前的优先级,否则在捐赠完成时恢复 original_priority 。 7、 在释放锁对一个锁优先级有改变的时候应考虑其余被捐赠优先级和当前优先级。 三、 详细实现 1、修改thread数据结构(thread.h ) int base_priority: int base_priority: H Base priority. */ struct I list locks; * Locks that the thread is holding. 7 struct lock *lock_waiting: T The lock that the thread is waiting for.T 2、在lock结构体中添加成员(synch.h) r Lock. 7 struct lock ( struct thread *holder; “ Thread holding lock (for debugging). 7 struct semaphore semaphore:/* Binary semaphore controlling access, */ struct list elem elem: T List element for priority donation. ini max_priority ; * Max priority among the threads acquiring the lock ?/ 3、 修改 lock_acquire 函数(synch.c ) if (lock^holder 1= NULL fthread_mlfqs) { cu rren tin re ad -lock_w aili n g = lock; I = lock; while (I current_thread-priority l-max_pnority) { - l^max^priority = current th read apriority: th readd o nate_pri o ri ty (l-holder); I = lholdsr-lock_waitirig; } } sema down (lock-semaphore): ald_level = jntr_disable (); currentjhread = thread_current (); if ([thread rnlfqs) { currentjfiread-lock_waii]ng = NULL; lock maxj3riori1y = current _thread-priority: thread_hold_the_lock (lock); }--- lock-halder = current thread; intr set level (old_level); ■ 4、 thread_hold_the_lock ()函数的实现 void thread_hoId_the_l ock(struct Iock Jock) (--- enum intr_level oldjevel = intr disable (); Iistjnsereordered (thread_current ()-locks. lock-elemt cmpd NUILL : if {lock-max_priority thread_current ()-priority) { ~ thread_current () ^priority - lock*max_priority; thread_yield (); } intr_set_level (oldjevel); } 5、 5

文档评论(0)

文档查询,农业合作 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体土默特左旗农特农机经销部
IP属地内蒙古
统一社会信用代码/组织机构代码
92150121MA0R6LAH4P

1亿VIP精品文档

相关文档