操作系統課程設計報告優先級捐贈Priority-Scheduling-Task2_第1頁
操作系統課程設計報告優先級捐贈Priority-Scheduling-Task2_第2頁
操作系統課程設計報告優先級捐贈Priority-Scheduling-Task2_第3頁
操作系統課程設計報告優先級捐贈Priority-Scheduling-Task2_第4頁
操作系統課程設計報告優先級捐贈Priority-Scheduling-Task2_第5頁
免費預覽已結束,剩余2頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、塞第西安電子科技大學霆驢操作系統課程設計(2016年度)驗報告實驗名稱:Priority-Scheduling-Task2班級:1403018姓名:張可心學號、實驗內容操作系統中存在優先級反轉問題一一當一個高優先級線程通過信號量機制訪問共享資源時,該信號量已被一低優先級任務占有,而這個低優先級任務在訪問共享資源時,可能又被其他一些中等優先級任務搶先,因此造成高優先級任務被許多低優先級任務阻塞,實時性難以保證。我們的任務是:解決由鎖(Lock)造成的優先級反轉問題,解決策略是優先級捐贈。二、分析及設計優先級繼承(Priorityinheritance)(1)簡單捐贈hK

2、k_ftkaK<ALpriuriHM如圖所示:簡單捐贈三個線程的執行順序是:FH>/>L0執行過程如下:首先H,M等待時間發生,處于掛起狀態,L運行,JI有鎖A,M等待的時間發生,就緒,搶占CPUH待的時間發生,就緒,搶占CPU并等待鎖A;由于A已被L獲得,H掛起,并將優先級捐贈給L,L的優先級提升,開始運行,并釋放所A,同時恢復原始優先級,H被喚醒,運行,然后陋行,L運行。(2)遞歸捐贈IliKk加quirviXi/11ktupImL”L*111hvkJcqunA»ujkcuppETlhprmnty-33JIikIcncqiiMTiH,likzkivkn<e

3、i:A);p-nViir'IJmkIlIvixi.liliwk_rele圖嗎B,priori,二0如圖所示:遞歸捐贈發生時各優先級的執行順序是:4>m>L0執行過程如下:H、M等待時間發生,處于掛起狀態,L運行,持有鎖A,M等待的事件到達,就緒,搶占CPU請求鎖B成功,并繼續請求鎖A,由于A已被L持有,咖起,并捐贈自己的優先級32給L,L的優先級獲得提升,開始執行,H等待的事件到達,就緒,搶占CPU并請求鎖B,由于BMM特有,H掛起,并捐贈給自己的優先級332&M由于M3L而被阻塞,故優先級33也捐贈給L,L的優先級再次得到提升,開始運行,L釋放鎖A,M被喚醒,L的

4、優先級恢復到31,MFF始執行,釋放鎖B,H被喚醒,M的優先級恢復到32,H運行,限彳T,L運行。(3)多重捐贈L:J1M:?(lid;Mqugf3點亡Up11friiiriiy-32邛而bA)upprik>riiy33Ik>ck_4邨由曰日t十Ihskrdwz;Xuf-Itnd*rnJ如圖所示,當多重捐贈發生時,三個優先級的執行順序是:H>M->L0執行過程如下:H、嘛待的事件發生,處于掛起狀態,L運行,并先后持有鎖用DB,M等待的事件發生,就緒,搶占CPU并請求鎖A,由于AtL占有,故咖起,并將優先級32捐贈給L,L運行,H等待的時間發生,就緒,搶占CPU并請求鎖B

5、,由于B已被L占有,H掛起,并捐獻優先級332&L,L優先級得到提升,運行,先后釋放A、B,L的優先級恢復到31,H被喚醒,運行,M1行,L運行。具體分析:要實現優先級捐贈問題,首先需要考慮保存原優先級的問題,因此需要定義一個包含原先優先級和被捐贈時捐贈者需要什么鎖兩個成員的結構pri_stack,并在thread結構體中加入類型為structpri_stack的成員,考慮到多重捐贈的情況,該成員是棧結構。之后,再在thread結構體中加入block_sema、block_lock兩個成員,分別記錄被哪個信號量阻塞、在等待哪個lock。在這之后,還需修改init_thread()函數,

6、使其在初始化時同時初始化這些新加入的成員。在調用thread_set_priority()時,為了保證線程在捐贈完畢時其優先級回到新的優先級,在該函數中加入對線程是否被捐贈過的判斷,若是,只修改棧底存儲的優先級;否則,修改線程當前優先級,并執行第二次實驗中加入的當前優先級確認。在PV操作中,當調用P操作時,若此時該信號量為0,應在線程的block_sema成員中記錄當前被哪個信號量阻塞;當調用V操作時,需在調用thread_unblock()后置空線程的block_sema。在鎖的acquire和release操作中,當線程發起對鎖的索取時,需先判斷該鎖對應的信號量是否為0,若是,則說明已被占

7、用,這時應在線程的block_lock成員中保存阻塞該線程的鎖,并調用優先級捐贈函數。而在釋放鎖的時候,如果該線程被捐贈過,會出現三種情況:該鎖在線程被捐贈棧的棧頂,則還原優先級,刪除記錄;該鎖既不在棧頂也不在棧底,直接刪除記錄;該鎖在棧底,將棧底優先級賦值給其上一層后,刪除記錄。而在實現優先級捐贈函數時,我們還需要考慮被捐贈者是否在ready_list中,若是,需調整其在ready_list中的位置。同時,我們還需考慮被捐贈者是否在block_list中,若是,且被捐贈者也被某個鎖阻塞,此時調整其在信號量等待隊列中的位置,并觸發遞歸捐贈。三、詳細實現4124e4U41541641741841

