




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
湖泊大掌HunanUNIVERSITY操作系統(tǒng)實驗報告400//設(shè)置頁目錄項內(nèi)容401*pdep=pa|PTEU|PTE_W|PTEP;402)403//返回頁表地址404return&{(pte_t*)KADDR(PDE_ADDR(*pdep)))(PTX(la)];405)問題解答:(1)請描述頁目錄項(PagDirectorEntry)和頁表(PageTab1eEntry)中每個組成部分的含義和以及對ucore而言的潛在用處。答:高2()位表達下一級頁表(或物理頁表)的基址(4K對齊),后12位為標志位,分別為從低位起第0~6位為ucore內(nèi)核占用,表達指向的下一級頁面的某些特性(是否存在、是否可寫……);/*pagetable/directoryentryflags*/#definePTE_P0X001//PresentsdefinePTE_W0x002//Writeable#definePTE_U0x004//User/definePTE_PVrr0x008//Write-ThroughsdefinePTE_PCD0x010//Cache-Disable二definePTE_A0x020//Accessed^definePTE_D0x040//Dirty#definePTE_PS0x080//PageSize#definePTEJ1BZ0x180//BitsmustbezeroadefinePTE_AVAIL0xE00//Availableforsoftwareuse//ThePTE_AVAILbitsaren'tusedbythekernelor,interpretedbythe//hardware,souserprocessesareallowedtosetthemarbitrarily.對于PDE,第7位表達假如pde的PTE_PS位為1,那么pde中所存的就不是下一級頁表,而是一張4M頁的起始地址;對于PTE,第7、8位強制位();第9位供內(nèi)核以外的軟件使用。(2)假如ucore執(zhí)行過程中訪問內(nèi)存,出現(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)檢查這個地址是否有效,并檢杳存取與保護是否一致。假如不一致,向進程發(fā)出一個信號或殺掉該進程。假如地址有效且沒有保護錯誤發(fā)生,系統(tǒng)則檢查是否有空閑頁框。假如沒有空閑頁框,執(zhí)行頁面置換算法尋找一個頁面來淘汰。5)假如選擇的頁框"臟''了,安排該頁寫回磁盤,并發(fā)生一次上下文切換,掛起產(chǎn)生缺頁中斷的進程,讓其他進程運營直至磁盤傳輸結(jié)束。無論如何,該頁框被標記為忙,以免由于其他因素而被其他進程占用。6)一旦頁框“干凈”后(無論是立刻還是在寫回磁盤后),操作系統(tǒng)查找所需頁面在磁盤上的地址,通過磁盤操作將其裝入。該頁面被裝入后,產(chǎn)生缺頁中斷的進程仍然被掛起,并且假如有其他可運營的用戶進程,則選擇另一個用戶進程運營。7)當磁盤中斷發(fā)生時,表白該頁已經(jīng)被裝入,蟲表已經(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_removepte函數(shù)中的注釋。為此,需要補全在kern/mm/pmm.c?PKpageremove_pte函數(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.環(huán)節(jié):(1)在頁表存在情況卜;運用Pte2page得到從頁表項得到相應(yīng)的物理頁面所相應(yīng)的Page結(jié)構(gòu)體;(2)判斷此頁被引用的次數(shù);(3)假如僅僅被引用一次,對頁面引用進行更改,降為零則這個頁可以被釋放:(4)否則,釋放頁表入口,清除二級頁表項。B.具體實現(xiàn):423//參數(shù)是一級頁表的起始地址,線性地址,二級頁表對應(yīng)的物理頁424staticinlinevoid425pageremovepte(pdet*pgdir,uintptrtla,ptet*ptep){451451452453454455456457458459460461462463)451452453454455451452453454455456457458459460461462463)〃從頁表項得到對應(yīng)的物理頁所對應(yīng)的Page結(jié)構(gòu)體structPage*page=pte2page(*ptep);//判斷此頁是否多次被引用if(pagerefdec(page)==0){freepage(page);}*ptep=0;//使得TLB無效,清除二級頁表項tlbinvalidate(pgdir,la);)問題解答:(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)體:105staticinlinestructPage*106pte2page(ptetpte){107if(!(pte&PTE_P)){108panic("pte2pagecalledwithinvalidpte");109}110returnpa2page(PTEADDR(pte));111)即Page結(jié)構(gòu)體和相應(yīng)物理頁的起始地址相應(yīng)。⑵假如希望虛擬地址與物理地址相等,則需要如何修改lab2,完畢此事?答:通過1d工具形成的ucore的起始虛擬地址從0xC0100000開始,而boolloader把ucore放在了起始物理地址為0x100000的物理內(nèi)存空間。要使得虛擬地址與物理地址相等:一方面更改KERNBASE,從0x0)00000到0x00000000,因素在于在沒有啟動頁式地址轉(zhuǎn)換前,內(nèi)核邏輯地址通過一次段地址轉(zhuǎn)換即直接得到物理地址:PA(物理地址)=LA(線性地址)=VA(邏輯地址)一KERNBASE;另一方面,虛擬地址由OxCOlOOOOO改成0x00100000o運營結(jié)果?B?QEMUkern/init/init.c:58:grade_backtrace0*23cbp:0xc0116fc8eip:0XC0100128args:OxcO105efc0xc0105ee00xO0000f3Z0x00000000kern/init/init.c:63:grade_backtrace*34ebp:0xcO116ff8eip:0xcOlOO07fargs:0x000000000x00000000OxOOOOffff0x40cf9aO0kern/init/init.c:Z8:kern_init*84memorymanagement:defau1t_pmm_managercBZOmap:memory:00O9fc00,[00000000,0009fbff],type=1.memory:00000400,[0009fc00,0009ffff],type=z.memory:00010000,[00Of0000,OOOfffff],typez.memory:07efe0OO,[00100000,07ffdfff],type=1.memory:00O0Z0OO,[0?ffe000,07ffffff],type=z.memory:00040000,[fffc00O0,ffffffff],type=z.check_a1loc_page()succeeded!check_pgdir()succeeded!check_boot_pgdir()succeeded!kBEGINPDE(0e0)c0000000-f800000038000000urwi—PTE(38000)c0000000-f800000038000000-rwPDE(001)fac00O00-fb00000000400000-rwi—PTE(000e0)faf00000-fafe000O00060000urwPTE(00001)fafebOOO-fafecOOO00001000-rwEND++setuptimerinterrupts四、實驗體會本實驗是關(guān)于物理內(nèi)存管理,重要從物理內(nèi)存和建立頁表兩個方面設(shè)計實驗,一方面了解如何發(fā)現(xiàn)系統(tǒng)中的物理內(nèi)存,然后了解如何建立對物理內(nèi)存的初步管理,最后了解頁表相關(guān)的操作總體來說還是有難度,特別后面需要編程的內(nèi)容需要很好理解各個文獻的代碼,參考答案進行分析,才干更好的理解實驗內(nèi)涵,通過實驗也能進一步理解段頁式內(nèi)存管理機制,對上課的內(nèi)容有了更深理解體會。目錄一、內(nèi)容。錯誤!未定義書簽。二、目的。錯誤!未定義書簽。三、實驗設(shè)計思想和練習題。錯誤!未定義書簽。練習0:填寫已有實驗錯誤!未定義書簽。練習1:實現(xiàn)first-fit連續(xù)物理內(nèi)存分派算法(需要編程).錯誤!未定義書簽。練習2:實現(xiàn)尋找虛擬地址相應(yīng)的頁表項(需要編程)。錯誤!未定義書簽。練習3:釋放某虛地址所在的頁并取消相應(yīng)二級頁表項的映射(需要編程)錯誤!未定義書簽。運營結(jié)果錯誤!未定義書簽。四、實驗體會錯誤!未定義書簽。一、內(nèi)容本次實驗包含三個部分。一方面了解如何發(fā)現(xiàn)系統(tǒng)中的物理內(nèi)存;然后了解如何建立對物理內(nèi)存的初步管理,即了解連續(xù)物理內(nèi)存管理;最后了解頁表相關(guān)的操作,即如何建立頁表來實現(xiàn)虛擬內(nèi)存到物理內(nèi)存之間的映射,對段頁式內(nèi)存管理機制有一個比較全面的了解。二、目的.理解基于段頁式內(nèi)存地址的轉(zhuǎn)換機制;.理解頁表的建立和使用方法;.理解物理內(nèi)存的管理方法。三、實驗設(shè)計思想和練習題練習0:填寫已有實驗使用eclipse中的diff/merge工具將實驗1的代碼填入本實驗中代碼中有“LAB1”的注釋相應(yīng)部分。練習L實現(xiàn)first-fit連續(xù)物理內(nèi)存分派算法(需要編程)在實現(xiàn)firstfit內(nèi)存分派算法的回收函數(shù)時,要考慮地址連續(xù)的空閑塊之間的合并操作。提醒:在建立空閑頁塊鏈表時,需要按照空閑頁塊起始地址來排序,形成一個有序的鏈表。也許會修改default.pmm.c中的default_init,defau1t_init_memmap,defau1t_a1loc_pages,default_free_pages等相關(guān)函數(shù)。請仔細查看和理解defaultpmm.c中的注釋。請在實驗報告中簡要說明你的設(shè)計實現(xiàn)過程。請歸I答如下問題:你的firstfit算法是否有進一步的改善空間。解答:分析思緒:(1)數(shù)據(jù)結(jié)構(gòu):
A.每個物理頁運川一個Page結(jié)構(gòu)體表達,查看kern/mm/memlayout.h涉及:ref:引用計數(shù),即映射此物理頁的虛擬頁個數(shù);flags:描述物理頁屬性,bit0設(shè)立為1,即為“被保存”項,bit1設(shè)立為1,即為空閑項;property:記錄某連續(xù)內(nèi)存塊的大小,即地址連續(xù)的空閑頁的個數(shù);page」ink:將多個連續(xù)內(nèi)存鏈接在一起的雙向鏈表指針,即構(gòu)建雙向鏈接各個Page結(jié)構(gòu)的雙向鏈表。[-/moocos/ucorelab/labcodes/lab2/kern/mm]vimmemlayout.hstructPage{intref;intref;uint32_tflags;tusofthepageframeunsignedintproperty;fitpmmanagerlistentrytpagelink;};//arrayofflagsthatdescribethesta//thenumoffreeblock,usedinfirst//freelistlinkB.所有的連續(xù)內(nèi)存空閑塊可用一個雙向鏈表管理,運用一個frco_area_t結(jié)構(gòu)體表達,查看korn/mm/memlayout.h涉及:1ist_entry:雙向鏈表指針,指向空閑的物理頁;nr_free:記錄當前空閑頁的個數(shù)的無符號整形變量。typedefstruct{listentrytfreelist;//thelistheaderunsignedintnr_free;//#offreepagesinthisfreelist}freeareat;(2)連續(xù)物理內(nèi)存分派思緒:物理內(nèi)存頁管理器順著雙向鏈表進行搜索空閑內(nèi)存區(qū)域,直到找到一個足夠大的空閑區(qū)域,這是一種速度不久的算法,由于它盡也許少地搜索鏈表。假如空閑區(qū)域的大小和申請分派的大小正好同樣,則把這個空閑區(qū)域分派出去,成功返回;否則將該空閑區(qū)分為兩部分,一部分區(qū)域與申請分派的大小相等,把它分派出去,剩下的一部分區(qū)域形成新的空閑區(qū)。其釋放內(nèi)存的設(shè)計思緒是把這塊區(qū)域重新放回雙向鏈表中。(3)具體設(shè)計:kern_init-->pmm_init-->page_init-->init_memmap-->pmm_manager->init_memmap.bootloader進行探測物理格局后,運用kern_entry()函數(shù)設(shè)立堆棧,并臨時建立一個段映射關(guān)系,調(diào)用kern_init()函數(shù)輸出檢查后,()函數(shù)完畢物理內(nèi)存的管理,假定page_iniI()函數(shù)是按照地址從小到大的順序傳遞連續(xù)內(nèi)存空閑塊,根據(jù)page_init()函數(shù)中傳遞的參數(shù)(某個連續(xù)的空閑塊的起始貝,負個數(shù)),default,init_memmap()來建立一個連續(xù)內(nèi)存空閑塊的雙向鏈表,鏈表頭設(shè)free_area.free_list,鏈表項設(shè)Page的base->pagelinko代碼分析:(Odefault_initmemmap:用于構(gòu)建空閑頁鏈表;A.環(huán)節(jié):(1)初始化每一個空閑頁,注意使用頭插法是由于地址是從低到高地址增長;(2)計算空閑頁的總數(shù)。B.具體實現(xiàn):.default_pcnm.cx6768〃參數(shù)是某個連續(xù)的空閑塊的起始頁,頁個數(shù)69staticvoiddefault_init_memmap(structPage*base,size_tn){〃保證分配不會超出品闡,Z即報錯保證魯棒性assert(n>0);structPage*p=base;for(;p!=base+n;p++){〃檢查此頁是否為保留頁assert(PageReserved(p));//設(shè)置標志位,將PG_reserved置0,初始化內(nèi)存空閑塊大小p->flags=p->property=0;SetPageProperty(p);//清零此頁的引用計數(shù)setpageref(pr0);//使用頭插法將空閑頁插入到鏈表list_add_before|(&freelistr&(p->page_link));)//firstblock//計算空閑頁總數(shù)base->property=n;nr_free+=n;)(2)default_a11oc_pages:用于為進程分派空閑頁;A.環(huán)節(jié):。(1)從空閑鏈表表頭開始查找最小的地址,尋找足夠大的空閑塊;(2)假如找到,獲得指向分派的頁,重新設(shè)立標志位,從空閑徒表中刪除此頁;(3)判斷空閑塊大小是否合適;(4)假如合適,不操作;假如不合適,分割頁塊;(5)計算剩余空閑頁個數(shù),返回分派的頁塊地址。B.具體實現(xiàn):defaultjxnm.cx90//參數(shù)是頁的個數(shù)staticstructPage*defaultallocpages(size_tn){//保證分配不會超出范圍,立即報錯保證魯棒性assert(n>0);if(n>nrfree){returnNULL;}listentryt*le,*len;//從空閑鏈表”開始查找最小的地址le=&freelist;100101//通過list_next找到下一個空閑塊元素102while((le=listnext(le))!=&freelist){103//通過le2page宏根據(jù)鏈表元素獲得對應(yīng)的Page指針p104structPage*p=le2page(le,pagelink);105〃判斷空閑塊大小,找到合適大小的頁塊一106if(p->property>=n){107inti;108for(i=0;i<n;i++){109len=listnext(le);110〃讓pp指向分配的那一頁,le2page宏根據(jù)鏈表元素獲得對應(yīng)Page的指針p111structPage*pp=Le2page(le,pagelink);112//設(shè)置每一頁的標志位113SetPageReserved(pp);114ClearPageProperty(pp);115//從空閑鏈表在中刪除此頁116listdel(le);117le=len;118)119//需要分割的頁塊進行分割120if(p->property>n){121(Le2pageCle,pagelink))->property=p->property-n;122)123//第一頁重置標志位124ClearPageProperty(p);125SetPageReserved(p);126〃計算剩余空閑頁個數(shù),返回分配的頁塊地址127nrfree-=n;128returnp;129}130}131returnNULL;132)注:算法改善空間:第一頁重置標志位操作被注釋后,仍然可以編譯運營。(3)default_frec_pages:用于釋放已經(jīng)使用完的頁,使其合并到frec」ist中;A.環(huán)節(jié):
(1)在free_list中查找合適位置,用以插入;(2)改變被釋放頁的標志位flags及計數(shù)器ref;(3)在free」ist中向高地址或第地址合并。B.具體實現(xiàn):134//參數(shù)是某個連續(xù)的空閑塊的起始頁,頁個數(shù)|135staticvoiddefaultfreepages(structPage*base,size_tn){136〃保證分配不會超出范圍,金即報錯保證魯棒性137assert(n>0);138assert(PageReserved(base));1390123456789〃查找該插入的位置le0123456789listentryt*le=&freelist;structPage*p;while((le=list_next(le))!=&free_list){p=le2page(le/pagelink);if(p>base){break;))〃向le之前插入n個頁,設(shè)置標志位150for(p=base;p<base+n;p++){151listaddbefore(lef&(p->pagelink));152base->flags=0;153setpageref(base,0);154ClearPageProperty(base);155SetPageProperty(base);156}157〃將頁塊大小記錄在鏈表頭158base->property=n;159160//向高地址合并161p=le2page(le,pagelink);162if(base+n==p){163base->property+=p->property;164p->property=0;165}678901234666677777678901234666677777111111111le=listprev(&(base->pagelink));p=Le2page(le,pagelink);if(le!=&free_list&&-p==base-l){while(le!=&freelist){if(p->property){p->property+=base->property;base->property=0;break;TOC\o"1-5"\h\z175}176le=listprev(le);177p=Le2page(le,pagelink);178)179}180181nr_free+=n;182return;183)練習2:實現(xiàn)尋找虛擬地址相應(yīng)的頁表項(需要編程)通過設(shè)立頁表和相應(yīng)的頁表項,可建立虛擬內(nèi)存地址和物理內(nèi)存地址的相應(yīng)關(guān)系。其中的get_pte函數(shù)是設(shè)立頁表項環(huán)節(jié)中的一個重要環(huán)節(jié)。此函數(shù)找到一個虛地址相應(yīng)的二級頁表項的內(nèi)核虛地址,假如此二級頁表項不存在,則分派一個包含此項的二級頁表。本練習需要補全get—pt。函數(shù)inkern/mm/pmm.c,實現(xiàn)其功能。請回答如卜問題:請描述頁目錄項(PagDirectorEnIry)和頁表(PageTableEntry)中每個組成部分的含義和以及對ucore而言的潛在用處。假如uc。re執(zhí)行過程中訪問內(nèi)存,出現(xiàn)了頁訪問異常,請問硬件要做哪些事情?解答:分析思緒:pde_t為pagedirectoryentry,也就是一級頁表的表項。Pte_t為pagetableentry,表達二級頁表的表項。uintptr_t表達為線性地址,由于段式管理只做直接映射,所以它也是邏輯地址。pgdir(一級頁表)給出頁表起始地址。通過查找這個頁表,我們需要給出
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行操作風險與內(nèi)部控制
- 2025華瑞機械制造公司應(yīng)急預(yù)案合同
- 酒店保潔保安培訓課件
- 口腔護理操作及并發(fā)癥
- 2025年份2月份腦波控制技術(shù)抵押借款動態(tài)利率調(diào)整協(xié)議
- 舊空調(diào)安裝合同范本
- 石灰運輸銷售合同范本
- 冷庫承包的合同二零二五年
- 二零二五版增資擴股股權(quán)轉(zhuǎn)讓協(xié)議
- 大棚施工合同
- 可穿戴式設(shè)備安全可靠性技術(shù)規(guī)范 頭戴式設(shè)備
- 《網(wǎng)絡(luò)營銷》-課件:33病毒營銷
- 2024項目投資協(xié)議書
- 《駱駝祥子》讀書分享
- 湖南省2024年中考物理試題(含答案)
- 品質(zhì)提升計劃改善報告課件
- NB-T35026-2022混凝土重力壩設(shè)計規(guī)范
- 中考數(shù)學計算題練習100道(2024年中考真題)
- 我和我的祖國混聲四部合唱簡譜
- DL-T-5161.8-2018電氣裝置安裝工程質(zhì)量檢驗及評定規(guī)程盤、柜、及二次回路接線施工質(zhì)量檢驗
- 家校溝通經(jīng)驗分享-溝通有方法教育有溫度
評論
0/150
提交評論