




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
華北電力大學(xué)實驗報告實驗名稱操作系統(tǒng)實驗課程名稱操作系統(tǒng)綜合實驗專業(yè)班級:學(xué)號:指導(dǎo)教師:學(xué)生姓名:成績:實驗日期:的線程也應(yīng)當可以被掛起并被恢復(fù),讀者可以參考第節(jié)中的內(nèi)容以及圖5-5來完畢此項改善。注意要設(shè)計一些方案對所修改的代碼進行全面的測試,保證所做的改善是對的的。假如完畢了以上改善,請思考一下控制臺命令pt需要進行哪些相應(yīng)的修改?設(shè)計代碼STATUSPsResumThread(4NHANDLEhThread。)(STATUSStatus;BOOLIntState;oPTHREADThread:Status=ObRef0bjectByHandle(hThread,PspThreadType,(PVOID*)&Thread);if(EOS.SUCCESS(Status)){。IntSlate=KeEnab1eInterrupts(FALSE);//關(guān)中斷Af(Zero==Thread—>State){“ListRemoveEntry(&Thread->StateListEntry);。PspReadyThread(Thread);。gPspThreadSchedu1e();。。Status=STATUS_SUCCESS;◎o}else{。Status=STATUS_N0T_SUPPORTED;)KeEnab1elnterrupts(IntState)?//開中斷oObDerefObject(Thread);°)oreturnStatus;)實驗5進程的同步實驗?zāi)康暮鸵?guī)定.使用EOS的信號量,編程解決生產(chǎn)者一消費者問題,理解進程同步的意義。2.通過為線程增長掛起狀態(tài),加深對線程狀態(tài)的理解。.調(diào)試跟蹤EOS信號量的工作過程,理解進程同步的原理。.修改EOS的信號量算法,使之支持等待超時喚醒功能(有限等待),加深理解進程同步的原理。二.實驗內(nèi)容及環(huán)節(jié).實驗準備1)啟動OSLab。2)新建一個EOSKernel項目。3)生成EOSKerne1項目,從而在該項目文獻夾中生成SDK文獻夾。4)新建一個EOS應(yīng)用程序項目。5)使用在第3步生成的SDK文獻夾覆蓋EOS應(yīng)用程序項目文獻夾中的SDK文獻夾。2.使用EOS的信號量解決生產(chǎn)者?消費者問題1)使用P"文獻中的源代碼港換之前創(chuàng)建的EOS應(yīng)用程序項目中EOSApp.c文獻內(nèi)的源代碼。2)按F7生成修改后的EOS應(yīng)用程序項目。3)按F5啟動調(diào)試。OSLab會一方面彈出一個調(diào)試異常對話框。4)在調(diào)試異常對話框中選擇〃否“,繼續(xù)執(zhí)行。5)立即激活虛擬機窗口查看生產(chǎn)者?消費者同步執(zhí)行的過程,如圖16)待應(yīng)用程序執(zhí)行完畢后,結(jié)束本次調(diào)試。CONSOLE-1(PressCtr1+F1~F8toswitchconsolewindow...)MeleonetoEOSshell>AutorunAAEOSApp.exeProducea0Consumea0Producea1ProduceaZProducea3Producea4Consumea1Producea5Producea6Producea7Producea8ConsumeazProducea9Producea10Producea11Producea12Consumea3Producea13Consumea4Producea14■113調(diào)試EOS信號量的工作過程..創(chuàng)建信號量:信號量結(jié)構(gòu)體(SEMAPHORE)中的各個成員變量是由API函數(shù)CreateSem叩hore的相應(yīng)參數(shù)初始化的,查看main函數(shù)中創(chuàng)建Empty和Full信號量使用的參數(shù)有哪些不同,又有哪些相同,思考其中的因素。.等待、釋放信號量1)等待信號量(不阻塞):生產(chǎn)者和消費者剛開始執(zhí)行時,用來放產(chǎn)品的緩沖區(qū)都是空的,所以生產(chǎn)者在第一次調(diào)用WaitForSingleObject函數(shù)等待Empty信號量時,應(yīng)當不需要阻塞就可以立即返回2)釋放信號量(不喚醒):生產(chǎn)者線程通過等待Empty信號量使空緩沖區(qū)數(shù)量減少了1,通過釋放Ful1信號量使?jié)M緩沖區(qū)數(shù)量增長了1,這樣就表達生產(chǎn)者線程生產(chǎn)了一個產(chǎn)品并占用了一個緩沖區(qū)。3)等待信號量(阻塞):由于開始時生產(chǎn)者線程生產(chǎn)產(chǎn)品的速度較快,而消費者線程消費產(chǎn)品的速度較慢,所以當緩沖池中所有的緩沖區(qū)都被產(chǎn)品占用時,生產(chǎn)者在生產(chǎn)新的產(chǎn)品時就會被阻塞.4)釋放信號量(喚醒):只有當消費者線程從緩沖池中消費了一個產(chǎn)品,從而產(chǎn)生一個空緩沖區(qū)后,生產(chǎn)者線程才會被喚醒并繼續(xù)生產(chǎn)14號產(chǎn)品.4.修改EOS的信號量算法1)規(guī)定:在目前EOSKerne1項目的ps/semaphore.c文獻中,PsWaitForSemaphore函數(shù)的Milliseconds參數(shù)只能是INFINITE,PsReleaseSem叩hore函數(shù)的ReieaseCount參數(shù)只能是1。現(xiàn)在規(guī)定同時修改PsWaitForSem叩hore函數(shù)和PsReleaseSemaphore函數(shù)中的代碼,使這兩個參數(shù)可以真正起到作用,使信號量對象支持等待超時喚醒功能和批量釋放功能。2)測試:a.使用修改完畢的EOSKernel項目生成完全版本的SDK文獻夾,并覆蓋之前的生產(chǎn)者?消費者應(yīng)用程序項目的SDK文獻夾。b.按F5調(diào)試執(zhí)行原有的生產(chǎn)者?消費者應(yīng)用程序項目,結(jié)果必須仍然與圖1一致。假如有錯誤,可以調(diào)試內(nèi)核代碼來查找錯誤,然后在內(nèi)核項目中修改,并反復(fù)環(huán)節(jié)a。實驗六時間片輪轉(zhuǎn)調(diào)度.實驗?zāi)康募耙?guī)定.調(diào)試EOS的線程調(diào)度程序,熟悉基于優(yōu)先級的搶先式調(diào)度。.為EOS添加時間片輪轉(zhuǎn)調(diào)度,了解其它常用的調(diào)度算法。.實驗內(nèi)容及環(huán)節(jié).準備實驗.閱讀控制臺命令〃rr”相關(guān)的源代碼.調(diào)試線程調(diào)度程序a)調(diào)試當前線程不被搶先的情況b)調(diào)試當前線程被搶先的情況=.為EOS添加時間片輪轉(zhuǎn)調(diào)度a)規(guī)定:修改ps/sched.c文獻中的PspRoundRobin函數(shù)(第337行),在其中實現(xiàn)時間片輪轉(zhuǎn)調(diào)度算法。b)測試:.實驗內(nèi)容問題及解答修改線程時間片的大?。涸诔晒镋OS添加了時間片輪轉(zhuǎn)調(diào)度后,將ps/psp.h第104行定義的TICKS.0尸尸[1\/^_51?^^的值修改為1。在EOS控制臺中輸入命令〃rr〃后按回車。觀測執(zhí)行的效果。還可以按照上面的環(huán)節(jié)為TICKS_OF_TIME_SLICE取一些其它的極端值,例如20或100等,分別觀測"rr”命令執(zhí)行的效果。通過度析導(dǎo)致執(zhí)行效果不同的因素,理解時間片的大小對時間片輪轉(zhuǎn)調(diào)度導(dǎo)致的影響。TICKS_OF_TIME_SUCE的值為1
。OSLabPC-MicrosoftVirtualPC2007IAction_Edit_CD_~Floppy_Help-CONSOLE-1(PressCtrl+F1~F8toswitchconsoleuindow.Thread0(8):22238Thread1(8):ZZ181ThreadZ(8):ZZ157Thread3(8):22294Thread4(8):Z1706Thread5(8):ZZ393Thread6(8):22573Thread?(8):Z1871Thread8(8):22394Thread9(8):22540Thread10(8):Z1858Thread11(8):Z2176Thread1Z(8):22240Thread13(8):22297Thread14(8):Z253ZThread15(8):21618Thread16(8):22409Thread17(8):22407Thread18(8):22436Thread19(8):21875>22TICKS_OF_TIME_SLICE的值為20-Y22CONSOLE-1(PressCtr1+F1~F8toswitchconsolewindow.Thread0(8):ZZ480Thread1(8):22819ThreadZ(8):Z3356Thread3(8):Z3117Thread4(8):22749Thread5(8):21021Thread6(8):2244sThread7C8):ZZZ97Thread8(8):23403Thread9C8):22612Thread10(8):Z3757Thread11(8):ZZZ76Thread12(8):21966Thread13(8):20924Thread14(8):Z0550Thread15(8):ZZ111Thread16(8):20848Thread17(8):Z09Z0Thread18(8):21869Thread19(8):20701>-MicrosoftVirtualPC2007:ionEditCDFloppyHelpc)TICKS_OFJ■工ME_SLICE的值為100
$OSLabPC-MicrosoftVirtualPC2007IActionEditCDFloppyHelpCONSOLE-1(PressCtrl*Fl~F8toswitchconsolewindow...)Thread0(8):21992Thread1(8):22242Thread2(8):22530Thread3(8):ZZ073Thread4(8):22124Thread5(8):21815Thread6(8):21308Thread7(8):22443Thread8(8):22279Thread9(8):21856Thread10(8):22304Thread11(8):21989Thread12(8):21740Thread13(8):22471Thread14(8):2Z053Thread15(8):21952Thread16(8):22166Thread17(8):2Z133Thread18(8):22247Thread19(8):22474>11實驗七物理存儲器與進程邏輯地址空間的
管理--實驗?zāi)康募耙?guī)定.使用EOS的信號量,編程解決生產(chǎn)者一消費者問題,理解進程同步的意義。2.通過為線程增長掛起狀態(tài),加深對線程狀態(tài)的理解。.調(diào)試跟蹤EOS信號量的工作過程,理解進程同步的原理。.修改EOS的信號量算法,使之支持等待超時喚醒功能(有限等待),加深理解進程同步的原理。二.實驗內(nèi)容及環(huán)節(jié)(1)、準備實驗(2)、執(zhí)行控制臺命令〃pm”,查看物理存儲器的信息(3)、分派物理頁和釋放物理頁:a.在pm命令函數(shù)中添加分派物理頁和釋放物理頁的代碼b.單步調(diào)試分派物理頁和釋放物理頁(4)、執(zhí)行控制臺命令"vm”,直看系統(tǒng)進程的虛擬地址描述符信息執(zhí)行控制臺命令〃vm〃,查看當創(chuàng)建了一個應(yīng)用程序進程后,系統(tǒng)進程和應(yīng)用程序進程中虛擬地址描述符的信息(5)、在系統(tǒng)進程中分派虛擬頁和釋放虛擬頁(6)、在應(yīng)用程序進程中分派虛擬頁和釋放虛擬頁(7)、結(jié)束實驗.實現(xiàn)代碼及其說明:INT*d;if(d=VirtualAlloc(O,sizeof(int),MEM_RESERVE|MEM_COMMIT)){//調(diào)用API函數(shù)Virtua1A1loc,分派一個整型變量所需的空間,并使用一介整型變量的指針指向這個空間printf("Allocated%dbytesvirtualmemoryof0x%x\n\n"fsizeof(int),d);printf("virtualmemoryorigina1vaIue:0x%x\n\n",*d);*d=OxFFFFFFFF;//修改整型變量的值為OxFFFFFFFFprintf("virtuaImemorynewvalue:0x%x\n\n",*d);printf("\nWaitfor10seconds\n");Sleep(10000);//調(diào)用AP工函數(shù)S1eep,等待10秒鐘。if(Virtua1Free(dr0,MEM_RELEASE))//調(diào)用API函數(shù)Virtua1Free,釋放之前分派的整型變量的空間printf("\nRealeasevirtualmemorysuccess!\n");e1seprintf("realeaseerror\n");printf("\nEndless1oop!");for(;;);)e1se(printf("error\n");return-l;〃g不能成功分派,打印出error,返回-1.)printf("Helloworld!\n");return0;.心得體會本次實驗重要問題在于如何解決異常情況,也就是程序的健壯性。最開始調(diào)試結(jié)果不對的,在老師指導(dǎo)下進行了分步調(diào)試,修改了部分代碼,最后成功了。最大的收獲是:純熟對代碼分步調(diào)試,找犯錯誤。實驗八分頁存儲器管理一.實驗?zāi)康呐c規(guī)定.學(xué)習(xí)i386解決器的二級頁表硬件機制,理解分頁存儲器管理原理。.查看EOS應(yīng)用程序進程和系統(tǒng)進程的二級頁表映射信息,理解頁目錄和頁表的管理方式。.編程修改頁目錄和頁表的映射關(guān)系,理解分頁地址變換原理。二.實驗環(huán)節(jié)與代碼:設(shè)計代碼PRIVATEVOIDConso1eCmdMemoryMap(INHANDLEStdHandle){oBOOLIntState;oULONGPfnOfPageDirectory;dULONGPageTotaI=0;olILONGIndexOfDirEntry;?ULONGIndexOfTableEntry;PMMPTE_HARDWAREpPde;PMMPTE_HARDWAREpPte;oULONG.PTRPageTableBase;ULONGPTRVirtualBase;constchar*OutputFormat=NULL;。ASSERT(PspCurrentProcess==PspSystemProcess);4ntState=KeEnab1einterrupts(FALSE)a〃關(guān)中斷ULONGPfnArray[2];oMiA11ocateZeroedPages(2,PfnArray);OutputFormat="Newpageframenumber:Ox%X,Ox%X\n";ofprintf(StdHandle,OutputFormat,PfnArray[O],PfnArray[1]);?KdbPrint(OutputFormat,PfnArray[0],PfnArray[1]);IndexOfDirEntry=(OxEOOOOOOO>>22);,//虛擬地址的高10位是PDE標號((PMMPTE_HARDWARE)0xC0300000)[IndexOfDirEntry].PageFrameNumber=PfnArray[0];((PMMPTE_HARDWARE)0xC0300000)[IndexOfDirEntry].Valid=1?V/有效o((PMMPTE_HARDWARE)0xC0300000)[IndexOfDirEntry].Writable=1?//可寫MiFlushEntireTlb();//刷新快表<>PageTabieBase=OxCO000000+IndexOfDirEntry*PAGE_SIZE;IndexOfTableEntry=(OxEOOOOOOO>>12)&Ox3FF;((PMMPTE_HARDWARE)PageTableBase)[IndexOfTableEntry].PageFrameNumber=PfnArray[l];((PMMPTE_HARDWARE)PageTableBase)[IndexOfTableEntry].Valid=1;。,。((PMMPTE_HARDWARE)PageTableBase)[IndexOfTab1eEntry].Writable=1;?MiFlushEntireTlb();〃刷新快表。IndexOfTableEntry=(OxEOOOlOOO>>12)&0x3FFh((PMMPTE_HARDWARE)PageTableBase)[IndexOfTab1eEntry].PageFrameNumber=PfnArray[1];”(PMMPTE_HARDWARE)PageTableBaseIIndexOfTableEntry].Valid=1;((PMMPTE_HARDWARE)PageTableBase)[IndexOfTableEntry].Writab1e=1;?MiFlushEntireTlb();//刷新快表OutputFormat="ReadMemoryOxE0001000:%d\n";4printf(StdHand1erOutputFormat,*((PINT)OxE0001000));KdbPrint(OutputFormat,*((PINT)0xE0001000));d*((PINT)0xE0000000)=100;//寫共享內(nèi)存ofprintf(StdHandle,OutputFormat,*((PINT)0xE0001000));KdbPrint(OutputFormat,*((PINT)0xE0001000));oOutputFormat="\nCR3->0x%X\n°PfnOfPageDirectory=(ULONG)(PspSysternProcess->Pas->PfnOfPageDirectory);ofprintf(StdHandle,OutputFormat,PfnOfPageDirectory);KdbPrint(OutputFormat,PfnOfPageDirectory);for(IndexOfDirEntry=0;IndexOfDirEntry<PTE_PER_TABLE;IndexOfDirEntry++XpPde=(PMMPTE_HARDWAREX(ULONG_PTR)PDE_BASE+IndexOfDirEntry*PTE.SIZE);&if(!pPde->Valid)gcontinue;,OutputFormat="PDE:0x%X(0x%X)->0x%X\n";VirtualBase=(IndexOfDirEntry<<PDI_SHIFT);fprintf(StdHand1erOutputFormat,IndexOfDirEntry,VirtualBase,pPde->PageFrameNumber);oKdbPrint(OutputFormat,IndexOfDirEntry,VirtualBase,pPde->PageFrameNumber);ooPageTableBase=(ULONG_PTR)PTE_BASE+IndexOfDirEntry*PAGE_SIZE;。for(IndexOfTableEntry=0;IndexOfTableEntry<PTE.PER_TABLE;IndexOfTableEntry++)g{pPte=(PMMPTE_HARDWARE)(PageTableBase+IndexOfTab1eEntry*PTE_SIZE);,if(!pPte->Valid)。。continue;^OutputFormat="\t\tPTE:0x%X(0x%X)->0x%X\n";dVirtualBase=(IndexOfDirEntry<<PDI_SHIFT)|(IndexOfTableEntry<<PTI_SHIFT);gfprintf(StdHandle,OutputFormat,IndexOfTab1eEntry,Virtua1Base,pPte->PageFrameNumber);KdbPrint(OutputFormat,IndexOfTableEntry,VirtualBase,pPte->PageFrameNumber);,}}OutputFormat="\nPhysica1PageTotal:%d\nofprintf(StdHand1e,OutputFormat,PageTotal);KdbPrint(OutputFormat,PageTotal);OutputFormat="Physica1MemoryTotal:%d\n\n";fprintf(StdHandle,OutputFormat,PageTota1*PAGE_SIZE);<>KdbPrint(OutputFormat,PageTotal*PAGE_SIZE);OutputFormat="\nNonusedPageCount:%d\n";ofprintf(StdHandle,OutputFormat,MiGetAnyPageCount());oKdbPrint(OutputFormat,MiGetAnyPageCount());IndexOfDirEntry=(OxEOOOOOOO>>22);//虛擬地址的高10位是PDE標號?PageTableBase=OxCOOOOOOO+IndexOfDirEntry*PAGE_SIZE;。IndexOfTableEntry=(0xEO000000>>12)&0x3FF?((PMMPTE_HARDWARE)PageTableBase)[IndexOfTableEntry].Valid=0;^IndexOfTableEntry=(0xE0001000>>12)&Ox3FF;((PMMPTE_HARDWARE)PageTableBase)[IndexOHab1eEntry].Valid=0;((PMMPTE_HARDWARE)0xC0300000)[IndexOfDirEntry].Vaiid=0;MiFlushEntireTib();?MiFreePages(2,PfnArray);OutputFormat="\nNonusedPageCount:%d\n";fprintf(StdHandie,OutputFormat,MiGetAnyPageCount());KdbPrint(OutputFormatrMiGetAnyPageCount());oKeEnablelnterrupts(IntState);//開中斷}三.實驗問題內(nèi)容及解答思考頁式存儲管理機制的優(yōu)缺陷。優(yōu)點:.虛存量大,適合多道程序運營,用戶不必緊張內(nèi)存不夠的調(diào)度操作,動態(tài)頁式管理提供反了內(nèi)存與外存圖圖統(tǒng)一管理的虛存實現(xiàn)方式。.內(nèi)存運用率高,不常用的頁面盡量不留在內(nèi)存。.不規(guī)定作業(yè)連續(xù)存放,有效的解決了內(nèi)存碎片問題。缺陷:.要進行頁面中斷,缺頁中斷等解決,系統(tǒng)開銷較大;.有也許產(chǎn)生"抖動"現(xiàn)象;.地址變換機構(gòu)復(fù)雜,一般采用硬件實現(xiàn),增長了機器成本。實驗心得與體會通過操作系統(tǒng)實驗,了解了操作系統(tǒng)的啟動過程,運營方式,加深了對計算機操作系統(tǒng)的理解。實驗一一.實驗?zāi)康腝)熟悉操作系統(tǒng)集成實驗環(huán)境OSLab的基本使用方法。(2)練習(xí)編譯、調(diào)試EOS操作系統(tǒng)內(nèi)核以及EOS應(yīng)用程序。二.實驗內(nèi)容(1)啟動OSLab;(2)學(xué)習(xí)。SLab的基本使用方法:練習(xí)使用OSLab編寫一個Windows控制臺應(yīng)用程序,熟悉0SLab的基本使用方法(重要涉及新建項目、生成項目、調(diào)試項目等);(3)EOS內(nèi)核項目的生成和調(diào)試:對EOS內(nèi)核項目的各種操作(涉及新建、生成和各種調(diào)試功能等)與對Windows控制臺項目的操作是完全一致的;(4)EOS應(yīng)用程序項目的生成和調(diào)試;(5)退出OSLab。.實驗內(nèi)容問題及解答)練習(xí)使用單步調(diào)試功能(逐過程、逐語句),體會在哪些情況下應(yīng)當使用“逐過程"調(diào)試,在哪些情況下應(yīng)當使用“逐語句"調(diào)試。練習(xí)使用各種調(diào)試工具(涉及“監(jiān)視”窗口、“調(diào)用堆棧”窗口等)。答:逐語句,就是每次執(zhí)行一行語句,假如碰到函數(shù)調(diào)用,它就會進入到函數(shù)里面。而逐過程,碰到函數(shù)時,不進入函數(shù),把函數(shù)調(diào)用當成一條語句執(zhí)行。因此,在需要進入函數(shù)體時用逐語句調(diào)試,而不需要進入函數(shù)體時用逐過程調(diào)試。2)思考生成EOSSDK文獻夾的目的和作用。查看EOSSDK文獻夾中的內(nèi)容,明白文獻夾的組織結(jié)構(gòu)和各個文獻的來源和作用。查看EOS應(yīng)用程序包含了SDK文獻夾中的哪些頭文獻,是如何包含的?答:EOSSDK是為應(yīng)用程序調(diào)用系統(tǒng)API提供服務(wù),可作為用戶編程中可使用
的工具包集合。EOSSDK文獻夾重要涉及INC頭文獻、LIB文獻夾導(dǎo)入庫文獻和BIN文獻夾動態(tài)鏈接庫,可執(zhí)行程序,二進制文獻。EOSSDK包含的頭文獻有:eos.h負責導(dǎo)出API函數(shù)聲明;eosdef.h負責導(dǎo)出函數(shù)類型的定義;error.h負責導(dǎo)犯錯誤碼。.實驗過程.新建Windows控制臺應(yīng)用程序生成項目:執(zhí)行項目:調(diào)試項目:intFunc(intn);//聲明Fuac函數(shù)intn=0,n=Func(10);Drintf("HulloWcrld!\nv):.使用斷點終端執(zhí)行:查看EOSSDK(SoftwareDeve1opmentKit)文獻夾:修改EOS應(yīng)用程序項目名稱COMSOLE-l(PressCtrl+F1~FRtnswitchconsoleuindnu...)UclcometoEOSshelll〉RirtQHi3R:71uADV.exe.實驗心得這次是驗證性實驗,具體環(huán)節(jié)和操作方法都是與實驗教程參考書上一致,實驗很順利,實驗過程沒有碰到困難。通過這次實驗,我掌握了OSLab啟動和退出操作;練習(xí)使用OSLab編寫一個Windows控制臺應(yīng)用程序,熟悉OSLab的基本使用方法新建項目、生成項目、調(diào)試項目等。實驗2操作系統(tǒng)的啟動--實驗?zāi)康腖跟蹤調(diào)試EOS在PC機上從加電復(fù)位到成功啟動的全過程,了解操作系統(tǒng)的啟動過程。2.直看EOS啟動后的狀態(tài)和行為,理解操作系統(tǒng)啟動后的工作方式。二.實驗內(nèi)容.調(diào)試EOS操作系統(tǒng)的啟動過程。.調(diào)試加載程序。Loader程序的重要任務(wù)是將操作系統(tǒng)內(nèi)核(kerneI.dH文獻)加載到內(nèi)存中,然后讓CPU進入保護模式并且啟用分頁機制,最后進入操作系統(tǒng)內(nèi)核開始執(zhí)行(跳轉(zhuǎn)到kernel.dll的入口點執(zhí)行1.調(diào)試內(nèi)核。.EOS啟動后的狀態(tài)和行為。查看EOS的版本號:1)在控制臺中輸入命令"ver"后按回車。2)輸出EOS版本后的控制臺如下圖所示。5查看有應(yīng)用程序運營時進程和線程的信息:1)待EOS啟動完畢,在EOS控制臺中輸入命令"he1Io”后按回車。此時Hello.exe應(yīng)用程序就開始執(zhí)行。2)迅速按Ctrl+F2切換到控制臺2,并輸入命令"pt"后按回車。輸出的迸程和線程信息如下圖所示三.實瞼內(nèi)容問題及解答1.為什么EOS操作系統(tǒng)從軟盤啟動時要使用boot.bin和loader.bin兩個程序?使用一個可以嗎?它們各自的重要功能是什么?假如將1oader.bin的功能移動到b。。t.bin文獻中,則boot.bin文獻的大小是否仍然能保持小于512字節(jié)?在IDE環(huán)境啟動執(zhí)行EOS操作系統(tǒng)時,會將boot.bin、Ioader.bin和kerneI.dII三個二進制寫入軟盤鏡像文獻中,然后讓虛擬機來執(zhí)行軟盤中的EOS操作系統(tǒng)。a僅使用其中一個是不能運營的。2,軟盤引導(dǎo)扇區(qū)加教完畢后內(nèi)存中有兩個用戶可用的區(qū)域,為什么軟盤引導(dǎo)扇區(qū)程序選擇將loader.bin加載到第一個可用區(qū)域的0xlOOO處呢?這樣做有什么好處?這樣做會對1oader.bin文獻的大小有哪些限制。一方面用戶只用兩個可用區(qū)域,加載位置非此即彼。第一個可用用戶區(qū)是低地址區(qū),且空間大小比較小,適合容納小文獻,所以我們選擇將占用空Ioder.bi加載到第一用戶區(qū)。優(yōu)點:由低地址開始,便于檢索查找。小文獻占用小空間,節(jié)約資源。限制:Ioader.bin文獻必須小于1cOOk.3.練習(xí)使用Bochs單步調(diào)試BIOS程序、軟盤引導(dǎo)扇區(qū)程序和1oade卷序,加深對操作系統(tǒng)啟動過程的理解。實驗3進程的創(chuàng)建--實驗?zāi)康木毩?xí)使用EOSAPI函數(shù)CreateProcess創(chuàng)建一個進程,掌握創(chuàng)建進程的方法,理解進程和程序的區(qū)別。調(diào)試跟蹤CreateProcess函數(shù)的執(zhí)行過程,了解進程的創(chuàng)建過程,理解進程是資源分派的單位。二.實驗內(nèi)容1.準備實驗.啟動OSLab。2?練習(xí)使用控制臺命令創(chuàng)建EOS應(yīng)用程序的進程.練習(xí)通過編程的方式讓應(yīng)用程序創(chuàng)建另一個應(yīng)用程序的進程.調(diào)試CreateProcess函數(shù).調(diào)試PsCreateProcess函數(shù)”。.練習(xí)通過編程的方式創(chuàng)建應(yīng)用程序的多個進程.實驗內(nèi)容問題及解答.在源代碼文獻NewTwoProc.c提供的源代碼基礎(chǔ)上進行修改,規(guī)定使用hello.exe同時創(chuàng)建10個進程。使用PR0CESSJNF0RMATI0N類型定義一個有10個元素的數(shù)組,每一個元素相應(yīng)一個進程。.學(xué)習(xí)本書第5章中的5,2節(jié),了解關(guān)于線程的相關(guān)知識,然后嘗試調(diào)試PspCreateThread函數(shù),觀測線程控制塊(TCB)初始化的過程。.在PsCreateProcess函數(shù)中調(diào)用了PspCreateProcessEnvironment函數(shù)后又先后調(diào)用了PspLoadProcessImage和PspCreateThread函數(shù)學(xué)習(xí)這些函數(shù)的重要功能。可以互換這些函數(shù)被調(diào)用的順序嗎?思考其中的因素。PspCreateProcessEnvironment創(chuàng)建了地址空間和分派了句柄表。PspLoadProcessImage是將進程的可執(zhí)行映像加載到了進程的地址空間中。PspCreateThread創(chuàng)建了進程的主線程。這三個函4知道自己要從哪里開始執(zhí)行,執(zhí)行哪些指令。因此不能互換他們的順序。.實驗心得本實驗重要的問題就是用hello.exe同時創(chuàng)建10個進程:由于編程基礎(chǔ)不好,剛開始的程序很難通過編譯.最后使用PROCESS_INFORMATION類型定義一個有10個元素的數(shù)組,每一個元素相應(yīng)一個進程。使用一個循環(huán)創(chuàng)建10個子進程,然后再使用一個循環(huán)等待10個子進程結(jié)束,得到退出碼后關(guān)閉句柄。并對細節(jié)做了部分修正才成功。實驗4線程的狀態(tài)和轉(zhuǎn)換.實驗?zāi)康暮鸵?guī)定.調(diào)試線程在各種狀態(tài)間的轉(zhuǎn)換過程,熟悉線程的狀態(tài)和轉(zhuǎn)換。.通過為線程增長掛起狀態(tài),加深對線程狀態(tài)的理解。.實驗內(nèi)容及環(huán)節(jié).準備實驗。.調(diào)試線程狀態(tài)的轉(zhuǎn)換過程。.線程由阻塞狀態(tài)進入就緒狀態(tài).線程由運營狀態(tài)進入就緒狀態(tài).線程由就緒狀態(tài)進入運營狀態(tài)6線程由運營狀態(tài)進入阻塞狀態(tài)..為線程增長掛起狀態(tài)8,完畢Resume原語后,可以先使用suspend命令掛起loop線程,然后在控制臺2中輸入命令"Resume31〃(假如loop線程的工D是31)后按回車。命令執(zhí)行成功的結(jié)果如下圖所示。假如切換回控制臺1后,發(fā)現(xiàn)loop線程的執(zhí)行計數(shù)恢復(fù)增長就說明Resume原語可以正常工作。.實驗內(nèi)容問題及解
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年工程經(jīng)濟市場評估試題及答案
- 2025辦公室租賃合同范本解析
- 水利水電工程行業(yè)前景試題及答案
- 遺產(chǎn)繼承人法律責任合同(2篇)
- 2025年市政工程實戰(zhàn)模擬試題及答案
- 湖南省長沙市長郡雙語實驗中學(xué)教育集團2025年中考二模語文試題(含答案)
- 2025關(guān)于電商的運輸合同范本
- 2024年泉州市洛江區(qū)自然資源局招聘真題
- 水利水電工程的技術(shù)規(guī)范制定與試題及答案
- 2024年寧德市壽寧縣教育局招聘教師真題
- 2025年全國防災(zāi)減災(zāi)日專題培訓(xùn)課件
- 2025-2030中國氯氧化鉍行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025年中考語文二輪復(fù)習(xí):說明文閱讀 測試卷(含答案解析)
- 視頻監(jiān)控介紹課件
- 統(tǒng)計學(xué)試題及答案解析
- 跨學(xué)科實踐制作微型密度計人教版物理八年級下學(xué)期
- 2025屆高考語文作文備考之審題立意30道選擇題訓(xùn)練(附答案)
- 21. 三黑和土地 課件
- 挖掘機理論試題及答案
- 2025年銀行從業(yè)資格考試個人理財真題卷權(quán)威解讀
- 建筑工程保修承諾及保障措施
評論
0/150
提交評論