8、9420421出4234加42542e4274264294304ild8433dM435436437438439440441。力1、首先在文件thread.h中的structthread的結構體中添加三個變量心ICtIOT106IOAbnti4Jrwtjoaidy口imcHislcJih帕ad以trudleekbblocked-ByUu*自Mong"nMQady搪他IsawhanAqidlloO'-2、在文件thread.h中添加結構體structdthread-artflairtfay4Juw«rwlsn-/MruciaihrnElI*lruel:li-slu4a

9、mthnaadaErn«ir-ucrtbfel.修mmh4lru«tIHitheImonator:«lru£Lllmaiil"dDflaUxaIni04dpd.*Hflnirv-nd:mIdeiniAJbvdiaidpri1>«叱ph4Throlf。k»dGish3、然后在文件thread.c的init_thread()函數中添加初始化代碼579580581582583,mind'dedb"yLnAfn»*yI>notready=-1:t->blocked-NULLlistjni

10、tS!-xjlhreadJistK4、在thread_set_priority()函數中添加代碼iB-«sOdtdUyLiuW0Od0TLrtlructihrftad-curr-tnwmdcumnltlRJCl-fi:ilrutldLhrfladmifIlistsmpicurr->dvir&H£iJjsi)E3IIcurr->pnonty工rraw_pdofily.二tfm所沖M!坤>towprion*fIdlI聞enlryU郵beglE區curr-xlIliEadban>1ruc1dthread.ttireade4am|:HMpn>=

11、nwprivily|&巾>otdpn=newpriority:1Tok(>.llid_bfrginAcurt->dlhrMd_llal);kH>l_erMlcuFr'>dUirMd_Mi)?tB(dl-Ust«n(ry|AstrLbctdihrvtd.lhfed4l«rn);(Jisoldpri丈newpnoriiyiuxi口_jxi-n«w_pnonty4«Imcun'apriority=nawjm*即5、在synch.c文件的lock_acquire()函數中添加代碼%攤酒睦2澗6231羽F1一一

12、一二一一,一一一.一»LjLHriiftdOflg'4Fueiq$r*di*9iwciihreadMw;師/noJmirvcilack匕麗*rtigidfir.lockHvaldwolht=VmadGumrrtfJg0rl科的9H工tryaKqu4i>Fk?ifk;i;*1EUCCW&ilOHvMg”,聞EfT11ASSORT貼向.:小理0alNULLMiidminblevelcridlevelddJftYd-1ntr_diBjd3le。fIhglstar.-poonlycun>prra1l|ifdu.4QVHiiwhfflWtr,diir.ckmiior

13、«cuirdiddpn>=hoidv-中morl,dnc.llmhaMw;I闡pu處bkaenJLtoek-Mkdti但最9uslA<*eJwImc如田門IM.puMXC*44ghMr53的1MiaMMt*必ilwi哂181r中他加White'|TO-'StaM9-1HREW0BLOCKEDA4hsNULL1E3J4567BQTOI2_34S67SBQ123J45O7外洲打裾四”幕喝年«»河26匹涎郎加H26a727£,a727/27產Of»tv.otwbho:HMctodHIhvr>holdarilho-&g

14、t;priaiirt1<m-甲(iEiy(Irvcld1hrv»d=修仙由IsffliEajWIocmcldlfwR;dj>dbwM-to;*8Zk>rOr用舊岸1,M-notk毋vm.tatM;Irfetpu%hijnckilom>orlockdlhrgadlitr®修Mock-rtij;1115tpushbacki&lw-li&4,&drMhrBBKl喇日eiM叩ruin”,川中田師*可IatifbreaktwnMd_pcKdO;)inlr聞lavaioldlov;:cur-06toHta-an干仲Me-”in:.gy.i

15、rtkKk>hoklef-<rr:CWrNULLI6、然后在lock_release()函數中添加代碼31331431531b11731grfdrfbyLuwEndorMntruGttti-rend,.1hrEiad_Eur-ent:|atfuctdttvrtkd'drnumntif_|»rtlcMdjevaiIdkvil-4r*_diMbs*iMitailrGJOfTip(y(SlockJoe*.(jlhrffwl_Bf:J30然1322*3S243353?S337328329詡M1132303KMir|凰onRyilEpopbachXlocfc、l«

16、ltrfflrflSflIL%l|tflrutitdthmadVtyckWedr*4ruhtruitiFuctttiraadl'danabA4=dr>4onato«trmiciii"BmpryicioraicsEirmid歸r|sJmetJthE。*4jnth-h酊ont7ili<ittiachKcfon.U*>dtiv中酬iStt|rueiethr*M柳tilHUh-fmshbreach:i閨p&pbfidc>g必nn的熱>dttw&9Iv&ienlJi->dofiatee->piDinly-efi

17、lh->oiiljinIihiMdjjnwni);i叫J*thr日aa_楮寶&MULLt,j7、添加中有一個thread_prisort()函數,定義在thread.c文件中3940-j-j-t(jcJscibyl.iuwendoncj-1*3550thr©ad_prisoFti3弗B(397list_4Q由&r酶dy_J期thread_l8備NULLj,398h399一一四、實驗結果passtests/threads/priority-changepasstests/threads/priority-donate-onepasstests/threads/priority-donate-nmltipasstests/threads/priority-donate-multipasstests/threads/priority-donate-nestpaisstests/threads/priority-donate-semapasstests/threads/priority-donate-lowerpasstests/threads/priority-fifopasstests/threads/priority-preemptpasste

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論