




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗四-統(tǒng)計缺頁次數(shù)實驗四統(tǒng)計操作系統(tǒng)缺頁次數(shù)實驗?zāi)康膶W(xué)習(xí)虛擬內(nèi)存的基本原理和Linux虛擬內(nèi)存管理技術(shù);深入理解、掌握Linux的按需調(diào)頁過程;掌握內(nèi)核模塊的概念和操作方法,和向/proc文件系統(tǒng)中增加文件的方法;綜合運用內(nèi)存管理、系統(tǒng)調(diào)用、proc文件系 統(tǒng)、內(nèi)核編譯的知識。實驗內(nèi)容1. 原理Linux的虛擬內(nèi)存技術(shù)采用按需調(diào)頁,當(dāng)CP請求一個不在內(nèi)存中的頁面時,會發(fā)生缺頁,缺 頁被定義為一種異常(缺頁異常),會觸發(fā)缺頁 中斷處理流程。每種CPU結(jié)構(gòu)都提供一個 do_page_fault處理缺頁中斷。由于每發(fā)生一次 缺頁都要進(jìn)入缺頁中斷服務(wù)函數(shù) do_page_fault 一次,所以可以認(rèn)
2、為執(zhí)行該函數(shù)的次數(shù)就是系統(tǒng) 發(fā)生缺頁的次數(shù)。因此可以定義一個全局變量pfcountdo_page_fault時,該變量值加1。本實驗通過動態(tài)加載模塊的 方法'利用/proc文件系統(tǒng)作為中介來獲取該值2. 實驗環(huán)境操作系統(tǒng):Ubuntu 12.04 (內(nèi)核版本為 3.2.0-23-ge neric-pae)內(nèi)核源碼:li nu x-3.2.58實驗指導(dǎo)1.下載一份內(nèi)核源代碼并解壓Linux受GNU通用公共許可證(GPL)保護(hù), 其內(nèi)核源代碼是完全開放的?,F(xiàn)在很多Linux的 網(wǎng)站都提供內(nèi)核代碼的下載。推薦使用Linux的 官方網(wǎng)站: 。圖1 Lin
3、ux的官方網(wǎng)站在term in al下可以通過 wget命令下載源代碼:$ cd /tmpwget/pub/li nu x/kernel/v3.x/li nux-3.2.5tar.xz切換到root身份,解壓源代碼到/usr/src目錄 下:# xz -d linu x-3.2.58.tar.xz# tar -xvf linux-3258.tar -C /usr/src2修改內(nèi)核源代碼,添加統(tǒng)計變量1、切換到預(yù)編譯內(nèi)核目錄#cd /usr/src/li nux-3.2.582、修改處理內(nèi)存訪問異常的代碼/用vi編輯器打開fault.c,一般使用In te
4、l x86體系結(jié)構(gòu),則修改arch/x86/目錄下的文件#vi arch/x86/mm/fault.c#cd arch/x86/mm#sudo gedit fault.cm:/usr/src/linux-3*2.74/include/linuxft cd lu: /usr/src/1 tnux-3.2.1A/tncludeir cd arch/xse/nn.arch/jfSC/nn: ho such file or directorytu:/usr/src/ltnux-3*.74/include# cd /arch/x&fiym h* - /ar ch/x86/niFii Neu su
5、ch file or d.rectory I m:/us/5rc/linux-3* 2.74/include# cd arch:arch: No such file or dtrecLary;u;/usrysrc/linux-3*2.74/include# cd /archI: /archi Mo such file or directory.u: /usr/src/ltnux- 2.2.74/tncludeJt cd .zu:/usr/5rc/linux-3.2.74# cd arch/xHt/nli : /usr/ src/linuKzu: /usr/src/linux-3.2.7 /ar
6、ch/xfitj/nn# Eudo gedlt fault .匚 *2.2.74fari=hfxE呑/nnft |ubuntu one Istructed_struct *vfij;struct task_stutt *tsk; uft£tgn«d long address;struct m_struct fault;l 匸豐 二 er ror mdeunsigned long volattic pfcount; dotrapllnkage void _kprobes 1( str oct pt_r egs * regs F uri signed long errorc i
7、xje)PF WRITE; unsigned tnt flags = FAULT_FLAC_ALLOW_RCTRy | FflULT_FLAG_KILLABLE | (write ? FAULI_FLAG_WR1TE : 0;tsk - current; nn =在do_page_fault函數(shù)的上一行定義統(tǒng)計缺頁次數(shù)的全局變量pfcountun sig ned long volatile pfcount;/將pfcount加入到do_page_fault中,用以統(tǒng) 計缺頁次數(shù)pfeoun t+;3、修改內(nèi)存管理代碼用vi編輯器打開頭文件 mm.hextern voldl * high Pie
8、nory; extern irt page_cluster*extern unsigned Long volatile pfeoun ttfdef CONFIC_SYSCTL extern Int sysctl legacy va Idyuut;#vi in clude/l inu x/mm.hII在mm.h中加入全局變量 pfeount的聲明, 代碼加在 extern int page_cluster;語句之后exter n un sig ned long volatile pfeount;4、導(dǎo)出pfcount全局變量,讓整個內(nèi)核(包 括模塊)都可以訪問。方法是:#cd kernel#su
9、do gedit kallsyms.c在文件最后加入一行代碼EXPORT_S YMBOL(pfcou nt);7U:/U5r/src/ltnui'3,2,74# cd kernel:u: /us r/src/Iinux 3, 2.74/ke rnel# sudo gedtt Icallsyns ,c 二u:f u百2 .了4/k便riEl 尊tfendtf 嚴(yán) CONFIC_KGDB_KDB */± file_operations kall£yfTi5_operation FSllsyns open,.read = seq_廣皀ad,=seq Iseek(,rele
10、ase - seq_rele3se_privaterLibreOffce Impress/openAlseek1;static tit intt kallsyns tntt(votd)iproc createf"kails/nsw, 0444, null, akallsyns operations); return 0;device in it cal.l(kalsyns_init);EXPORT S/HBOL(pfCOUnt):3. 配置編譯新內(nèi)核用編譯Linux內(nèi)核預(yù)備實驗中的方法完成新 內(nèi)核的配置、編譯、替換,重啟后驗證是否完成 替換。在編譯內(nèi)核前,一般來說都需要對內(nèi)核進(jìn)行相
11、應(yīng)的配置。配置是精確控制新內(nèi)核功能的機會。 配置過程也控制哪些需編譯到內(nèi)核的二進(jìn)制映 像中(在啟動時被載入),哪些是需要時才裝入的 內(nèi)核模塊(module )。首先進(jìn)入內(nèi)核源代碼目錄:# cd /usr/src/li nux-3.2.58如果不是第一次編譯的話,有必要將內(nèi)核源代 碼樹置于一種完整和一致的狀態(tài)。因此,推薦執(zhí)行命令 make mrproper。它將清除目錄下所有配置文件和先前生成核心時產(chǎn)生的.0文件:#make mrproper(如果是第一次可跳過此步)然后配置編譯選項(此處使用原內(nèi)核的配置文 件,完整的配置命令看操作提示):#cp/boot/c on fig-3.2.0-20-g
12、e neric-pae.config該命令的作用是將原內(nèi)核配置文件拷貝的當(dāng)前目錄下,并命名為.config。若需要進(jìn)一步修改配置請參照操作提示cp /boat/confvg-3.2*0-2& generic pae_LUI IhUL_jU L1 Uk/U Ljctutuntu:/usr/src/linjx /Eft 八 inux在編譯前用#uname -r查看原來的版本rootuburtu : /if uname - r3.2 *0-20'generic-pae Auhnntm * fit |4. 編譯內(nèi)核和模塊編譯內(nèi)核,就用:#make編譯內(nèi)核需要較長的時間,具體與機器的硬件
13、 條件及內(nèi)核的配置等因素有關(guān)(采用 VMWare 虛擬機,需要約60分鐘)。完成后產(chǎn)生的內(nèi)核 文 件 bzlmage 的 位 置 在 /usr/src/li nu x/arch/i386/boot 目錄下,當(dāng)然這里 假設(shè)用戶的CPU是Intel x86型的,并且你將內(nèi) 核源代碼放在/usr/src/linux目錄下。如果選擇了可加載模塊,編譯完內(nèi)核后,要對 選擇的模塊進(jìn)行編譯,可用:#make modules5. 安裝新內(nèi)核模塊和新內(nèi)核#make modules in stall此處有改動選擇了取消然后,用下面的命令將新內(nèi)核安裝到系統(tǒng)中:# make in stallF H 1 HL :kUr
14、iQLFATAL:CuuldnotlaadFATAL :couldnotloadfatal:Ccmj IdnotLoadfatal:couldnotloadFATAL:CuuldnotIwdexecuting «xec.uttngrun-parts: t un-pdr Ls: -3,2.74 run 叩 arts;3.Z.74executingg U lor v di rectory director y directory directory d tr ettur yr l Lt file rile tile flU FiUSUS 51ICI- such suchSuch5Uthj
15、 l LQ/nqauj/piusju les -utp:! lib/nodul es/ 3 r2.74/modultiLs . dep:/Llb/nodules/s kz.74/noduLes.dep:/lib/noduI eg/丁.2.74/moduLesdep:/llb/nodules/3.2.74/nodules-dep:/ltb/nodules/1.2.74/nodule&Tdep:NONaNowa Nu/etc/ksrncl/postinst.d/pn-utiIs 3*2.?4 /boot/vnlinuz-3.2.74/etc/k«rnel/postinst.d/u
16、pdate-notLfter 3.Z.74 /boot/unltnuz/etc/kernel/postinsd/zz-update-grub 3.2.7 /boot/vnllnuzGenerating grub*ctg *Found llnux Lndqe: /Iboot/vnllriuz -3,2.74Found tnitrd image: /bDot/iritrdimg-1.274Found llftux/boot/vnliruz-za -geriertc paeFound inltr d Inidcje: /boot/ Lflltrd.*gener lc-pdeFound Htest86
17、+/bflot/mePitest86+ »bindonerootubuntu:/usr/src/llnux-3.2k74N tuke tnitflllsh /usr/arc/Unux 3.2.7/rch/xse/boot/tnstall,sh 3.2«74 arch/?t&G/boot/bzinafle System, Flap "* /boot *r* 11 n n ri-<r » a. u jaur i *1-" nyq d jt / L*di. m a 1 丿-E «.«* ri /1 n 4 + f-
18、i ra f r _ f- « 1 *-通常,Linux在系統(tǒng)引導(dǎo)后從/boot目錄下讀 取內(nèi)核映像到內(nèi)存中。因此如果想要使用自己編譯的內(nèi)核,就必須用 make in stall命令將啟動文件(內(nèi)核映像)安裝到/boot目錄下6. 編寫讀取pfeount值的模塊代碼系統(tǒng)重啟后,執(zhí)行如下操作:#mkdir sourceII在當(dāng)前用戶目錄下創(chuàng)建source文件夾,用于存放編寫的用戶程序#cd sourceII切換至U source 目錄#vi pf.cII新建用于構(gòu)建模塊的代碼I*pf.c*II*modules program*/#in elude <li nux/ini t.h&
19、gt;#inelude <linux/module.h>#i nclude <li nu x/ker nel.h>#in elude <li nu x/mm.h>#i nclude <li nu x/proc_fs.h>#in elude <li nu x/stri ng.h>#in clude <asm/uaccess.h>struct proc_dir_e ntry *proc_pf;struct proc_dir_e ntry *proc_pfc ount;exter n un sig ned long pfeoun
20、t;static inline struct proc_dir_e ntry *proc_pf_create(c onst char* n ame, mode_t mode, read_proc_t * get_ info)return create_proc_read_e ntry(n ame,mode,proc_pf,get_ in fo,NULL);*peofint get_pfcount(char*buffer, char *start, off_t offset, int length, intvoid *data)int len = 0;len = sprintf(buffer, "%ld n", pfeount);return len;static int pf_in it(void)proc_pf = proc_mkdir("pf", 0);proc_pf
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年南充道路運輸從業(yè)資格證考試內(nèi)容是什么
- 工作經(jīng)驗交流會發(fā)言稿
- 2025年遂寧貨運從業(yè)資格證模擬考試保過版
- 《物理光的折射與反射現(xiàn)象教學(xué)教案》
- 高中語文課本中的古詩鑒賞訓(xùn)練
- 買賣合同代售協(xié)議
- 綜合版畫教你如何變廢為寶知到課后答案智慧樹章節(jié)測試答案2025年春內(nèi)蒙古藝術(shù)學(xué)院
- 公司快遞收發(fā)記錄表格(日常)
- O-Acetylsalicylhydroxamic-acid-生命科學(xué)試劑-MCE
- ER-ligand-6-生命科學(xué)試劑-MCE
- 會議會務(wù)服務(wù)投標(biāo)方案投標(biāo)文件(技術(shù)方案)
- 2024全新《婚姻法》精美課件
- 無違法犯罪記錄證明申請表(個人)
- 請款單(可直接打印-標(biāo)準(zhǔn)模板)
- 2022年三八婦女節(jié)婦女權(quán)益保障法律知識競賽題庫及答案(共290題)
- 引水罐的設(shè)計計算
- Of studies原文譯文及賞析
- 安全閥基本知識講義
- 不銹鋼排煙風(fēng)管施工實施方案
- PMC部門工作流程圖
- 電梯應(yīng)急平層裝置安裝說明書
評論
0/150
提交評論