



版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)(綜合實(shí)驗(yàn))報(bào)告(2015 - 2016 年度第1學(xué)期)名稱(chēng):操作系統(tǒng)綜合實(shí)驗(yàn)題目:oslab綜合實(shí)驗(yàn)院系:計(jì)算機(jī)系班級(jí):學(xué)號(hào): 學(xué)生姓名:指導(dǎo)教師:設(shè)計(jì)周數(shù):分散進(jìn)行成 績(jī):日期:2015年 10月29日實(shí)驗(yàn)1實(shí)驗(yàn)環(huán)境的使用、 綜合實(shí)驗(yàn)的目的與要求熟悉操作系統(tǒng)集成實(shí)驗(yàn)環(huán)境 OS Lab的基本使用方法。練習(xí)編譯、調(diào)試 EOS操作系統(tǒng)內(nèi)核以及 EOS應(yīng)用程序。、實(shí)驗(yàn)正文1. 啟動(dòng) OS Lab2.1執(zhí)行項(xiàng)目Windows 控制臺(tái)窗口內(nèi)容顯示2.2調(diào)試項(xiàng)目2.2.1使用斷點(diǎn)中斷執(zhí)行222 單步調(diào)試2.2.2 .3單步調(diào)試結(jié)果顯示:練習(xí)使用“逐語(yǔ)句”功能和“跳出”功能2.2.3查看變量的值2
2、.2.4調(diào)用堆棧調(diào)用堆棧顯示內(nèi)容;進(jìn)入Func函數(shù)雙擊main函數(shù)所在的行表示此函數(shù)是當(dāng)前調(diào)用堆棧中的活動(dòng)函數(shù)。3新建EOS內(nèi)核項(xiàng)目4 EOS應(yīng)用程序項(xiàng)目的生成和調(diào)試4.1新建EOS應(yīng)用程序項(xiàng)目4.2調(diào)試項(xiàng)目添加斷點(diǎn)后單步調(diào)試結(jié)果顯示4.3查看軟盤(pán)鏡像文件中的內(nèi)容4.4修改EOS應(yīng)用程序項(xiàng)目名稱(chēng)5退出OS Lab6保存EOS內(nèi)核項(xiàng)目 三、綜合實(shí)驗(yàn)總結(jié)或結(jié)論思考與練習(xí):1.在哪些情況下應(yīng)該使用“逐過(guò)程”調(diào)試,在哪些情況下應(yīng)該使用“逐語(yǔ)句”調(diào)試。答:逐語(yǔ)句為每執(zhí)行一行語(yǔ)句,如果碰到函數(shù)調(diào)用它就會(huì)進(jìn)入到函數(shù)里面。而逐過(guò)程碰到 函數(shù)時(shí)不進(jìn)入函數(shù),把函數(shù)調(diào)用當(dāng)成一條語(yǔ)句去執(zhí)行。2. 生成EOSSDK文件
3、夾的目的和作用。明白文件夾的組織結(jié)構(gòu)和各個(gè)文件的來(lái)源和作用。 查看EOS應(yīng)用程序包含了 SDK文件夾中的哪些頭文件,是如何包含的?(1)EOS SDK為應(yīng)用程序調(diào)用系統(tǒng) API提供服務(wù),可作為用戶編程中使用的工具包集合。(2) 其主要包括INC頭文件LIB文件夾、導(dǎo)入庫(kù)文件和BIN文件夾、動(dòng)態(tài)鏈接庫(kù)、可執(zhí)行 程序、二進(jìn)制文件。(3) 包含的頭文件有:eos.h負(fù)責(zé)導(dǎo)出API函數(shù),eosdef.h 聲明負(fù)責(zé)導(dǎo)出函數(shù)類(lèi)型的定 義,error.h負(fù)責(zé)導(dǎo)出錯(cuò)誤碼。(4) EOS應(yīng)用程序在項(xiàng)目的頭文件中只是包含了eos.h文件,在eos.h文件中又包含了 eosdef.h 禾口 error.h 文件。實(shí)
4、驗(yàn)2操作系統(tǒng)的啟動(dòng)一、綜合實(shí)驗(yàn)的目的與要求跟蹤調(diào)試EOS在PC機(jī)上從加電復(fù)位到成功啟動(dòng)全過(guò)程,了解操作系統(tǒng)的啟動(dòng)過(guò)程。查看EOS啟動(dòng)后的狀態(tài)和行為,理解操作系統(tǒng)啟動(dòng)后的工作方式。二、實(shí)驗(yàn)正文1. 準(zhǔn)備實(shí)驗(yàn)兩個(gè)匯編文件。生成項(xiàng)目。找on緒mu新建一個(gè) EOS Kernel 項(xiàng)目。打開(kāi) boot.asm 和 loader.asm到loader.bin文件,記錄下此文件的大小1566字節(jié)。2調(diào)試EOS操作系統(tǒng)的啟動(dòng)過(guò)程2.1使用Bochs做為遠(yuǎn)程目標(biāo)機(jī)找到“遠(yuǎn)程目標(biāo)機(jī)”屬性,將此屬性值修改為“ BochsDebug 2.2調(diào)試BIOS程序后按回車(chē),其中CS寄存器信息行中的2.2.1在Co nsole
5、 窗口中輸入調(diào)試命令 sregs=0xf000 ”表示 CS寄存器的值為 OxfOOO。2.2.2輸入調(diào)試命令r后按回車(chē),顯示當(dāng)前CPU中各個(gè)通用寄存器的值。其中“ rip:OxOOOOOOOO:OOOOfffO ”表示 IP 寄存器的值為 OxfffO 。2.2.3輸入調(diào)試命令 xp /1024b 0x0000,查看開(kāi)始的1024 個(gè)字節(jié)的物理內(nèi)存。在Console 中輸出的這1K物理內(nèi)存的值都為 0 ,說(shuō)明BIOS中斷向量表還沒(méi)有被加載到此處。2.2.4輸入調(diào)試命令xp /512b 0x7c00,查看軟盤(pán)引導(dǎo)扇區(qū)應(yīng)該被加載到的內(nèi)存位置。輸出的內(nèi)存值都為0 ,說(shuō)明軟盤(pán)引導(dǎo)扇區(qū)還沒(méi)有被加載到此
6、處。中MXm-.m4i#Br*4il MH4wMjimMp:hMKLMVOzw-MMUUP-MwM豪IMuflH十4ITwNHRIhrM可以驗(yàn)證BIOS第一條指令所在邏輯地址中的段地址和CS寄存器值是一致的,偏移地址和IP寄存器值是一致的。由于內(nèi)存還沒(méi)有被使用,所以其中的值都為0。2.3調(diào)試軟盤(pán)引導(dǎo)扇區(qū)程序2.3.1.輸入調(diào)試命令 vb 0x0000:0x7c00,添加斷點(diǎn)2.3.2.輸入調(diào)試命令c繼續(xù)執(zhí)行2.3.3.輸入調(diào)試命令sreg 驗(yàn)證CS寄存器(0x0000 )的值。2.3.4. 輸入調(diào)試命令r驗(yàn)證IP 寄存器(0x7c00 )的值。2.3.5輸入調(diào)試命令 xp /1024b 0x0
7、000驗(yàn)證此時(shí)BIOS中斷向量表已經(jīng)被載入。4UAJmFTMiir個(gè)丹ibfEd1MShit 4*wWMM VwClFFHulrrLHWiy :Mlhr re-hs1914? Nr4wiiMN.nTIHellmUINriWOeTMRfWbilbi0k*IliaiHhRmMNhhi!kLHkWNkTIH&.1BidHVB-JBRd fl2.3.6.輸入調(diào)試命令 xp /512b 0x7c00顯示軟盤(pán)引導(dǎo)扇區(qū)程序的所有字節(jié)碼。237輸入調(diào)試命令 xp /512b 0x0600 驗(yàn)證圖3-2中第一個(gè)用戶可用區(qū)域是空白的。238輸入調(diào)試命令 xp /512b 0x7e00 驗(yàn)證圖3-2中第二個(gè)用戶可用
8、區(qū)域是空白的。p pr!iT|nM!i1!PriliJiJULLi x2.3.9自己設(shè)計(jì)兩個(gè)查看內(nèi)存的調(diào)試命令,驗(yàn)證這兩個(gè)用戶可用區(qū)域的高地址端是空白的。(1) xp /512b 0x7f00(2) xp /512b0x07002.3.10輸入調(diào)試命令xp /512b 0xa0000 驗(yàn)證圖3-2 中上位內(nèi)存已經(jīng)被系統(tǒng)占用。M41iLaIUaII :ta-iiJiLMMMl Mi Ch1UK* 辯11* Ffiffc-rr *!*kd-FkrrwTiTlad!* =WXlUKili:2.3.11自己設(shè)計(jì)一個(gè)查看內(nèi)存的調(diào)試命令,驗(yàn)證上位內(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)在屬性”對(duì)話框中看。2.4調(diào)試加載程序使用查看虛擬內(nèi)存的調(diào)試命令x /1wx 0x80001117查看內(nèi)存中保存的 32位函數(shù)入口地址,在 Con sole 窗口中會(huì)輸出:0x00000000800011
10、17 : 0x800*2.5調(diào)試內(nèi)核在“監(jiān)視”窗口中可以看到KiSystemStartupvoid (PVOID) 0x800* KiSystemStartup2.6 EOS啟動(dòng)后的狀態(tài)和行為三、綜合實(shí)驗(yàn)總結(jié)或結(jié)論1.為什么EOS操作系統(tǒng)從軟盤(pán)啟動(dòng)時(shí)要使用 一個(gè)可以嗎?它們各自的主要功能是什么?函數(shù)地址為vaid (PVOID) 0x80018130 OfiSyitmStwftupboot.bin 和loader.b in兩個(gè)程序?使用如果將loader.bin的功能移動(dòng)到 boot.bin文件中,則boot.bin文件的大小是否仍然能保持小于512字節(jié)?答:在IDE環(huán)境啟動(dòng)執(zhí)行 EOS操作系
11、統(tǒng)時(shí),會(huì)將boot.bin ,loader.bin, kernal.dll 三個(gè)二進(jìn)制寫(xiě)入軟件鏡像文件中,然后讓虛擬機(jī)來(lái)執(zhí)行軟盤(pán)中的EOS操作系統(tǒng),使用其中一個(gè)是不能運(yùn)行的。2. 為什么軟盤(pán)引導(dǎo)扇區(qū)程序選擇將loader.bin 加載到第一個(gè)可用區(qū)域的 0x1000處呢?這樣做有什么好處?這樣做會(huì)對(duì)loader.b in 文件的大小有哪些限制。答:用戶只用兩個(gè)可用區(qū)域,加載位置非此即彼。第一個(gè)可用用戶區(qū)是低地址區(qū),且空間 大小比較小,適合容納小文件,所以我們選擇將占用空l(shuí)oder.bin加載到第一用戶區(qū)。優(yōu)點(diǎn):低地址開(kāi)始,便于搜索查找小文件占用小空間,節(jié)約資源。限制:loder.bin文件必須
12、小 于 1c00k 。實(shí)驗(yàn)3進(jìn)程的創(chuàng)建一、綜合實(shí)驗(yàn)的目的與要求練習(xí)使用EOSAPI函數(shù)CreateProcess 創(chuàng)建一個(gè)進(jìn)程,掌握創(chuàng)建進(jìn)程的方法,理解進(jìn)程和 程序的區(qū)別。調(diào)試跟蹤 CreateProcess 函數(shù)的執(zhí)行過(guò)程,了解進(jìn)程的創(chuàng)建過(guò)程,理解進(jìn)程 是資源分配的單位。二、實(shí)驗(yàn)正文1準(zhǔn)備實(shí)驗(yàn)2練習(xí)使用控制臺(tái)命令創(chuàng)建EOS應(yīng)用程序的進(jìn)程Hello.exe應(yīng)用程序輸出結(jié)果個(gè)應(yīng)用程序的進(jìn)程3練習(xí)通過(guò)編程的方式讓?xiě)?yīng)用程序創(chuàng)建另 可知子進(jìn)程結(jié)束后,父進(jìn)程繼續(xù)執(zhí)行The process exit ulth 0*4 調(diào)試 CreateProcess 函數(shù)在“反匯編”窗口的左側(cè)顯示的虛擬地址中看到所有指令
13、的虛擬地址都大于0x80000000 ,說(shuō)明內(nèi)核(kernel.dll ) 處于高2G的虛擬地址空間中。OiSOOlldSc查看ma in函數(shù)的指令所在的虛擬地址都是小于0x80000000,說(shuō)明應(yīng)用程序(eosapp.exe )處于低2G的虛擬地址空間中。 余工山匚氓5 調(diào)試 PsCreateProcess 函數(shù)進(jìn)程執(zhí)行的結(jié)果riel lOiWOtrldf 1 Hellouarldf ZHelo.uorId! 3Hel lo, war Id f 4He 1lo,uarld! S Bye -bye!The process exit uith 0L繪制一幅進(jìn)程創(chuàng)建過(guò)程的流程圖。提供的源代碼基礎(chǔ)上
14、時(shí)創(chuàng)建10個(gè)進(jìn)程。6練習(xí)通過(guò)編程的方式創(chuàng)建應(yīng)用程序的多個(gè)進(jìn)程多個(gè)進(jìn)程并發(fā)執(zhí)行的結(jié)果:有結(jié)果顯示可知有兩個(gè)進(jìn)程在執(zhí)行三、綜合實(shí)驗(yàn)總結(jié)或結(jié)論1.在源代碼文件 NewTwoProc.c進(jìn)行修改,要求使用 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進(jìn)程代碼)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ù),學(xué)習(xí)這些函數(shù)的主要功能。能夠交換這些函數(shù)被調(diào)用的順序嗎?答:PspCreateProcessEnvironment創(chuàng)建了進(jìn)程控制塊,地址空間和分配了句柄表,PspLoadProcesslmage將進(jìn)程的可執(zhí)行映象加載的到了進(jìn)程的地址空間中,PspCreateThread 創(chuàng)建了進(jìn)程的主線程。這三個(gè)函數(shù)知道
20、自己從哪里開(kāi)始執(zhí)行,執(zhí)行哪些 指令,因此不能交換它們的順序。實(shí)驗(yàn)4線程的狀態(tài)和轉(zhuǎn)換一、綜合實(shí)驗(yàn)的目的與要求調(diào)試線程在各種狀態(tài)間的轉(zhuǎn)換過(guò)程,熟悉線程的狀態(tài)和轉(zhuǎn)換。通過(guò)為線程增加掛起狀態(tài),加深對(duì)線程狀態(tài)的理解。二、實(shí)驗(yàn)正文i準(zhǔn)備實(shí)驗(yàn)2調(diào)試線程狀態(tài)的轉(zhuǎn)換過(guò)程2.1線程由阻塞狀態(tài)進(jìn)入就緒狀態(tài)“ *Thread ” State 域的值為 3 ( WagingQ葉其 血玄,雙向鏈表項(xiàng) StateListEntryhWKt血牝的Next和Prev指針的值都不為0屮“潁脈戰(zhàn),說(shuō)明這個(gè)線程還處于阻塞狀態(tài),并在StartAddr 域的值為StartAddr 0x800 lSe9a 說(shuō)明這個(gè)線程就某個(gè)同步對(duì)象的等待
21、隊(duì)列中;lopC on soleDispatchThread 是控制臺(tái)派遣線程。按F10調(diào)試,此時(shí)的Next和Prev指在“調(diào)用堆?!贝翱谥须p擊PspU nwaitThread函數(shù)對(duì)應(yīng)的堆棧項(xiàng),State 域的值為0 ( Zero )嚴(yán):八巳,雙向鏈表項(xiàng) StateListEntryEtateListEntry 針的值都為0,說(shuō)明這個(gè)線程已經(jīng)處于游離狀態(tài)。按F5繼續(xù)執(zhí)行,在PspReadyThread函數(shù)中的斷點(diǎn)處中斷。按F10單步調(diào)試直到此函數(shù) a1 vva w ji一 ! an的最后。此時(shí)State 域的值為1( +Re(ady)5怙燒,雙向鏈表項(xiàng)StateListEntry 的Next和
22、Prev指針的值都不為 0戶圖03 ,說(shuō)明這個(gè)線程已經(jīng)處于就緒狀態(tài),并已 經(jīng)被放入優(yōu)先級(jí)為 24的就緒隊(duì)列中。2.2線程由運(yùn)行狀態(tài)進(jìn)入就緒狀態(tài) 2.3線程由就緒狀態(tài)進(jìn)入運(yùn)行狀態(tài) 2.4線程由運(yùn)行狀態(tài)進(jìn)入阻塞狀態(tài) 3為線程增加掛起狀態(tài)suspend 31Suspend t hredd (31) KLii:cex 營(yíng).31Besuine threadOl) success.三、綜合實(shí)驗(yàn)總結(jié)或結(jié)論1思考一下,在本實(shí)驗(yàn)中,當(dāng)loop線程處于運(yùn)行狀態(tài)時(shí),EOS中還有哪些線程, 它們分別處于什么狀態(tài)??梢允褂每刂婆_(tái)命令pt查看線程的狀態(tài)。答:有一個(gè)優(yōu)先級(jí)為 0的空閑線程處于就緒狀態(tài),8個(gè)優(yōu)先級(jí)為24的控制
23、臺(tái)線程處于阻塞狀態(tài),1個(gè)優(yōu)先級(jí)的24的控制臺(tái)派遣線程處于阻塞狀態(tài)。2.當(dāng)loop線程在控制臺(tái)1中執(zhí)行,并且在控制臺(tái)2中執(zhí)行suspend命令時(shí),為什么控 制臺(tái)1中的loop線程處于就緒狀態(tài)而不是運(yùn)行狀態(tài)?答:在控制臺(tái)2中執(zhí)行suspend命令時(shí),優(yōu)先級(jí)為 24的控制臺(tái)2線程搶占處理器,即控 制臺(tái)2線程處于運(yùn)行狀態(tài),因此此時(shí)loop處于就緒狀態(tài)。3總結(jié)一下在圖5-3中顯示的轉(zhuǎn)換過(guò)程,哪些需要使用線程控制塊中的上下文,哪些不需要使用,并說(shuō)明原因。答:就緒t運(yùn)行,運(yùn)行t就緒,運(yùn)行t阻塞需要使用TCB因?yàn)檫@些過(guò)程有線程調(diào)進(jìn)或調(diào)出處理機(jī)的過(guò)程,新建t就緒,阻塞t就緒不需要使用TCB上下文,因?yàn)闆](méi)有占用處
24、理機(jī)資源。4.請(qǐng)讀者找出這些轉(zhuǎn)換過(guò)程的原語(yǔ)操作(關(guān)中斷和開(kāi)中斷)是在哪些代碼中完成的。答:IntState=KeEnablelnterrupts(FALSE);/關(guān)中斷KeEn ableI nterrupts( In tState);/開(kāi)中斷實(shí)驗(yàn)5進(jìn)程的同步一、綜合實(shí)驗(yàn)的目的與要求使用EOS的信號(hào)量, 編程解決生產(chǎn)者一消費(fèi)者問(wèn)題,理解進(jìn)程同步的意義。調(diào)試跟蹤EOS信號(hào)量的工作過(guò)程,理解進(jìn)程同步的原理。修改EOS的信號(hào)量算法,使之支持等待超時(shí)喚醒功能,加深理解進(jìn)程同步的原理。二、實(shí)驗(yàn)正文1準(zhǔn)備實(shí)驗(yàn)2使用EOS的信號(hào)量解決生產(chǎn)者-消費(fèi)者問(wèn)題 3調(diào)試EOS信號(hào)量的工作過(guò)程3.1創(chuàng)建信號(hào)量PsI ni
25、 tializeSemaphore函數(shù)中用來(lái)初始化信號(hào)量結(jié)構(gòu)體成 員的值,應(yīng)該和傳入 CreateSemaphore函數(shù)的參數(shù)值是一致的。Iciti日I匚ost 二 4日Maximum匚cunt 二血3 晁maphow 二 P茸EMAPHOREChtSOSfbafO單步調(diào)試PsInitializeSemaphore函數(shù)執(zhí)行的過(guò)程,函數(shù)的調(diào)用層次:PsTnrti a I izeSemaphoreiPspOnCreateSerndphoreObjectC3.2等待、釋放信號(hào)量 3.2.1等待信- 號(hào)量 (不阻塞)II Semaphore-Count = 0x9完成PsWaitForSemaphor
26、e 函數(shù)中所有操作。Empty的計(jì)數(shù)減少了 1 (由10變?yōu)榱?9 )Serra phore-* C ount 二 Oxa3.2.2釋放信- 號(hào)量(不喚醒)完成PsReleaseSemaphore函數(shù)中的所有操作。Full計(jì)數(shù)增加了 1 (由0變?yōu)榱?1 )。Semaphore-* 匚 aunt = 0x0 Semaphore-Cou nt = 0x1323等待信號(hào)量(阻塞)在“調(diào)用堆?!贝翱谥须p擊Producer函數(shù)所在的堆棧幀,綠色箭頭指向等待Empty信號(hào)量的代碼行,查看 Producer函數(shù)中變量i的值為14 ,表示生產(chǎn)者線程正在嘗試生產(chǎn)14在“調(diào)用堆?!贝翱谥须p擊PsWaitForS
27、emaphore 函數(shù)的堆棧幀,查看 Empty信號(hào)量計(jì)數(shù) -(Semaphore-Count)的值為-釋放信- 號(hào)量(喚醒)Consumer函數(shù)中變量i的值為4 ,說(shuō)明已經(jīng)消費(fèi)了 4號(hào)產(chǎn)品。.=-I查看 PsReleaseSemaphore 函數(shù)中 Empty 信號(hào)量計(jì)數(shù)(Semaphore-Count)的值為-1,和 ,亠Semaphore- = Count 二 Oxffffffff I生產(chǎn)者線程被阻塞時(shí)的值是一致的。單步調(diào)試PsReleaseSemaphore函數(shù),Empty計(jì)數(shù)的值已經(jīng)由-1增加為了 05亡maphore-A 匚gunt 二 OicIfiTffff ern
28、aphoxe-Courrt = 0x04修改EOS的信號(hào)量算法(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;測(cè)試結(jié)果:根據(jù)文檔中的測(cè)試方法可看到結(jié)果中有兩個(gè)消費(fèi)者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三、綜合實(shí)驗(yàn)總結(jié)或結(jié)論1. 思考在 ps/semaphore.c文件內(nèi)的 PsWaitForSemaphore 和 PsReleaseSemaphore 函數(shù) 中,為什么要使用原子操作?答:EOS內(nèi)核中維護(hù)了大量?jī)?nèi)核數(shù)據(jù),正是這些數(shù)據(jù)描述了EOS操作系統(tǒng)
31、的狀態(tài)如果有一組相互關(guān)聯(lián)的內(nèi)核數(shù)據(jù)共同描述了這個(gè)操作系統(tǒng)的某個(gè)狀態(tài),那么在修改這樣一組內(nèi)核數(shù) 據(jù)時(shí)就必須保證一致性。這就要求修改這部分?jǐn)?shù)據(jù)的代碼在執(zhí)行過(guò)程中不能被打斷,這種 操作叫做“原語(yǔ)操作”。2. 根據(jù)本實(shí)驗(yàn)3.3.2 節(jié)中設(shè)置斷點(diǎn)和調(diào)試的方法,自己設(shè)計(jì)一個(gè)類(lèi)似的調(diào)試方案來(lái)驗(yàn)證消費(fèi)者線程在消費(fèi)24號(hào)產(chǎn)品時(shí)會(huì)被阻塞,直到生產(chǎn)者線程生產(chǎn)了24號(hào)產(chǎn)品后,消費(fèi)者線程才被喚醒并繼續(xù)執(zhí)行的過(guò)程。答:Consunc:a1?ConsumtdL18ConsuneConsuncaConsunc:aConsuneaConsuncaZ3生產(chǎn)到23號(hào)產(chǎn)品后,進(jìn)程阻塞。實(shí)驗(yàn)6時(shí)間片輪轉(zhuǎn)調(diào)度一、綜合實(shí)驗(yàn)的目的與要求調(diào)試
32、EOS的線程調(diào)度程序,熟悉基于優(yōu)先級(jí)的搶先式調(diào)度。 為EOS添加時(shí)間片輪轉(zhuǎn)調(diào)度,了解其它常用的調(diào)度算法。二、實(shí)驗(yàn)正文1準(zhǔn)備實(shí)驗(yàn)2閱讀控制臺(tái)命令“ rr ”相關(guān)的源代碼3調(diào)試線程調(diào)度程序3.1調(diào)試當(dāng)前線程不被搶先的情況查看ThreadFunction函數(shù)中變量pThreadParameter-Y 的值應(yīng)該為0 ,說(shuō)明正在調(diào)試的是第0個(gè)新建的線程。*小心八二丄按2次F5的循環(huán)輸出的內(nèi)容:StartAddr = 0x8001Sbf3 ,Priority = 0x3,State w 0x2rRemainderTiAs - 0x6 VyaitStatus = QxOr以二進(jìn)制格式查看就緒位圖的值/t F
33、spRcadyBiUap 100000001HighestPriorityBitSca nReverse 函數(shù)會(huì)從就緒位圖中掃描最高優(yōu)先級(jí),并保存在變量 中。查看變量 HighestPriority 的值為 8。.叫一 一 二_Thread 0 (B): 3043363.2調(diào)試當(dāng)前線程被搶先的情況激活虛擬機(jī)窗口,可以看到第0個(gè)新建的線程正在執(zhí)行。在“監(jiān)視”窗口中查看就緒位圖的值為1000000000000000100000001,說(shuō)明此時(shí)在優(yōu)先級(jí)為 24的就緒隊(duì)列中存在就緒線程。在“監(jiān)視”窗口中添加表達(dá)式“ ListGetCount(&PspReadyListHeads24),其值為 1,說(shuō)明
34、優(yōu)先級(jí)為 24 的就緒隊(duì)列中只有一個(gè)就緒線程。掃描就緒位圖后獲得的最高優(yōu)先級(jí)的值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)先級(jí) 24的線程已經(jīng)進(jìn)入了“運(yùn)行”狀態(tài)。4為EOS添加時(shí)間片輪轉(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); 測(cè)試:能看到20個(gè)線程輪流執(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修改線程時(shí)間片的大小執(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.可知其空閑頁(yè)為7126,零頁(yè)鏈表為0,已用表為1050.按F10單步調(diào)試 MiFreePages函數(shù)的執(zhí)行過(guò)程,結(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頁(yè)后,空閑頁(yè)為 7125,零頁(yè)鏈表為0,已用表為1051,即用空閑頁(yè)分配,沒(méi)用零頁(yè)鏈表分配。4閱讀控制臺(tái)命令“ vm相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果輸入命令“ A: LoopApp.exe 后按回車(chē)。此時(shí)就使用EOS應(yīng)用程序文件LoopApp.exe創(chuàng)建了一個(gè)應(yīng)用程序進(jìn)程,由于此進(jìn)程執(zhí)行了一個(gè)死循環(huán),所以此進(jìn)程不會(huì)
42、結(jié)束執(zhí)行,除非關(guān)End less loop.5在系統(tǒng)進(jìn)程中分配虛擬頁(yè)和釋放虛擬頁(yè)Qx白QOQ3QOO調(diào)試釋放虛擬頁(yè)的過(guò)程:BaseAddress由初始化的變成了 B aseAd d re, s=OxaOOOSa 20, 和 Regi on Size 由初始化的尺亡9心廣5| _ 0辺 變成了RegionSiie=(h aOOOSd le, 在調(diào)用 MmAllocateVirtualMemory 函數(shù)時(shí)將 RegionSize 參數(shù)的值設(shè)置為PAGE_SIZE*2+1,觀察“輸出”窗口中轉(zhuǎn)儲(chǔ)的信息,輸出文本略。 三、綜合實(shí)驗(yàn)總結(jié)或結(jié)論1. 在本實(shí)驗(yàn) 3.3 中,如果分配了物理頁(yè)后,沒(méi)有回收,會(huì)對(duì)
43、EOS 操作系統(tǒng)造成什么樣的影響?目前EOS操作系統(tǒng)內(nèi)核函數(shù) MiAllocateAnyPages能處理所有物理頁(yè)被分配完畢的 情況嗎?答:(1) 會(huì)造成自由頁(yè)鏈表和零鏈表不斷減少,甚至為空。所有物理頁(yè)都分配完畢的現(xiàn)象。(2) 不能。2. 嘗試從性能的角度分析內(nèi)核函數(shù)MiAllocateAnyPages和MiAllocateZeroedPages。嘗試從安全性的角度分析分配零頁(yè)的必要性。答: MiAllocateAnyPages 分配物理頁(yè)。首先從空閑頁(yè)鏈表中分配,如果分配空閑鏈表不足 則再?gòu)牧沩?yè)鏈表分配。MiAllocateZeroedPages首先從零頁(yè)鏈表中分配,如果零頁(yè)不足則從 空閑鏈
44、表分配。3. 觀察本實(shí)驗(yàn)3.4中使用“ vm”命令輸出的系統(tǒng)進(jìn)程的虛擬地址描述符,可以看到在2號(hào)描述符和 3 號(hào)描述符之間有兩個(gè)虛擬頁(yè)的空隙,嘗試結(jié)合虛擬頁(yè)的分配和釋放說(shuō)明產(chǎn)生 這個(gè)空隙的原因。答:產(chǎn)生空隙是由于虛擬頁(yè)被釋放而造成的。在啟動(dòng)時(shí)會(huì)有一個(gè)初始化線程在初始化完畢 之后就退出了,線程的堆棧所占用的虛擬頁(yè)也就被釋放了。4. 在本實(shí)驗(yàn) 3.5 中,調(diào)用 MmAllocateVirtualMemory 函數(shù)分配虛擬頁(yè)時(shí)只使用了MEM_RESERVE標(biāo)志,沒(méi)有使用 MEM_COMMIT標(biāo)志,嘗試說(shuō)明這兩個(gè)標(biāo)志的區(qū)別。答:使用MEM_RESERVE標(biāo)志分配虛擬頁(yè)時(shí),沒(méi)有為其映射實(shí)際的物理頁(yè)。使用
45、 MEM_COMMIT 標(biāo)志分配虛擬頁(yè)時(shí),會(huì)為其映射實(shí)際的物理頁(yè)。實(shí)驗(yàn) 8 分頁(yè)存儲(chǔ)器管理一、綜合實(shí)驗(yàn)的目的與要求學(xué)習(xí) i386 處理器的二級(jí)頁(yè)表硬件機(jī)制,理解分頁(yè)存儲(chǔ)器管理原理。查看 EOS 應(yīng)用程序進(jìn)程和系統(tǒng)進(jìn)程二級(jí)頁(yè)表映射信息,理解頁(yè)目錄和頁(yè)表的管理方式。 編程修改頁(yè)目錄和頁(yè)表的映射關(guān)系,理解分頁(yè)地址變換原理。二、實(shí)驗(yàn)正文1 準(zhǔn)備實(shí)驗(yàn)2 查看 EOS 應(yīng)用程序進(jìn)程的頁(yè)目錄和頁(yè)表 驗(yàn)證結(jié)果與指導(dǎo)教程的二級(jí)頁(yè)表映射信息結(jié)果相同。(輸出文本略)輸出文本略)3 查看應(yīng)用程序進(jìn)程和系統(tǒng)進(jìn)程并發(fā)時(shí)的頁(yè)目錄和頁(yè)表4查看應(yīng)用程序進(jìn)程并發(fā)時(shí)的頁(yè)目錄和頁(yè)表(輸出文本略)5在二級(jí)頁(yè)表中映射新申請(qǐng)的物理頁(yè)(輸出
46、文本略)三、綜合實(shí)驗(yàn)總結(jié)或結(jié)論1.觀察之前輸出的頁(yè)目錄和頁(yè)表的映射關(guān)系,可以看到頁(yè)目錄的第0x300個(gè)PDE映射的頁(yè)框號(hào)就是頁(yè)目錄本身,說(shuō)明頁(yè)目錄被復(fù)用為了頁(yè)表。而恰恰就是這種映射關(guān)系決定了4K的頁(yè)目錄映射在虛擬地址空間的0xC0300000-0xC0300FFF,4M的頁(yè)表映射在0xC0000000-0xC03FFFFF?,F(xiàn)在,假設(shè)修改了頁(yè)目錄,使其第0x100個(gè)PDE映射的頁(yè)框號(hào)是頁(yè)目錄本身,此時(shí)頁(yè)目錄和頁(yè)表會(huì)映射在4G虛擬地址空間的什么位置呢?答:頁(yè)目錄占用1個(gè)物理頁(yè),頁(yè)框號(hào)是0x409.頁(yè)表占用5個(gè)物理頁(yè),頁(yè)框號(hào)是0x41D,0x401,0x403,0x404,0x402.2思考頁(yè)式存儲(chǔ)管理機(jī)制的優(yōu)缺點(diǎn)。答:優(yōu)點(diǎn):虛存量大,適合多道程序運(yùn)行,動(dòng)態(tài)頁(yè)式管理提供了內(nèi)外存統(tǒng)一管理的虛存實(shí)現(xiàn)方式。內(nèi)存利用率高,不要求作業(yè)連續(xù)存放,有效地解決了內(nèi)存碎片問(wèn)題。缺點(diǎn):要進(jìn)行頁(yè)面中斷缺頁(yè)中斷等處理,系統(tǒng)開(kāi)銷(xiāo)較大,有可能產(chǎn)生”抖動(dòng)”現(xiàn)象。地址變換機(jī)構(gòu)復(fù)雜,一般采用硬件實(shí)現(xiàn),添加了機(jī)器成本。實(shí)驗(yàn)10磁盤(pán)調(diào)度算法一、綜合實(shí)驗(yàn)的目的與要求通過(guò)學(xué)習(xí)E
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鋼結(jié)構(gòu)預(yù)制構(gòu)件項(xiàng)目可行性研究報(bào)告
- 2025年柔性自動(dòng)化裝備合作協(xié)議書(shū)
- 2025年中國(guó)銀行卡行業(yè)市場(chǎng)運(yùn)營(yíng)態(tài)勢(shì)分析及投資前景預(yù)測(cè)報(bào)告
- 涂料加工合同范本
- 2025年計(jì)劃生育技術(shù)服務(wù)合作協(xié)議書(shū)
- 氧化亞硅基負(fù)極材料首次庫(kù)侖效率提高及循環(huán)穩(wěn)定性改善的研究
- TBC1D1對(duì)膠質(zhì)瘤增殖、侵襲和遷移的作用及機(jī)制研究
- 裝修策劃合同范本
- 電催化天然氨基酸S-O-C-O成鍵反應(yīng)研究
- 骨干教師申請(qǐng)書(shū)(8篇)
- 2024-2025學(xué)年山東省濰坊市高三上學(xué)期1月期末英語(yǔ)試題
- 2025-2030年中國(guó)青海省旅游行業(yè)市場(chǎng)現(xiàn)狀調(diào)查及發(fā)展趨向研判報(bào)告
- 人力資源部門(mén)2023年度招聘效果分析
- 八年級(jí)數(shù)學(xué)下冊(cè) 第1章 單元綜合測(cè)試卷(北師版 2025年春)
- 2025年春新外研版(三起)英語(yǔ)三年級(jí)下冊(cè)課件 Unit1第1課時(shí)Startup
- 2025年安徽碳鑫科技有限公司招聘筆試參考題庫(kù)含答案解析
- 2025廣東珠海高新區(qū)科技產(chǎn)業(yè)局招聘專(zhuān)員1人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 數(shù)學(xué)-福建省泉州市2024-2025學(xué)年高三上學(xué)期質(zhì)量監(jiān)測(cè)(二)試卷和答案(泉州二模)
- 員工行為守則及職業(yè)道德規(guī)范
- 3學(xué)會(huì)反思 第一課時(shí) (說(shuō)課稿) -2023-2024學(xué)年道德與法治六年級(jí)下冊(cè)統(tǒng)編版
- 2024年國(guó)土個(gè)人工作總結(jié)樣本(3篇)
評(píng)論
0/150
提交評(píng)論