![操作系統(tǒng)實驗報告附思考題解讀_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/1/85ea9436-d2f7-4f87-b089-0e0795f1be07/85ea9436-d2f7-4f87-b089-0e0795f1be071.gif)
![操作系統(tǒng)實驗報告附思考題解讀_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/1/85ea9436-d2f7-4f87-b089-0e0795f1be07/85ea9436-d2f7-4f87-b089-0e0795f1be072.gif)
![操作系統(tǒng)實驗報告附思考題解讀_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/1/85ea9436-d2f7-4f87-b089-0e0795f1be07/85ea9436-d2f7-4f87-b089-0e0795f1be073.gif)
![操作系統(tǒng)實驗報告附思考題解讀_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/1/85ea9436-d2f7-4f87-b089-0e0795f1be07/85ea9436-d2f7-4f87-b089-0e0795f1be074.gif)
![操作系統(tǒng)實驗報告附思考題解讀_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/1/85ea9436-d2f7-4f87-b089-0e0795f1be07/85ea9436-d2f7-4f87-b089-0e0795f1be075.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程設(shè)計(綜合實驗)報告(2015 - 2016 年度第1學期)名稱:操作系統(tǒng)綜合實驗題目:oslab綜合實驗院系:計算機系班級:學號: 學生姓名:指導教師:設(shè)計周數(shù):分散進行成 績:日期:2015年 10月29日實驗1實驗環(huán)境的使用、 綜合實驗的目的與要求熟悉操作系統(tǒng)集成實驗環(huán)境 OS Lab的基本使用方法。練習編譯、調(diào)試 EOS操作系統(tǒng)內(nèi)核以及 EOS應(yīng)用程序。、實驗正文1. 啟動 OS Lab2.1執(zhí)行項目Windows 控制臺窗口內(nèi)容顯示2.2調(diào)試項目2.2.1使用斷點中斷執(zhí)行222 單步調(diào)試2.2.2 .3單步調(diào)試結(jié)果顯示:練習使用“逐語句”功能和“跳出”功能2.2.3查看變量的值2
2、.2.4調(diào)用堆棧調(diào)用堆棧顯示內(nèi)容;進入Func函數(shù)雙擊main函數(shù)所在的行表示此函數(shù)是當前調(diào)用堆棧中的活動函數(shù)。3新建EOS內(nèi)核項目4 EOS應(yīng)用程序項目的生成和調(diào)試4.1新建EOS應(yīng)用程序項目4.2調(diào)試項目添加斷點后單步調(diào)試結(jié)果顯示4.3查看軟盤鏡像文件中的內(nèi)容4.4修改EOS應(yīng)用程序項目名稱5退出OS Lab6保存EOS內(nèi)核項目 三、綜合實驗總結(jié)或結(jié)論思考與練習:1.在哪些情況下應(yīng)該使用“逐過程”調(diào)試,在哪些情況下應(yīng)該使用“逐語句”調(diào)試。答:逐語句為每執(zhí)行一行語句,如果碰到函數(shù)調(diào)用它就會進入到函數(shù)里面。而逐過程碰到 函數(shù)時不進入函數(shù),把函數(shù)調(diào)用當成一條語句去執(zhí)行。2. 生成EOSSDK文件
3、夾的目的和作用。明白文件夾的組織結(jié)構(gòu)和各個文件的來源和作用。 查看EOS應(yīng)用程序包含了 SDK文件夾中的哪些頭文件,是如何包含的?(1)EOS SDK為應(yīng)用程序調(diào)用系統(tǒng) API提供服務(wù),可作為用戶編程中使用的工具包集合。(2) 其主要包括INC頭文件LIB文件夾、導入庫文件和BIN文件夾、動態(tài)鏈接庫、可執(zhí)行 程序、二進制文件。(3) 包含的頭文件有:eos.h負責導出API函數(shù),eosdef.h 聲明負責導出函數(shù)類型的定 義,error.h負責導出錯誤碼。(4) EOS應(yīng)用程序在項目的頭文件中只是包含了eos.h文件,在eos.h文件中又包含了 eosdef.h 禾口 error.h 文件。實
4、驗2操作系統(tǒng)的啟動一、綜合實驗的目的與要求跟蹤調(diào)試EOS在PC機上從加電復位到成功啟動全過程,了解操作系統(tǒng)的啟動過程。查看EOS啟動后的狀態(tài)和行為,理解操作系統(tǒng)啟動后的工作方式。二、實驗正文1. 準備實驗兩個匯編文件。生成項目。找on緒mu新建一個 EOS Kernel 項目。打開 boot.asm 和 loader.asm到loader.bin文件,記錄下此文件的大小1566字節(jié)。2調(diào)試EOS操作系統(tǒng)的啟動過程2.1使用Bochs做為遠程目標機找到“遠程目標機”屬性,將此屬性值修改為“ BochsDebug 2.2調(diào)試BIOS程序后按回車,其中CS寄存器信息行中的2.2.1在Co nsole
5、 窗口中輸入調(diào)試命令 sregs=0xf000 ”表示 CS寄存器的值為 OxfOOO。2.2.2輸入調(diào)試命令r后按回車,顯示當前CPU中各個通用寄存器的值。其中“ rip:OxOOOOOOOO:OOOOfffO ”表示 IP 寄存器的值為 OxfffO 。2.2.3輸入調(diào)試命令 xp /1024b 0x0000,查看開始的1024 個字節(jié)的物理內(nèi)存。在Console 中輸出的這1K物理內(nèi)存的值都為 0 ,說明BIOS中斷向量表還沒有被加載到此處。2.2.4輸入調(diào)試命令xp /512b 0x7c00,查看軟盤引導扇區(qū)應(yīng)該被加載到的內(nèi)存位置。輸出的內(nèi)存值都為0 ,說明軟盤引導扇區(qū)還沒有被加載到此
6、處。中MXm-.m4i#Br*4il MH4wMjimMp:hMKLMVOzw-MMUUP-MwM豪IMuflH十4ITwNHRIhrM可以驗證BIOS第一條指令所在邏輯地址中的段地址和CS寄存器值是一致的,偏移地址和IP寄存器值是一致的。由于內(nèi)存還沒有被使用,所以其中的值都為0。2.3調(diào)試軟盤引導扇區(qū)程序2.3.1.輸入調(diào)試命令 vb 0x0000:0x7c00,添加斷點2.3.2.輸入調(diào)試命令c繼續(xù)執(zhí)行2.3.3.輸入調(diào)試命令sreg 驗證CS寄存器(0x0000 )的值。2.3.4. 輸入調(diào)試命令r驗證IP 寄存器(0x7c00 )的值。2.3.5輸入調(diào)試命令 xp /1024b 0x0
7、000驗證此時BIOS中斷向量表已經(jīng)被載入。4UAJmFTMiir個丹ibfEd1MShit 4*wWMM VwClFFHulrrLHWiy :Mlhr re-hs1914? Nr4wiiMN.nTIHellmUINriWOeTMRfWbilbi0k*IliaiHhRmMNhhi!kLHkWNkTIH&.1BidHVB-JBRd fl2.3.6.輸入調(diào)試命令 xp /512b 0x7c00顯示軟盤引導扇區(qū)程序的所有字節(jié)碼。237輸入調(diào)試命令 xp /512b 0x0600 驗證圖3-2中第一個用戶可用區(qū)域是空白的。238輸入調(diào)試命令 xp /512b 0x7e00 驗證圖3-2中第二個用戶可用
8、區(qū)域是空白的。p pr!iT|nM!i1!PriliJiJULLi x2.3.9自己設(shè)計兩個查看內(nèi)存的調(diào)試命令,驗證這兩個用戶可用區(qū)域的高地址端是空白的。(1) xp /512b 0x7f00(2) xp /512b0x07002.3.10輸入調(diào)試命令xp /512b 0xa0000 驗證圖3-2 中上位內(nèi)存已經(jīng)被系統(tǒng)占用。M41iLaIUaII :ta-iiJiLMMMl Mi Ch1UK* 辯11* Ffiffc-rr *!*kd-FkrrwTiTlad!* =WXlUKili:2.3.11自己設(shè)計一個查看內(nèi)存的調(diào)試命令,驗證上位內(nèi)存的高地址端已經(jīng)被系統(tǒng)占用。xp /512b OxbOOO
9、O ITur-rHrfK.TiT*13和failttalfDeHAbirAnri44t n-fiInrffl-ff154MFfcFFVkFffl-ffMud fNrdN.j*r斗?J3h=ur-rNwrcii.IaIE Killdi4M !rpavrHKTfHrrre-riMJMfB-ff5H4isfH條卜!1hIp.4ikH.LI4ifrWn-iri:注:查看loader.bin文件的大小應(yīng)在屬性”對話框中看。2.4調(diào)試加載程序使用查看虛擬內(nèi)存的調(diào)試命令x /1wx 0x80001117查看內(nèi)存中保存的 32位函數(shù)入口地址,在 Con sole 窗口中會輸出:0x00000000800011
10、17 : 0x800*2.5調(diào)試內(nèi)核在“監(jiān)視”窗口中可以看到KiSystemStartupvoid (PVOID) 0x800* KiSystemStartup2.6 EOS啟動后的狀態(tài)和行為三、綜合實驗總結(jié)或結(jié)論1.為什么EOS操作系統(tǒng)從軟盤啟動時要使用 一個可以嗎?它們各自的主要功能是什么?函數(shù)地址為vaid (PVOID) 0x80018130 OfiSyitmStwftupboot.bin 和loader.b in兩個程序?使用如果將loader.bin的功能移動到 boot.bin文件中,則boot.bin文件的大小是否仍然能保持小于512字節(jié)?答:在IDE環(huán)境啟動執(zhí)行 EOS操作系
11、統(tǒng)時,會將boot.bin ,loader.bin, kernal.dll 三個二進制寫入軟件鏡像文件中,然后讓虛擬機來執(zhí)行軟盤中的EOS操作系統(tǒng),使用其中一個是不能運行的。2. 為什么軟盤引導扇區(qū)程序選擇將loader.bin 加載到第一個可用區(qū)域的 0x1000處呢?這樣做有什么好處?這樣做會對loader.b in 文件的大小有哪些限制。答:用戶只用兩個可用區(qū)域,加載位置非此即彼。第一個可用用戶區(qū)是低地址區(qū),且空間 大小比較小,適合容納小文件,所以我們選擇將占用空loder.bin加載到第一用戶區(qū)。優(yōu)點:低地址開始,便于搜索查找小文件占用小空間,節(jié)約資源。限制:loder.bin文件必須
12、小 于 1c00k 。實驗3進程的創(chuàng)建一、綜合實驗的目的與要求練習使用EOSAPI函數(shù)CreateProcess 創(chuàng)建一個進程,掌握創(chuàng)建進程的方法,理解進程和 程序的區(qū)別。調(diào)試跟蹤 CreateProcess 函數(shù)的執(zhí)行過程,了解進程的創(chuàng)建過程,理解進程 是資源分配的單位。二、實驗正文1準備實驗2練習使用控制臺命令創(chuàng)建EOS應(yīng)用程序的進程Hello.exe應(yīng)用程序輸出結(jié)果個應(yīng)用程序的進程3練習通過編程的方式讓應(yīng)用程序創(chuàng)建另 可知子進程結(jié)束后,父進程繼續(xù)執(zhí)行The process exit ulth 0*4 調(diào)試 CreateProcess 函數(shù)在“反匯編”窗口的左側(cè)顯示的虛擬地址中看到所有指令
13、的虛擬地址都大于0x80000000 ,說明內(nèi)核(kernel.dll ) 處于高2G的虛擬地址空間中。OiSOOlldSc查看ma in函數(shù)的指令所在的虛擬地址都是小于0x80000000,說明應(yīng)用程序(eosapp.exe )處于低2G的虛擬地址空間中。 余工山匚氓5 調(diào)試 PsCreateProcess 函數(shù)進程執(zhí)行的結(jié)果riel lOiWOtrldf 1 Hellouarldf ZHelo.uorId! 3Hel lo, war Id f 4He 1lo,uarld! S Bye -bye!The process exit uith 0L繪制一幅進程創(chuàng)建過程的流程圖。提供的源代碼基礎(chǔ)上
14、時創(chuàng)建10個進程。6練習通過編程的方式創(chuàng)建應(yīng)用程序的多個進程多個進程并發(fā)執(zhí)行的結(jié)果:有結(jié)果顯示可知有兩個進程在執(zhí)行三、綜合實驗總結(jié)或結(jié)論1.在源代碼文件 NewTwoProc.c進行修改,要求使用 hello.exe 同修改結(jié)果如下圖所示:1 laworld* 3)louarld* 3I la rwar Id* 1I la,world? 4I LauorId! 4 llauarId* 411口uarLdf AI Lo,Morld* 4I lowarIdT 4The processThe processThe processOne ex it uith 0. tuo ex It ulth 0.3
15、 exit withThe process 4 exit with 0”Thfi process 5 exit with 0,The process 6 exit with 0, The process 7 ex it ultb 0. The process H exit ulth 氛The process 9 ex it with 0.The process16 exit uith 0,部分修改代碼如下圖所示:(“”部分為相似的4-9進程代碼)if (CreateProcess(A:Hello.exe, NULL, 0, & Startupl nfo, & Procl nfoOne)& Cr
16、eateProcess(A:Hello.exe, NULL, 0, & StartupI nfo, & ProcI nfoTwo)& CreateProcess(A:Hello.exe, NULL, 0, & Startupinfo, & Proclnfo3) & CreateProcess(A:Hello.exe, NULL, 0, & Startupinfo, & Proclnfo10) WaitForSi ngleObject(Proc InfoOne.P rocessHa ndle, INFINITE);WaitForSi ngleObject(Procl nfoTwo.Process
17、Ha ndle, INFINITE);WaitForSingleObject(ProcInfo3.ProcessHandle, INFINITE);WaitForSingleObject(ProcInfo10.ProcessHandle, INFINITE);GetExitCodeProcess(ProcInfoOne.ProcessHandle, &ulExitCode);GetExitCodeProcess(ProcInfo3.ProcessHandle, &u lExitCode);printf(nThe process 3 exit with %d.n, ulExitCode); Ge
18、tExitCodeProcess(ProcInfo10.ProcessHandle, & ulExitCode);printf(nThe process 10 exit with %d.n, ulExitCode);CloseHa ndle(Procl nfoOn e.ProcessHa ndle);CloseHa ndle(Procl nfoTwo.ThreadHa ndle);CloseHandle(ProcInfo3.ProcessHandle);CloseHandle(ProcInfo3.ThreadHandle);CloseHandle(ProcInfo10.ProcessHandl
19、e);CloseHandle(ProcInfo10.ThreadHandle);2.在 PsCreateProcess 函數(shù)中調(diào)用了 PspCreateProcessEnvironment 函數(shù)后又 先后 調(diào)用了 PspLoadProcesslmage 和PspCreateThread 函數(shù),學習這些函數(shù)的主要功能。能夠交換這些函數(shù)被調(diào)用的順序嗎?答:PspCreateProcessEnvironment創(chuàng)建了進程控制塊,地址空間和分配了句柄表,PspLoadProcesslmage將進程的可執(zhí)行映象加載的到了進程的地址空間中,PspCreateThread 創(chuàng)建了進程的主線程。這三個函數(shù)知道
20、自己從哪里開始執(zhí)行,執(zhí)行哪些 指令,因此不能交換它們的順序。實驗4線程的狀態(tài)和轉(zhuǎn)換一、綜合實驗的目的與要求調(diào)試線程在各種狀態(tài)間的轉(zhuǎn)換過程,熟悉線程的狀態(tài)和轉(zhuǎn)換。通過為線程增加掛起狀態(tài),加深對線程狀態(tài)的理解。二、實驗正文i準備實驗2調(diào)試線程狀態(tài)的轉(zhuǎn)換過程2.1線程由阻塞狀態(tài)進入就緒狀態(tài)“ *Thread ” State 域的值為 3 ( WagingQ葉其 血玄,雙向鏈表項 StateListEntryhWKt血牝的Next和Prev指針的值都不為0屮“潁脈戰(zhàn),說明這個線程還處于阻塞狀態(tài),并在StartAddr 域的值為StartAddr 0x800 lSe9a 說明這個線程就某個同步對象的等待
21、隊列中;lopC on soleDispatchThread 是控制臺派遣線程。按F10調(diào)試,此時的Next和Prev指在“調(diào)用堆?!贝翱谥须p擊PspU nwaitThread函數(shù)對應(yīng)的堆棧項,State 域的值為0 ( Zero )嚴:八巳,雙向鏈表項 StateListEntryEtateListEntry 針的值都為0,說明這個線程已經(jīng)處于游離狀態(tài)。按F5繼續(xù)執(zhí)行,在PspReadyThread函數(shù)中的斷點處中斷。按F10單步調(diào)試直到此函數(shù) a1 vva w ji一 ! an的最后。此時State 域的值為1( +Re(ady)5怙燒,雙向鏈表項StateListEntry 的Next和
22、Prev指針的值都不為 0戶圖03 ,說明這個線程已經(jīng)處于就緒狀態(tài),并已 經(jīng)被放入優(yōu)先級為 24的就緒隊列中。2.2線程由運行狀態(tài)進入就緒狀態(tài) 2.3線程由就緒狀態(tài)進入運行狀態(tài) 2.4線程由運行狀態(tài)進入阻塞狀態(tài) 3為線程增加掛起狀態(tài)suspend 31Suspend t hredd (31) KLii:cex 營.31Besuine threadOl) success.三、綜合實驗總結(jié)或結(jié)論1思考一下,在本實驗中,當loop線程處于運行狀態(tài)時,EOS中還有哪些線程, 它們分別處于什么狀態(tài)??梢允褂每刂婆_命令pt查看線程的狀態(tài)。答:有一個優(yōu)先級為 0的空閑線程處于就緒狀態(tài),8個優(yōu)先級為24的控制
23、臺線程處于阻塞狀態(tài),1個優(yōu)先級的24的控制臺派遣線程處于阻塞狀態(tài)。2.當loop線程在控制臺1中執(zhí)行,并且在控制臺2中執(zhí)行suspend命令時,為什么控 制臺1中的loop線程處于就緒狀態(tài)而不是運行狀態(tài)?答:在控制臺2中執(zhí)行suspend命令時,優(yōu)先級為 24的控制臺2線程搶占處理器,即控 制臺2線程處于運行狀態(tài),因此此時loop處于就緒狀態(tài)。3總結(jié)一下在圖5-3中顯示的轉(zhuǎn)換過程,哪些需要使用線程控制塊中的上下文,哪些不需要使用,并說明原因。答:就緒t運行,運行t就緒,運行t阻塞需要使用TCB因為這些過程有線程調(diào)進或調(diào)出處理機的過程,新建t就緒,阻塞t就緒不需要使用TCB上下文,因為沒有占用處
24、理機資源。4.請讀者找出這些轉(zhuǎn)換過程的原語操作(關(guān)中斷和開中斷)是在哪些代碼中完成的。答:IntState=KeEnablelnterrupts(FALSE);/關(guān)中斷KeEn ableI nterrupts( In tState);/開中斷實驗5進程的同步一、綜合實驗的目的與要求使用EOS的信號量, 編程解決生產(chǎn)者一消費者問題,理解進程同步的意義。調(diào)試跟蹤EOS信號量的工作過程,理解進程同步的原理。修改EOS的信號量算法,使之支持等待超時喚醒功能,加深理解進程同步的原理。二、實驗正文1準備實驗2使用EOS的信號量解決生產(chǎn)者-消費者問題 3調(diào)試EOS信號量的工作過程3.1創(chuàng)建信號量PsI ni
25、 tializeSemaphore函數(shù)中用來初始化信號量結(jié)構(gòu)體成 員的值,應(yīng)該和傳入 CreateSemaphore函數(shù)的參數(shù)值是一致的。Iciti日I匚ost 二 4日Maximum匚cunt 二血3 晁maphow 二 P茸EMAPHOREChtSOSfbafO單步調(diào)試PsInitializeSemaphore函數(shù)執(zhí)行的過程,函數(shù)的調(diào)用層次:PsTnrti a I izeSemaphoreiPspOnCreateSerndphoreObjectC3.2等待、釋放信號量 3.2.1等待信- 號量 (不阻塞)II Semaphore-Count = 0x9完成PsWaitForSemaphor
26、e 函數(shù)中所有操作。Empty的計數(shù)減少了 1 (由10變?yōu)榱?9 )Serra phore-* C ount 二 Oxa3.2.2釋放信- 號量(不喚醒)完成PsReleaseSemaphore函數(shù)中的所有操作。Full計數(shù)增加了 1 (由0變?yōu)榱?1 )。Semaphore-* 匚 aunt = 0x0 Semaphore-Cou nt = 0x1323等待信號量(阻塞)在“調(diào)用堆?!贝翱谥须p擊Producer函數(shù)所在的堆棧幀,綠色箭頭指向等待Empty信號量的代碼行,查看 Producer函數(shù)中變量i的值為14 ,表示生產(chǎn)者線程正在嘗試生產(chǎn)14在“調(diào)用堆?!贝翱谥须p擊PsWaitForS
27、emaphore 函數(shù)的堆棧幀,查看 Empty信號量計數(shù) -(Semaphore-Count)的值為-釋放信- 號量(喚醒)Consumer函數(shù)中變量i的值為4 ,說明已經(jīng)消費了 4號產(chǎn)品。.=-I查看 PsReleaseSemaphore 函數(shù)中 Empty 信號量計數(shù)(Semaphore-Count)的值為-1,和 ,亠Semaphore- = Count 二 Oxffffffff I生產(chǎn)者線程被阻塞時的值是一致的。單步調(diào)試PsReleaseSemaphore函數(shù),Empty計數(shù)的值已經(jīng)由-1增加為了 05亡maphore-A 匚gunt 二 OicIfiTffff ern
28、aphoxe-Courrt = 0x04修改EOS的信號量算法(1) 修改 PsWaitForSemaphore 函數(shù):if (Semaphore-Cou nt 0)Semaphore-Co un t-;flag=STATUS_SUCCESS; elseflag=PspWait (&Semaphore-WaitListHead,Milliseco nds);KeE nable In terrupts(I ntState);return flag;(2) 修改 PsReleaseSemaphore 函數(shù):while(!ListlsEmpty(&Semaphore-WaitListHead)&(R
29、eleaseCou nt)PspWakeThread(&Semaphore-WaitListHead, STATUS_SUCCESS);PspThreadSchedule();ReleaseCo un t-;Semaphore-Co un t=Semaphore-Co un t+ReleaseCo unt;Status = STATUS_SUCCESS;KeEn ableI nterrupts(l ntState);return Status;測試結(jié)果:根據(jù)文檔中的測試方法可看到結(jié)果中有兩個消費者Consume a QConsume a 1Frnduce a ZProduce a 3Produ
30、ce a 1Prnrluce 3 5ConsuMer a ZConsune a 3Proea1GPhodlUCnea11Producea1Z匚口 TISXLiq七GC 口 T1SUPK?7尸r id nt zmfV13C; 口 hlunProduce a 7Produce a 8Produce a 3Consune a 4Consune a 5三、綜合實驗總結(jié)或結(jié)論1. 思考在 ps/semaphore.c文件內(nèi)的 PsWaitForSemaphore 和 PsReleaseSemaphore 函數(shù) 中,為什么要使用原子操作?答:EOS內(nèi)核中維護了大量內(nèi)核數(shù)據(jù),正是這些數(shù)據(jù)描述了EOS操作系統(tǒng)
31、的狀態(tài)如果有一組相互關(guān)聯(lián)的內(nèi)核數(shù)據(jù)共同描述了這個操作系統(tǒng)的某個狀態(tài),那么在修改這樣一組內(nèi)核數(shù) 據(jù)時就必須保證一致性。這就要求修改這部分數(shù)據(jù)的代碼在執(zhí)行過程中不能被打斷,這種 操作叫做“原語操作”。2. 根據(jù)本實驗3.3.2 節(jié)中設(shè)置斷點和調(diào)試的方法,自己設(shè)計一個類似的調(diào)試方案來驗證消費者線程在消費24號產(chǎn)品時會被阻塞,直到生產(chǎn)者線程生產(chǎn)了24號產(chǎn)品后,消費者線程才被喚醒并繼續(xù)執(zhí)行的過程。答:Consunc:a1?ConsumtdL18ConsuneConsuncaConsunc:aConsuneaConsuncaZ3生產(chǎn)到23號產(chǎn)品后,進程阻塞。實驗6時間片輪轉(zhuǎn)調(diào)度一、綜合實驗的目的與要求調(diào)試
32、EOS的線程調(diào)度程序,熟悉基于優(yōu)先級的搶先式調(diào)度。 為EOS添加時間片輪轉(zhuǎn)調(diào)度,了解其它常用的調(diào)度算法。二、實驗正文1準備實驗2閱讀控制臺命令“ rr ”相關(guān)的源代碼3調(diào)試線程調(diào)度程序3.1調(diào)試當前線程不被搶先的情況查看ThreadFunction函數(shù)中變量pThreadParameter-Y 的值應(yīng)該為0 ,說明正在調(diào)試的是第0個新建的線程。*小心八二丄按2次F5的循環(huán)輸出的內(nèi)容:StartAddr = 0x8001Sbf3 ,Priority = 0x3,State w 0x2rRemainderTiAs - 0x6 VyaitStatus = QxOr以二進制格式查看就緒位圖的值/t F
33、spRcadyBiUap 100000001HighestPriorityBitSca nReverse 函數(shù)會從就緒位圖中掃描最高優(yōu)先級,并保存在變量 中。查看變量 HighestPriority 的值為 8。.叫一 一 二_Thread 0 (B): 3043363.2調(diào)試當前線程被搶先的情況激活虛擬機窗口,可以看到第0個新建的線程正在執(zhí)行。在“監(jiān)視”窗口中查看就緒位圖的值為1000000000000000100000001,說明此時在優(yōu)先級為 24的就緒隊列中存在就緒線程。在“監(jiān)視”窗口中添加表達式“ ListGetCount(&PspReadyListHeads24),其值為 1,說明
34、優(yōu)先級為 24 的就緒隊列中只有一個就緒線程。掃描就緒位圖后獲得的最高優(yōu)先級的值HighestPriority也就應(yīng)該是 24。顯示 0x18=24/l FxpRt|込吊y 二 W竟Li EtGftCourLt (AFpReadyLi stHc80x13Li stGetCcunt CftFipReadyLi stHe&ds 24)0x1、Liyuni(址即肌tdyLi0x0Li 就GttOucA (APipHtidyLi z (Mt 皿) OiH繼續(xù)調(diào)試優(yōu)先級 24的線程已經(jīng)進入了“運行”狀態(tài)。4為EOS添加時間片輪轉(zhuǎn)調(diào)度修改部分代碼:VOID PspRoundRobin( VOID )if(
35、NULL!=PspCurrentThread&Running=PspCurrentThread-State) PspCurrentThread-RemainderTicks-;if (0 = PspCurrentThread-RemainderTicks) PspCurrentThread-RemainderTicks = TICKS_OF_TIME_SLICE; if(BIT_TEST(PspReadyBitmap, PspCurrentThread-Priority) PspReadyThread(PspCurrentThread); 測試:能看到20個線程輪流執(zhí)行的效果Thread 0
36、(9)::ZZ044Thread 1 (B):Z1929Thread 2 (6):;21993Thread 3 (8::ZE045Thread 4 (8)::220G3Thread 5 (8):;Z1604Thread b 【日):22432Thread 7 (8):21556Thread 8 (8);ZZ299Thread 勺曲”:Z173?Threadie:Z2059Thread11(0):ZZ561Thread12(6):Z16G2Thread13CHJ :22091Thread14:21767Thread15:Z1563TJiread16(8):Z257BThread17(8):ZIQ
37、ZAThread16(0):21836Thread19:213765修改線程時間片的大小執(zhí)行的效果:參數(shù)=100Thread 0 8)ZZ2B0Thread 1 (8):ZZ431Thread Z (8)ZZ045Thread 3 (B)zz3oeThread 4ZZ9BBThread 5 (8):ZZ2iThread 6 :ZZS31Thread 7 (8)Z1337Thread 8 (8)ZZ6Z4Thread 孑(8)ZZS%Thread 10 (GtZ1B79Thread 11 (S)ZZ53BThread 1Z B)Z17B6Thread 13 (B)ZZ164Thread H (6
38、)2Z465Thread 15 恂,;ZZ043Thread 16 (B)ZZ55ZThread 17 (8):ZZZMThread 18 (B)ZZ733Thread 19 G):ZZ07S參數(shù)=20Thrend G(8:1第5?Thread 1(3):EQ369Thread 2佃):20535T)read 3(S):Z0Z78Thread 4(8ZOZllThread 5(8):僦56Thread 6(3):63?TJiread 7(9):Z0Z59Thread 8(8):zezyzThread 3(8):EG39QThread 108):205BThread 11 (8):2064TJt
39、read 12 (B):1931Thread 13 (B):2053Thread 14 (8):2636Thread 15 (B);Z03ZTJiread 16 (8):Z017T)rrad 1?(B):2625TJiread 1a(B):ZG15Thread 1勺(8);2G3?ThrcAd Thread Thread Thread ThreadThread ThreadThread Thread Thread Thread Thread Thread ThrAd Thread Thread Thread Thread Thread0 (8);1 (8):Z:3:4 (B):5 CB):6
40、CB):7:8:3 (8):10 (8)11 (B)12 pnPage Count: B176.Kef*ory Count: B17 * 40% = 334BHH% Byte,ISeroed Pge Count: Q.Tree Page Count: 71Z6.Used Pdge Count: 1050.可知其空閑頁為7126,零頁鏈表為0,已用表為1050.按F10單步調(diào)試 MiFreePages函數(shù)的執(zhí)行過程,結(jié)果如圖pnPage Cmnt : B1L肚.Heraury Count 0176 * 4&9E = 3348889& By te ZerQEd Fage Count 0.Free
41、Fage Count: 71Zb,Used Page Count 1050aw啊nnn用 AJter ftJ IDcate line Page 睜優(yōu)忖忖Page Caunt: 0,Free Page Count: 7125, Used Page Count: 1051.可知其再分配1頁后,空閑頁為 7125,零頁鏈表為0,已用表為1051,即用空閑頁分配,沒用零頁鏈表分配。4閱讀控制臺命令“ vm相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果輸入命令“ A: LoopApp.exe 后按回車。此時就使用EOS應(yīng)用程序文件LoopApp.exe創(chuàng)建了一個應(yīng)用程序進程,由于此進程執(zhí)行了一個死循環(huán),所以此進程不會
42、結(jié)束執(zhí)行,除非關(guān)End less loop.5在系統(tǒng)進程中分配虛擬頁和釋放虛擬頁Qx白QOQ3QOO調(diào)試釋放虛擬頁的過程:BaseAddress由初始化的變成了 B aseAd d re, s=OxaOOOSa 20, 和 Regi on Size 由初始化的尺亡9心廣5| _ 0辺 變成了RegionSiie=(h aOOOSd le, 在調(diào)用 MmAllocateVirtualMemory 函數(shù)時將 RegionSize 參數(shù)的值設(shè)置為PAGE_SIZE*2+1,觀察“輸出”窗口中轉(zhuǎn)儲的信息,輸出文本略。 三、綜合實驗總結(jié)或結(jié)論1. 在本實驗 3.3 中,如果分配了物理頁后,沒有回收,會對
43、EOS 操作系統(tǒng)造成什么樣的影響?目前EOS操作系統(tǒng)內(nèi)核函數(shù) MiAllocateAnyPages能處理所有物理頁被分配完畢的 情況嗎?答:(1) 會造成自由頁鏈表和零鏈表不斷減少,甚至為空。所有物理頁都分配完畢的現(xiàn)象。(2) 不能。2. 嘗試從性能的角度分析內(nèi)核函數(shù)MiAllocateAnyPages和MiAllocateZeroedPages。嘗試從安全性的角度分析分配零頁的必要性。答: MiAllocateAnyPages 分配物理頁。首先從空閑頁鏈表中分配,如果分配空閑鏈表不足 則再從零頁鏈表分配。MiAllocateZeroedPages首先從零頁鏈表中分配,如果零頁不足則從 空閑鏈
44、表分配。3. 觀察本實驗3.4中使用“ vm”命令輸出的系統(tǒng)進程的虛擬地址描述符,可以看到在2號描述符和 3 號描述符之間有兩個虛擬頁的空隙,嘗試結(jié)合虛擬頁的分配和釋放說明產(chǎn)生 這個空隙的原因。答:產(chǎn)生空隙是由于虛擬頁被釋放而造成的。在啟動時會有一個初始化線程在初始化完畢 之后就退出了,線程的堆棧所占用的虛擬頁也就被釋放了。4. 在本實驗 3.5 中,調(diào)用 MmAllocateVirtualMemory 函數(shù)分配虛擬頁時只使用了MEM_RESERVE標志,沒有使用 MEM_COMMIT標志,嘗試說明這兩個標志的區(qū)別。答:使用MEM_RESERVE標志分配虛擬頁時,沒有為其映射實際的物理頁。使用
45、 MEM_COMMIT 標志分配虛擬頁時,會為其映射實際的物理頁。實驗 8 分頁存儲器管理一、綜合實驗的目的與要求學習 i386 處理器的二級頁表硬件機制,理解分頁存儲器管理原理。查看 EOS 應(yīng)用程序進程和系統(tǒng)進程二級頁表映射信息,理解頁目錄和頁表的管理方式。 編程修改頁目錄和頁表的映射關(guān)系,理解分頁地址變換原理。二、實驗正文1 準備實驗2 查看 EOS 應(yīng)用程序進程的頁目錄和頁表 驗證結(jié)果與指導教程的二級頁表映射信息結(jié)果相同。(輸出文本略)輸出文本略)3 查看應(yīng)用程序進程和系統(tǒng)進程并發(fā)時的頁目錄和頁表4查看應(yīng)用程序進程并發(fā)時的頁目錄和頁表(輸出文本略)5在二級頁表中映射新申請的物理頁(輸出
46、文本略)三、綜合實驗總結(jié)或結(jié)論1.觀察之前輸出的頁目錄和頁表的映射關(guān)系,可以看到頁目錄的第0x300個PDE映射的頁框號就是頁目錄本身,說明頁目錄被復用為了頁表。而恰恰就是這種映射關(guān)系決定了4K的頁目錄映射在虛擬地址空間的0xC0300000-0xC0300FFF,4M的頁表映射在0xC0000000-0xC03FFFFF。現(xiàn)在,假設(shè)修改了頁目錄,使其第0x100個PDE映射的頁框號是頁目錄本身,此時頁目錄和頁表會映射在4G虛擬地址空間的什么位置呢?答:頁目錄占用1個物理頁,頁框號是0x409.頁表占用5個物理頁,頁框號是0x41D,0x401,0x403,0x404,0x402.2思考頁式存儲管理機制的優(yōu)缺點。答:優(yōu)點:虛存量大,適合多道程序運行,動態(tài)頁式管理提供了內(nèi)外存統(tǒng)一管理的虛存實現(xiàn)方式。內(nèi)存利用率高,不要求作業(yè)連續(xù)存放,有效地解決了內(nèi)存碎片問題。缺點:要進行頁面中斷缺頁中斷等處理,系統(tǒng)開銷較大,有可能產(chǎn)生”抖動”現(xiàn)象。地址變換機構(gòu)復雜,一般采用硬件實現(xiàn),添加了機器成本。實驗10磁盤調(diào)度算法一、綜合實驗的目的與要求通過學習E
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代科技在中藥植物油提取中的綠色環(huán)保策略
- 生活用紙設(shè)計新趨勢創(chuàng)新驅(qū)動的消費者體驗升級
- 生態(tài)保護與零碳公園規(guī)劃的融合實踐
- 國慶節(jié)活動方案活動內(nèi)容
- 現(xiàn)代服務(wù)業(yè)的綠色發(fā)展路徑探索
- 小學勞動教育考核方案
- 2024年五年級英語下冊 Unit 7 Chinese festivals第6課時說課稿 譯林牛津版
- 2024年秋七年級歷史上冊 第14課 溝通中外文明的“絲綢之路”說課稿 新人教版
- Unit 3 My friends Read and write(說課稿)-2024-2025學年人教PEP版英語四年級上冊
- 3 我不拖拉 第一課時(說課稿)2023-2024學年統(tǒng)編版道德與法治一年級下冊
- 房地產(chǎn)工程管理 -中建八局機電工程質(zhì)量通病治理辦法
- GB/T 6403.4-2008零件倒圓與倒角
- GB/T 2518-2019連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
- 企業(yè)合規(guī)管理-課件
- 火電廠安全工作規(guī)程
- GB∕T 33047.1-2016 塑料 聚合物熱重法(TG) 第1部分:通則
- 電力業(yè)務(wù)許可證豁免證明
- 特發(fā)性肺纖維化IPF
- FIDIC國際合同條款中英文對照.doc
- 建筑工程資料歸檔立卷分類表(全)
- 個人勞動仲裁申請書
評論
0/150
提交評論