




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Linux內(nèi)存管理實(shí)驗(yàn)、實(shí)驗(yàn)?zāi)康?. 通過在Linux環(huán)境下對內(nèi)存管理的基本操作,感性認(rèn)識Linux如何對內(nèi)存進(jìn)行管理。2. 利用readelf和objdump觀測linux下的內(nèi)存地址映射過程以及進(jìn)程的虛擬地址空間。二、實(shí)驗(yàn)內(nèi)容與要求(1) 按照實(shí)驗(yàn)內(nèi)容完成實(shí)驗(yàn)操作步驟,學(xué)習(xí)內(nèi)存管理中的一些常用命令(2) 理解linux中邏輯地址、線性地址的概念。三、實(shí)驗(yàn)步驟與測試實(shí)驗(yàn)一free命令顯示顯示內(nèi)存的使用情況(使用的和空閑的),包括物理內(nèi)存、交換區(qū)內(nèi)存、內(nèi) 核緩沖區(qū)內(nèi)存。不包括共享內(nèi)存。free命令默認(rèn)選項(xiàng)為-k語法:free -bkmotV -s <間隔秒數(shù) >選項(xiàng)介紹:-b:以B
2、yte為單位顯示內(nèi)存使用情況;-k:以KB為單位顯示內(nèi)存使用情況;-m:以MB為單位顯示內(nèi)存使用情況;-o:不顯示緩沖區(qū)調(diào)節(jié)列;-s<間隔秒數(shù) >:每間隔指定時間執(zhí)行一次free命令;-t:顯示內(nèi)存總和列;-V:顯示版本信息;(1)free -k:以KB為單位顯示內(nèi)存使用情況;userLiser * desktop:f ree -ktotalusedf reesharedbufferscachedMem:33555084906642864944025164263460-/+ buffers/cache:202Q203153488Swap:000userijuser-(desktop
3、:$解釋:total:內(nèi)存總量:3355508(k)used:已經(jīng)使用的內(nèi)存量:490664(k)free:空閑的內(nèi)存量:2864844(k)shared:當(dāng)前已經(jīng)廢棄不用,總量是0(k)buffers: 25164( k)Buffer Cache 內(nèi)存量:263480(k) cached: Page Cached存量:21436(k)(2) free -m -s 5:以M為單位,5秒顯示以下內(nèi)存信息useruser-desktop:-$free -m *s 5totalusedf reesharedbufferscachedMem:32764792797024257-/+ buffers/c
4、ache:1973079Swap:G00totalusedf reesharedbofferscachedMem:32764792797024257-/+ buffers/cache:1973079Swap:000解釋:以上為每隔 5秒顯示內(nèi)存信息,由以上圖可知:兩次內(nèi)存使用情況沒有變化。(3)free -o:不顯示緩沖區(qū)調(diào)節(jié)列;usertBuser-desktop: totalfree -ousedf reesharedbufferscachedMem:335550S4915322663976025308263496Swap:0003355508(k),內(nèi)存已使用為491408(k),內(nèi)存空
5、閑為解釋:由以上可知Buffer Cache這一列沒有顯示出來 (4)free -t:顯示內(nèi)存總和列;useruser-desktop:車 free -ttotalusedf reesharedbufferscachedMem:33555084914084100025368263508-/+ buffers/cache;2025323152976Swap:000Total:3355084914082964100解釋:如上所示,內(nèi)存總和是2864100(k)。(5)free -V:顯示版本信息usereuser'desktop:free V procps version 3.2*7J_,
6、1L c 1,_, cI ” 解釋:版本號為3.2.72. swap on : 顯示交換區(qū)的使用狀況u 酸皂宜皂de薛kt op:swapon -sFilenamei口尸金i 匸凸 廠一 ria口Ik j-m Ct:_HTypeSizeUsedPriority解釋:交換區(qū)名為:/dev/sda3,類型為partition,大小為425712,已使用為0,優(yōu)先級為-1。3. vmstat是Virtual Meomory Statistics (虛擬內(nèi)存統(tǒng)計)的縮寫,可對操作系統(tǒng)的虛擬內(nèi)存、進(jìn)程、CPU活動進(jìn)行監(jiān)視。它是對系統(tǒng)的整體情況進(jìn)行統(tǒng)計,不足之處是無法對某個進(jìn)程進(jìn)行深入分析。useruse
7、r-desktop:-$ vmstmt 3 3procs-'memory -swap-1 -system-cpur bswpdfreebuffcachesisobiboincs ussy id wa0 002B2266B471242723240Q595741B810 9S10 0028226527124272924000QLO412700 10D00 004712427292J0000971300 0 1000URArfaijrr r- Has;:k ton :1解釋:vmstat -V' -n delay count其中,一V表示打印出版本信息;一n表示在周期性循環(huán)輸出時,輸
8、出的頭部信息僅 顯示一次;delay是兩次輸出之間的延遲時間;count是指按照這個時間間隔統(tǒng)計的次數(shù)。 對于vmstat輸出各字段的含義,可運(yùn)行 man vmstat查看。下面給出了各個參數(shù)的不同含義:procs:r-在運(yùn)行隊列中等待的進(jìn)程數(shù)b-在等待io的進(jìn)程數(shù)w-可以進(jìn)入運(yùn)行隊列但被替換的進(jìn)程memoyswap-現(xiàn)時可用的交換內(nèi)存(k表示)free-空閑的內(nèi)存(k表示)4buff-被用來做為緩存的內(nèi)存數(shù),單位:KBcache-被用來做為文件讀寫緩存的內(nèi)存數(shù),單位:KB swapsi-從磁盤交換到內(nèi)存的交換頁數(shù)量,單位: so-從內(nèi)存交換到磁盤的交換頁數(shù)量,單位: 10bi-磁盤塊入 bo
9、-磁盤塊出 Systemin-每秒的中斷數(shù),包括時鐘中斷 cs-每秒的環(huán)境(上下文)切換次數(shù)CPU按CPU的總使用百分比來顯示 us-用戶進(jìn)程使用的時間 sy-系統(tǒng)進(jìn)程使用的時間 id-cpu空閑的時間pages re-回收的頁面 mf-非嚴(yán)重錯誤的頁面 pi-進(jìn)入頁面數(shù)(k表示) po-出頁面數(shù)(k表示) fr-空余的頁面數(shù)(k表示) de-提前讀入的頁面中的未命中數(shù) sr-通過時鐘算法掃描的頁面 disk顯示每秒的磁盤操作。s表示 scsi盤,0表示盤號fault顯示每秒的中斷數(shù) in-設(shè)備中斷 sy-系統(tǒng)中斷cy-cpu 交換 實(shí)驗(yàn)二1.搭建linux實(shí)驗(yàn)平臺,并在搭建好的平臺中用1.
10、/*test.c */2.2. #include <stdio.h>4.3. int global_data = 4;6.4. int global_data_2;8.5. int main( int argc,char *argv)KB/秒KB/秒vi編輯器編寫一個簡單 C程序:10.12.13.int local_data = 3;14.15.printf("HelloWorldn" );16.17.printf("global_data= %dn",global_data);18.19.printf("global_data_
11、2= %dn",global_data_2);20.21.printf("local_data= %dn",local_data);22.23.return (0);24.25.2.編譯:$gcc -o test test.cuserusedesktopgcc -o test test匚 userQuser-desktop:A.查看ELF的頭。剛生成的二進(jìn)制就是我們要查看的目標(biāo)。從ELF的頭開始吧: $readelf -h test實(shí)驗(yàn)結(jié)果:usereuser-desktopzreadelf -h ELF Header:Magics 7f 45 4C 4百 01
12、QI 01 Class:Data;=nversion:OS/ABI:ABI Version;Type:Machine:¥芒sion:Entry point 生dU廣右蓉s:Start of program headers:5tart of section headers:Fags:Size of this header:Size of program headers-;Number of program he-aders: size of section headers:Numbeol section hede呂;S&ctioni header string table in
13、dex:testOQ 00 TO DO 00 QO TO DO 00 BLF322*s 匚omplennenlittle endi1 (current)imx - System v0EXEC (Executable file)Intel 80385Dxl0x904831052 (bytes into file) SOM (bytes into ile) QxQ52 (bytti)32 (bytes)B40 (bytes)茹3313"machine和 “ class字段)。開始運(yùn)行。這個地址不是指向我們_start函數(shù)是被linker創(chuàng)建的,可執(zhí)行文件是可以在Intel x86 32
14、bit的體系的機(jī)器上運(yùn)行的(從當(dāng)執(zhí)行時,程序?qū)奶摰刂?0x080482c0(看“Entrypoint address ” 常見的main()函數(shù)地址的,但是它指向是一個名為 _start的函數(shù) 它的目標(biāo)是初始你的程序。這個程序還有 28個節(jié)區(qū)(section)和7個段(segment)什么是節(jié)區(qū)(section) ? Section是在目標(biāo)文件中的一個區(qū),它包括一些信息(這些信息對連接過程有用):程序的代碼、程序的數(shù)據(jù)(變量、數(shù)組、字符串),可重定向的信息和其它。所以,在每一個 區(qū),幾種信息組合在一起,這里有一個明顯地含義:代碼區(qū)只有代碼,數(shù)據(jù)區(qū)只是初始化的或是沒 有初始化的數(shù)據(jù),等等。節(jié)區(qū)
15、頭部分列表(Section Header Table,SHT )精確地告訴我們:ELF目標(biāo)文件中有什么 section。至少從 “Numberof section headers”字段中知道 “test目標(biāo)文件有 28個 sect ion.如果section是一個二進(jìn)制表示的,linux內(nèi)核不能用一種方式讀懂它,linux內(nèi)核準(zhǔn)備幾個 VMA(Virtual Memory Area ),它們包括虛擬地址連續(xù)的頁面幀。在VMA的內(nèi)部,一個或多個 section被映射其中。在這個例子中每一個 VMA都代表一個ELF的段(segment)。那內(nèi)核是如何知道哪個 section 去往哪個 segmen
16、t 呢?這是 Program Header Table(PHT)的工作。Linking View Execution ViewELPhfladBt inn Program Header TdbirMH! 11 IF'II'111 1Section 1Illi 1 HIHIII1 ll l-lS&elk>n 2Higi | lilBiihi |>Hai 1 1 1Section 3MM11 1Sectionlilhl MHIIil 1Section Header TflhleEl±' heiidorProgram Hodder TdblpSe
17、gment 1begment <n>Scictinn FiPftflArTableB.查看 Section Header Table(SHT)讓我們看一個Section在程序中的存在形式:$ readelf -S test實(shí)驗(yàn)結(jié)果:useruser-desktop:-$ readelf -I testElf file type is exec (Executable file)Bntry paint 0kB04S31GThere are 8 program headersr starting at offset 52TypeOffsetVirtAddrPhysAddrFileSiz
18、Fig AlignPHDR0x0000340x080480340x000480340x00100RE 0x4INTIERP0x0001340x08048134Os 080481340x00013R0x1Requesting programinterpreter: /lib/ld-linu)ti5oLOADOkOOOOOO0x060490000x080480000x00548RE 0x1000LOADOxOOOf Oc508049 心0K08049f0cOjcOOIOgft40x1000DYNAMIC0x0001200xD8049f200)(0a049f20OsOOOdOy 0x4NOTE0XO
19、TO14S0JtQgQ4suaQMQgQ4S14B0HQ0Q20R0x4gnlj_stackKEXZ1OOD00x00000000XQOODGCIOOOxOE)D0OJ OxProg ram Headsr:MernSi z0x00100kOOO1320x005480x00118OKOOOdOOK00020DxQOOOT編譯器把可執(zhí)行代碼保存到.text節(jié)區(qū)中。那.text節(jié)區(qū)被標(biāo)記為可執(zhí)行(X在flag字段)。在這個節(jié)區(qū),你可以看到我們main()函數(shù)的機(jī)器代碼。$ objdump -d -j.text test實(shí)驗(yàn)結(jié)果:NOTE0x000148 0x08048143 0x09048148 0
20、x00020 Ok000200x4GMJ_STACK0x000000 0x00000000 OxGGCKJOGOC OxOOODO 0x00000切0x4GNU_RELFK)OxOOOf DC 0x08049f0C OxO©CM9fOC 0x000f4 0k000<4* OKISection to Segment mapping:Segnuent SectionsOG01interp02interp note,ABIt呂g hash gnuh甘呂h .dynsym u dynstrgnu廣sion .gnu.versionr .reldyn 廣elpit init pit te
21、st , :im . rods-eh_frame03-ctors adtors* jcr-dynaniicgot got.pit . data .bss04dynamic05.note. ABI- t(ag0607.ctors -dtoris*jcr.dynamicgatisereuser-desktop:I-d選項(xiàng)告訴objdump分解機(jī)器代碼。-j告訴objdump只關(guān)心那個特定的節(jié)區(qū)(在本例中,是.text )。以下是執(zhí)行命令后的部分內(nèi)容。.data節(jié)區(qū)保存所有的初始化的變量,這些變量不在棧中。"Initialized是指這些變量被賦于初始值,如” global_data。&q
22、uot;那” local_data呢? “l(fā)ocal_data的值不在此節(jié)區(qū)中,它們生活在進(jìn)程的棧里。以下是用objdump查看.data節(jié)區(qū):$ objdump -d -j.data test實(shí)驗(yàn)結(jié)果:jser(auser-desktopobjdump -d - j.data testtest:Hie format eH32-i3S6iisassembly of section .data:)0O4aOOc <_data_start>:904a00c:0000add(%eax)B04aoio <_dso_handle>:904a010:00000000)&34
23、a014 cglobal_data5-:804自014:040000005;01"知弓色張 C.查看 program Header Table(PHT)段(segment)是一個OS “看懂”我們程序的方法。讓我們看看我們程序是如何變成段的吧:$readelf -l test實(shí)驗(yàn)結(jié)果:useriauiser-desktop:rsadelf -I testElf file type is EXEC (Executable file)Entry poiht 0x8043310There are S program headersj, starting at offset 52Progra
24、m Headers:TypeFig Align PHDRR IE Ok 4IMTERPR OxLoffset*0000340x000134Requesting program OkOOOOOOLOADR E OX LOO0LOADRW Ox 1000WMAMICFW 0X4MOTEROk 4GNU_ STACKFW 0X4OxOOOfOcOxOQOfaO0x000148OxOQOOOOvirtAddrPhysAddrFilesizMemSiz0x00043034OxOBOfil340x060400340x030401340x00100OkOO<313Ox001000x00013inter
25、preter: /lib/ld-linujc.iso.ia 0x00045000xoea-iBODci0K0O54Bk 005-8OxO0O49fOcoxoea49-focOkOOIOcOxOOllS0x0B049f200x0904920OxOOOdDOxOODdOOkOSQAQIAQ0x060481490x000200x00020OkOCOOOOGOOxOOOOOOOOkOOCIODkOQOOO實(shí)驗(yàn)結(jié)果解釋映射很直觀。例如段號2,這里有15個節(jié)區(qū)被映射到其中。.text節(jié)區(qū)就映射到此段。它的標(biāo)志是R,E其含義分別是可讀,可執(zhí)行。W就是可讀的含義??梢允褂?proc/<pid>/m
26、aps 文件也可以得看到它。<pid>是一個我們想要查看的進(jìn)程的ID。, test進(jìn)程運(yùn)行的太快了,在進(jìn)入 /proc這前,它就結(jié)束了??梢允褂胓db來解決此冋題。也可以在return之前調(diào)用sleep()來搞定這個問題。在另一個控制臺中:$ gdb test(gdb) b mai nBreakpoi nt 1 at 0x8048376(gdb) rBreakpoi nt 1,0x08048376 in mai n ()use r-use r - desk top :gdb testGNU gdb 6.8-debi anCopyright (C) SOOS Free Softwar
27、e Foundation” IncaLi c cnoc31 : GtlU GPL xu二i -n 2 c r Lotu r -:l_ittD: / 3i_L .c口.This is free software: you are free to change (aind redistrib There is NO WARRANTYr to the extent permitted byType日nd - show warranty11 details This GDB was configured as "1406- Linux - gnugdb) b mainBrealkpoint
28、1 at 0x80483d2(gdb 3 rStarting program: /home/user/testBreakpoint 1> Ox080483d2 in main ()Current language: auto; currently asm(gdb) I在此保持(hold)住,打開另一個控制臺,找到test的PID。如果你想圖省事的話,就這樣:$ cat /proc/'pgrep test'/maps實(shí)驗(yàn)結(jié)果:TTYptS/0ptS/0Pts/1TIME00;®: 00do:oo:口仃useruser-desktop:psPID82舶的7useru
29、ser-desktop:cat /proc/824B/mapsCSMBODO- O0D49OOOr- xpDDOOOOOOOS 01265000/hci me/user/testDSCM9DOO- agtMaMQpDOQOOODOQ0:O1265OT3/home/user/testCBMaDOO- OSOdbOOOrw- p0OOO100D08; 01265000/home/u&er/testbTeedDOO-bTeeeOODrw- pbTeedDOOdd:oo0b7feeeD00-bBDaOOOr-xp00000000OS: 01222108/lLib/tls./i 86/cmov/libc-2 9 芳o(jì)bSCaDOO- bQD4bOOOpDOlSeDOOOS 0122210S/lLilb/tl5/i686/匚 mo 站 f Li be-衛(wèi)3uSObscMbcro- beiMdoaor-p015CD00ae:oi22210©/lib/tls/ie®6/cnrav/libc-2,9rS0 ECcOX-LSC'dCOOrw- pOQi5eOOO08; 0122210Q/lLb/tls/i636/cmov/l.Lbc- 2.9bsqtSCMeDOO-bBDSiaODrw- phEQeDDO:DO0D8O5eOO0-
溫馨提示
- 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至2030年中國不燃輕型耐火隔板數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國不干膠裝飾品市場分析及競爭策略研究報告
- 解決人力資源問題的試題及答案
- 中國文化傳承與創(chuàng)新教育
- 2025至2030年中國三稀一黃加注系統(tǒng)市場現(xiàn)狀分析及前景預(yù)測報告
- 交通安全設(shè)施的規(guī)劃與設(shè)計研究
- 室內(nèi)設(shè)計培訓(xùn)教材
- 2025至2030年中國三氟醋酸鈉行業(yè)發(fā)展研究報告
- 人教部編版七年級下冊語文18《一棵小桃樹》精制(新課標(biāo)單元整體教學(xué)設(shè)計+課時教學(xué)設(shè)計)
- 2025至2030年中國一氧化碳?xì)怏w檢測變送器行業(yè)發(fā)展研究報告
- 燙傷不良事件警示教育
- 2025年騰訊云從業(yè)者基礎(chǔ)認(rèn)證題庫
- 面試官考試題及答案
- 高中主題班會 預(yù)防艾滋珍愛健康-中小學(xué)生防艾滋病知識宣傳主題班會課-高中主題班會課件
- (高清版)DB11∕T2316-2024重大活動應(yīng)急預(yù)案編制指南
- 診所規(guī)章制度范本
- 2025年日歷表全年(打印版)完整清新每月一張
- 四川省中小流域暴雨洪水計算表格(尾礦庫洪水計算)
- 楓香精油(征求意見稿)
- 電鍍企業(yè)安全風(fēng)險辨識分級管控清單
- 2022年北京市專升本英語真題
評論
0/150
提交評論