




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
LAB3試驗匯報試驗目的:理解虛擬內(nèi)存的PageFault異常處理實現(xiàn)理解頁替代算法在操作系統(tǒng)中的實現(xiàn)試驗內(nèi)容:本次試驗是在試驗二的基礎上,借助于頁表機制和試驗一中波及的中斷異常處理機制,完畢Page Fault異常處理和FIFO頁替代算法的實現(xiàn),結合磁盤提供的緩存空間,從而可以支持虛存管理,提供一種比實際物理內(nèi)存空間“更大”的虛擬內(nèi)存空間給系統(tǒng)使用。這個試驗與實際操作系統(tǒng)中的實現(xiàn)比較起來要簡樸,不過需要理解試驗一和試驗二的詳細實現(xiàn)。實際操作系統(tǒng)系統(tǒng)中的虛擬內(nèi)存管理設計與實現(xiàn)是相稱復雜的,波及到與進程管理系統(tǒng)、文獻系統(tǒng)等的交叉訪問。假如大家有余力,可以嘗試完畢擴展練習,實現(xiàn)extendedclock頁替代算法。練習練習0:填寫已經(jīng)有試驗本試驗依賴試驗1/2。請把你做的試驗1/2的代碼填入本試驗中代碼中有“LAB1”,“LAB2”的注釋對應部分。練習1:給未被映射的地址映射上物理頁完畢do_pgfault(mm/vmm.c)函數(shù),給未被映射的地址映射上物理頁。設置訪問權限 的時候需要參照頁面所在VMA的權限,同步需要注意映射物理頁時需要操作內(nèi)存控制 構造所指定的頁表,而不是內(nèi)核的頁表。注意:在LAB2 EXERCISE 1處填寫代碼。執(zhí)行makeqemu後,假如通過check_pgfault函數(shù)的測試後,會有“check_pgfault()succeeded!”的輸出,表達練習1基本對的。請在試驗匯報中簡要闡明你的設計實現(xiàn)過程。請回答如下問題:請描述頁目錄項(Pag Director Entry)和頁表(Page Table Entry)中構成部分對ucore實現(xiàn)頁替代算法的潛在用處。假如ucore的缺頁服務例程在執(zhí)行過程中訪問內(nèi)存,出現(xiàn)了頁訪問異常,請問硬件要做哪些事情?問題分析:當啟動分頁機制後來,假如一條指令或數(shù)據(jù)的虛擬地址所對應的物理頁不在內(nèi)存中,或者訪問權限不夠,那么就會產(chǎn)生頁錯誤異常。其詳細原因有如下三點:頁表項全為0——虛擬地址與物理地址為建立映射關系或已被撤銷。物理頁面不在內(nèi)存中——需要進行換頁機制。訪問權限不夠——應當報錯。根據(jù)以上三點錯誤原因,完畢頁錯誤處理函數(shù)do——pgfault()。大體思緒:do_pgfault()函數(shù)從CR2寄存器中獲取頁錯誤異常的虛擬地址,根據(jù)errorcode來查找這個虛擬地址與否在某一種VMA的地址范圍內(nèi),并且具有對的的權限。假如滿足上述兩個規(guī)定,則需要為分派一種物理頁。程序代碼:Kern/mm/vmm.c中do_pgfault()函數(shù)的EXERCISE1修改如下://嘗試找到pte,假如對應的頁表項PT不存在則創(chuàng)立一種//這裏調(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){//嘗試查找頁表入口cprintf("get_pteindo_pgfaultfailed\n");//假如找不到入口,是非法訪問,退出gotofailed;}//假如物理地址不存在,則建立一種邏輯地址和物理地址的映射//perm為VMA的權限if(*ptep==0){//嘗試申請一種頁,假如申請失敗就是內(nèi)存局限性了,退出if(pgdir_alloc_page(mm->pgdir,addr,perm)==NULL){cprintf("pgdir_alloc_pageindo_pgfaultfailed\n");gotofailed;}}思索題:1.請描述頁目錄項(PageDirectorEntry)和頁表(PageTableEntry)中構成部分對ucore實現(xiàn)頁替代算法的潛在用處。Ans. 頁目錄項(pgdir)作為一種雙向鏈表存儲了目前所有的頁的物理地址和邏輯地址的對應,即在實內(nèi)存中的所有頁,替代算法中被換出的頁從pgdir中選出。頁表(pte)則存儲了替代算法中被換入的頁的信息,替代後會將其映射到一物理地址。2.假如ucore的缺頁服務例程在執(zhí)行過程中訪問內(nèi)存,出現(xiàn)了頁訪問異常,請問硬件要做哪些事情?Ans. 產(chǎn)生頁訪問異常後,CPU把引起頁訪問異常的線性地址裝到寄存器CR2中,并給出了出錯碼errorCode,闡明了頁訪問異常的類型。ucoreOS會把這個值保留在structtrapframe中tf_err組員變量中。而中斷服務例程會調(diào)用頁訪問異常處理函數(shù)do_pgfault進行詳細處理。練習2:補充完畢基于FIFO的頁面替代算法(需要編程)完畢vmm.c中的do_pgfault函數(shù),并且在實現(xiàn)FIFO算法的swap_fifo.c中完畢map_swappable和swap_out_vistim函數(shù)。通過對swap的測試。注意:在LAB2 EXERCISE 2處填寫代碼。執(zhí)行makeqemu後,假如通過check_swap函數(shù)的測試後,會有“check_swap() succeeded!”的輸出,表達練習2基本對的。請在試驗匯報中簡要闡明你的設計實現(xiàn)過程。請在試驗匯報中回答如下問題:假如要在ucore上實現(xiàn)"extended clock頁替代算法"請給你的設計方案,既有的swap_manager框架與否足以支持在ucore中實現(xiàn)此算法?假如是,請給你的設計方案。假如不是,請給出你的新的擴展和基此擴展的設計方案。并需要回答如下問題需要被換出的頁的特性是什么?在ucore中怎樣判斷具有這樣特性的頁?何時進行換入和換出操作?問題分析:根據(jù)練習1,當頁錯誤異常發(fā)生時,有也許是由于頁面保留在swap區(qū)或者磁盤文獻上導致的,練習2需要運用頁面替代算法處理這個問題。大體思緒:頁面替代重要分為兩個方面,頁面換出和頁面換入。頁面換入重要在vmm.c中的do_pgfault()函數(shù)實現(xiàn):頁面換出重要在swap_fifo.c中的swap_out_vistim()函數(shù)實現(xiàn)。在換入時,需要先檢查產(chǎn)生訪問異常的地址與否屬于某個vma表達的合法虛擬地址,并且保留在硬盤的swap文獻中(對應的PTE的高24位不為0)。假如滿足以上兩點,則執(zhí)行swap_in()函數(shù)換入頁面。換出則相對簡樸,當申請空閑頁面時,alloc_pages()函數(shù)不能獲得空閑頁,則需要調(diào)用swap_out()函數(shù)函數(shù)換出不常用的頁面。程序代碼:Kern/mm/vmm.c中do_pgfault()函數(shù)的EXERCISE2修改如下:else{//假如pte是需要互換的表項,那么就從硬盤的物理地址將數(shù)據(jù)讀到頁中//然後調(diào)用page_insert()建立物理地址和邏輯地址映射if(swap_init_ok){structPage*page=NULL; //根據(jù)mm構造和addr地址,嘗試將硬盤中的內(nèi)容換入至page中//此時的page還沒有加入到隊列中if((ret=swap_in(mm,addr,&page))!=0){//ret=0表達swap_in()正常運行結束cprintf("swap_inindo_pgfaultfailed\n");gotofailed;}//建立虛擬地址合物理地址之間的對應關系page_insert(mm->pgdir,page,addr,perm);//將此頁面設置成可互換的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){//將近來被用到的頁面添加到算法所維護的次序隊列 //找到pra_list_head隊列l(wèi)ist_entry_t*head=(list_entry_t*)mm->sm_priv;//找到被換入的頁表項list_entry_t*entry=&(>pra_page_link);assert(entry!=NULL&&head!=NULL);/*LAB3EXERCISE2:YOURCODE*///將近來分派的頁插入到pra_list_head隊列的尾部. list_add_before(head,entry);return0;}_fifo_swap_out_victim(structmm_struct*mm,structPage**ptr_page,intin_tick){//查詢哪個頁面需要被換出 //找到pra_list_head隊列l(wèi)ist_entry_t*head=(list_entry_t*)mm->sm_priv;assert(head!=NULL);assert(in_tick==0);//選擇應當被換出的頁表,即FIFO中最早調(diào)入的頁表 list_entry_t*le=head->next; assert(le!=head);/*LAB3EXERCISE2:YOURCODE*///將換出的頁表從pra_list_head隊列中刪除 structPage*p=le2page(le,pra_page_link); list_del(le); assert(p!=NULL);//將頁的地址的地址賦值給ptr_page *ptr_page=p;return0;}思索題:假如要在ucore上實現(xiàn)"extendedclock頁替代算法"請給你的設計方案,既有的swap_manager框架與否足以支持在ucore中實現(xiàn)此算法?假如是,請給你的設計方案。假如不是,請給出你的新的擴展和基此擴展的設計方案。答:目前的swap_manager框架足以支持在ucore中實現(xiàn)extendedclock算法。在kern/mm/mmu.h文獻中有如下定義:#definePTE_A0x020//Accesseed因此(*ptep&PTE_A)即可以表明該頁與否被訪問過,由此實現(xiàn)extendedclock。于是對kern/mm/vmm.h做對應的修改:_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)){ //未被訪問 list_del(le); assert(p!=NULL); *ptr_page=p; return0; } *ptep^=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; }}需要被換出的頁的特性是什么?答:在FIFO中,需要被換出的頁是目前所有頁中最早被調(diào)入的那一頁。在ucore中怎樣判斷具有這樣特性的頁?答:需要被換出的頁位于pra_list_head隊列的前端,即mm->sm_priv->next指示的那一頁。何時進行換入和換出操作?答:當需要調(diào)用的頁不在頁表中時,并且在頁表已滿的狀況下,需要進行換入和換出操作。擴展練習Challenge:實現(xiàn)識別dirtybit的extended clock頁替代算法(需要編程)問題分析:算法根據(jù)頁面近期與否被修改從而決定該頁面與否應當被換出。因此在查詢空閑頁時,需要加上對dirtybit的判斷。大體思緒:當操作系統(tǒng)需要淘汰頁時,對目前指針指向的頁所對應的頁表項進行查詢,假如dirtybit為0,則把此頁換出到硬盤上;假如dirtybit為1,則將dirtybit置為0,繼續(xù)訪問下一種頁。程序代碼:相比較FIFO的操作,dirtybit的替代算法只需要識別出哪些頁被訪問過,以及哪些頁被修改正即可。在kern/mm/mmu.h文獻下有如下的定義:#definePTE_A0x020//Accessed#definePTE_D0x040//Dirty其中PTE_A和PTE_D分別是表達訪問和修改的標識位,因此與*ptep求與即可判斷頁與否被訪問或修改正。首先根據(jù)基礎的extendedclock算法,未被訪問的頁應優(yōu)先考慮換出;在此基礎上,由于被修改的也需要被寫會硬盤,因此未被修改的頁應當有限換出。因此采用多輪循環(huán)。只需要修改kern/mm/vmm.h中的_fifo_swap_out_victim()函數(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指針指向最先進入的頁面 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)&&!(*ptep&PTE_D)){ //未被訪問,未被修改 //假如dirtybit為0,換出//將頁面從隊列中刪除list_del(le); assert(p!=NULL);//將這一頁的地址存儲在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)){ //未被訪問,已被修改 list_del(le); assert(p!=NULL); *ptr_page=p; return0; } *ptep^=PTE_A; //頁被訪問過則將PTE_A位置0 le=le->next; } le=le->next; while(le!=head){ structPage*p=le2page(le,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能建筑系統(tǒng)的設計與實施策略研究
- 寧夏成立精密金屬零部件公司可行性報告模板范本
- 2024-2025學年高中歷史第六單元現(xiàn)代世界的科技與文化第28課國運興衰系于教育課后篇鞏固探究岳麓版必修3
- 2024-2025學年高中政治專題1.1揭開貨幣神秘的面紗講基礎版含解析必修1
- 2024-2025學年高中政治第三單元思想方法與創(chuàng)新意識第九課唯物辯證法的實質(zhì)與核心第1課時矛盾是事物發(fā)展的源泉和動力課時精練含解析新人教版必修4
- 2024-2025學年高中歷史第三單元近代西方資本主義政治制度的確立與發(fā)展第9課資本主義政治制度在歐洲大陸的擴展教案含解析新人教版必修1
- 2024-2025版高中歷史第四單元近代中國反侵略求民主的潮流17解放戰(zhàn)爭練習含解析新人教版必修1
- 2024-2025學年高中政治第一單元公民的政治生活第一課生活在人民當家作主的國家課時一人民民主專政:本質(zhì)是人民當家作主課時精練含解析新人教版必修2
- 2024-2025學年高中數(shù)學課時分層作業(yè)25直線與圓的位置關系含解析新人教A版必修2
- 2024-2025學年高中生物第三章遺傳和染色體第一節(jié)基因的分離定律第1課時基因的分離定律一知能演練輕巧奪冠蘇教版必修2
- 人力資源外包合同范本
- 成人重癥患者顱內(nèi)壓增高防控護理專家共識2024
- 110KV送出線路工程施工組織設計方案和對策
- 城市交通系統(tǒng)中的空間正義問題-深度研究
- 2024年青島職業(yè)技術學院高職單招語文歷年參考題庫含答案解析
- 《職業(yè)道德與法治》開學第一課(導言)(課件)-【中職專用】中職思想政治《職業(yè)道德與法治》高效課堂課件+教案(高教版2023·基礎模塊)
- (正式版)JBT 10437-2024 電線電纜用可交聯(lián)聚乙烯絕緣料
- 自動化物料編碼規(guī)則
- 小學音樂教材分析
- 委托收款三方協(xié)議
- 黃岡市2021-2022高一上學期期末考試數(shù)學試題及答案
評論
0/150
提交評論