版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
華先電力#號課程設(shè)計(綜合實(shí)驗(yàn))報告(2023--2023年度第一學(xué)期)名稱:操作系統(tǒng)綜合實(shí)驗(yàn)題目:OSlab綜合實(shí)驗(yàn)院系:計算機(jī)系班級:計科1202學(xué)號:學(xué)生姓名:指導(dǎo)教師:趙文清王新奇設(shè)計周數(shù):第八、九周成績:日期:2023年10月29日3.使用低優(yōu)先級線程也能獲得執(zhí)行機(jī)會的調(diào)度算法:在ke/sysproc.c文獻(xiàn)中的ConsoleCmdRoundRobin函數(shù)調(diào)用Sleep函數(shù)語句的后面添加下面的語言,即可以演優(yōu)先級線程搶占解決器后,低優(yōu)先級線程無法運(yùn)營的情況,待高優(yōu)先級線程結(jié)束后,低優(yōu)先級線程才可以繼續(xù)運(yùn)營。HANDLEThreadHandie;THREAD_PARAMETERThreadParameter;_asm("cli");ThreadParameter.Y=20;ThreadParameter.StdHandle=StdHandle;ThreadParameter=(HANDLE)CreatcThread{0,ThreadFunction,(PVOID)&ThreadParameter,0,NULL);PsSetThreadPi'iority(ThreeadHandie,9);_asm(“sti”);Slecp(10*1000);TerminateThread(ThreadHandle,0);CloseHandle(ThreadHand1e);Sleep(10*1000);解決該問題的最簡樸的方法是實(shí)現(xiàn)動態(tài)優(yōu)先級算法。動態(tài)優(yōu)先級是指在創(chuàng)建進(jìn)程時所賦予的優(yōu)先級,可以隨線程的推動而改變,以便獲得良好的調(diào)度性能。例如,可用規(guī)定,在就緒隊(duì)列中的線程,隨著其等待時間的增長,其優(yōu)先級以速率X增長,并且正在執(zhí)行的線程,其優(yōu)先級以速率y下降。這樣,在各個線程具有不同優(yōu)先級的情況下,對于優(yōu)先級低的線程,在等待足夠的時間后,其優(yōu)先級便也許升為最高,從而獲得被執(zhí)行的機(jī)會。此時,在基于優(yōu)先級的搶占式調(diào)度算法、時間片輪轉(zhuǎn)調(diào)度算法和動態(tài)優(yōu)先級算法的共同作用下,可防止一個高優(yōu)先級的長作業(yè)長期的壟斷解決器。4.EOS內(nèi)核時間片大小取60ms(和Wind。ws操作系統(tǒng)完全相同),在線程比較多時,就可以觀測出線程輪流執(zhí)行的情況(由于此時一次輪轉(zhuǎn)需要60ms,20個線程輪流執(zhí)行一次需要60X20=1200ms,也就是需要1秒多的時間,所以EOS的控制臺上可以清楚地觀測到線程輪流執(zhí)行的情況)。但是在Windows、Linux等操作系統(tǒng)啟動后,正常情況下都有上百個線程在并發(fā)執(zhí)行,為什么覺察不到它們被輪流執(zhí)行,并且每個程序都運(yùn)營的很順利呢?答:在Windows、linux等操作系統(tǒng)中,雖然都提供了時間片輪轉(zhuǎn)調(diào)度算法卻很少真正被派上用場,下面解釋因素,在Windows任務(wù)管理器中,即使系統(tǒng)中已經(jīng)運(yùn)營了數(shù)百個線程,但CPU的運(yùn)用率仍然很低,甚至為0.由于這些線程在大部分時間都處在阻塞狀態(tài),阻塞的因素是各種各樣的,最重要的因素是等待I/O完畢或者等待命令消息的到達(dá)。例如,在編輯Word文檔時,每敲擊一次鍵盤,Kord就會立即作出反映,并且文檔中插入字符。此時會感覺Word運(yùn)營的非常流暢。事實(shí)上,并非如此,Word主線程大部分時間都處在阻塞等待狀態(tài),等待用戶敲擊鍵盤。在用戶沒有敲擊鍵盤或沒有使用鼠標(biāo)點(diǎn)擊時,Nord主線程處在阻塞狀態(tài),它將讓出解決器給其它需要的線程。當(dāng)用戶敲擊一個按鍵后,Word主線程將會立刻被操作系統(tǒng)喚醒,此時Word開始解決請求。Word在解決輸入請求時所用的CPU時間是非常短的(由于CPU非??欤俏⒚爰壍?,遠(yuǎn)遠(yuǎn)低于時間片輪轉(zhuǎn)調(diào)度的時間片大?。╓indows下是60亳秒),解決完畢后W。rd又立刻進(jìn)入阻塞狀態(tài),等待用戶下一次敲擊鍵盤?;蛘吣靡魳凡シ牌鱽矸治?,表面上感覺播放器在不斷地播放音樂,但是CPU的運(yùn)用率仍然會很低。這是由于播放器將一段聲音編碼交給聲卡,由聲卡來播放,在聲卡播放完這段聲音之前,播放器都是處在阻塞等待狀態(tài)的。當(dāng)聲卡播放完片段后,播放器將被喚醒,然后它將下一個聲音片段交給聲卡繼續(xù)播放。掌握了上面的知識后,就可以很容易解釋為什么這么多線程同時在運(yùn)營而一點(diǎn)都感覺不到輪替現(xiàn)象。實(shí)驗(yàn)7物理存儲器與進(jìn)程邏輯地址空間的管理一、實(shí)驗(yàn)?zāi)康耐ㄟ^杳看物理存儲器的使用情況,并練習(xí)分派和回收物理內(nèi)存,從而掌握物理存儲器的管理方法。通過杳看進(jìn)程邏輯地址空間的使用情況,并練習(xí)分派和1口|收虛擬內(nèi)存,從而掌握進(jìn)程邏輯地址空間的管理方法。二、實(shí)驗(yàn)內(nèi)容1、準(zhǔn)備實(shí)驗(yàn)2、閱讀控制臺命令“pm”相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果(pm命令的執(zhí)行結(jié)果)3、分派物理頁和釋放物理頁(配物理頁或者釋放物理頁后物理存儲器的變化情況)4、閱讀控制臺命令“vni”相關(guān)的源代碼,并查看其執(zhí)行的結(jié)果使用“vm”命令查看系統(tǒng)進(jìn)程虛擬地址描述符的結(jié)果5、在系統(tǒng)進(jìn)程中分派虛擬頁和釋放虛擬頁6、在應(yīng)用程序進(jìn)程中分派虛擬頁和釋放虛擬頁三、問題答案及參考代碼INT*d;aif(d=Virtua1A11oc(0,sizeof(int),MEMRESERVE|MEM.COMMIT)){//調(diào)用API函數(shù)VirtualAl1oc,分派一個整型變量所需的空間,并使用一個整型變顯的指針指向這個空間printf("Al1ocated%dbytesvirtua1memoryofOx%x\n\n”,sizeof(int),d);printfCvirtualmemoryoriginalvalue:Ox%x\n\n〃,*d);*d=OxFFFFFFFF;//修改整型變量的值為OxFFFFFFFFprintf(uvirtualmemorynewvalue:0x%x\n\nz,,*d);printf(,z\nWaitfor10seconds\n"):Sleop(lOOOO);//調(diào)用API函數(shù)Sleep,等待10秒鐘。if(VirtualFree(d,0,MEM_RELEASE))//調(diào)用API函數(shù)VirtualFree,ft放之前分派的整型變量的空間printf("\nRealeasevirtualmemorysuccess!\n");aelseaprintf(z,realeaseerror\n");printfC\nEndlessloop!");afor;
e1seaprintf("error\n");areturnT;〃若不能成功分派,打印出crror,返回T.a}aprintf("HolloworId!\n");ae1seaprintf("error\n");aretur.在本實(shí)驗(yàn)3.3中,假如分派了物理頁后,沒有回收,會對EOS操作系統(tǒng)導(dǎo)致什么樣的影響?目前EOS操作系統(tǒng)內(nèi)核函數(shù)MiAllocateAnyPages能解決所有物理頁被分派完畢的情況嗎?例如在沒有可分派的物理頁的情況下調(diào)用該內(nèi)核函數(shù),是否會返回失敗?假如內(nèi)核函數(shù)MiAllocateAnyPages還不能解決這種極端情況,嘗試修改代碼解決這個問題。答:假如分派了物理頁后沒有回收,EOS操作系統(tǒng)將不能再使用未回收的物理頁,假如分派的物理頁都沒有進(jìn)行剛攵也許會導(dǎo)致EOS沒有可用的物理貝,從而導(dǎo)致EOS停止運(yùn)營。目前E0S操作系統(tǒng)內(nèi)核函數(shù)MiAl1ocateAnyPages還沒有解決沒有物理頁可分派的情況。.在本實(shí)驗(yàn)3.3中,在分派物理頁時是調(diào)用的內(nèi)核函數(shù)MiAl1ocateAnyPages,該函數(shù)會優(yōu)先分派空閑頁,嘗試修改代碼,調(diào)用內(nèi)核函數(shù)MiAl1ocateZeroedPages優(yōu)先分派零頁,并調(diào)試分派零頁的情況。嘗試從性能的角度分析內(nèi)核函數(shù)MiA1locateAnyPages和MiA1locateZeroedPages0嘗試從安全性的角度分析分派零頁的必要性。答:從性能的角度來分析,調(diào)用MIAU。cateAnyPages函數(shù)分派物理頁在某些情況下比調(diào)用MiAllocateZerocdPagos.函數(shù)要快速。從安全行的角度來分析,分派零頁更加安全。例如,一個物理頁被操作系統(tǒng)存儲過重要的密碼信息后被釋放,假如沒有清零就被分派給用戶程序,則用戶程序就也許從這個物理頁中獲得重要的密碼信息。.觀測本實(shí)驗(yàn)3.4中使用“vm”命令輸出的系統(tǒng)進(jìn)程的虛擬地址描述符(圖15-3),可以看到在2號描述符和3號描述符之間有兩個虛擬頁的空隙,嘗試結(jié)合虛擬頁的分派和釋放說明產(chǎn)生這個空隙的因素。答:產(chǎn)生的空隙是由于有虛擬頁被釋放導(dǎo)致的,在EOS啟動時有一個初始化線程在初始化完畢后就退出了,線程的堆棧所占用的虛擬頁就被釋放了。5.在本實(shí)驗(yàn)3.5中,調(diào)用MmA1locateVirtuaIMemory函數(shù)分派虛擬頁時只使用了MEM_RESERVE標(biāo)志,沒有使用MEM_COM\IIT標(biāo)志,嘗試說明這兩個標(biāo)志的區(qū)別。修改代碼,在調(diào)用MmAl1ocateVirtualMemory函數(shù)時增長使用MEM_COMM1T標(biāo)志,并調(diào)試為虛擬頁映射物理頁的過程。答:使用MEM_RESERVE標(biāo)志分派虛擬頁時,沒有為其映射實(shí)際的物理頁。使用MEM_COMUIT表達(dá)分派虛擬頁時,會為其映射實(shí)際的物理頁。實(shí)驗(yàn)8分頁存儲器管理一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)i386解決器的二級貞表硬件機(jī)制,理解分貝存儲器管理原理。查看EOS應(yīng)用程序進(jìn)程和系統(tǒng)進(jìn)程的二級頁表映射信息,理解頁目錄和頁表的管理方式。編程修改頁目錄和頁表的映射關(guān)系,理解分頁地址變換原理。二、實(shí)驗(yàn)內(nèi)容1、準(zhǔn)備實(shí)驗(yàn)2、查看EOS應(yīng)用程序進(jìn)程的頁目錄和頁表三、問題答案及參考代碼1.觀測之前輸出的頁目錄和頁表的映射關(guān)系,可以看到頁目錄的第Ox300個PDE映射的頁框號就是頁FI錄自身,說明頁目錄被復(fù)用為了頁表。而恰恰就是這種映射關(guān)系決定了4K的頁目錄映射在虛擬地址空間的0x0)300000—OxC0300FFF,4M的頁表映射在0XC0000000-0xC03FFFFF?,F(xiàn)在,假設(shè)修改了頁目錄,使其第0x100個PDE映射的頁框號是頁目錄自身,此時頁目錄和頁表會映射在4G虛擬地址空間的什么位置呢?說明計算方法。答:假設(shè)修改了頁目錄,使其第0x10()個PDE映射的頁框號是頁目錄自身,此時頁目錄和頁表會映射在4G虛擬地址空間的什么位置呢?說明計算方法。頁目錄:PDE標(biāo)號0x100做為虛擬地址的高10位,PTE標(biāo)號0x100做為虛擬地址的12-22位,得到虛擬地址0x40100000。頁表:PDE標(biāo)號0x100做為虛擬地址的高10位,PTE標(biāo)號0x0做為虛擬地址的12-22位,得到虛擬地址0x40000000。3.修改EOSApp.c中的源代碼,通過編程的方式記錄并輸出頁目錄和頁表的數(shù)目。注意頁目錄被復(fù)用為頁表答:編寫代碼將申請到的物理頁從二級頁表映射中移除,并讓內(nèi)核回收這些物理頁。參見源代碼文獻(xiàn)MapNcwPagcEx.c。使用該文獻(xiàn)中的ConsoleCmdMemoryMap函數(shù)替換ke/sysproc.c中的ConsoleCmdMemoryMap函數(shù)即可。在移除映射的物理頁時,只需要將PTE/PDE的存在標(biāo)志位設(shè)立為0即可,要先修改PTE,再修改PDE。此外,要注意刷新快表。調(diào)用MiFreePages函數(shù)即可|可收物理頁,具體的用法可以參考其函數(shù)定義處的注釋和源代碼(mm/pfn1ist.c第248行)。.既然所有1024個頁表(共4M)映射在虛擬地址空間的OxC0000000-0xC03FFFFF,為什么不能從頁表基址0xC0000000開始遍歷,來查找有效的頁表呢?而必須先在頁目錄中查找有效的頁表呢?編寫代碼嘗試一下,看看會有什么結(jié)果。答:不能從頁表基址OxC0000000開始遍歷查找有效的頁表由于:只有當(dāng)一個虛擬地址通過二級頁表映射關(guān)系可以映射到實(shí)際的物理地址時,該虛擬地址才可以被訪問,否則會觸發(fā)異常。由于并不是所有的頁表都有效,所以不能從頁表基址OxC000()000開始遍歷。.學(xué)習(xí)EOS操作系統(tǒng)內(nèi)核統(tǒng)一管理未用物理頁的方法(可以參考本書第6章的第6.5節(jié))。嘗試在本實(shí)驗(yàn)第3.5節(jié)中ConsoleCmdMemoryMap函數(shù)源代碼的基礎(chǔ)上進(jìn)行修改,將申請到的物理頁從二級頁表映射中移除,并讓內(nèi)核回收這些物理頁。參見源代碼文獻(xiàn)MapNewPagcEx.c。使用該文獻(xiàn)中的ConsoleCmdMemoryMap函數(shù)替換ke/sysproc.c中的ConsoleCmdMemoryMap函數(shù)即可。在移除映射的物理頁時,只需要將PTE/PDE的存在標(biāo)志位設(shè)立為0即可,要先修改PTE,再修改PDE。調(diào)用UiFrccPages函數(shù)即可回收物理頁,具體的用法可以參考其函數(shù)定義處的注釋和源代碼(mm/pfn1ist.c第248行)。源代碼:ULONGPfnArray[2];//訪問未映射物理內(nèi)存的虛擬地址會觸發(fā)異常。//必須注釋或者刪除該行代碼才干執(zhí)行后面的代碼。//*((PINT)OxEOOOOOOO)=100;。。////從內(nèi)核申請兩個未用的物理頁。//由PfnArray數(shù)組返回兩個物理頁的頁框號。//MiA11ocateZeroedPages(2,PfnArray);OutputFormat="Newpageframenumber:0x%X,0x%X\n";fprintf(StdHandle,OutputFormat?PfnArray[0],PfnArray[1]);KdbPrint(OutputFormat,PfnArray[0],PfnArray[1]);////使用PfnArray[0]頁做為頁表,映射基址為OxE00000000的4M虛擬地址。//Index()fDirEntry=(0xE0000000?22);//虛擬地址的高10位是PDE標(biāo)號((PMMPTEHARDWARE)0xC0300000)[IndexOfDirEntry].PageFrameNumber=PfnArray[0];((PMMPTE_HARDWARE)OxC0300000)[IndexOfDirEntry].Valid=1;。//有效((PMMPTE_HARDWARE)OxC0300000)[IndexOfDirEntry].Writable=1;〃可寫MiFlushEntireT1b();<>//刷新快表//根據(jù)PDE的標(biāo)號計算其映射的頁表所在虛擬地址的基址//PagcTablcBase=0xCOOOO000+IndcxOfDirEntry*PAGESIZE;////將PfnArray[1]放入頁表PfnArray[0]的兩個PTE中,//分別映射基址為OxE0000000和OxE0001000的4K虛擬地址//IndexOfTab1eEntry=(0xE0000000>>12)&0x3FF;。//虛擬地址的12-22位是PTE標(biāo)號((PMMPTEHARDWARE)PageTableBasc)[IndexOfTableEntry].PageFrameNumber=PfnArmy[1];((PMMPTE_HARDWARE)PageTab1oBase)[IndexOfTab1eEntry].Va1id=1;。?!ㄓ行?(PMMPTE_HARDWARE)PageTab1eBase)[IndexOfTableEntry].Writab1e=1;//可寫MiFlushEntireTlbO;//刷新快表IndexOfTableEntry=(OxE0001000?12)&()x3FF〃虛擬地址的12-22位是PTE標(biāo)號((PMMPTEHARDWARE)PageTableBasc)[IndexOfTablcEntry].PagcFrameNumber=PfnArray[1];((PMMPTE_HARDWARE)PagcTab1eBase)[IndexOfTableEntry].Va1id=1;。//有效((PMMPTE_HARDWARE)PageTab1eBase)[IndexOfTableEntry].Writab1e=1;〃可寫MiF1ushEntireTlb();<>//刷新快表////測試//0utputFormat="RoadMemoryOxEOOOlOOO:%d\n”;fprintf(StdHandle,OutputFormat,*((PINT)OxEOOOlOOO));KdbPrint(OutputFormat,*((PINT)0xE0001000));*((PINT)OxEOOOOOOO)=100;//寫共享內(nèi)存fprintf(StdHandie,OutputFormat,*((PINT)0xE0001000));KdbPrint(OutputFormat,*((PINT)OxE0001000));7.思考頁式存儲管理機(jī)制的優(yōu)缺陷。答:優(yōu)點(diǎn):1、由于它不規(guī)定作業(yè)或進(jìn)程的程序段和數(shù)據(jù)在內(nèi)存中連續(xù)存放,從而有效地解決了碎片問題。2、動態(tài)頁式管理提供了內(nèi)存和外存統(tǒng)一管理的虛存實(shí)現(xiàn)方式,使用戶可以運(yùn)用的存儲空間大大增長。這既提高了主存的運(yùn)用紐,又有助于組織多道程序執(zhí)行。缺陷:1、規(guī)定有相應(yīng)的硬件支持。例如地址變換機(jī)構(gòu),缺頁中斷的產(chǎn)生和選擇淘汰頁面等都規(guī)定有相應(yīng)的硬件支持。這增長了機(jī)器成本。2、增長了系統(tǒng)開銷,例如缺頁中斷解決機(jī),3、請求調(diào)頁的算法如選擇不妥,有也許產(chǎn)生抖動現(xiàn)象.4、雖然消除了碎片,但每個作業(yè)或進(jìn)程的最后一頁內(nèi)總有一部分空間得不到運(yùn)用果頁面較大,則這一部分的損失仍然較大。實(shí)驗(yàn)9串口設(shè)備驅(qū)動程序一、實(shí)驗(yàn)?zāi)康恼{(diào)試EOS串口驅(qū)動程序向串口發(fā)送數(shù)據(jù)的功能,了解設(shè)備驅(qū)動程序的工作原理。為EOS串口驅(qū)動程序添加從串口接受數(shù)據(jù)的功能,進(jìn)一步加深對設(shè)備驅(qū)動程序工作原理的理解。二、實(shí)驗(yàn)內(nèi)容1準(zhǔn)備實(shí)驗(yàn)2練習(xí)使用EOS應(yīng)用程序向串口發(fā)送數(shù)據(jù)3調(diào)試EOS串口驅(qū)動程序向串口發(fā)送數(shù)據(jù)的功能4為EOS串口驅(qū)動程序添加從串口接受數(shù)據(jù)的功能CONSOLE-1(PressCtrl+F1~F8tosuitchconsolewindow...)UelcometoEOSshe11>serialThisprogramisusedtotestserialport,andit'susedwisureterminal.exeisrunningonUindous.>>hello<<hello>>howareyou?<<Ianfine,thankyou,andyou?>>Ianfinetoo.?-EOSTerainalhellohellohowareyou?Iamfine,thankyou,andyou?Iamfinetoo.三、問題答案及參考代碼在向串口發(fā)送數(shù)據(jù)時可以不使用緩沖區(qū),將SrIWite函數(shù)體修改為CHARData;ULONGCout;PDEVICE_EXTENSIONExt=(PDEVICE_EXTENSION)DeviceObject->DeviceExtension;PsResetEvent(&Ext->CompietionEvent);For(Count=0;Count<Request;Count++){Data=((PCHAR)Buffer)[count];WRITE_PORT_UCIIAR(REG_P0RT(DeviceObjict.TIIR),Date);實(shí)驗(yàn)3進(jìn)程的創(chuàng)建一、實(shí)驗(yàn)?zāi)康木毩?xí)使用EOSAPI函數(shù)CreateProcess創(chuàng)建一個進(jìn)程,掌握創(chuàng)建進(jìn)程的方法,理解進(jìn)程和程序的區(qū)別。調(diào)試跟蹤C(jī)roatcProcess函數(shù)的執(zhí)行過程,了解進(jìn)程的創(chuàng)建過程,理解進(jìn)程是資源分派的單位。二、實(shí)驗(yàn)內(nèi)容1準(zhǔn)備實(shí)驗(yàn)2練習(xí)使用控制臺命令創(chuàng)建EOS應(yīng)用程序的進(jìn)程3練習(xí)通過編程的方式讓應(yīng)用程序創(chuàng)建另一個應(yīng)用程序的進(jìn)程調(diào)試CreateProcess函數(shù)調(diào)試PsCreateProcess函數(shù)6練習(xí)通過編程的方式創(chuàng)建應(yīng)用程序的多個進(jìn)程三、問題答案及參考代碼1.在源代碼文獻(xiàn)NewT*oProc,c提供的源代碼基礎(chǔ)上進(jìn)行修改,規(guī)定使用hello,exe同時創(chuàng)建10個進(jìn)程。提醒:可以使用PROCESS.INFORMATION類型定義一個有10個元素的數(shù)組,每一個元素相應(yīng)一個進(jìn)程。使用一個循環(huán)創(chuàng)建10個子進(jìn)程,然后再使用一個循環(huán)等待1。個子進(jìn)程結(jié)束,得到退出碼后關(guān)閉句柄。STARTUPINFOStartupInfo;PROCESS_INFORMATIONProcinfo[l0];ULONGulExitCode;INTnResult=0;。inti,j;//#ifdcf_DEBUG_asm("intS3\nnop");#endifprintf(^Create1Op//rocessesandwaitfortheprocessesexit...\n\n");PsWaitForEven(&Ext—>Comp1etionEvent,INFINITE);*Rcsu1t=Count;ReturnSTATUS_SUCCESS;)4.在io/driver/seria1.c文獻(xiàn)的SrlRead函數(shù)中,訪問接受數(shù)據(jù)緩沖區(qū)時必須關(guān)閉中斷,思考這樣做的因索。在SrlWrite函數(shù)中訪問緩沖區(qū)時為什么不需要關(guān)閉中斷呢?思考中斷在設(shè)備I/0中的重要作用和意義。答:由于SrlWrite函數(shù)和Srllsr函數(shù)對發(fā)送數(shù)據(jù)緩沖區(qū)的訪問是同步進(jìn)行的,在Sr1Write函數(shù)中訪問發(fā)送數(shù)據(jù)緩沖區(qū)時就不需要關(guān)閉中斷了。使用中斷方式可以讓進(jìn)程在等待硬件設(shè)備的響應(yīng)時讓出解決器,調(diào)度程序會選擇其他進(jìn)程在解決器上繼續(xù)執(zhí)行,從而提高解決器的運(yùn)用率,并支持多道程序和I/O設(shè)備并行操作。同時,由于中斷方式是異步執(zhí)行的,所以在訪問臨界資源時需要進(jìn)行同步。實(shí)驗(yàn)10磁盤調(diào)度算法一、實(shí)驗(yàn)?zāi)康耐ㄟ^學(xué)習(xí)EOS實(shí)現(xiàn)磁盤調(diào)度算法的機(jī)制,掌握磁盤調(diào)度算法執(zhí)行的條件和時機(jī)。觀測EOS實(shí)現(xiàn)的FCFS、SSTF和SCAN磁盤調(diào)度算法,了解常用的磁盤調(diào)度算法。編寫CSCAN和N-Step-SCAN磁盤調(diào)度算法,加深對各種掃描算法的理解。二、實(shí)驗(yàn)內(nèi)容1、準(zhǔn)備實(shí)驗(yàn)2、驗(yàn)證先來先服務(wù)(FCFS)磁盤調(diào)度算法3、驗(yàn)證最短尋道時間優(yōu)先(SSTF)磁盤調(diào)度算法4、驗(yàn)證SSTF算法導(dǎo)致的線程“饑餓”現(xiàn)象三、問題答案及參考代碼1.在執(zhí)行SCAN、N?Step-SCAN磁盤調(diào)度算法時,假如在EOS控制臺中多次輸入“ds”命令,調(diào)度的順序會發(fā)生變化,說明導(dǎo)致這種現(xiàn)象的因素(提醒:注意這兩種算法使用的全局變量)。嘗試修改源代碼,使這兩種算法在多次執(zhí)行時,都能保證調(diào)度的順序一致(提醒:可以參考io/b1ock.c文獻(xiàn)中IopReceiveRequest函數(shù)和IopProcessNextRequest函數(shù)判斷磁盤調(diào)度算法開始工作和結(jié)束工作的方法)。答:SCAN算法使用了全局變最Scanlnside記錄磁頭移動的方向,每次執(zhí)行“ds”時,磁頭的移動方向都也許不同樣,所在磁道也也許不同樣,所以在每次執(zhí)行時距離最短的線程也不同,所以調(diào)度的順序會發(fā)生變化,例如在第一次執(zhí)行“ds”命令時,Scaninside初始化為true則開始磁頭是從外向內(nèi)移動的,結(jié)束時磁頭變?yōu)閺膬?nèi)向外移動,所以在下次執(zhí)行“ds”命令時,開始磁頭就繼續(xù)從內(nèi)向外移動了。要解決這個問題,可以lopProcessNextRcquest函數(shù)中,每次檢測到磁盤調(diào)度算法結(jié)束工作時,將這些全局變量恢復(fù)為默認(rèn)值。4.分析已經(jīng)實(shí)現(xiàn)的各種磁盤調(diào)度算法的優(yōu)缺陷,嘗試實(shí)現(xiàn)更多其它的磁盤調(diào)度算法。先來先服務(wù)FCFS:公平,簡樸,每個進(jìn)程的請求都能依次得到解決。沒有對尋道優(yōu)化,平均尋道時間長。最短時間優(yōu)先調(diào)度算法SSTF:規(guī)定訪問的磁道是當(dāng)前磁頭所在的磁道最近,每次尋道時間最短,但不能保證平均尋道時間最短。也許導(dǎo)致一些請求無限期推延,產(chǎn)生饑餓現(xiàn)象。電梯調(diào)度算法SCAN:不僅考慮當(dāng)前磁道的距離,優(yōu)先考慮在磁道前進(jìn)方向的最短時間,排除磁頭在盤面上的往復(fù)運(yùn)動,避免了出現(xiàn)“饑餓”現(xiàn)象。電梯原理。C-SCAN:磁頭單項(xiàng)移動。實(shí)驗(yàn)總結(jié):操作系統(tǒng)實(shí)驗(yàn)中我們親自動手操作,分別實(shí)現(xiàn)了進(jìn)程、存儲器管理等功能,將課上所學(xué)到的知識與實(shí)際操作結(jié)合到一起,領(lǐng)略到了各個功能實(shí)現(xiàn)的過程原理,加深了對于操作系統(tǒng)意義、作用的理解,對于此后計算機(jī)的相關(guān)課程的學(xué)習(xí)打下了基礎(chǔ)。實(shí)驗(yàn)的課程中思考題的部分更是對課程內(nèi)容的進(jìn)一步理解,讓我們有許多收獲。最后,感謝老師的悉心教導(dǎo)。Startupinfo.StdInput=GetStdHand1e(STD.INPUT_HANDLE);StartupInfo.StdOutput=GetStdHand1e(STD_OUTPUT_HANDLE);StartupInfo.StdError=GetStdlland1c(STD_ERRORHANDLE);for(i=0;i<10;i++)if(CreateProcess("A:\\Hello.exe",NULL,0,&StartupInfo,&ProcInfo[i]));else{for(j=0;j<i;j++){WaitForSingleObject(Proclnfo[j].ProcessHandie,INFINITE);GetExitCodeProcess(ProcInfo[j].ProcessHand1e,ftulExitCode);printf(,z\nTheprocess%dexitwith%d.\nj,ulExitCode);CloseIIand1e(ProcInfo[j].ProcessHandie);CloseHandle(Proclnfo[j].ThreadHandle);}printf("CreateProcessFailed,Errorcode:Ox%X.\n”,GetLastError());nResuIt=1;returnnResuit;}for(i=0;i<10:i++){WaitForSingleObject(Proclnfo[i].Proccssllandle,INFINITE);GetExitCodeProcess(Proclnfo[i].ProcessHandie,&ulExitCode);}for(i=0i<10:i++)(printf("\nTheprocess%dexitwith%d.\n”,i,ulExitCode);C1oseHand1e(ProcInfo[i].ProcessHandle);CloseHandle(ProcInfo[i].Threadllandle);}returnnResult;3.在PsCreateProcess函數(shù)中調(diào)用TPspCreateProcessEnvironmenl函數(shù)后又先后調(diào)用了PspLoadProcessimage和PspCreateThread函數(shù),學(xué)習(xí)這些函數(shù)的重要功能??梢曰Q這些函數(shù)被調(diào)用的順序嗎?思考其中的因素。PspCreateProcessEnvironment的重要功能是創(chuàng)建進(jìn)程控制塊,并且為進(jìn)程創(chuàng)建了地址空間和分派了句柄表。PspLoadProcessImage是將進(jìn)程的可執(zhí)行映像加載到了進(jìn)程的地址空間中。PspCreateThread創(chuàng)建了進(jìn)程的主線程。這三個函數(shù)被調(diào)用的順序是不可以改變的。就向上面描述的加載可執(zhí)行映像之前必須已經(jīng)為進(jìn)程創(chuàng)建了地址空間,這樣才可以擬定可執(zhí)行映像可以被加載到內(nèi)存的什么位置。在創(chuàng)建主線程之前必須已經(jīng)加載了可執(zhí)行映像,這樣主線程才可以知道自己要從哪里開始執(zhí)行,執(zhí)行哪些指令。因此不能互換他們的順序。實(shí)驗(yàn)4線程的狀態(tài)和轉(zhuǎn)換一、實(shí)驗(yàn)?zāi)康恼{(diào)試線程在各種狀態(tài)間的轉(zhuǎn)換過程,熟悉線程的狀態(tài)和轉(zhuǎn)換。通過為線程增長掛起狀態(tài),加深對線程狀態(tài)的理解。二、實(shí)驗(yàn)內(nèi)容1準(zhǔn)備實(shí)驗(yàn)2調(diào)試線程狀態(tài)的轉(zhuǎn)換過程(阻塞一就緒、運(yùn)營一就緒、就緒一運(yùn)營、運(yùn)營一阻塞)3為線程增長掛起狀態(tài)三、問題答案及參考代碼PsResumThread(INHANDLEhThread){STATUSStatus;BOOLIntState;PTHREADThread;Status=0bRefObjectByHand1e(hThrcad,PspThreadType,(PV0ID*)&Thread);if(EOS_SUCCESS(Status)){IntState=KeEncibleInterrupts(FALSE);if(Zero==Thread—>Statc){ListRemoveEntry(&Thread->StateListEntry);PspReadyThread(Thread);PspThreadSchedule();Status=STATUS_SUCCESS;}elsetStatus=STATUS_NOT_SUPPORTED;)KoEnab1elnterrupts(IntState);//開中斷0bDerefObject(Thread);}returnStatus;}resume命令執(zhí)行的效果如圖:1.思考一下,在本實(shí)驗(yàn)中,當(dāng)1??诰€程處在運(yùn)營狀態(tài)時,EOS中尚有哪些線程,它們分別處在什么狀態(tài)??梢允褂每刂婆_命令pt查看線程的狀態(tài)。,OSLabPC-MicrosoftVirtualPC2007ActionEditCDFloppyHelpCONSOLE-2(PressCtrl*Fl~F8toswitchconsolewindow...)Ue1cometoEOSshel1>pt********ProcessList(1Process)xxmxxxIDtSystem?!PriorityIThreadCount?PrimaryThreadID?ImageNane1Y24112M\AD0123456781一*****ThreadList(111System?;PriorityThread)****;State1ParentProcessID:StartAddressY0Ready10x8001817CY24Uaiting10x80015E9A丫24Waiting10x8001826DY24Running10x80018Z6D¥24Uaiting10x8001826DY24Uaiting10x80018Z6DY24Uaiting10x80018Z6D¥24Uaiting10x80018Z6D丫Z4Uaiting10x80018Z6DY24Uaiting10x80018Z6D丫8Ready10x80018D9AI22222222223>2.當(dāng)1oop線程在控制臺1中執(zhí)行,并且在控制臺2中執(zhí)行suspend命令時,為什么控制臺1中的loop線程處在就緒狀態(tài)而不是運(yùn)營狀態(tài)?答:當(dāng)在控制臺2中執(zhí)行suspend命令時,實(shí)質(zhì)上是優(yōu)先級為24的控制臺2線程搶占了解決器,也就是控制臺2線程處在運(yùn)營狀態(tài),所以此時1。op線程處在就緒狀態(tài)了。4.總結(jié)一下在圖5-3中顯示的轉(zhuǎn)換過程,哪些需要使用線程控制塊中的上下文(將線程控制塊中的上下文恢復(fù)到解決器中,或者將解決器的狀態(tài)復(fù)制到線程控制塊的上下文中),哪些不需要使用,并說明因素。答:一個進(jìn)程在運(yùn)營過程中或執(zhí)行系統(tǒng)調(diào)用,或產(chǎn)生了一個中斷事件,解決器都進(jìn)行一次模式切換,操作系統(tǒng)接受控制權(quán),有關(guān)系統(tǒng)例程完畢必須的操作后,或恢復(fù)被中斷進(jìn)程或切換到新進(jìn)程。當(dāng)系統(tǒng)調(diào)度新進(jìn)程占有解決器時,新老進(jìn)程隨之發(fā)生上下文切換,因此,進(jìn)程的運(yùn)營被認(rèn)為是在進(jìn)程的上下文中執(zhí)行,這時的控制權(quán)在操作系統(tǒng)手中,它在完畢必要的操作后,可以恢復(fù)被中斷的進(jìn)程或切換到別的進(jìn)程。實(shí)驗(yàn)5進(jìn)程的同步一、實(shí)驗(yàn)?zāi)康氖褂肊OS的信號量,編程解決生產(chǎn)者一消費(fèi)者問題,理解進(jìn)程同步的意義。調(diào)試跟蹤EOS信號量的工作過程,理解進(jìn)程同步的原理“修改EOS的信號量算法,使之支持等待超時喚醒功能(有限等待),加深理解進(jìn)程同步的原理。二、實(shí)驗(yàn)內(nèi)容1、準(zhǔn)備實(shí)驗(yàn)2、使用EOS的信號量解決生產(chǎn)者一消費(fèi)者問題3、調(diào)試EOS信號量的工作過程4、修改EOS的信號量算法if(Semaphore->Count>0){Semaphore->Count—;aflag=STATUS_SUCCESS;2〃假如信號量大于零,說明尚有資源,可認(rèn)為線程分派elseflag=PspWait(&Semaphore->WaitListHead,Milliseconds);KeEnablelnterrupts(IntState);//原子操作完畢,恢復(fù)中斷。returnf1ag;}〃否則,說明資源數(shù)量不夠,不能再為線程分派資源,因此要使線程等待if(Semaphore->Count+Re1easeCount>Semaphore->MaximumCount){Status=STATUS_SI':MAPH0RE_LIMiT_EXCEEDEI);}Else{a//記錄當(dāng)前的信號量的值//if(NULL!=PreviousCount){*PreviousCount=Semaphore->Count;}intmm=Semaphore—>Count;//目前僅實(shí)現(xiàn)了標(biāo)準(zhǔn)記錄型信號最,每執(zhí)行一次信號晟?的釋放操作只能使信號量的值增長1.〃while((!ListIsEmpty(&Semaphore->WaitListHead))&&(Re1easeCount)){PspWakeThread(&Semaphore->WaitListHead,STATUS_SUCCESS);APspThre
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版地理八年級下冊8.1《自然特征與農(nóng)業(yè)》聽課評課記錄1
- 湘教版數(shù)學(xué)八年級上冊2.5《全等三角形及其性質(zhì)》聽評課記錄1
- 人教版數(shù)學(xué)九年級上冊聽評課記錄21.2.3《因式分解法》
- 生產(chǎn)設(shè)備技術(shù)轉(zhuǎn)讓協(xié)議書(2篇)
- 環(huán)保保潔服務(wù)協(xié)議書(2篇)
- 蘇科版數(shù)學(xué)七年級下冊12.3《互逆命題》聽評課記錄1
- 部編版八年級道德與法治下冊第四課《公民義務(wù)》第1課時《公民基本義務(wù)》聽課評課記錄
- 【部編人教版】八年級上冊歷史聽課評課記錄 第18課 從九一八事變到西安事變
- 浙教版數(shù)學(xué)七年級下冊1.3《平行線的判定》聽評課記錄2
- 2025年超低頻傳感器標(biāo)定系統(tǒng)合作協(xié)議書
- 北京市海淀區(qū)2024-2025學(xué)年八年級上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 23G409先張法預(yù)應(yīng)力混凝土管樁
- 煤礦機(jī)電運(yùn)輸培訓(xùn)課件
- “德能勤績廉”考核測評表
- 三年級下冊口算天天100題(A4打印版)
- 鍋爐房危害告知卡
- 江西省農(nóng)村信用社(農(nóng)商銀行)
- 陳子性藏書卷七
- NPI流程管理分解
- 物業(yè)公司財務(wù)部各崗位工作職責(zé)
- 政務(wù)信息培訓(xùn)ppt課件
評論
0/150
提交評論