版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
LAB3實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)?zāi)康模毫私馓摂M內(nèi)存的PageFault異常處理實(shí)現(xiàn)了解頁(yè)替換算法在操作系統(tǒng)中的實(shí)現(xiàn)實(shí)驗(yàn)內(nèi)容:本次實(shí)驗(yàn)是在實(shí)驗(yàn)二的基礎(chǔ)上,借助于頁(yè)表機(jī)制和實(shí)驗(yàn)一中涉及的中斷異常處理機(jī)制,完成PageFault異常處理和FIFO頁(yè)替換算法的實(shí)現(xiàn),結(jié)合磁盤提供的緩存空間,從而能夠支持虛存管理,提供一個(gè)比實(shí)際物理內(nèi)存空間“更大”的虛擬內(nèi)存空間給系統(tǒng)使用。這個(gè)實(shí)驗(yàn)與實(shí)際操作系統(tǒng)中的實(shí)現(xiàn)比較起來(lái)要簡(jiǎn)單,不過(guò)需要了解實(shí)驗(yàn)一和實(shí)驗(yàn)二的具體實(shí)現(xiàn)。實(shí)際操作系統(tǒng)系統(tǒng)中的虛擬內(nèi)存管理設(shè)計(jì)與實(shí)現(xiàn)是相當(dāng)復(fù)雜的,涉及到與進(jìn)程管理系統(tǒng)、文件系統(tǒng)等的交叉訪問(wèn)。如果大家有余力,可以嘗試完成擴(kuò)展練習(xí),實(shí)現(xiàn)extendedclock頁(yè)替換算法。一.練習(xí)練習(xí)0:填寫(xiě)已有實(shí)驗(yàn)本實(shí)驗(yàn)依賴實(shí)驗(yàn)1/2。請(qǐng)把你做的實(shí)驗(yàn)1/2的代碼填入本實(shí)驗(yàn)中代碼中有“LAB1”,“LAB2”的注釋相應(yīng)部分。練習(xí)1:給未被映射的地址映射上物理頁(yè)完成do_pgfault(mm/vmm.c)函數(shù),給未被映射的地址映射上物理頁(yè)。設(shè)置訪問(wèn)權(quán)限的時(shí)候需要參考頁(yè)面所在VMA的權(quán)限,同時(shí)需要注意映射物理頁(yè)時(shí)需要操作內(nèi)存控制 結(jié)構(gòu)所指定的頁(yè)表,而不是內(nèi)核的頁(yè)表。注意:在LAB2EXERCISE1處填寫(xiě)代碼。執(zhí)行makeqemu后,如果通過(guò)check_pgfault函數(shù)的測(cè)試后,會(huì)有“check_pgfault()succeeded!”的輸出,表示練習(xí)1基本正確。請(qǐng)?jiān)趯?shí)驗(yàn)報(bào)告中簡(jiǎn)要說(shuō)明你的設(shè)計(jì)實(shí)現(xiàn)過(guò)程。請(qǐng)回答如下問(wèn)題:請(qǐng)描述頁(yè)目錄項(xiàng)(PagDirectorEntry)和頁(yè)表(PageTable Entry)中組成部分對(duì)ucore實(shí)現(xiàn)頁(yè)替換算法的潛在用處。如果ucore的缺頁(yè)服務(wù)例程在執(zhí)行過(guò)程中訪問(wèn)內(nèi)存,出現(xiàn)了頁(yè)訪問(wèn)異常,請(qǐng)問(wèn)硬件要做哪些事情?問(wèn)題分析:當(dāng)啟動(dòng)分頁(yè)機(jī)制以后,如果一條指令或數(shù)據(jù)的虛擬地址所對(duì)應(yīng)的物理頁(yè)不在內(nèi)存中,或者訪問(wèn)權(quán)限不夠,那么就會(huì)產(chǎn)生頁(yè)錯(cuò)誤異常。其具體原因有以下三點(diǎn):.頁(yè)表項(xiàng)全為0——虛擬地址與物理地址為建立映射關(guān)系或已被撤銷。.物理頁(yè)面不在內(nèi)存中一一需要進(jìn)行換頁(yè)機(jī)制。.訪問(wèn)權(quán)限不夠一一應(yīng)當(dāng)報(bào)錯(cuò)。根據(jù)以上三點(diǎn)錯(cuò)誤原因,完成頁(yè)錯(cuò)誤處理函數(shù)do——pgfault()。大體思路:do_pgfault()函數(shù)從CR2寄存器中獲取頁(yè)錯(cuò)誤異常的虛擬地址,根據(jù)errorcode來(lái)查找這個(gè)虛擬地址是否在某一個(gè)VMA的地址范圍內(nèi),并且具有正確的權(quán)限。如果滿足上述兩個(gè)要求,則需要為分配一個(gè)物理頁(yè)。程序代碼:Kern/mm/vmm.c中do_pgfault()函數(shù)的EXERCISE1修改如下:〃嘗試找到pte,如果對(duì)應(yīng)的頁(yè)表項(xiàng)PT不存在則創(chuàng)建一個(gè)〃這里調(diào)用函數(shù)get_pte(pde_t*pgdir,uintptr_tla,boolcreate),其中create=1表示若PT不存在則允許創(chuàng)建if((ptep=get_pte(mm->pgdir,addr,1))==NULL)//嘗試查找頁(yè)表入口cprintf("get_pteindo_pgfaultfailed\n")〃如果找不到入口,是非法訪問(wèn),退出gotofailed;)//如果物理地址不存在,則建立一個(gè)邏輯地址和物理地址的映射//perm為VMA的權(quán)限if(*ptep==0){〃嘗試申請(qǐng)一個(gè)頁(yè),如果申請(qǐng)失敗就是內(nèi)存不足了,退出if(pgdir_alloc_page(mm->pgdir,addr,perm)==NULL){cprintf("pgdir_alloc_pageindo_pgfaultfailed\n");gotofailed;))思考題:.請(qǐng)描述頁(yè)目錄項(xiàng)(PageDirectorEntry)和頁(yè)表(PageTableEntry)中組成部分對(duì)ucore實(shí)現(xiàn)頁(yè)替換算法的潛在用處。Ans.頁(yè)目錄項(xiàng)(pgdir)作為一個(gè)雙向鏈表存儲(chǔ)了目前所有的頁(yè)的物理地址和邏輯地址的對(duì)應(yīng),即在實(shí)內(nèi)存中的所有頁(yè),替換算法中被換出的頁(yè)從pgdir中選出。頁(yè)表(pte)則存儲(chǔ)了替換算法中被換入的頁(yè)的信息,替換后會(huì)將其映射到一物理地址。.如果ucore的缺頁(yè)服務(wù)例程在執(zhí)行過(guò)程中訪問(wèn)內(nèi)存,出現(xiàn)了頁(yè)訪問(wèn)異常,請(qǐng)問(wèn)硬件要做哪些事情?Ans.產(chǎn)生頁(yè)訪問(wèn)異常后,CPU把引起頁(yè)訪問(wèn)異常的線性地址裝到寄存器CR2中,并給出了出錯(cuò)碼errorCode,說(shuō)明了頁(yè)訪問(wèn)異常的類型。ucoreOS會(huì)把這個(gè)值保存在structtrapframe中tf_err成員變量中。而中斷服務(wù)例程會(huì)調(diào)用頁(yè)訪問(wèn)異常處理函數(shù)do_pgfault進(jìn)行具體處理。練習(xí)2:補(bǔ)充完成基于FIFO的頁(yè)面替換算法(需要編程)完成vmm.c中的do_pgfault函數(shù),并且在實(shí)現(xiàn)FIFO算法的swap_fifo.c中完成map_swappable和swap_out_vistim函數(shù)。通過(guò)對(duì)swap的測(cè)試。注意:在LAB2EXERCISE2處填寫(xiě)代碼。執(zhí)行makeqemu后,如果通過(guò)check_swap函數(shù)的測(cè)試后,會(huì)有“check_swap()succeeded!”的輸出,表示練習(xí)2基本正確。請(qǐng)?jiān)趯?shí)驗(yàn)報(bào)告中簡(jiǎn)要說(shuō)明你的設(shè)計(jì)實(shí)現(xiàn)過(guò)程。請(qǐng)?jiān)趯?shí)驗(yàn)報(bào)告中回答如下問(wèn)題:?如果要在ucore上實(shí)現(xiàn)"extended clock頁(yè)替換算法"請(qǐng)給你的設(shè)計(jì)方案,現(xiàn)有的swap_manager框架是否足以支持在ucore中實(shí)現(xiàn)此算法?如果是,請(qǐng)給你的設(shè)計(jì)方案。如果不是,請(qǐng)給出你的新的擴(kuò)展和基此擴(kuò)展的設(shè)計(jì)方案。并需要回答如下問(wèn)題需要被換出的頁(yè)的特征是什么?在ucore中如何判斷具有這樣特征的頁(yè)?何時(shí)進(jìn)行換入和換出操作?問(wèn)題分析:根據(jù)練習(xí)1,當(dāng)頁(yè)錯(cuò)誤異常發(fā)生時(shí),有可能是因?yàn)轫?yè)面保存在swap區(qū)或者磁盤文件上造成的,練習(xí)2需要利用頁(yè)面替換算法解決這個(gè)問(wèn)題。大體思路:頁(yè)面替換主要分為兩個(gè)方面,頁(yè)面換出和頁(yè)面換入。頁(yè)面換入主要在vmm.c中的do_pgfault()函數(shù)實(shí)現(xiàn):頁(yè)面換出主要在swap_fifo.c中的swap_out_vistim()函數(shù)實(shí)現(xiàn)。在換入時(shí),需要先檢查產(chǎn)生訪問(wèn)異常的地址是否屬于某個(gè)vma表示的合法虛擬地址,并且保存在硬盤的swap文件中(對(duì)應(yīng)的PTE的高24位不為0)。如果滿足以上兩點(diǎn),則執(zhí)行swap_in()函數(shù)換入頁(yè)面。換出則相對(duì)簡(jiǎn)單,當(dāng)申請(qǐng)空閑頁(yè)面時(shí),alloc_pages()函數(shù)不能獲得空閑頁(yè),則需要調(diào)用swap_out()函數(shù)函數(shù)換出不常用的頁(yè)面。程序代碼:Kern/mm/vmm.c中do_pgfault()函數(shù)的EXERCISE2修改如下:else{//如果pte是需要交換的表項(xiàng),那么就從硬盤的物理地址將數(shù)據(jù)讀到頁(yè)中〃然后調(diào)用page_insert()建立物理地址和邏輯地址映射if(swap_init_ok){structPage*page=NULL;//根據(jù)mm結(jié)構(gòu)和addr地址,嘗試將硬盤中的內(nèi)容換入至page中//此時(shí)的page還沒(méi)有加入到隊(duì)列中if((ret=swap_in(mm,addr,&page))!=0)//ret=0表示swap_in()正常運(yùn)行結(jié)束cprintf("swap_inindo_pgfaultfailed\n");gotofailed;)//建立虛擬地址合物理地址之間的對(duì)應(yīng)關(guān)系page_insert(mm->pgdir,page,addr,perm);//將此頁(yè)面設(shè)置成可交換的swap_map_swappable(mm,addr,page,1);)else{cprintf("noswap_init_okbutptepis%x,failed\n",*ptep);gotofailed;)Kern/mm/swap_fifo.c中的EXERCISE2修改如下:_fifo_map_swappable(structmm_struct*mm,uintptr_taddr,structPage*page,intswap_in){〃將最近被用到的頁(yè)面添加到算法所維護(hù)的次序隊(duì)列//找至Upra_list_head隊(duì)列l(wèi)ist_entry_t*head=(list_entry_t*)mm->sm_priv;//找到被換入的頁(yè)表項(xiàng)list_entry_t*entry=&(>pra_page_link);assert(entry!=NULL&&head!=NULL);/*LAB3EXERCISE2:YOURCODE*/〃將最近分配的頁(yè)插入到pra_list_head隊(duì)列的尾部.list_add_before(head,entry);return0;_fifo_swap_out_victim(structmm_struct*mm,structPage**ptr_page,intin_tick){〃查詢哪個(gè)頁(yè)面需要被換出〃找至Upra_list_head隊(duì)列l(wèi)ist_entry_t*head=(list_entry_t*)mm->sm_priv;assert(head!=NULL);assert(in_tick==0);〃選擇應(yīng)該被換出的頁(yè)表,即FIFO中最早調(diào)入的頁(yè)表list_entry_t*le=head->next;assert(le!=head);/*LAB3EXERCISE2:YOURCODE*/〃將換出的頁(yè)表從pra_list_head隊(duì)列中刪除structPage*p=le2page(le,pra_page_link);list_del(le);assert(p!=NULL);//將頁(yè)的地址的地址賦值給ptr_page*ptr_page=p;return0;)思考題:如果要在ucore上實(shí)現(xiàn)"extendedclock頁(yè)替換算法”請(qǐng)給你的設(shè)計(jì)方案,現(xiàn)有的swap_manager框架是否足以支持在ucore中實(shí)現(xiàn)此算法?如果是,請(qǐng)給你的設(shè)計(jì)方案。如果不是,請(qǐng)給出你的新的擴(kuò)展和基此擴(kuò)展的設(shè)計(jì)方案。答:目前的swap_manager框架足以支持在ucore中實(shí)現(xiàn)extendedclock算法。在kern/mm/mmu.h文件中有如下定義:#definePTE_A 0x020 //Accesseed所以(*ptep&PTE_A)即可以表明該頁(yè)是否被訪問(wèn)過(guò),由此實(shí)現(xiàn)extendedclock。于是對(duì)kern/mm/vmm.h做相應(yīng)的修改:_fifo_swap_out_victim(structmm_struct*mm,structPage**ptr_page,intin_tick){list_entry_t*head=(list_entry_t*)mm->sm_priv;assert(head!=NULL);assert(in_tick==0);list_entry_t*le=head->next;assert(head!=le);while(le!=head){structPage*p=le2page(le,pra_page_link);pte_t*ptep=get_pte(mm->pgdir,p->pra_vaddr,0);if(!(*ptep&PTE_A)){〃未被訪問(wèn)list_del(le);assert(p!=NULL);*ptr_page=p;return0;*ptepA=PTE_A;le=le->next;)le=le->next;while(le!=head){structPage*p=le2page(le,pra_page_link);pte_t*ptep=get_pte(mm->pgdir,p->pra_vaddr,0);list_del(le);assert(p!=NULL);*ptr_page=p;return0;))需要被換出的頁(yè)的特征是什么?答:在FIFO中,需要被換出的頁(yè)是目前所有頁(yè)中最早被調(diào)入的那一頁(yè)。在ucore中如何判斷具有這樣特征的頁(yè)?答:需要被換出的頁(yè)位于pra_list_head隊(duì)列的前端,即mm->sm_priv->next指示的那一頁(yè)。③何時(shí)進(jìn)行換入和換出操作?答:當(dāng)需要調(diào)用的頁(yè)不在頁(yè)表中時(shí),并且在頁(yè)表已滿的情況下,需要進(jìn)行換入和換出操作。擴(kuò)展練習(xí)Challenge:實(shí)現(xiàn)識(shí)別dirtybit的extendedclock頁(yè)替換算法(需要編程)問(wèn)題分析:算法根據(jù)頁(yè)面近期是否被修改從而決定該頁(yè)面是否應(yīng)當(dāng)被換出。所以在查詢空閑頁(yè)時(shí),需要加上對(duì)dirtybit的判斷。大體思路:當(dāng)操作系統(tǒng)需要淘汰頁(yè)時(shí),對(duì)當(dāng)前指針指向的頁(yè)所對(duì)應(yīng)的頁(yè)表項(xiàng)進(jìn)行查詢,如果dirtybit為0,則把此頁(yè)換出到硬盤上;如果dirtybit為1,則將dirtybit置為0,繼續(xù)訪問(wèn)下一個(gè)頁(yè)。程序代碼:相比較FIFO的操作,dirtybit的替換算法只需要識(shí)別出哪些頁(yè)被訪問(wèn)過(guò),以及哪些頁(yè)被修改過(guò)即可。在kern/mm/mmu.h文件下有如下的定義:#definePTE_A 0x020 //Accessed#definePTE_D 0x040 //Dirty其中PTE_A和PTE_D分別是表示訪問(wèn)和修改的標(biāo)識(shí)位,因此與*ptep求與即可判斷頁(yè)是否被訪問(wèn)或修改過(guò)。首先根據(jù)基礎(chǔ)的extendedclock算法,未被訪問(wèn)的頁(yè)應(yīng)優(yōu)先考慮換出;在此基礎(chǔ)上,由于被修改的也需要被寫(xiě)會(huì)硬盤,因此未被修改的頁(yè)應(yīng)該有限換出。因此采用多輪循環(huán)。只需要修改kern/mm/vmm.h中的_fifo_swap_out_victim()函數(shù)即可實(shí)現(xiàn):_fifo_swap_out_victim(structmm_struct*mm,structPage**ptr_page,intin_tick){list_entry_t*head=(list_entry_t*)mm->sm_priv;assert(head!=NULL);assert(in_tick==0);〃將head指針指向最先進(jìn)入的頁(yè)面list_entry_t*le=head->next;assert(head!=le);〃查找最先進(jìn)入并且未被修改的頁(yè)面while(le!=head){structPage*p=le2page(le,pra_page_link);〃獲取頁(yè)表項(xiàng)pte_t*ptep=get_pte(mm->pgdir,p->pra_vaddr,0);〃判斷獲得的頁(yè)表項(xiàng)是否正確if(!(*ptep&PTE_A)&&!(*ptep&PTE_D)){ 〃未被訪問(wèn),未被修改〃如果dirtybit為0,換出〃將頁(yè)面從隊(duì)列中刪除list_del(le);assert(p!=NULL);〃將這一頁(yè)的地址存儲(chǔ)在prt_page中*ptr_page=p;return0;)le=le->next;)le=le->next;while(le!=head){structPage*p=le2page(le,pra_page_link);pte_t*ptep=get_pte(mm->pgdir,p->pra_vaddr,0);if(!(*ptep&PTE_A)&&(*ptep&PTE_D)){ 〃未被訪問(wèn),已被修改list_del(le);assert(p!=NULL);*ptr_page=p;return0;)*ptepA=PTE_A; 〃頁(yè)被訪問(wèn)過(guò)則將PTE_A位置0le=le->next;)le=le->next;while(le!=head){structPage*p=le2page(le,pra_page_link);pte_t*ptep=get_pte(mm->pgdir,p->pra_vaddr,0);if(!(*ptep&PTE_D)){ 〃未被修改,此時(shí)所有頁(yè)均被訪問(wèn)過(guò),即PTE_A位為0list_del(le);assert(p!=NULL);*ptr_page=p;return0;)le=le->next;)〃如果這行到這里證明找完一圈,所有頁(yè)面都不符合換出條件〃那么強(qiáng)行換出最先進(jìn)入
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年大學(xué)輕工紡織食品專業(yè)大學(xué)物理下冊(cè)開(kāi)學(xué)考試試題C卷-附解析
- 石河子大學(xué)《云計(jì)算概論》2023-2024學(xué)年期末試卷
- 大學(xué)生舉辦母親節(jié)策劃書(shū)集合10篇
- 學(xué)校配套設(shè)施施工組織設(shè)計(jì)
- 石河子大學(xué)《體操》2021-2022學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《農(nóng)村社會(huì)學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《畜產(chǎn)品加工工藝學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽(yáng)理工大學(xué)《模擬電子技術(shù)基礎(chǔ)》2021-2022學(xué)年期末試卷
- 沈陽(yáng)理工大學(xué)《機(jī)械制造基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 收費(fèi)站收費(fèi)班安全培訓(xùn)
- 醫(yī)藥代表拜訪中的客戶需求分析技巧
- 大瀝廢舊金屬行業(yè)分析報(bào)告
- GB/T 27917.3-2023快遞服務(wù)第3部分:服務(wù)環(huán)節(jié)
- 臨床醫(yī)學(xué)職業(yè)素養(yǎng)與職業(yè)道德培訓(xùn)課件
- 火災(zāi)逃生與自救技能培訓(xùn)
- 2022年6月青少年軟件編程(Python)等級(jí)考試二級(jí)【答案版】
- 新高中歷史課標(biāo)思路15.5課件
- 煤氣發(fā)生爐拆除方案
- 債權(quán)人自愿放棄債權(quán)承諾書(shū)
- 國(guó)際經(jīng)濟(jì)與貿(mào)易專業(yè)生涯人物訪談報(bào)告
- xxxx學(xué)校教育事業(yè)統(tǒng)計(jì)工作總結(jié)
評(píng)論
0/150
提交評(píng)論