操作系統(tǒng)概念老師pintos實(shí)驗(yàn)part_第1頁(yè)
操作系統(tǒng)概念老師pintos實(shí)驗(yàn)part_第2頁(yè)
操作系統(tǒng)概念老師pintos實(shí)驗(yàn)part_第3頁(yè)
操作系統(tǒng)概念老師pintos實(shí)驗(yàn)part_第4頁(yè)
操作系統(tǒng)概念老師pintos實(shí)驗(yàn)part_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PintosProject中山大學(xué)軟件學(xué)院一 本次實(shí)驗(yàn)課Q&A地址 二 三 背景介紹 四 五 本周任務(wù):Project1 背景介 六 1 2 thread數(shù)據(jù)結(jié)構(gòu) 3 thread的內(nèi)存分布 一、Q&A地址 有問(wèn)題先看QA上面有沒(méi)有解答再問(wèn)哈~總會(huì)有你想要的二、實(shí)驗(yàn)前準(zhǔn)備:本章我們要講的是Pintos的Thread機(jī)制。在開(kāi)始之前,希望能夠提前閱讀源代碼,初步了解Pintos的代碼架構(gòu)。三、背景介紹Pintos已經(jīng)實(shí)現(xiàn)了大多數(shù)操作系統(tǒng)Thread機(jī)制所需的組件,如信號(hào)量,鎖,條件變量,以及優(yōu)化屏障等。另外,Pintos實(shí)現(xiàn)了對(duì)標(biāo)準(zhǔn)IO庫(kù)中printf的支持以在代碼調(diào)試的時(shí)候不妨使用printf進(jìn)行debug。*時(shí)刻要注意,我們現(xiàn)在開(kāi)發(fā)的一個(gè)運(yùn)行在機(jī)器(模擬的)上面的操作系統(tǒng),沒(méi)有了一般運(yùn)行環(huán)境下面的系統(tǒng)支持,一切都需要自力更生。請(qǐng)不要有依賴(lài)IE的心理。四、本周學(xué)習(xí)內(nèi)Pintos的進(jìn)程切換方式 如何實(shí)現(xiàn)在內(nèi)核態(tài)的進(jìn)程切換的(匯編語(yǔ)言實(shí)現(xiàn)Pintos進(jìn)程切換所采用的策略是什么(C語(yǔ)言實(shí)現(xiàn)五、本周任務(wù):Project1alarm-本周實(shí)驗(yàn)需要回答問(wèn)題(寫(xiě)到實(shí)驗(yàn)報(bào)告中Brieflydescribewhathappensinacalltotimer_sleep(),includingtheeffectsofthetimerinterrupthandler.Howcanyousolvetheprobleminvs.喚醒機(jī)制我們知道,假如一臺(tái)計(jì)算機(jī)只有一個(gè)單核的P,也就是說(shuō)實(shí)際上同一時(shí)刻只有一個(gè)進(jìn)程正在占用P,那么,會(huì)不會(huì)遇到這個(gè)進(jìn)程停不下來(lái)呢?確實(shí)會(huì)有這樣一種情況,CPU被某進(jìn)程占用了,操作系統(tǒng)又沒(méi)有別的機(jī)制要回P,那么該進(jìn)程讓PU做任何操作PU應(yīng)用程序?qū)?huì)一直霸占P,造成死機(jī)現(xiàn)象。為了解決這樣的一個(gè)問(wèn)題,計(jì)算機(jī)有一種中斷機(jī)制,通過(guò)時(shí)鐘(件),每隔一定的時(shí)間間隔就將PU強(qiáng)制交還給操作系統(tǒng),即返回內(nèi)核態(tài),由操作系統(tǒng)重新進(jìn)行PU的分配。這個(gè)機(jī)制的實(shí)現(xiàn),在Pnt中使用了tier來(lái)模擬實(shí)現(xiàn)。我們來(lái)看看代碼吧。timer.c和timer.h這是整個(gè)系統(tǒng)的同步部分,timer間隔一定的時(shí)間發(fā)出硬件中斷使操作系統(tǒng)返回狀態(tài)以決定下一次執(zhí)行的用戶(hù)態(tài)進(jìn)程是什么。timer.c文件中:timer_sleep操作系統(tǒng)應(yīng)該調(diào)用新的進(jìn)程獲得CPU,然而我們從原始的代碼實(shí)現(xiàn)中可后再重新執(zhí)行,并不釋放CPU。上述進(jìn)程的執(zhí)行狀態(tài)是1、檢查是否可以喚醒自己(if(time_elasped(startticks2、若仍然需要繼續(xù)休眠,則交還控制權(quán)給操作系統(tǒng)在于read隊(duì)列的頭部,因此即使將CPU交還給操作系統(tǒng)我們第一個(gè)做法是,將這種等待機(jī)制的timer_sleep變成喚醒機(jī)制的timer_sleep。先想想再看答案參考答案:(你也可以有自己的實(shí)現(xiàn)進(jìn)程調(diào)用tierseep時(shí)進(jìn)程標(biāo)記為bock狀態(tài),并交還PU給操作系統(tǒng),由操作系統(tǒng)重新選擇新的進(jìn)程運(yùn)行,每次回到內(nèi)核態(tài)時(shí),操為此,我們需要添加一個(gè)函數(shù)以及一個(gè)變需要添加一個(gè)函數(shù)以檢測(cè)被睡眠的進(jìn)程是否需要喚醒,這里block0對(duì)比,看看是不是應(yīng)該喚醒了。這里為ticks_blocked變量。timer_interrup函數(shù)1、打開(kāi)thread.h,ticks_blocked2、打開(kāi)thread.c,thread_createticks_blocked初始化為0,函數(shù)所在文件位置為:添加內(nèi)容為:注意添加的位置,需要在進(jìn)程t創(chuàng)建出來(lái)之后,thread_unblock此時(shí)timer.c文件,修timer_sleepticks_blocked減一,直到其為0時(shí)重新將其放入ready隊(duì)列中。4、每次時(shí)鐘中斷時(shí)會(huì)調(diào)用timer_interrup函數(shù),因此需要修改此函數(shù),使其更新正在休眠的程序的ticks_blocked以及正在運(yùn)行進(jìn)程的ticks(thread_tick函數(shù))原本只記錄當(dāng)前進(jìn)程運(yùn)行了的時(shí)間,現(xiàn)在需要同時(shí)修改其還需要被block的時(shí)間,這個(gè)操作在checkInvoke函數(shù)中更改后如下checkInvoke函數(shù)呢,嗯,這個(gè)就是我們需要添加任意位置都OK。5、添加checkInvoke注意在thread.h中添加同樣的函數(shù)這時(shí)候,結(jié)果就出來(lái)啦離成功還差一個(gè)aarmprorty哦,剩下的那個(gè)aarprorty就需要同學(xué)們自己做啦,這個(gè)怎么做就暫時(shí)不要問(wèn)我了,想下怎么做~接下去看有實(shí)現(xiàn)的提示,但是沒(méi)有答案。實(shí)驗(yàn)報(bào)告要求剛開(kāi)始會(huì)過(guò)幾個(gè)test解釋原設(shè)計(jì)有什么缺陷導(dǎo)致沒(méi)法過(guò)這幾個(gè)解釋為什么原設(shè)計(jì)有缺陷的情況下仍然能夠過(guò)一些你的設(shè)計(jì)是什么,用偽代碼寫(xiě)出你的實(shí)際實(shí)現(xiàn)是什么,截圖你的回答注意:為了防止摘抄網(wǎng)上答案,請(qǐng)截圖全部27個(gè),且不要給我全部27個(gè)都過(guò)的,否則我會(huì)認(rèn)為你直接獲取了網(wǎng)上的答案源碼。另外,全部運(yùn)行截圖都請(qǐng)將用戶(hù)名截下來(lái),如下:(注意alarm-priority|---- //pintos|----學(xué)號(hào)_ //實(shí)驗(yàn)報(bào)壓縮包命名為學(xué)號(hào)_請(qǐng)不要使用RAR等其他格式,方便統(tǒng)一解:六、alarm-priority實(shí)現(xiàn)提1、基本數(shù)據(jù)結(jié)構(gòu)-隊(duì)列的list.c&Pintos實(shí)現(xiàn)的是一個(gè)雙向其數(shù)據(jù)結(jié)構(gòu)如上圖所示,其中我們需要關(guān)注一下幾個(gè)操作函遍歷也就是查找下一個(gè)元素的方法這樣一個(gè)st所候如何將所的內(nèi)容轉(zhuǎn)換為具體的數(shù)據(jù)結(jié)構(gòu)呢?這就需要一下一個(gè)宏定義啦:好了,既然我們需要實(shí)現(xiàn)alarm-priority,也就是需要根據(jù)進(jìn)程的優(yōu)先級(jí)thread.c2、thread數(shù)據(jù)結(jié)3、thread的內(nèi)存分布我們可以看到thread調(diào)度的幾個(gè)關(guān)鍵函數(shù)1、thread_block: 調(diào)用schedule函數(shù)讓系統(tǒng)重新選擇新的進(jìn)程運(yùn)行。2thread_unblock:readytorun狀態(tài)并加入到ready隊(duì)列中以待操作系統(tǒng)進(jìn)行調(diào)用。3、那么schedule函數(shù)做了thread_block,thread_current的狀態(tài)改變了,但是當(dāng)前進(jìn)程仍然是獲得當(dāng)前CPU的進(jìn)程,只不過(guò)其中一個(gè)狀態(tài)變量改變了而已(ThreadStatusBlocked),為進(jìn)程切換做好了準(zhǔn)備,并未實(shí)際進(jìn)行切換,因currunning_threadthread_current,CPU時(shí)間scheduleswitch_threadCPU的進(jìn)程和下一thread_priority,也就是說(shuō)要按照優(yōu)先級(jí)來(lái)進(jìn)行調(diào)度,高優(yōu)先級(jí)的進(jìn)程先現(xiàn)有的實(shí)現(xiàn)機(jī)制是(我們看thread_ubblock函數(shù)),進(jìn)程狀態(tài)變?yōu)閞eadtorunready隊(duì)列的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論