版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西安电子科技大学实验名称:Priority-Scheduling-Task2班级:姓名:学号:一、实验内容解决优先级反转的问题,在高优先级和低优先级之间竞争锁的问题。二、分析及设计使用多重优先级捐赠,解决优先级反转的问题。1、一个线程获得锁,如果获得这个锁的线程比自己低就提高它的优先级,如果这个锁也是被锁着,那就递归捐赠优先级,在线程释放掉锁之后,恢复未捐赠的优先级。2、在释放掉锁的时候,若优先级改变可以发生抢占。3、将信号量的等待队列实现为优先队列。4、将condition的等待队列实现为优先队列。5、一个线程被多个线程捐赠,保持当前优先级为捐赠优先级中最大值。6、在对一个线程设置优先级时,
2、如果处于被捐赠状态,对riginal_priority进行设置,如果设置的优先级大于当前的优先级,改变当前的优先级,否则在捐赠完成时恢复original_priority。7、在释放锁对一个锁优先级有改变的时候应考虑其余被捐赠优先级和当前优先级。三、详细实现1、修改thread数据结构(thread.h)intbase_priority;/*Basepriority.*/structlistlocks;/*Locksthatthethreadisholding.Vstructlocklock_waiting:/*Thelockthatthethreadiswaitingfor.*/2、在loc
3、k结构体中添加成员(synch.h)rLock.7structlockstructthreadholder;/*Threadholdinglock(fordebugging).7structsemaphoresemaphore;/*Binarysemaphorecontrollingaccess.*/structlist_elemelem;/*Listelementforprioritydonation.*/intmax_priority;/*Maxpriorityamongthethreadsacquiringthelock.*/3、修改lock_acquire函数(synch.c)if(k
4、ck-holder!=NULL&!thread_mlfqs)current_thread-lock_waiting=lock;I=lock;whileI¤t_threadapriorityl-rrax_priority)l-rriax_priority=currentthread-apriority:thread_donate_priority(l-holder);I=l-holder-lock_waiting;sema_down(&lock-semaphore);oldevel=intrdisable();current_thread=thread_current();if(!t
5、hread_mlfqs)currentthread-lock_waiting=NULL:lock-rriax_pnority=current_threadapriority:thread_holdLtie_lock(lock);lock-holder=currentthread;intr_set_level(oldjevel);4、thread_hold_the_lock()函数的实现voidthread_holdheockfstructlock*lock)enumintrleveloldevel=intrdisable();listinsertordered(&threadcurrent()
6、-locks,&lockelem,cmp,NULL);if(lock-max_prioritythread_current()apriority)threadcurrent()-priority=lock-rriax_pnority:thread_yield():5、thread_donate_priority()函数的实现voidthread_donatej3riority(structthread*t)enumintrlevelolcleel=intrdisable();thread_update_priority(t):if(t-status=THREAD_READY)listrerri
7、ove(&t-elem);list_insert_ordered(&ready_list1&telem,cmpdNULL):intrsetlevel(oldlevel);6、锁队列排序函数lock_cmp_priority实现boollDck_cmpj3riority(conststructlist_elem*a,conststructlist_elem乜void*auxUNUSED)returnlist_entry(a,structlock,elem)-maxjoriontylist_entry(b,structlock,elem)-maxjoriority:7、在lock_release函
8、数加入以下语句if(Ithreadmlfqs)thread_rerriove_lock(lock);8、thread_remove_lock实现voidthread_remove_lock(structlock#lock)enumintrlevelolclevel=intrdisable();listremove(&lock-elem):thread_update_priority(threadcurrent();intrsetlevel(oldlevel);9、thread_update_priority函数实现处理当前线程的优先级voidthreadupdatejoriority(stru
9、ctthread*t)enumintrjeveloldjevel=intr_disable();intmax_priority=t-base_priority;intlockjoriority;if(!list_empty(&t-locks)listsort(&t-locks,lockcmpjDriority,NULL);lockjoriority=listentry(listfront(&t-locks),structlock,elem)-max_priority;if(lockjDrioritymax_priority)maxjDriority=lockjDriority;t-priori
10、ty=maxjDriority;intrsetlevel(oldevel);10、在init_thread中加入初始化t-basepriority=priority;listjnit(&t-locks);t-lock_waiting=NULL;11、修改thread_set_prioritythreadsetpriority(intnewpriority)if(threadrrilfqs)return;enumintr_leveloldlevel=intrdisable();structthread*current_thread=threadcurrent();intoldpriority=c
11、urrent_thread-priority;current_thread-base_priority=newpriority;if(listempty(¤t_thread-locks)|newpriorityoldpriority)current_threadapriority=newpriorityjthread_yield();=512、把condition的队列改成优先级队列,修改cond_signal函数if(!list_empty(&cond-walters)ilistsort(&cond-walters,condsemacmppriority,NLILLj;sema_
12、up(&list_entry(list_pop_front(&cond-walters),structsemaphoreelem,elem)-semaphore);13、比较函数的实现cond_sema_cmp_priority(conststructlist_elem*a,conststructlist_elem*b,void*auxUNUSED)structsemaphoreelem*sa=list_entry(a,structsemaphoreelem,elem):structsemaphore_elem*sb=list_entry(b,structsemaphore_elem,elem
13、);returnlist_entry(list_front(&sa-semaphore.waiters).structthread,elem)-prioritylist_entry(list_front(&sb-semaphore.waiters),structthread.elem)-priority:14、把信号量的等待队列实现为优先级队列,修改sema_up|sema_up(structsemaphoresema)enumintrjeveloldjevel;ASSERT(sema!=NULL);oldlevel=intrdisable();rf(!list_empty(&sema-wai
14、ters)listsort(&sema-waiters,cmp,NULL);threadunblock(listentry(list_pop_front(&sema-waiters),structthread,elem);sema-value+;threadyield();intrsetlevel(oldlevel);15、修改sema_downsema_down(structsemaphoresema)enumintr_leveloldjevel;ASSERT(sema!=NULLi;ASSERT(!intr_context():oldjevel=intr_disable();while(s
15、ema-value=0)listjnsert_ordered(Ssemawaiters,&thread_current()-elem,cmp,NULL);thread_block();&erria-valueintr_set_level(oldjevel);四、实验结果实现结果如图,priority全部完成pass七e日七日/七hreads/alarm-nega七ivepass七ests/七hreaici日/priority-cheingepasstes七日/thi亡ad日/priorit/y-tiona七亡一onepasstes七日/threatiT/prioiit;y-tiona七?一11111_七:1戸16pass七e日七日/七hreads/priorit;y-dona七七iple2pass七ests/七hreaici日七passtes七日/thi亡ad日/priorit;y-dona七亡一日emapasstes七日/threatiT/prioiit;y-tiona七e-lowerpasstes七日/threaici日/prioi?it;y-fifopass七ests/七hreaici日/priority-preemp七passtes七日/t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 35891-2018微阵列生物芯片清洗仪技术要求》
- 深度解析(2026)《GBT 35787-2017机动车电子标识读写设备安全技术要求》
- 深度解析(2026)《GBT 35726-2017并联型有源电能质量治理设备性能检测规程》
- 深度解析(2026)《GBT 35614-2017海洋牧场休闲服务规范》
- 深度解析(2026)《GBT 35422-2017物联网标识体系 Ecode的注册与管理》
- 《DLT 1110-2009卧式蒸发冷却电机基本技术条件》(2026年)合规红线与避坑实操手册
- 全媒体运营试卷及答案
- 参加年新录用公务员初任培训感悟
- 学校公用经费支出审批制度
- 特殊教育自闭症儿童干预题库及详解
- 2025年华侨港澳台学生联招考试英语试卷试题(含答案详解)
- 医院安全知识培训课件
- 新版人教版一年级数学下册第五单元100以内的笔算加减法
- 区块链导论 课件 第七章:区块链应用案例
- 《报关培训资料》课件
- 《Hadoop大数据原理与应用》课件4.课件-第3章分布式文件系统HDFS(2020春)
- 自动驾驶测试技术
- JJG 521-2024环境监测用X、γ辐射空气比释动能率仪检定规程
- DBJ15-22-2021-T 锤击式预应力混凝土管桩工程技术规程(广东省)
- DLT 1583-2016 交流输电线路工频电气参数测量导则
- 2024年吉林省长春市中考生物试题卷(含答案)
评论
0/150
提交评论