內(nèi)存管理實(shí)驗(yàn)_第1頁(yè)
內(nèi)存管理實(shí)驗(yàn)_第2頁(yè)
內(nèi)存管理實(shí)驗(yàn)_第3頁(yè)
內(nèi)存管理實(shí)驗(yàn)_第4頁(yè)
內(nèi)存管理實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)二 缺頁(yè)次數(shù)統(tǒng)計(jì)n實(shí)驗(yàn)?zāi)康?.了解內(nèi)存管理方法。2.記錄進(jìn)程缺頁(yè)中斷次數(shù)。Linux分段和分頁(yè)在x86CPU中,分段機(jī)制是實(shí)現(xiàn)虛擬主存的基本單位。在保護(hù)模式下,通過(guò)硬件地址主存管理單元(Memory Management Unit ,MMU)將虛擬地址轉(zhuǎn)換為物理地址 。分頁(yè)機(jī)制在分段機(jī)制之后工作,以完成從線性地址到物理地址的轉(zhuǎn)換。 Linux頁(yè)面管理n在Linux中,主存的分配與管理以頁(yè)框?yàn)閱挝?,一個(gè)頁(yè)框的大小為4KB。n內(nèi)核需要對(duì)每個(gè)頁(yè)框的狀態(tài)進(jìn)行管理,為每個(gè)頁(yè)框分配一個(gè)struct page,該結(jié)構(gòu)記錄頁(yè)框的使用狀態(tài)。 n使用bitmap對(duì)頁(yè)框進(jìn)行管理。共11個(gè) 。第0組的每一個(gè)表示單

2、個(gè)頁(yè)框的使用情況,為1表示該頁(yè)框正在使用,為0表示空閑;第1組的每一位表示相鄰的兩個(gè)頁(yè)框的使用情況,如果其中有一個(gè)位置1,表示對(duì)應(yīng)的兩個(gè)頁(yè)框正在使用,以此類推;第i組中的每一位表示相鄰的2i個(gè)頁(yè)框被使用的情況。 Linux頁(yè)面換出 nkswapd()利用兩個(gè)控制變量free_pages_high和free_pages_low進(jìn)行判斷。如果空閑頁(yè)框數(shù)小于free_pages_high,就要有頁(yè)面被交換出去;如果空閑頁(yè)框數(shù)小于free_pages_low,kswapd()不僅換出部分頁(yè)面,還要把睡眠時(shí)間減為平時(shí)的一半,更頻繁地?fù)Q出頁(yè)面;當(dāng)空閑頁(yè)框數(shù)大于free_pages_low時(shí),睡眠時(shí)間又會(huì)恢

3、復(fù)原樣。 Linux頁(yè)表 n所以頁(yè)目錄項(xiàng)和頁(yè)表一共只需要20位,占用物理地址的1231位,還有12位用作標(biāo)志位,可以用于控制或其他目的 。n存在位:表明項(xiàng)對(duì)應(yīng)的物理頁(yè)是否加載到主存。n讀/寫位:表明該頁(yè)是只讀還是可寫,起保護(hù)作用。n用戶/系統(tǒng)位:選擇用戶級(jí)訪問(wèn)許可或內(nèi)核級(jí)訪問(wèn)許可。n訪問(wèn)位:表明該頁(yè)是否被訪問(wèn)過(guò)。n臟標(biāo)志位:表明該頁(yè)是否被寫過(guò)。n直寫位:置位表明頁(yè)面cache采用“直寫”(既寫主存也寫緩存),否則回寫緩存。 Linux地址n頁(yè)目錄表項(xiàng),置于高10位,存放頁(yè)目錄的索引;頁(yè)表項(xiàng),占據(jù)中間10位,存放頁(yè)表的索引;偏移量,占據(jù)低12位,表示在4KB的頁(yè)框中的偏移量。 n頁(yè)目錄用一個(gè)物理

4、頁(yè)框存儲(chǔ),用來(lái)保存頁(yè)表的基址。每個(gè)數(shù)據(jù)項(xiàng)占4B,因而頁(yè)目錄表有1024個(gè)數(shù)據(jù)項(xiàng)。 n頁(yè)表也使用一個(gè)物理頁(yè)框存儲(chǔ),用來(lái)保存物理頁(yè)框號(hào)。每個(gè)數(shù)據(jù)項(xiàng)占4B因而頁(yè)表也有1024個(gè)數(shù)據(jù)項(xiàng)。 Linux進(jìn)程虛存區(qū)映射 n在Linux內(nèi)核中,創(chuàng)建并初始化一個(gè)虛存區(qū)映像是由被稱為主存映射的函數(shù)mmap()來(lái)完成的 。nMMU進(jìn)行虛實(shí)地址轉(zhuǎn)換時(shí)會(huì)產(chǎn)生缺頁(yè)異常,然后系統(tǒng)通過(guò)異常調(diào)用執(zhí)行do_page_fault()函數(shù)來(lái)完成可執(zhí)行文件的剩余頁(yè)面。 統(tǒng)計(jì)系統(tǒng)和單個(gè)進(jìn)程的缺頁(yè)次數(shù) n先需要添加一個(gè)全局變量global_pf作為計(jì)數(shù)變量,將該變量申明在usr/src/kernels/linux 2.6.18/ incl

5、ude/linux/mm.h文件中:extern unsigned long volatile global_pf;n在arch/i386/mm/fault.c中定義該變量:unsigned long volatile global_pf=0;注:.h文件用“文本編輯器”打開方法:右鍵點(diǎn)擊文件,選擇“使用其它程序打開”,在“使用自定義命令”中鍵入gedit,點(diǎn)擊“打開”。n在定義好之后,修改arch/i386/mm/fault.c中的do_page_fault(),global_pf在該函數(shù)的開始時(shí)自增:fastcall void _kprobes do_page_fault(struct p

6、t_regs*regs,unsigned long error_code) tsk = current;在tsk = current; 后添加global_pf+;n要記錄進(jìn)程的缺頁(yè)次數(shù),首先要在進(jìn)程的進(jìn)程控制塊中添加一個(gè)成員pf。進(jìn)程控制塊task_struct定義在文件include/Linux/Sched.h中;Struct task_structunsigned long pf;n修改arch/i386/mm/fault.c中的do_page_fault()函數(shù),當(dāng)前進(jìn)程的pf在該函數(shù)開始時(shí)自增:fastcall void_kprobes do_page_fault(struct pt

7、_regs*regs, unsigned long error_code) tsk = current; global_pf+;在上次添加的global_pf+;后添加current-pf+;nkernelfork.c文件中的dup_task_struct函數(shù),修改該函數(shù)進(jìn)程的pf設(shè)置成0:Static struct task_struct*dup_task_struct(struct task_struct*orig) *tsk=*orig; 在*tsk=*orig;后添加tsk-pf=0;n添加系統(tǒng)調(diào)用。在linux-2.6.18/kernel/sys.c文件的最后添加以下內(nèi)容。asmli

8、nkage long sys_global_pf()return global_pf;asmlinkage long sys_pf()return current-pf;系統(tǒng)調(diào)用設(shè)計(jì)n在linux-2.6.18/include/asm-i386/unistd.h中 #define _NR_move_pages 317后定義調(diào)用號(hào): #define _NR_global_pf 318 #define _NR_pf 319n在linux-2.6.18/arch/i386/kernel/ syscall_table.S的最后添加: .long sys_global_pf .long sys_pf重新編譯內(nèi)核。寫測(cè)試代碼#include #include int main()long gpf=syscall(318);long cpf=syscall(319);printf(%dn,gp

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論