計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)-基于RISC-V代理內(nèi)核 課件 第五章實(shí)驗(yàn)3:進(jìn)程管理_第1頁
計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)-基于RISC-V代理內(nèi)核 課件 第五章實(shí)驗(yàn)3:進(jìn)程管理_第2頁
計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)-基于RISC-V代理內(nèi)核 課件 第五章實(shí)驗(yàn)3:進(jìn)程管理_第3頁
計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)-基于RISC-V代理內(nèi)核 課件 第五章實(shí)驗(yàn)3:進(jìn)程管理_第4頁
計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)-基于RISC-V代理內(nèi)核 課件 第五章實(shí)驗(yàn)3:進(jìn)程管理_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論