- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 合伙人企业协议书范本.docx
- 商品房预售方案(样本).docx
- 《亚洲封建国家的建立》参赛优质文档.docx
- 范进中举优秀教案.docx
- 国际商务谈判期末复习资料.docx
- XX培训学校理事会章程.docx
- 责任感的主题班会.docx
- 小学四年级语文下册复.docx
- 应对中考:英语有效复习策略探讨.docx
- 有限责任公司规章制度.docx
- 外卖食品安全风险的治理构建与实践向度.pdf
- DB15T 2190-2021 岭南温暖区玉米机械化籽粒直收生产技术规程.docx
- DB15T2178-2021 金莲花种植技术规程.docx
- DB1504╱T 1027-2021 日光温室番茄越冬茬生产技术规程.docx
- 区域性地震安全性评价数据库规范 (DB15T 3688-2024).docx
- DB15∕T 2382-2021 草原生态修复监测核心数据规范.docx
- DB15∕T 2362-2021 固定污染源废气 低浓度颗粒物的测定 β 射线法.docx
- DB15_T 2909-2023 优质燕麦草饲喂奶牛节本增效技术规程.docx
- 健康中国背景下食品安全风险防控体系创新探讨.pdf
- 我国食品安全信息共享机制建设析论.pdf
文档评论(0)