版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于RISC-V代理內(nèi)核的操作系統(tǒng)課程實(shí)驗(yàn)與課程設(shè)計(jì)第五章.實(shí)驗(yàn)3:進(jìn)程管理目錄實(shí)驗(yàn)3的基礎(chǔ)知識(shí)多任務(wù)環(huán)境下進(jìn)程的封裝進(jìn)程的換入與換出就緒進(jìn)程的管理與調(diào)度實(shí)驗(yàn)內(nèi)容lab3_1進(jìn)程創(chuàng)建(fork)lab3_2進(jìn)程yieldlab3_3循環(huán)輪轉(zhuǎn)調(diào)度實(shí)驗(yàn)3的基礎(chǔ)知識(shí)多任務(wù)環(huán)境下進(jìn)程的封裝實(shí)驗(yàn)三的PKE操作系統(tǒng)將需要支持多個(gè)進(jìn)程的執(zhí)行。操作系統(tǒng)定義了進(jìn)程池(processprocs[NPROC];)。并對進(jìn)程的結(jié)構(gòu)進(jìn)行了擴(kuò)充,加入以下成員:mapped_info;//pointstoapagethatcontainsmapped_regionstotal_mapped_region;
//nextfreemappedregioninmapped_infouint64pid;//processid,intstatus;//processstatus,structprocess*parent;//parentprocess,structprocess*queue_next;//nextqueueelement;多任務(wù)環(huán)境下進(jìn)程的封裝進(jìn)程可能擁有的段分為以下幾個(gè)類型:enumsegment_type{CODE_SEGMENT,//ELFsegmentDATA_SEGMENT,//ELFsegmentSTACK_SEGMENT,//runtimesegmentCONTEXT_SEGMENT,//trapframesegmentSYSTEM_SEGMENT,//systemsegment};進(jìn)程具有以下幾種狀態(tài):enumproc_status{FREE,//unusedstateREADY,//readystateRUNNING,//currentlyrunningBLOCKED,//waitingforsomethingZOMBIE,//terminatedbutnotreclaimedyet};進(jìn)程的啟動(dòng)進(jìn)程啟動(dòng)的步驟:一、調(diào)用alloc_process()函數(shù):找到一個(gè)空的進(jìn)程結(jié)構(gòu)體為新創(chuàng)建的進(jìn)程建立了KERN_BASE以上邏輯地址的映射將映射信息保存到進(jìn)程結(jié)構(gòu)中二、調(diào)用load_bincode_from_host_elf()函數(shù)載入給定應(yīng)用對應(yīng)的ELF文件的各個(gè)段三、調(diào)用的elf_load()函數(shù)在載入段后,將對被載入的段進(jìn)行判斷,以記錄它們的虛地址映射,此時(shí)將形成用戶進(jìn)程的虛地址空間結(jié)構(gòu)。四、通過switch_to()函數(shù)將所構(gòu)造的進(jìn)程投入執(zhí)行;進(jìn)程的終止進(jìn)程的終止通過exit系統(tǒng)調(diào)用實(shí)現(xiàn):一、調(diào)用free_process(current):將進(jìn)程設(shè)為ZOMBIE狀態(tài),而不會(huì)將進(jìn)程所占用的資源全部釋放。該函數(shù)被調(diào)用時(shí)操作系統(tǒng)是在S模式下運(yùn)行,而按照PKE的設(shè)計(jì)思想,S態(tài)的運(yùn)行將使用當(dāng)前進(jìn)程的用戶系統(tǒng)棧。此時(shí),如果將當(dāng)前進(jìn)程的內(nèi)存空間進(jìn)行釋放,將導(dǎo)致操作系統(tǒng)本身的崩潰。二、調(diào)用schedule()函數(shù):選擇系統(tǒng)中可能存在的其他處于就緒狀態(tài)的進(jìn)程投入運(yùn)行。就緒進(jìn)程的管理與調(diào)度PKE的操作系統(tǒng)設(shè)計(jì)了一個(gè)非常簡單的就緒隊(duì)列管理。將一個(gè)進(jìn)程加入就緒隊(duì)列,可以調(diào)用insert_to_ready_queue()函數(shù):若就緒隊(duì)列為空,將本進(jìn)程作為就緒隊(duì)列頭。若就緒隊(duì)列非空,則將本進(jìn)程加入就緒隊(duì)尾。PKE內(nèi)核通過調(diào)用schedule()函數(shù)來完成進(jìn)程的選擇和換入:若就緒隊(duì)列空,檢查是否存在未結(jié)束的進(jìn)程。如果有,等待期執(zhí)行結(jié)束;如果無,則啟動(dòng)關(guān)機(jī)程序。若就緒隊(duì)列非空,將就緒隊(duì)列隊(duì)首的進(jìn)程換入執(zhí)行。目錄實(shí)驗(yàn)3的基礎(chǔ)知識(shí)多任務(wù)環(huán)境下進(jìn)程的封裝進(jìn)程的換入與換出就緒進(jìn)程的管理與調(diào)度實(shí)驗(yàn)內(nèi)容lab3_1進(jìn)程創(chuàng)建(fork)lab3_2進(jìn)程yieldlab3_3循環(huán)輪轉(zhuǎn)調(diào)度lab3_1進(jìn)程創(chuàng)建(fork)給定應(yīng)用預(yù)期輸出lab3_1進(jìn)程創(chuàng)建(fork)實(shí)驗(yàn)內(nèi)容:主進(jìn)程調(diào)用fork()函數(shù)試圖創(chuàng)建一個(gè)子進(jìn)程,但是應(yīng)用程序的fork動(dòng)作并未將子進(jìn)程給創(chuàng)建出來并投入運(yùn)行。修改kernel/process.c文件中的do_fork()函數(shù)。對于父進(jìn)程的代碼段,通過映射的辦法,將子進(jìn)程中對應(yīng)的邏輯地址空間映射到其父進(jìn)程中裝載代碼段的物理頁面。lab3_2進(jìn)程yield給定應(yīng)用預(yù)期輸出lab3_2進(jìn)程yield實(shí)驗(yàn)內(nèi)容:yield()函數(shù)功能未完善導(dǎo)致使得進(jìn)程無法讓出執(zhí)行權(quán)。完善yield()函數(shù)實(shí)現(xiàn)進(jìn)程執(zhí)行過程中的主動(dòng)釋放CPU的動(dòng)作:將當(dāng)前進(jìn)程置為就緒狀態(tài)(READY);將當(dāng)前進(jìn)程加入到就緒隊(duì)列的隊(duì)尾;轉(zhuǎn)進(jìn)程調(diào)度。lab3_3循環(huán)輪轉(zhuǎn)調(diào)度給定應(yīng)用預(yù)期輸出lab3_3循環(huán)輪轉(zhuǎn)調(diào)度實(shí)驗(yàn)內(nèi)容:兩個(gè)進(jìn)程在執(zhí)行各自循環(huán)體時(shí),都沒有主動(dòng)釋放CPU的動(dòng)作。這樣的設(shè)計(jì)會(huì)導(dǎo)致某個(gè)進(jìn)程長期占據(jù)CPU,而另一個(gè)進(jìn)程無法得到執(zhí)行。通過利用時(shí)鐘中斷來實(shí)現(xiàn)進(jìn)程的循環(huán)輪轉(zhuǎn)調(diào)度,避免由于一個(gè)進(jìn)程的執(zhí)行體過長,導(dǎo)致系統(tǒng)中其他進(jìn)程無法得到調(diào)度的問題!lab3_challenge1進(jìn)程等待和數(shù)據(jù)段復(fù)制給定應(yīng)用預(yù)期輸出lab3_challenge1進(jìn)程等待和數(shù)據(jù)段復(fù)制實(shí)驗(yàn)內(nèi)容:通過修改PKE內(nèi)核和系統(tǒng)調(diào)用,為用戶程序提供wait函數(shù)的功能,wait函數(shù)接受一個(gè)參數(shù)pid:當(dāng)pid為-1時(shí),父進(jìn)程等待任意一個(gè)子進(jìn)程退出即返回子進(jìn)程的pid;當(dāng)pid大于0時(shí),父進(jìn)程等待進(jìn)程號(hào)為pid的子進(jìn)程退出即返回子進(jìn)程的pid;如果pid不合法或pid大于0且pid對應(yīng)的進(jìn)程不是當(dāng)前進(jìn)程的子進(jìn)程,返回-1。補(bǔ)充do_fork函數(shù),實(shí)驗(yàn)3_1實(shí)現(xiàn)了代碼段的復(fù)制,你需要繼續(xù)實(shí)現(xiàn)數(shù)據(jù)段的復(fù)制并保證fork后父子進(jìn)程的數(shù)據(jù)段相互獨(dú)立。lab3_challenge2實(shí)現(xiàn)信號(hào)量給定應(yīng)用預(yù)期輸出……lab3_challenge2實(shí)現(xiàn)信號(hào)量實(shí)驗(yàn)內(nèi)容:以上程序通過信號(hào)量的增減,控制主進(jìn)程和兩個(gè)子進(jìn)程的輸出按主進(jìn)程,第一個(gè)子進(jìn)程,第二個(gè)子進(jìn)程,主進(jìn)程,第一個(gè)子進(jìn)程,第二個(gè)子進(jìn)程……這樣的順序輪流輸出。為了實(shí)現(xiàn)進(jìn)程同步功能,你需要實(shí)現(xiàn)信號(hào)量的分配、釋放和PV操作。lab3_challenge3寫時(shí)復(fù)制(CopyOnWrite)給定應(yīng)用預(yù)期輸出……lab3_challenge3寫時(shí)復(fù)制(CopyOnWrite)實(shí)驗(yàn)內(nèi)容:以上程序執(zhí)行如下操作:在父進(jìn)程的堆上申請一片區(qū)域,并輸出其
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 衛(wèi)生院勞動(dòng)合同模板
- 勞動(dòng)合同變更協(xié)議書
- 酒水銷售協(xié)議合同范本
- 物理真題:2024年高考遼寧卷物理真題
- 2024年中考物理(長沙卷)真題詳細(xì)解讀及評析
- 進(jìn)戶門購銷合同
- 2025標(biāo)準(zhǔn)網(wǎng)站開發(fā)合同
- 2025軟件購買合同
- 育兒嫂家政服務(wù)勞動(dòng)合同協(xié)議
- 技能培訓(xùn)對員工職業(yè)素質(zhì)的影響
- 山東省濰坊市2024-2025學(xué)年高三上學(xué)期期末 地理試題(含答案)
- 微整培訓(xùn)課件
- SYT 0447-2014《 埋地鋼制管道環(huán)氧煤瀝青防腐層技術(shù)標(biāo)準(zhǔn)》
- 第19章 一次函數(shù) 單元整體教學(xué)設(shè)計(jì) 【 學(xué)情分析指導(dǎo) 】 人教版八年級(jí)數(shù)學(xué)下冊
- 電梯結(jié)構(gòu)與原理-第2版-全套課件
- IEC-62368-1-差異分享解讀
- 2022-2023學(xué)年廣東省佛山市順德區(qū)高三(下)模擬英語試卷
- 節(jié)后復(fù)工培訓(xùn)內(nèi)容五篇
- GB/T 33322-2016橡膠增塑劑芳香基礦物油
- GA 1051-2013槍支彈藥專用保險(xiǎn)柜
- 某水毀公路維修工程施工方案
評論
0/150
提交評論