版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
LAB3試驗匯報試驗目的:理解虛擬內存的PageFault異常處理實現理解頁替代算法在操作系統(tǒng)中的實現試驗內容:本次試驗是在試驗二的基礎上,借助于頁表機制和試驗一中波及的中斷異常處理機制,完畢Page Fault異常處理和FIFO頁替代算法的實現,結合磁盤提供的緩存空間,從而可以支持虛存管理,提供一種比實際物理內存空間“更大”的虛擬內存空間給系統(tǒng)使用。這個試驗與實際操作系統(tǒng)中的實現比較起來要簡樸,不過需要理解試驗一和試驗二的詳細實現。實際操作系統(tǒng)系統(tǒng)中的虛擬內存管理設計與實現是相稱復雜的,波及到與進程管理系統(tǒng)、文獻系統(tǒng)等的交叉訪問。假如大家有余力,可以嘗試完畢擴展練習,實現extendedclock頁替代算法。練習練習0:填寫已經有試驗本試驗依賴試驗1/2。請把你做的試驗1/2的代碼填入本試驗中代碼中有“LAB1”,“LAB2”的注釋對應部分。練習1:給未被映射的地址映射上物理頁完畢do_pgfault(mm/vmm.c)函數,給未被映射的地址映射上物理頁。設置訪問權限 的時候需要參照頁面所在VMA的權限,同步需要注意映射物理頁時需要操作內存控制 構造所指定的頁表,而不是內核的頁表。注意:在LAB2 EXERCISE 1處填寫代碼。執(zhí)行makeqemu後,假如通過check_pgfault函數的測試後,會有“check_pgfault()succeeded!”的輸出,表達練習1基本對的。請在試驗匯報中簡要闡明你的設計實現過程。請回答如下問題:請描述頁目錄項(Pag Director Entry)和頁表(Page Table Entry)中構成部分對ucore實現頁替代算法的潛在用處。假如ucore的缺頁服務例程在執(zhí)行過程中訪問內存,出現了頁訪問異常,請問硬件要做哪些事情?問題分析:當啟動分頁機制後來,假如一條指令或數據的虛擬地址所對應的物理頁不在內存中,或者訪問權限不夠,那么就會產生頁錯誤異常。其詳細原因有如下三點:頁表項全為0——虛擬地址與物理地址為建立映射關系或已被撤銷。物理頁面不在內存中——需要進行換頁機制。訪問權限不夠——應當報錯。根據以上三點錯誤原因,完畢頁錯誤處理函數do——pgfault()。大體思緒:do_pgfault()函數從CR2寄存器中獲取頁錯誤異常的虛擬地址,根據errorcode來查找這個虛擬地址與否在某一種VMA的地址范圍內,并且具有對的的權限。假如滿足上述兩個規(guī)定,則需要為分派一種物理頁。程序代碼:Kern/mm/vmm.c中do_pgfault()函數的EXERCISE1修改如下://嘗試找到pte,假如對應的頁表項PT不存在則創(chuàng)立一種//這裏調用函數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){//嘗試申請一種頁,假如申請失敗就是內存局限性了,退出if(pgdir_alloc_page(mm->pgdir,addr,perm)==NULL){cprintf("pgdir_alloc_pageindo_pgfaultfailed\n");gotofailed;}}思索題:1.請描述頁目錄項(PageDirectorEntry)和頁表(PageTableEntry)中構成部分對ucore實現頁替代算法的潛在用處。Ans. 頁目錄項(pgdir)作為一種雙向鏈表存儲了目前所有的頁的物理地址和邏輯地址的對應,即在實內存中的所有頁,替代算法中被換出的頁從pgdir中選出。頁表(pte)則存儲了替代算法中被換入的頁的信息,替代後會將其映射到一物理地址。2.假如ucore的缺頁服務例程在執(zhí)行過程中訪問內存,出現了頁訪問異常,請問硬件要做哪些事情?Ans. 產生頁訪問異常後,CPU把引起頁訪問異常的線性地址裝到寄存器CR2中,并給出了出錯碼errorCode,闡明了頁訪問異常的類型。ucoreOS會把這個值保留在structtrapframe中tf_err組員變量中。而中斷服務例程會調用頁訪問異常處理函數do_pgfault進行詳細處理。練習2:補充完畢基于FIFO的頁面替代算法(需要編程)完畢vmm.c中的do_pgfault函數,并且在實現FIFO算法的swap_fifo.c中完畢map_swappable和swap_out_vistim函數。通過對swap的測試。注意:在LAB2 EXERCISE 2處填寫代碼。執(zhí)行makeqemu後,假如通過check_swap函數的測試後,會有“check_swap() succeeded!”的輸出,表達練習2基本對的。請在試驗匯報中簡要闡明你的設計實現過程。請在試驗匯報中回答如下問題:假如要在ucore上實現"extended clock頁替代算法"請給你的設計方案,既有的swap_manager框架與否足以支持在ucore中實現此算法?假如是,請給你的設計方案。假如不是,請給出你的新的擴展和基此擴展的設計方案。并需要回答如下問題需要被換出的頁的特性是什么?在ucore中怎樣判斷具有這樣特性的頁?何時進行換入和換出操作?問題分析:根據練習1,當頁錯誤異常發(fā)生時,有也許是由于頁面保留在swap區(qū)或者磁盤文獻上導致的,練習2需要運用頁面替代算法處理這個問題。大體思緒:頁面替代重要分為兩個方面,頁面換出和頁面換入。頁面換入重要在vmm.c中的do_pgfault()函數實現:頁面換出重要在swap_fifo.c中的swap_out_vistim()函數實現。在換入時,需要先檢查產生訪問異常的地址與否屬于某個vma表達的合法虛擬地址,并且保留在硬盤的swap文獻中(對應的PTE的高24位不為0)。假如滿足以上兩點,則執(zhí)行swap_in()函數換入頁面。換出則相對簡樸,當申請空閑頁面時,alloc_pages()函數不能獲得空閑頁,則需要調用swap_out()函數函數換出不常用的頁面。程序代碼:Kern/mm/vmm.c中do_pgfault()函數的EXERCISE2修改如下:else{//假如pte是需要互換的表項,那么就從硬盤的物理地址將數據讀到頁中//然後調用page_insert()建立物理地址和邏輯地址映射if(swap_init_ok){structPage*page=NULL; //根據mm構造和addr地址,嘗試將硬盤中的內容換入至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中最早調入的頁表 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上實現"extendedclock頁替代算法"請給你的設計方案,既有的swap_manager框架與否足以支持在ucore中實現此算法?假如是,請給你的設計方案。假如不是,請給出你的新的擴展和基此擴展的設計方案。答:目前的swap_manager框架足以支持在ucore中實現extendedclock算法。在kern/mm/mmu.h文獻中有如下定義:#definePTE_A0x020//Accesseed因此(*ptep&PTE_A)即可以表明該頁與否被訪問過,由此實現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中,需要被換出的頁是目前所有頁中最早被調入的那一頁。在ucore中怎樣判斷具有這樣特性的頁?答:需要被換出的頁位于pra_list_head隊列的前端,即mm->sm_priv->next指示的那一頁。何時進行換入和換出操作?答:當需要調用的頁不在頁表中時,并且在頁表已滿的狀況下,需要進行換入和換出操作。擴展練習Challenge:實現識別dirtybit的extended clock頁替代算法(需要編程)問題分析:算法根據頁面近期與否被修改從而決定該頁面與否應當被換出。因此在查詢空閑頁時,需要加上對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求與即可判斷頁與否被訪問或修改正。首先根據基礎的extendedclock算法,未被訪問的頁應優(yōu)先考慮換出;在此基礎上,由于被修改的也需要被寫會硬盤,因此未被修改的頁應當有限換出。因此采用多輪循環(huán)。只需要修改kern/mm/vmm.h中的_fifo_swap_out_victim()函數即可實現:_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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語外貿大學南國商學院《蒙臺梭利教育法》2023-2024學年第一學期期末試卷
- 廣東體育職業(yè)技術學院《特殊兒童早期干預》2023-2024學年第一學期期末試卷
- 廣東司法警官職業(yè)學院《通信系統(tǒng)制圖》2023-2024學年第一學期期末試卷
- 廣東食品藥品職業(yè)學院《教師領導力》2023-2024學年第一學期期末試卷
- 廣東女子職業(yè)技術學院《統(tǒng)計學原理實驗》2023-2024學年第一學期期末試卷
- 廣東農工商職業(yè)技術學院《環(huán)境工程項目管理與概預算》2023-2024學年第一學期期末試卷
- 廣東梅州職業(yè)技術學院《油畫速寫》2023-2024學年第一學期期末試卷
- 廣東女子職業(yè)技術學院《小學德育》2023-2024學年第一學期期末試卷
- 廣東理工職業(yè)學院《宏觀經濟學原理(全英文)》2023-2024學年第一學期期末試卷
- 四年級數學(上)計算題專項練習及答案匯編
- 變電檢修班組規(guī)范化建設實施細則
- 佳能相機PowerShot SX60 HS使用說明書
- 《遙感原理與應用》-課程教學大綱
- GB/T 44311-2024適老環(huán)境評估導則
- 計算機組成原理習題答案解析(蔣本珊)
- 板材加工轉讓協(xié)議書模板
- GB 44506-2024人民警察警徽
- 咖啡粉代加工協(xié)議書范本
- 2024年海南省中考歷史試題
- 2024年北京石景山初三九年級上學期期末數學試題和答案
- 智慧管網建設整體解決方案
評論
0/150
提交評論