西电计算机操作系统课程设计pintospro3_第1页
西电计算机操作系统课程设计pintospro3_第2页
西电计算机操作系统课程设计pintospro3_第3页
西电计算机操作系统课程设计pintospro3_第4页
西电计算机操作系统课程设计pintospro3_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论