Linux內(nèi)核源碼分析 (B.x)虛擬地址空間布局架構(gòu)
一、Linux內(nèi)核整體架構(gòu)及子系統(tǒng)
- Linux內(nèi)核只是操作系統(tǒng)當(dāng)中的一部分,對(duì)下管理系統(tǒng)所有硬件設(shè)備,對(duì)上通過(guò)系統(tǒng)調(diào)用向
Library Routine
或其他應(yīng)用程序提供API接口。
二、Linux內(nèi)核內(nèi)存管理架構(gòu)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-697345.html
- 內(nèi)存管理可以通過(guò)以下三個(gè)維度進(jìn)行介紹:
- 用戶(hù)空間
- 相當(dāng)于應(yīng)用程序使用
malloc()
申請(qǐng)內(nèi)存,通過(guò)free()
釋放內(nèi)存。malloc()
/free()
是glibc
庫(kù)的內(nèi)存分配器ptmalloc
提供的接口,ptmalloc
使用系統(tǒng)調(diào)用brk
或mmap
向內(nèi)核以頁(yè)為單位申請(qǐng)內(nèi)存。
- 相當(dāng)于應(yīng)用程序使用
- 內(nèi)核空間
- 虛擬內(nèi)存管理負(fù)責(zé)從進(jìn)程的虛擬地址空間分配虛擬頁(yè),
sys_brk
來(lái)擴(kuò)大或收縮堆,sys_mmap
用來(lái)在內(nèi)存映射區(qū)域分配虛擬頁(yè),sys_munmap
用來(lái)釋放虛擬頁(yè)。頁(yè)分配器負(fù)責(zé)分配物理頁(yè),使用分配器是伙伴分配器。 - 內(nèi)核空間擴(kuò)展功能,不連續(xù)頁(yè)分配器提供分配內(nèi)存的接口
vmalloc
和釋放內(nèi)存接口vfree
。在內(nèi)存碎片化的時(shí)候,申請(qǐng)連續(xù)物理頁(yè)的成功率比較低,可以申請(qǐng)不連續(xù)的物理頁(yè),映射到連續(xù)的虛擬頁(yè),即虛擬地址連續(xù)而物理地址不連續(xù)。 - 內(nèi)存控制組用來(lái)控制進(jìn)程占用的內(nèi)存資源。當(dāng)內(nèi)存碎片化的時(shí)候,找不到連續(xù)的物理頁(yè),內(nèi)存碎片整理過(guò)遷移方式得到連續(xù)的物理頁(yè)。在內(nèi)存不足的時(shí)候,頁(yè)回收負(fù)責(zé)回收物理頁(yè)。
- 虛擬內(nèi)存管理負(fù)責(zé)從進(jìn)程的虛擬地址空間分配虛擬頁(yè),
- 硬件
- MMU包含一個(gè)頁(yè)表緩存,保存最近使用過(guò)的頁(yè)表映射,避免每次把虛擬地址轉(zhuǎn)換為物理地址都需要查詢(xún)內(nèi)存中的頁(yè)表。解決處理器執(zhí)行速
度和內(nèi)存速度不匹配問(wèn)題,中間增加一個(gè)緩存。一級(jí)緩存分為數(shù)據(jù)緩存和指令緩存。二級(jí)作用協(xié)調(diào)一級(jí)緩存和內(nèi)存之間的工作效率。
- MMU包含一個(gè)頁(yè)表緩存,保存最近使用過(guò)的頁(yè)表映射,避免每次把虛擬地址轉(zhuǎn)換為物理地址都需要查詢(xún)內(nèi)存中的頁(yè)表。解決處理器執(zhí)行速
- 用戶(hù)空間
- 系統(tǒng)調(diào)用
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-697345.html
到了這里,關(guān)于Linux內(nèi)核源碼分析 (B.2)虛擬地址空間布局架構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!