版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、ucore實驗3實驗報告lab3實驗報告實驗目的:了解虛擬內(nèi)存的page fault異常處理實現(xiàn)了解頁替換算法在操作系統(tǒng)中的實現(xiàn)實驗內(nèi)容:本次實驗是在實驗二的基礎上,借助于頁表機制和實驗一中涉及的中斷異常處理機制,完成page f ault異常處理和fifo頁替換算法的實現(xiàn),結(jié)合磁盤提供的緩存空間,從而能夠支持虛存管理,提供一個比實際物理內(nèi)存空間“更大”的虛擬內(nèi)存空間給系統(tǒng)使用。這個實驗與實際操作系統(tǒng)中的實現(xiàn)比較起來要簡單,不過需要了解實驗一和實驗二的具體實現(xiàn)。實際操作系統(tǒng)系統(tǒng)中的虛擬內(nèi)存管理設計與實現(xiàn)是相當復雜的,涉及到與進程管理系統(tǒng)、文件系統(tǒng)等的交叉訪問。如果大家有余力,可以嘗試完成擴展練
2、習,實現(xiàn)extended clock頁替換算法。一練習練習0:填寫已有實驗本實驗依賴實驗1/2。請把你做的實驗1/2的代碼填入本實驗中代碼中有“l(fā)ab1”,“l(fā)ab2”的注釋相應部分。練習1:給未被映射的地址映射上物理頁完成do_pgfault(mm/vmm.c)函數(shù),給未被映射的地址映射上物理頁。設置訪問權(quán)限的時候需要參考頁面所在vma的權(quán)限,同時需要注意映射物理頁時需要操作內(nèi)存控制結(jié)構(gòu)所指定的頁表,而不是內(nèi)核的頁表。注意:在lab2 exercise 1處填寫代碼。執(zhí)行make qemu后,如果通過check_pgfault函數(shù)的測試后,會有“check_pgfault() succeed
3、ed!”的輸出,表示練習1基本正確。請在實驗報告中簡要說明你的設計實現(xiàn)過程。請回答如下問題:請描述頁目錄項(pag director entry)和頁表(page table entry)中組成部分對ucore實現(xiàn)頁替換算法的潛在用處。如果ucore的缺頁服務例程在執(zhí)行過程中訪問內(nèi)存,出現(xiàn)了頁訪問異常,請問硬件要做哪些事情?問題分析:當啟動分頁機制以后,如果一條指令或數(shù)據(jù)的虛擬地址所對應的物理頁不在內(nèi)存中,或者訪問權(quán)限不夠,那么就會產(chǎn)生頁錯誤異常。其具體原因有以下三點:1.頁表項全為0虛擬地址與物理地址為建立映射關系或已被撤銷。2.物理頁面不在內(nèi)存中需要進行換頁機制。3.訪問權(quán)限不夠應當報錯。
4、根據(jù)以上三點錯誤原因,完成頁錯誤處理函數(shù)dopgfault()。大體思路:do_pgfault()函數(shù)從cr2寄存器中獲取頁錯誤異常的虛擬地址,根據(jù)error code來查找這個虛擬地址是否在某一個vma的地址范圍內(nèi),并且具有正確的權(quán)限。如果滿足上述兩個要求,則需要為分配一個物理頁。程序代碼:kern/mm/vmm.c中do_pgfault()函數(shù)的exercise 1修改如下:/嘗試找到pte, 如果對應的頁表項pt不存在則創(chuàng)建一個 /這里調(diào)用函數(shù)get_pte(pde_t *pgdir, uintptr_t la, bool create), 其中create=1表示若pt 不存在則允許創(chuàng)
5、建 if (ptep = get_pte(mm-pgdir, addr, 1) = null) /嘗試查找頁表入口cprintf(get_pte in do_pgfault failedn);/如果找不到入口,是非法訪問,退出goto failed;/如果物理地址不存在,則建立一個邏輯地址和物理地址的映射/perm為vma的權(quán)限if (*ptep = 0) /嘗試申請一個頁,如果申請失敗就是內(nèi)存不足了,退出if (pgdir_alloc_page(mm-pgdir, addr, perm) = null) cprintf(pgdir_alloc_page in do_pgfault faile
6、dn);goto failed;思考題:1.請描述頁目錄項(page director entry)和頁表(page table entry)中組成部分對ucore實現(xiàn)頁替換算法的潛在用處。ans. 頁目錄項(pgdir)作為一個雙向鏈表存儲了目前所有的頁的物理地址和邏輯地址的對應,即在實內(nèi)存中的所有頁,替換算法中被換出的頁從pgdir中選出。頁表(pte)則存儲了替換算法中被換入的頁的信息,替換后會將其映射到一物理地址。2.如果ucore的缺頁服務例程在執(zhí)行過程中訪問內(nèi)存,出現(xiàn)了頁訪問異常,請問硬件要做哪些事情?ans. 產(chǎn)生頁訪問異常后,cpu把引起頁訪問異常的線性地址裝到寄存器cr2中,
7、并給出了出錯碼errorcode,說明了頁訪問異常的類型。ucore os會把這個值保存在struct trapframe 中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í)行make qemu后,如果通過check_swap函數(shù)的測試后,會有“check_sw
8、ap() s ucceeded!”的輸出,表示練習2基本正確。請在實驗報告中簡要說明你的設計實現(xiàn)過程。請在實驗報告中回答如下問題:如果要在ucore上實現(xiàn)extended clock頁替換算法請給你的設計方案,現(xiàn)有的swap_manager框架是否足以支持在ucore中實現(xiàn)此算法?如果是,請給你的設計方案。如果不是,請給出你的新的擴展和基此擴展的設計方案。并需要回答如下問題需要被換出的頁的特征是什么?在ucore中如何判斷具有這樣特征的頁?何時進行換入和換出操作?問題分析:根據(jù)練習1,當頁錯誤異常發(fā)生時,有可能是因為頁面保存在swap區(qū)或者磁盤文件上造成的,練習2需要利用頁面替換算法解決這個問
9、題。大體思路:頁面替換主要分為兩個方面,頁面換出和頁面換入。 頁面換入主要在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
10、()函數(shù)的exercise 2修改如下:else /如果pte是需要交換的表項,那么就從硬盤的物理地址將數(shù)據(jù)讀到頁中/然后調(diào)用page_insert()建立物理地址和邏輯地址映射if(swap_init_ok) struct page *page=null;/根據(jù)mm結(jié)構(gòu)和addr地址,嘗試將硬盤中的內(nèi)容換入至page中/此時的page還沒有加入到隊列中if (ret = swap_in(mm, addr, &page) != 0) /ret=0表示swap_in()正常運行結(jié)束cprintf(swap_in in do_pgfault failedn);goto failed;/建立虛擬地址
11、合物理地址之間的對應關系page_insert(mm-pgdir, page, addr, perm);/將此頁面設置成可交換的swap_map_swappable(mm, addr, page, 1);else cprintf(no swap_init_ok but ptep is %x, failedn,*ptep);goto failed;kern/mm/swap_fifo.c中的exercise 2修改如下:_fifo_map_swappable(struct mm_struct *mm, uintptr_t addr, struct page *page, int swap_in)
12、/將最近被用到的頁面添加到算法所維護的次序隊列/找到pra_list_head隊列l(wèi)ist_entry_t *head=(list_entry_t*) mm-sm_priv;/找到被換入的頁表項list_entry_t *entry=&(page-pra_page_link);assert(entry != null & head != null);/*lab3 exercise 2: your code*/將最近分配的頁插入到pra_list_head隊列的尾部.list_add_before(head, entry);return 0; _fifo_swap_out_victim(stru
13、ct mm_struct *mm, struct page * ptr_page, int in_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);/*lab3 exercise 2: your code*/將換出的頁表從pra_list_head隊列中刪除st
14、ruct page *p = le2page(le, pra_page_link);list_del(le);assert(p != null);/將頁的地址的地址賦值給ptr_page*ptr_page = p;return 0;思考題:如果要在ucore上實現(xiàn)extended clock頁替換算法請給你的設計方案,現(xiàn)有的swap_manager框架是否足以支持在ucore中實現(xiàn)此算法?如果是,請給你的設計方案。如果不是,請給出你的新的擴展和基此擴展的設計方案。答:目前的swap_manager框架足以支持在ucore中實現(xiàn)extended clock算法。在kern/mm/mmu.h文件中
15、有如下定義:#define pte_a 0x020 / accesseed所以(*ptep & pte_a)即可以表明該頁是否被訪問過,由此實現(xiàn)extended clock。于是對kern/mm/vmm.h做相應的修改:_fifo_swap_out_victim(struct mm_struct *mm, struct page * ptr_page, int in_tick)list_entry_t *head = (list_entry_t*) mm-sm_priv;assert(head != null);assert(in_tick = 0);list_entry_t *le = he
16、ad-next;assert(head != le);while(le != head) struct page *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;return 0; *ptep = pte_a; le = le-next;le = le-next;while(le != head) struct page *p = le2page
17、(le, pra_page_link);pte_t *ptep = get_pte(mm-pgdir, p-pra_vaddr, 0);list_del(le);assert(p != null);*ptr_page = p;return 0;需要被換出的頁的特征是什么?答:在fifo中,需要被換出的頁是目前所有頁中最早被調(diào)入的那一頁。在ucore中如何判斷具有這樣特征的頁?答:需要被換出的頁位于pra_list_head隊列的前端,即mm-sm_priv-next指示的那一頁。何時進行換入和換出操作?答:當需要調(diào)用的頁不在頁表中時,并且在頁表已滿的情況下,需要進行換入和換出操作。擴展練習ch
18、allenge:實現(xiàn)識別dirty bit的extended c lock頁替換算法(需要編程)問題分析:算法根據(jù)頁面近期是否被修改從而決定該頁面是否應當被換出。所以在查詢空閑頁時,需要加上對dirty bit的判斷。大體思路:當操作系統(tǒng)需要淘汰頁時,對當前指針指向的頁所對應的頁表項進行查詢,如果dirty bit為0,則把此頁換出到硬盤上;如果dirty bit為1,則將dirty bit置為0,繼續(xù)訪問下一個頁。程序代碼:相比較fifo的操作,dirty bit的替換算法只需要識別出哪些頁被訪問過,以及哪些頁被修改過即可。在kern/mm/mmu.h文件下有如下的定義:#define pt
19、e_a 0x020 / accessed#define pte_d 0x040 / dirty其中pte_a和pte_d分別是表示訪問和修改的標識位,因此與*ptep求與即可判斷頁是否被訪問或修改過。首先根據(jù)基礎的extended clock算法,未被訪問的頁應優(yōu)先考慮換出;在此基礎上,由于被修改的也需要被寫會硬盤,因此未被修改的頁應該有限換出。因此采用多輪循環(huán)。只需要修改kern/mm/vmm.h中的_fifo_swap_out_victim()函數(shù)即可實現(xiàn):_fifo_swap_out_victim(struct mm_struct *mm, struct page * ptr_page,
20、 int in_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) struct page *p = le2page(le, pra_page_link);/獲取頁表項pte_t *ptep = get_pte(mm-pgdir, p-pra_vaddr, 0)
21、;/判斷獲得的頁表項是否正確if(!(*ptep & pte_a) & !(*ptep & pte_d) /未被訪問,未被修改/如果dirty bit為0,換出/將頁面從隊列中刪除list_del(le);assert(p != null);/將這一頁的地址存儲在prt_page中*ptr_page = p;return 0;le = le-next;le = le-next;while(le != head) struct page *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;return 0;*ptep = pte_a; /頁被訪問過則將pte_a位置0le = le-next;le = le-next;while(le != head) struct page *p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 雇傭合同模板
- 公積金繳納比例調(diào)整影響
- 健身中心泳池翻新協(xié)議
- 城市供水管道改造工程施工合同
- 2025版機械運輸租賃及安裝指導服務合同范本3篇
- 2024年物流運輸車輛維修保養(yǎng)合同模板3篇
- 2025版客車節(jié)能環(huán)保技術(shù)應用與推廣承包協(xié)議3篇
- 2025版航空航天設備設計與制造合同范本3篇
- 2025版跨境電商進口食品檢驗檢疫合同3篇
- 2025版酒店客房用品租賃與銷售服務合同3篇
- 南京市聯(lián)合體2022-2023學年七年級上學期期末生物試題
- 傷口造口護理質(zhì)量標準
- 熱性驚厥診斷治療與管理專家共識
- 現(xiàn)代農(nóng)業(yè)產(chǎn)業(yè)園建設規(guī)劃方案(2篇)
- 物流配送中心租賃合同
- 幼兒園幼小銜接方案及反思
- 生命科學前沿技術(shù)智慧樹知到期末考試答案章節(jié)答案2024年蘇州大學
- 低空經(jīng)濟產(chǎn)業(yè)園項目可行性研究報告
- 中國神話故事繪本倉頡造字
- 消化道出血護理新進展
- MOOC 心理健康與創(chuàng)新能力-電子科技大學 中國大學慕課答案
評論
0/150
提交評論