




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1linux操作系統(tǒng)精講操作系統(tǒng)精講大連理工大學(xué)軟件學(xué)院大連理工大學(xué)軟件學(xué)院 邱鐵邱鐵 綜合樓綜合樓413,tel_mail: 參考教材:參考教材:plinux應(yīng)用與開發(fā)典型實(shí)例精講應(yīng)用與開發(fā)典型實(shí)例精講邱鐵、于玉龍、邱鐵、于玉龍、徐子川編著徐子川編著. 清華大學(xué)出版社清華大學(xué)出版社. 2010.52第第16章章 內(nèi)存管理內(nèi)存管理學(xué)習(xí)本章要達(dá)到的目標(biāo):學(xué)習(xí)本章要達(dá)到的目標(biāo):o結(jié)合操作系統(tǒng)原理課程,深入理解結(jié)合操作系統(tǒng)原理課程,深入理解linux系系統(tǒng)物理內(nèi)存管理機(jī)制;統(tǒng)物理內(nèi)存管理機(jī)制;o理解伙伴算法和理解伙伴算法和slab分配器的工作原理;分配器的工作原理;o熟
2、悉操作系統(tǒng)提供的有關(guān)內(nèi)存管理的內(nèi)核函數(shù);熟悉操作系統(tǒng)提供的有關(guān)內(nèi)存管理的內(nèi)核函數(shù);o學(xué)會(huì)在學(xué)會(huì)在linux內(nèi)核態(tài)下申請(qǐng)內(nèi)存空間的方法。內(nèi)核態(tài)下申請(qǐng)內(nèi)存空間的方法。316.1 關(guān)于關(guān)于linux的內(nèi)存管理的內(nèi)存管理在在linux系統(tǒng)中對(duì)物理內(nèi)存的管理系統(tǒng)中對(duì)物理內(nèi)存的管理主要涉及主要涉及o頁面管理頁面管理o連續(xù)內(nèi)存區(qū)管理連續(xù)內(nèi)存區(qū)管理o非連續(xù)存儲(chǔ)區(qū)管理非連續(xù)存儲(chǔ)區(qū)管理 4 linux物理內(nèi)存管理方式物理內(nèi)存管理方式 516.1.1 動(dòng)態(tài)存儲(chǔ)管理動(dòng)態(tài)存儲(chǔ)管理o一部分永久地分配給系統(tǒng),作為內(nèi)核代碼段一部分永久地分配給系統(tǒng),作為內(nèi)核代碼段和只讀數(shù)據(jù)段的載體,用來存放內(nèi)核程序代和只讀數(shù)據(jù)段的載體,用來存
3、放內(nèi)核程序代碼以及靜態(tài)數(shù)據(jù),這部分稱為操作系統(tǒng)的靜碼以及靜態(tài)數(shù)據(jù),這部分稱為操作系統(tǒng)的靜態(tài)存儲(chǔ)器(態(tài)存儲(chǔ)器(static memory)。)。o其它部分,則在其它部分,則在linux的管理下,進(jìn)行內(nèi)存的管理下,進(jìn)行內(nèi)存的動(dòng)態(tài)申請(qǐng)和釋放,稱為動(dòng)態(tài)存儲(chǔ)器的動(dòng)態(tài)申請(qǐng)和釋放,稱為動(dòng)態(tài)存儲(chǔ)器(dynamic memory)。)。 616.1.2 頁面管理頁面管理olinux采用頁作為內(nèi)存管理的基本單位,其采用頁作為內(nèi)存管理的基本單位,其采用的標(biāo)準(zhǔn)的頁面大小為采用的標(biāo)準(zhǔn)的頁面大小為4kbo因?yàn)橐驗(yàn)?kb是大多數(shù)磁盤塊大小的倍數(shù),傳是大多數(shù)磁盤塊大小的倍數(shù),傳輸效率高,管理方便,無需考慮輸效率高,管理方便,
4、無需考慮pse,pae 7o內(nèi)核使用頁描述符來跟蹤管理物理內(nèi)存,每?jī)?nèi)核使用頁描述符來跟蹤管理物理內(nèi)存,每個(gè)物理頁面都用一個(gè)頁描述符表示個(gè)物理頁面都用一個(gè)頁描述符表示o頁描述符用頁描述符用struct page的結(jié)構(gòu)描述,所的結(jié)構(gòu)描述,所有物理頁面的描述符,組織在有物理頁面的描述符,組織在mem_map的數(shù)組中,的數(shù)組中,page結(jié)構(gòu)則是對(duì)物理頁面進(jìn)行結(jié)構(gòu)則是對(duì)物理頁面進(jìn)行描述的一個(gè)數(shù)據(jù)結(jié)構(gòu)描述的一個(gè)數(shù)據(jù)結(jié)構(gòu) 8mem_map數(shù)組與物理內(nèi)存的對(duì)應(yīng)關(guān)系數(shù)組與物理內(nèi)存的對(duì)應(yīng)關(guān)系 9olinux采用著名的伙伴(采用著名的伙伴(buddy)算法來)算法來解決內(nèi)存碎片問題。解決內(nèi)存碎片問題。o伙伴算法把所
5、有的空閑頁面分為伙伴算法把所有的空閑頁面分為10個(gè)頁塊個(gè)頁塊鏈表,每個(gè)鏈表中的一個(gè)塊含有鏈表,每個(gè)鏈表中的一個(gè)塊含有2的冪次個(gè)的冪次個(gè)頁面(叫做頁面(叫做“頁塊頁塊”或簡(jiǎn)稱或簡(jiǎn)稱“塊塊” )o實(shí)例具體分析參見教材實(shí)例具體分析參見教材linux應(yīng)用與開發(fā)應(yīng)用與開發(fā)典型實(shí)例精講典型實(shí)例精講第第256頁頁10伙伴算法伙伴算法實(shí)例1116.1.3 slab分配模式分配模式o在在linux系統(tǒng)中所用到的對(duì)象如系統(tǒng)中所用到的對(duì)象如inode、task_struct等,經(jīng)常會(huì)涉及到大量對(duì)象等,經(jīng)常會(huì)涉及到大量對(duì)象的重復(fù)生成、使用和釋放問題。的重復(fù)生成、使用和釋放問題。 o這些對(duì)象在生成時(shí),所包括的成員屬性值
6、都這些對(duì)象在生成時(shí),所包括的成員屬性值都賦成確定的數(shù)值,并且在使用完畢,釋放結(jié)賦成確定的數(shù)值,并且在使用完畢,釋放結(jié)構(gòu)前,屬性又恢復(fù)為未使用前的狀態(tài)。構(gòu)前,屬性又恢復(fù)為未使用前的狀態(tài)。 12linux的的slab內(nèi)存分配模式的基本思想內(nèi)存分配模式的基本思想o能夠用合適的方法使得在對(duì)象前后兩次被使能夠用合適的方法使得在對(duì)象前后兩次被使用時(shí),在同一塊內(nèi)存,或同一類內(nèi)存空間,用時(shí),在同一塊內(nèi)存,或同一類內(nèi)存空間,且保留了基本的數(shù)據(jù)結(jié)構(gòu),就可以大大提高且保留了基本的數(shù)據(jù)結(jié)構(gòu),就可以大大提高效率。效率。131416.2 linux的內(nèi)存管理函數(shù)的內(nèi)存管理函數(shù)ovmalloc()是內(nèi)核可以用來分配連續(xù)虛存
7、,是內(nèi)核可以用來分配連續(xù)虛存,但非連續(xù)物理內(nèi)存的方法。但非連續(xù)物理內(nèi)存的方法。 okmalloc分配在物理上連續(xù)的內(nèi)存分配在物理上連續(xù)的內(nèi)存,這些內(nèi)這些內(nèi)存是實(shí)際上存在的存是實(shí)際上存在的,并且是連續(xù)的并且是連續(xù)的,根據(jù)根據(jù) slab塊進(jìn)行分配。塊進(jìn)行分配。 1516.3 實(shí)例訓(xùn)練與分析實(shí)例訓(xùn)練與分析o在用戶空間用在用戶空間用valloc/malloc分配內(nèi)存分配內(nèi)存o在內(nèi)核空間用在內(nèi)核空間用kmalloc/vmalloc分配內(nèi)分配內(nèi)存存 1616.3.1 在用戶空間用在用戶空間用valloc/malloc分配內(nèi)存分配內(nèi)存o實(shí)現(xiàn)用實(shí)現(xiàn)用valloc申請(qǐng)申請(qǐng)1mb內(nèi)存單元內(nèi)存單元o程序退出時(shí)釋放。
8、程序退出時(shí)釋放。 17實(shí)例源碼實(shí)例源碼o#define a_megabyte 1024*1024oint main() ochar *some_memery;o int megabyte=a_megabyte;o int exit_code=exit_failure;osome_memery=(char*)valloc(megabyte); /* 申請(qǐng)內(nèi)存申請(qǐng)內(nèi)存 */o if(some_memery!=null)osprintf(some_memery,hello world!n); /* 將字符串寫入將字符串寫入 some_memery 所所 o 指向內(nèi)存指向內(nèi)存 */oprintf(%s
9、,some_memery);ofree(some_memery); /* 釋放內(nèi)存釋放內(nèi)存 */oprintf(memery is free!n);o exit_code=exit_success;o oexit(exit_code);o18運(yùn)行結(jié)果運(yùn)行結(jié)果1916.3.2 在內(nèi)核空間用在內(nèi)核空間用kmalloc/vmalloc分配內(nèi)存分配內(nèi)存編寫編寫mem_kv.c模塊文件實(shí)現(xiàn)對(duì)實(shí)際內(nèi)存與虛擬內(nèi)模塊文件實(shí)現(xiàn)對(duì)實(shí)際內(nèi)存與虛擬內(nèi)存的分配:存的分配:o#define mem_malloc_size 4096/申請(qǐng)內(nèi)存的大小申請(qǐng)內(nèi)存的大小o#define mem_major 252/主設(shè)主設(shè)備號(hào)備號(hào)
10、o#define mem_minor_k 0/次設(shè)次設(shè)備號(hào):實(shí)存?zhèn)涮?hào):實(shí)存o#define mem_minor_v 1/次設(shè)次設(shè)備號(hào):虛存?zhèn)涮?hào):虛存ochar *mem_spkm, *mem_spvm;/定義定義實(shí)存、虛存指針實(shí)存、虛存指針ostruct cdev *mem_cdev;20o/*設(shè)備文件結(jié)構(gòu)體選項(xiàng)設(shè)備文件結(jié)構(gòu)體選項(xiàng) */ostruct file_operations mem_fops = oo.open = mem_open,/打開打開o.release = mem_release, /釋放釋放o.read = mem_read,/讀操作讀操作o.write = mem_wri
11、te,/寫操作寫操作o; 21o將將mem_spkm指向內(nèi)核實(shí)際內(nèi)指向內(nèi)核實(shí)際內(nèi)存空間,將存空間,將mem_spvm指指向內(nèi)核虛擬內(nèi)存向內(nèi)核虛擬內(nèi)存空間,并將其加空間,并將其加載進(jìn)內(nèi)核設(shè)備文載進(jìn)內(nèi)核設(shè)備文件系統(tǒng)中。件系統(tǒng)中。 22o刪除設(shè)備結(jié)構(gòu),刪除設(shè)備結(jié)構(gòu),將將mem_spkm所指向的內(nèi)核所指向的內(nèi)核實(shí)際內(nèi)存空間實(shí)際內(nèi)存空間釋放掉,將釋放掉,將mem_spvm所指向內(nèi)核虛所指向內(nèi)核虛擬內(nèi)存空間釋擬內(nèi)存空間釋放掉。放掉。 void _exit mem_exit(void)if (mem_cdev != null)cdev_del(mem_cdev);/刪除設(shè)備結(jié)構(gòu)printk(kern_inf
12、ocdev_del okn);if (mem_spkm != null)kfree(mem_spkm);/釋放實(shí)存空間printk(kern_infokfree ok!n);if (mem_spvm != null)vfree(mem_spvm);/釋放虛存空間printk(kern_infovfree ok!n);23int mem_open(struct inode *ind, struct file *filp)if (iminor(ind) % 2) = 0)/獲取次設(shè)備號(hào)printk(kern_infoopen kmalloc spacen);elseprintk(kern_info
13、open vmalloc spacen);try_module_get(this_module); /模塊計(jì)數(shù)加1return 0;24ssize_t mem_read(struct file *filp, char *buf, size_t size, loff_t *lofp)int res = -1;char *tmp;struct inode *inodep;inodep = filp-f_dentry-d_inode;if (iminor(inodep) % 2) = 0)/獲取次設(shè)備號(hào)tmp = mem_spkm;elsetmp = mem_spvm;if (size mem_ma
14、lloc_size)size = mem_malloc_size;if (tmp != null)res = copy_to_user(buf, tmp, size);/將內(nèi)核空間的內(nèi)存內(nèi)容復(fù)制到用戶空間if (res = 0)return size;elsereturn 0;25#setupenv.shmakeecho make successfully!insmod mem_kv.ko # 插入模塊# 建立主設(shè)備號(hào)為252,次設(shè)備號(hào)為0的設(shè)備文件掛載點(diǎn):/dev/myalloc0ls /dev/myalloc0 | mknod /dev/myalloc0 c 252 0 & ech
15、o /dev/myalloc0 was caeated successfully!chmod 666 /dev/myalloc0# 建立主設(shè)備號(hào)為252,次設(shè)備號(hào)為1的設(shè)備文件掛載點(diǎn):/dev/myalloc1ls /dev/myalloc1 | mknod /dev/myalloc1 c 252 1 & echo /dev/myalloc1 was caeated successfully!chmod 666 /dev/myalloc12627o編寫編寫mem_test.c文件文件 o實(shí)例源碼參見教材實(shí)例源碼參見教材linux應(yīng)用與開發(fā)典型應(yīng)用與開發(fā)典型實(shí)例精講實(shí)例精講第第264頁頁
16、28讀寫的內(nèi)存為用讀寫的內(nèi)存為用kmalloc()申請(qǐng)的實(shí)際申請(qǐng)的實(shí)際內(nèi)存內(nèi)存 29讀寫的內(nèi)存為用讀寫的內(nèi)存為用vmalloc()申請(qǐng)的虛擬申請(qǐng)的虛擬內(nèi)存內(nèi)存 30思考與練習(xí)思考與練習(xí)o1. 在在linux操作系統(tǒng)中,頁面管理、內(nèi)存操作系統(tǒng)中,頁面管理、內(nèi)存區(qū)管理、非連續(xù)存儲(chǔ)區(qū)管理之間的關(guān)系是怎區(qū)管理、非連續(xù)存儲(chǔ)區(qū)管理之間的關(guān)系是怎樣的?樣的?o2linux操作系統(tǒng)對(duì)物理內(nèi)存的管理方式操作系統(tǒng)對(duì)物理內(nèi)存的管理方式有哪幾種,各使用了什么算法?有哪幾種,各使用了什么算法?o3動(dòng)態(tài)存儲(chǔ)管理有哪些優(yōu)點(diǎn)?動(dòng)態(tài)存儲(chǔ)管理有哪些優(yōu)點(diǎn)?o4linux采用頁面作為內(nèi)存管理的基本單采用頁面作為內(nèi)存管理的基本單位,采用的標(biāo)準(zhǔn)的頁面大小為位,采用的標(biāo)準(zhǔn)的頁面大小為4kb,為什,為什么取此值?么取此值?31思考與練習(xí)思考與練習(xí)o5linux解決內(nèi)存碎片問題
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級(jí)科學(xué)下冊(cè)第二單元天氣4發(fā)布天氣消息教案1冀教版
- 2025年精細(xì)化學(xué)品:日用化學(xué)品項(xiàng)目發(fā)展計(jì)劃
- 電池生產(chǎn)極片輥壓設(shè)備企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略研究報(bào)告
- 車輛停放協(xié)管服務(wù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 離心式系統(tǒng)企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 皂類切割機(jī)企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 出納錢箱企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 多功能真空凍干設(shè)備企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略研究報(bào)告
- 胚芽旋流器企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 不銹鋼無縫鋼管企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 【MOOC】藥物與健康-浙江大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 新增現(xiàn)澆樓板結(jié)構(gòu)加固施工方案
- 糖尿病足科普
- 妊娠合并結(jié)締組織病
- 狂犬病毒流行病學(xué)調(diào)查
- 初中主題班會(huì)《與不良的行為習(xí)慣告別》課件
- GB/T 25085.1-2024道路車輛汽車電纜第1部分:術(shù)語和設(shè)計(jì)指南
- 2024新版《藥品管理法》培訓(xùn)課件
- 更換閥門施工方案
- 制冷與空調(diào)設(shè)備運(yùn)行操作作業(yè)安全技術(shù)實(shí)際操作考試標(biāo)準(zhǔn)
- 鉆探安全教育培訓(xùn)
評(píng)論
0/150
提交評(píng)論