版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度珠宝设计合同珠宝设计合同
- 计算机终端设备市场需求与消费特点分析
- 2024年度版权质押合同标的具体描述
- 辔头马具项目评价分析报告
- 洗面奶市场需求与消费特点分析
- 便携式儿童便盆市场发展现状调查及供需格局分析预测报告
- 智能毛巾暖器行业经营分析报告
- 卧铺车厢市场发展现状调查及供需格局分析预测报告
- 2024年度环保技术研发与应用合作合同
- 2024年度临时炊事员提供合同
- 雄安新区规划展馆
- 30道医院放射科医生岗位高频面试问题附考察点及参考回答
- 高压脉冲电场杀菌技术
- 上海话的研究报告
- 电子商务法课件
- 人教版数学四年级上册第五单元平行四边形和梯形同步练习
- 舞美施工方案范本
- GB/Z 43410-2023无损检测自动超声检测系统选择和应用
- 江苏开放大学2023年秋《科学思维方法论 060053》形成性作业三参考答案
- VTE防治护理组织管理架构
- 门诊医师出诊考勤表
评论
0/150
提交评论