




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、HUNAN UNIVERSITY操作系統(tǒng)實驗報告目錄一、內(nèi)容2二、目的2三、實驗設(shè)計思想和練習題2練習0:填寫已有實驗2練習1:實現(xiàn) first-fit 連續(xù)物理內(nèi)存分配算法(需要編程)2練習2:實現(xiàn)尋找虛擬地址對應(yīng)的頁表項(需要編程)7練習3:釋放某虛地址所在的頁并取消對應(yīng)二級頁表項的映射(需要編程)10運行結(jié)果12四、實驗體會12一、內(nèi)容本次實驗包含三個部分。首先了解如何發(fā)現(xiàn)系統(tǒng)中的物理內(nèi)存;然后了解如何建立對物理內(nèi)存的初步管理,即了解連續(xù)物理內(nèi)存管理;最后了解頁表相關(guān)的操作,即如何建立頁表來實現(xiàn)虛擬內(nèi)存到物理內(nèi)存之間的映射,對段頁式內(nèi)存管理機制有一個比較全面的了解。二、目的1.理解基于段
2、頁式內(nèi)存地址的轉(zhuǎn)換機制;2.理解頁表的建立和使用方法;3.理解物理內(nèi)存的管理方法。三、實驗設(shè)計思想和練習題練習0:填寫已有實驗使用eclipse中的diff/merge工具將實驗1的代碼填入本實驗中代碼中有“LAB1”的注釋相應(yīng)部分。練習1:實現(xiàn) first-fit 連續(xù)物理內(nèi)存分配算法(需要編程)在實現(xiàn)first fit 內(nèi)存分配算法的回收函數(shù)時,要考慮地址連續(xù)的空閑塊之間的合并操作。提示:在建立空閑頁塊鏈表時,需要按照空閑頁塊起始地址來排序,形成一個有序的鏈表??赡軙薷膁efault_pmm.c中的default_init,default_init_memmap,default_allo
3、c_pages, default_free_pages等相關(guān)函數(shù)。請仔細查看和理解default_pmm.c中的注釋。請在實驗報告中簡要說明你的設(shè)計實現(xiàn)過程。請回答如下問題:你的first fit算法是否有進一步的改進空間。解答:分析思路:(1)數(shù)據(jù)結(jié)構(gòu):A每個物理頁利用一個Page結(jié)構(gòu)體表示,查看kern/mm/memlayout.h包括:ref:引用計數(shù),即映射此物理頁的虛擬頁個數(shù);flags:描述物理頁屬性,bit 0設(shè)置為1,即為“被保留”項,bit 1設(shè)置為1,即為空閑項;property:記錄某連續(xù)內(nèi)存塊的大小,即地址連續(xù)的空閑頁的個數(shù);page_link:將多個連續(xù)內(nèi)存鏈接在一起
4、的雙向鏈表指針,即構(gòu)建雙向鏈接各個Page結(jié)構(gòu)的雙向鏈表。B所有的連續(xù)內(nèi)存空閑塊可用一個雙向鏈表管理,利用一個free_area_t結(jié)構(gòu)體表示,查看kern/mm/memlayout.h包括:list_entry:雙向鏈表指針,指向空閑的物理頁;nr_free:記錄當前空閑頁的個數(shù)的無符號整形變量。(2)連續(xù)物理內(nèi)存分配思路:物理內(nèi)存頁管理器順著雙向鏈表進行搜索空閑內(nèi)存區(qū)域,直到找到一個足夠大的空閑區(qū)域,這是一種速度很快的算法,因為它盡可能少地搜索鏈表。如果空閑區(qū)域的大小和申請分配的大小正好一樣,則把這個空閑區(qū)域分配出去,成功返回;否則將該空閑區(qū)分為兩部分,一部分區(qū)域與申請分配的大小相等,把它
5、分配出去,剩下的一部分區(qū)域形成新的空閑區(qū)。其釋放內(nèi)存的設(shè)計思路是把這塊區(qū)域重新放回雙向鏈表中。(3)具體設(shè)計:bootloader進行探測物理格局后,利用kern_entry()函數(shù)設(shè)置堆棧,并臨時建立一個段映射關(guān)系,調(diào)用kern_init()函數(shù)輸出檢查后,pmm_init()函數(shù)完成物理內(nèi)存的管理,假定page_init()函數(shù)是按照地址從小到大的順序傳遞連續(xù)內(nèi)存空閑塊,根據(jù)page_init()函數(shù)中傳遞的參數(shù)(某個連續(xù)的空閑塊的起始頁,頁個數(shù)),default_init_memmap()來建立一個連續(xù)內(nèi)存空閑塊的雙向鏈表,鏈表頭設(shè)free_area.free_list,鏈表項設(shè)Page
6、的base-page_link。代碼分析:(1)default_init_memmap :用于構(gòu)建空閑頁鏈表;A步驟:(1)初始化每一個空閑頁,注意使用頭插法是因為地址是從低到高地址增長;(2)計算空閑頁的總數(shù)。B具體實現(xiàn):(2)default_alloc_pages :用于為進程分配空閑頁;A步驟:(1)從空閑鏈表表頭開始查找最小的地址,尋找足夠大的空閑塊; (2)如果找到,獲得指向分配的頁,重新設(shè)置標志位,從空閑鏈表中刪除此頁;(3)判斷空閑塊大小是否合適;(4)如果合適,不操作;如果不合適,分割頁塊;(5)計算剩余空閑頁個數(shù),返回分配的頁塊地址。B具體實現(xiàn):注:算法改進空間:第一頁重置標
7、志位操作被注釋后,依然可以編譯運行。(3)default_free_pages :用于釋放已經(jīng)使用完的頁,使其合并到free_list中;A步驟:(1)在free_list中查找合適位置,用以插入; (2)改變被釋放頁的標志位flags及計數(shù)器ref;(3)在free_list中向高地址或第地址合并。B具體實現(xiàn):練習2:實現(xiàn)尋找虛擬地址對應(yīng)的頁表項(需要編程)通過設(shè)置頁表和對應(yīng)的頁表項,可建立虛擬內(nèi)存地址和物理內(nèi)存地址的對應(yīng)關(guān)系。其中的get_pte函數(shù)是設(shè)置頁表項環(huán)節(jié)中的一個重要步驟。此函數(shù)找到一個虛地址對應(yīng)的二級頁表項的內(nèi)核虛地址,如果此二級頁表項不存在,則分配一個包含此項的二級頁表。本練
8、習需要補全get_pte函數(shù) in kern/mm/pmm.c,實現(xiàn)其功能。請回答如下問題:請描述頁目錄項(Pag Director Entry)和頁表(Page Table Entry)中每個組成部分的含義和以及對ucore而言的潛在用處。如果ucore執(zhí)行過程中訪問內(nèi)存,出現(xiàn)了頁訪問異常,請問硬件要做哪些事情?解答:分析思路:pde_t為page directory entry,也就是一級頁表的表項。 pte_t為page table entry,表示二級頁表的表項。uintptr_t表示為線性地址,由于段式管理只做直接映射,所以它也是邏輯地址。pgdir(一級頁表)給出頁表起始地址。通過
9、查找這個頁表,我們需要給出二級頁表中對應(yīng)項的地址。雖然目前我們只有boot_pgdir一個頁表,但是引入進程的概念之后每個進程都會有自己的頁表。有可能根本就沒有對應(yīng)的二級頁表的情況,所以二級頁表不必要一開始就分配,而是等到需要的時候再添加對應(yīng)的二級頁表。如果在查找二級頁表項時,發(fā)現(xiàn)對應(yīng)的二級頁表不存在,則需要根據(jù)create參數(shù)的值來處理是否創(chuàng)建新的二級頁表。如果create參數(shù)為0,則get_pte返回NULL;如果create參數(shù)不為0,則get_pte需要申請一個新的物理頁(通過alloc_page來實現(xiàn),可在mm/pmm.h中找到它的定義),再在一級頁表中添加頁目錄項指向表示二級頁表的
10、新物理頁。注,新申請的頁必須全部設(shè)定為零,因為這個頁所代表的虛擬地址都沒有被映射。當建立從一級頁表到二級頁表的映射時,需要注意設(shè)置控制位。這里應(yīng)該設(shè)置同時設(shè)置上PTE_U、PTE_W和PTE_P(定義在mm/mmu.h):PTE_U:表示用戶態(tài)的軟件可以讀取對應(yīng)地址的物理內(nèi)存頁內(nèi)容;PTE_W:表示物理內(nèi)存頁內(nèi)容可寫;PTE_P:表示物理內(nèi)存頁存在如果原來就有二級頁表,或者新建立了頁表,則只需返回對應(yīng)項的地址即可。代碼分析:A 步驟:(1)嘗試獲取頁表起始地址;(2)若不成功則直接返回NULL,若成功則申請一個物理頁;(3)獲得物理頁的線性地址,在一級頁表中添加頁目錄項指向表示二級頁表的新物理
11、頁;(4)返回頁表地址。B具體實現(xiàn):問題解答:(1)請描述頁目錄項(Pag Director Entry)和頁表(Page Table Entry)中每個組成部分的含義和以及對ucore而言的潛在用處。答:高20位表示下一級頁表(或物理頁表)的基址(4K對齊),后12位為標志位,分別為從低位起第06位為ucore內(nèi)核占用,表示指向的下一級頁面的某些特性(是否存在、是否可寫);對于PDE,第7位表示如果pde的PTE_PS位為1,那么pde中所存的就不是下一級頁表,而是一張4M頁的起始地址;對于PTE,第7、8位強制位0;第911位供內(nèi)核以外的軟件使用。(2)如果ucore執(zhí)行過程中訪問內(nèi)存,出
12、現(xiàn)了頁訪問異常,請問硬件要做哪些事情?答:出現(xiàn)頁訪問異常會觸發(fā)缺頁中斷,缺頁中斷發(fā)生時的事件順序如下:1) 硬件陷入內(nèi)核,在內(nèi)核堆棧中保存程序計數(shù)器。大多數(shù)機器將當前指令的各種狀態(tài)信息保存在特殊的CPU寄存器中。 2) 啟動一個匯編代碼例程保存通用寄存器和其他易失的信息,以免被操作系統(tǒng)破壞。3) 當操作系統(tǒng)發(fā)現(xiàn)一個缺頁中斷時,嘗試發(fā)現(xiàn)需要哪個虛擬頁面。通常一個硬件寄存器包含了這一信息,如果沒有的話,操作系統(tǒng)必須檢索程序計數(shù)器,取出這條指令,用軟件分析這條指令,看看它在缺頁中斷時正在做什么。4) 一旦知道了發(fā)生缺頁中斷的虛擬地址,操作系統(tǒng)檢查這個地址是否有效,并檢查存取與保護是否一致。如果不一致
13、,向進程發(fā)出一個信號或殺掉該進程。如果地址有效且沒有保護錯誤發(fā)生,系統(tǒng)則檢查是否有空閑頁框。如果沒有空閑頁框,執(zhí)行頁面置換算法尋找一個頁面來淘汰。5) 如果選擇的頁框“臟”了,安排該頁寫回磁盤,并發(fā)生一次上下文切換,掛起產(chǎn)生缺頁中斷的進程,讓其他進程運行直至磁盤傳輸結(jié)束。無論如何,該頁框被標記為忙,以免因為其他原因而被其他進程占用。6) 一旦頁框“干凈”后(無論是立刻還是在寫回磁盤后),操作系統(tǒng)查找所需頁面在磁盤上的地址,通過磁盤操作將其裝入。該頁面被裝入后,產(chǎn)生缺頁中斷的進程仍然被掛起,并且如果有其他可運行的用戶進程,則選擇另一個用戶進程運行。7) 當磁盤中斷發(fā)生時,表明該頁已經(jīng)被裝入,頁表
14、已經(jīng)更新可以反映它的位置,頁框也被標記為正常狀態(tài)。8) 恢復(fù)發(fā)生缺頁中斷指令以前的狀態(tài),程序計數(shù)器重新指向這條指令。9) 調(diào)度引發(fā)缺頁中斷的進程,操作系統(tǒng)返回調(diào)用它的匯編語言。10) 該例程恢復(fù)寄存器和其他狀態(tài)信息。練習3:釋放某虛地址所在的頁并取消對應(yīng)二級頁表項的映射(需要編程)當釋放一個包含某虛地址的物理內(nèi)存頁時,需要讓對應(yīng)此物理內(nèi)存頁的管理數(shù)據(jù)結(jié)構(gòu)Page做相關(guān)的清除處理,使得此物理內(nèi)存頁成為空閑;另外還需把表示虛地址與物理地址對應(yīng)關(guān)系的二級頁表項清除。請仔細查看和理解page_remove_pte函數(shù)中的注釋。為此,需要補全在 kern/mm/pmm.c中的page_remove_pt
15、e函數(shù)。請回答如下問題:數(shù)據(jù)結(jié)構(gòu)Page的全局變量(其實是一個數(shù)組)的每一項與頁表中的頁目錄項和頁表項有無對應(yīng)關(guān)系?如果有,其對應(yīng)關(guān)系是啥?如果希望虛擬地址與物理地址相等,則需要如何修改lab2,完成此事? 解答:分析思路:使用pte2page宏即可得到從頁表項得到對應(yīng)的物理頁面所對應(yīng)的Page結(jié)構(gòu)體。得到結(jié)構(gòu)體后,判斷此頁被引用的次數(shù),如果僅僅被引用一次,對頁面引用進行更改,降為零則這個頁可以被釋放。否則,只能釋放頁表入口。代碼分析:A 步驟:(1)在頁表存在情況下,利用pte2page得到從頁表項得到對應(yīng)的物理頁面所對應(yīng)的Page結(jié)構(gòu)體;(2)判斷此頁被引用的次數(shù);(3)如果僅僅被引用一次
16、,對頁面引用進行更改,降為零則這個頁可以被釋放;(4)否則,釋放頁表入口,清除二級頁表項。B具體實現(xiàn):問題解答:(1)數(shù)據(jù)結(jié)構(gòu)Page的全局變量(其實是一個數(shù)組)的每一項與頁表中的頁目錄項和頁表項有無對應(yīng)關(guān)系?如果有,其對應(yīng)關(guān)系是啥?答:Page結(jié)構(gòu)體與物理頁一一對應(yīng),pte2page函數(shù)從頁表項找到對應(yīng)物理頁的Page結(jié)構(gòu)體:即Page結(jié)構(gòu)體和對應(yīng)物理頁的起始地址一一對應(yīng)。(2)如果希望虛擬地址與物理地址相等,則需要如何修改lab2,完成此事? 答:通過ld工具形成的ucore的起始虛擬地址從0xC開始,而bootloader把ucore放在了起始物理地址為0x的物理內(nèi)存空間。要使得虛擬地址與物理地址相等:首先更改KERNBASE,從0xC到0x,原因在于在沒有開啟頁式地址轉(zhuǎn)換前,內(nèi)核邏輯
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)臨時職工合同范本
- 信托通道業(yè)務(wù)合同范例
- 個人紅酒購銷合同范本
- 仔豬采購合同范本
- 代收美金合同范本
- 個人和業(yè)主裝修合同范本
- 臨時幼師合同范本
- 植物油罐高空作業(yè)施工方案
- 2025四川瀘州市納溪區(qū)融新文化傳媒有限責任公司招聘2人筆試參考題庫附帶答案詳解
- 勞務(wù)服務(wù)協(xié)議合同范本
- 精神科跌倒墜床的預(yù)防及護理
- 心理疏導課件
- 教育的減法讓孩子更幸福(課件)-小學生教育主題班會通用版
- 垃圾中轉(zhuǎn)站運營管理投標方案(技術(shù)標)
- 大格子作文紙模板
- 速成格魯吉亞語
- 轉(zhuǎn)學申請表、轉(zhuǎn)學證明
- 分層作業(yè),分出活力小學數(shù)學作業(yè)分層設(shè)計的有效策略
- 團員組織關(guān)系轉(zhuǎn)接介紹信(樣表)
- 網(wǎng)絡(luò)安全系統(tǒng)集成高職PPT完整全套教學課件
- 射頻消融術(shù)介紹【共48張PPT】
評論
0/150
提交評論