Exam03-實驗3-統(tǒng)計操作系統(tǒng)缺頁次數(shù)_第1頁
Exam03-實驗3-統(tǒng)計操作系統(tǒng)缺頁次數(shù)_第2頁
Exam03-實驗3-統(tǒng)計操作系統(tǒng)缺頁次數(shù)_第3頁
Exam03-實驗3-統(tǒng)計操作系統(tǒng)缺頁次數(shù)_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、實驗3 統(tǒng)計操作系統(tǒng)缺頁次數(shù)實驗?zāi)康膶W(xué)習(xí)操作系統(tǒng)的存儲管理原理;理解操作系統(tǒng)存儲管理的分頁、虛擬內(nèi)存、“按需調(diào)頁”思想及方法;掌握Linux內(nèi)核對虛擬內(nèi)存、虛存段、分頁式存儲管理、按需調(diào)頁的實現(xiàn)機制。實驗內(nèi)容進(jìn)行實驗前,務(wù)必先行閱讀、理解Linux內(nèi)核的關(guān)于存儲管理的源代碼,理解Linux存儲管理的整體思想。因為,本實驗比較簡單,沒能覆蓋Linux內(nèi)核中存儲管理的所有內(nèi)容。實驗共做兩個。第一個實驗統(tǒng)計自內(nèi)核加載完成以后到當(dāng)前時刻為止發(fā)生的缺頁次數(shù)和經(jīng)歷過的時間;第二個實驗統(tǒng)計從當(dāng)前時刻起一段時間內(nèi)發(fā)生的缺頁中斷次數(shù)。兩者的實現(xiàn)方法略有不同。實驗指導(dǎo)3.1系統(tǒng)缺頁次數(shù)看看這個實驗怎么通過自建變量

2、并利用/proc文件系統(tǒng),來統(tǒng)計自系統(tǒng)啟動以來,系統(tǒng)的缺頁次數(shù)。3.1.1 實驗原理由于每發(fā)生一次缺頁都要進(jìn)入缺頁中斷服務(wù)函數(shù)do_page_fault一次,所以可以認(rèn)為執(zhí)行該函數(shù)的次數(shù)就是系統(tǒng)發(fā)生缺頁的次數(shù)。因此可以定義一個全局變量pfcount作為計數(shù)變量,在執(zhí)行do_page_fault時,該變量值加1。至于系統(tǒng)自開機以來經(jīng)歷的時間,可以利用系統(tǒng)原有的變量jiffies。這是一個系統(tǒng)的計時器,在內(nèi)核加載完以后開始計時,以10ms(缺?。橛嫊r單位。當(dāng)然,讀取變量pfcount和變量jiffies的值,還需要借助/proc文件系統(tǒng)。在/proc文件系統(tǒng)下建立目錄pf;并且在pf目錄下,建立

3、文件pfcount和jiffies。3.1.2 實驗實施先在include/linux/mm.h文件中聲明變量pfcount:- linux-2.6.15/include/linux/mm.h.orig+ linux-2.6.15/include/linux/mm.h*26,29*extern unsigned long num_physpages;extern void * high_memory;extern unsigned long vmalloc_earlyreserve;extern int page_cluster;+ extern unsigned long pfcount;在

4、arch/i386/mm/fault.c文件中定義變量pfcount:- linux-2.6.15/arch/i386/mm/fault.c.orig+ linux-2.6.15/arch/i386/mm/fault.c*227,235*+ unsigned long pfcount;fastcall void _kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)struct task_struct *tsk;struct mm_struct *mm;struct vm_area_struct * vma;

5、unsigned long address;unsigned long page;int write, si_code;每次產(chǎn)生缺頁中斷,并且確認(rèn)是由缺頁引起的,則將變量值遞增1。這個操作在do_page_fault()函數(shù)中執(zhí)行:- linux-2.6.15/arch/i386/mm/fault.c.orig+ linux-2.6.15/arch/i386/mm/fault.c*328,328* goodarea: + pfcount+;在/kernel/time.c文件中加入EXPORT_SYMBOL(pfcount),讓內(nèi)核模塊能夠讀取變量pfcount;同理,內(nèi)核模塊也可以讀取jiff

6、ies:- linux-2.6.15/kernel/time.c.orig+ linux-2.6.15/kernel/time.c*687,687*EXPORT_SYMBOL(jiffies);+ extern unsigned long pfcount;+ EXPORT_SYMBOL(pfcount);以上部分是對Linux內(nèi)核源代碼的幾處修改。若讓它們起作用,顯然,需要重新編譯內(nèi)核,產(chǎn)生新的內(nèi)核的image;并且,重新啟動主機,裝入新編譯生成的image。內(nèi)核的編譯和裝入,可參見“編譯Linux內(nèi)核”一章。讀取pfcount和jiffies變量的內(nèi)核模塊,需要新編寫一個文件:pf.c#de

7、fine MODULE#include #include #include #include #include #include #include #include #include #include struct proc_dir_entry *proc_pf; /*/proc/pf/ 目錄項*/struct proc_dir_entry *proc_pfcount, *proc_jiffies; /* /proc/pf/pfcount和/proc/pf/jiffies 文件項*/*下面這個函數(shù)用于建立/proc/pf/ 目錄項*/static inline struct proc_dir_

8、entry *proc_pf_create(const char* name, mode_t mode, get_info_t *get_info) return create_proc_info_entry(name, mode, proc_pf, get_info);/*讀取pfcount 的值*/int get_pfcount(char *buffer, char *start, off_t offset, int length) int len = 0; len = sprintf(buffer, %dn, pfcount); /* pfcount is defined in arch

9、/i386/mm/fault.c */ return len;/*讀取 jiffies的值*/int get_jiffies(char *buffer, char *start, off_t offset, int length) int len = 0; len = sprintf(buffer, %dn, jiffies); return len;/*模塊初始化進(jìn)程,建立/proc下的目錄和項*/int init_module(void) proc_pf = proc_mkdir(pf, 0); proc_pf_create(pfcount, 0, get_pfcount); proc_p

10、f_create(jiffies, 0, get_jiffies); return 0;/*模塊清除進(jìn)程,清除/proc下的相關(guān)目錄和文件*/void cleanup_module(void) remove_proc_entry(pfcount, proc_pf);remove_proc_entry(jiffies, proc_pf);remove_proc_entry(pf, 0);MODULE_LICENSE(“GPL”); 在編譯內(nèi)核模塊前,先準(zhǔn)備一個Makefile:TARGET = pfKDIR = /usr/src/linuxPWD = $(shell pwd)obj-m += $(TARGET).odefault:make -C $(KDIR) M=$(PWD) modules然后簡單輸入命令make:#make結(jié)果,我們得到文件“pf.ko”!這意味著,你成功了。然后執(zhí)行加載模塊命令:#insmod pf.ko這樣就可以通過作為中介的/proc文件系統(tǒng),輕松地讀取我們所

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論