日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux内核--内核地址空间分布和进程地址空间

發(fā)布時(shí)間:2024/9/21 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux内核--内核地址空间分布和进程地址空间 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)核地址空間分布

直接映射區(qū):線性空間中從3G開始最大896M的區(qū)間,為直接內(nèi)存映射區(qū),該區(qū)域的線性地址和物理地址存在線性轉(zhuǎn)換關(guān)系:線性地址=3G+物理地址。

動(dòng)態(tài)內(nèi)存映射區(qū):該區(qū)域由內(nèi)核函數(shù)vmalloc來分配,特點(diǎn)是:線性空間連續(xù),但是對(duì)應(yīng)的物理空間不一定連續(xù)。vmalloc分配的線性地址所對(duì)應(yīng)的物理頁可能處于低端內(nèi)存,也可能處于高端內(nèi)存。

永久內(nèi)存映射區(qū):該區(qū)域可訪問高端內(nèi)存。訪問方法是使用alloc_page(_GFP_HIGHMEM)分配高端內(nèi)存頁或者使用kmap函數(shù)將分配到的高端內(nèi)存映射到該區(qū)域。

固定映射區(qū):該區(qū)域和4G的頂端只有4k的隔離帶,其每個(gè)地址項(xiàng)都服務(wù)于特定的用途,如ACPI_BASE等。

進(jìn)程的地址空間

??? linux采用虛擬內(nèi)存管理技術(shù),每一個(gè)進(jìn)程都有一個(gè)3G大小的獨(dú)立的進(jìn)程地址空間,這個(gè)地址空間就是用戶空間。每個(gè)進(jìn)程的用戶空間都是完全獨(dú)立、互補(bǔ)相干的。進(jìn)程訪問內(nèi)核空間的方式:系統(tǒng)調(diào)用中斷。?
??? 創(chuàng)建進(jìn)程等進(jìn)程相關(guān)操作都需要分配內(nèi)存給進(jìn)程。這時(shí)進(jìn)程申請(qǐng)和獲得的不是物理地址,僅僅是虛擬地址。?
實(shí) 際的物理內(nèi)存只有當(dāng)進(jìn)程真的去訪問新獲取的虛擬地址時(shí),才會(huì)由“請(qǐng)頁機(jī)制”產(chǎn)生“缺頁”異常,從而進(jìn)入分配實(shí)際葉框的程序。該異常是虛擬內(nèi)存機(jī)制賴以存在 的基本保證---它會(huì)告訴內(nèi)核去為進(jìn)程分配物理頁,并建立對(duì)應(yīng)的頁表,這之后虛擬地址才實(shí)實(shí)在在的映射到了物理地址上。

?

vmalloc和kmalloc區(qū)別?
1,kmalloc對(duì)應(yīng)于kfree,分配的內(nèi)存處于3GB~high_memory之間,這段內(nèi)核空間與物理內(nèi)存的映射一一對(duì)應(yīng),可以分配連續(xù)的物理內(nèi)存;?
vmalloc對(duì)應(yīng)于vfree,分配的內(nèi)存在VMALLOC_START~4GB之間,分配連續(xù)的虛擬內(nèi)存,但是物理上不一定連續(xù)。

2,vmalloc() 分配的物理地址無需連續(xù),而kmalloc() 確保頁在物理上是連續(xù)的?
3,kmalloc分配內(nèi)存是基于slab,因此slab的一些特性包括著色,對(duì)齊等都具備,性能較好。物理地址和邏輯地址都是連續(xù)的。?
4,最主要的區(qū)別是分配大小的問題,比如你需要28個(gè)字節(jié),那一定用KMALLOC,如果用VMALLOC,分配不多次機(jī)器就over了。?
??? 盡管僅僅在某些情況下才需要物理上連續(xù)的內(nèi)存塊,但是,很多內(nèi)核代碼都調(diào)用kmalloc(),而不是用vmalloc()獲得內(nèi)存。這主要是出于性能的 考慮。vmalloc()函數(shù)為了把物理上不連續(xù)的頁面轉(zhuǎn)換為虛擬地址空間上連續(xù)的頁,必須專門建立頁表項(xiàng)。還有,通過 vmalloc()獲得的頁必須一個(gè)一個(gè)的進(jìn)行映射(因?yàn)樗鼈兾锢砩喜皇沁B續(xù)的),這就會(huì)導(dǎo)致比直接內(nèi)存映射大得多的緩沖區(qū)刷新。因?yàn)檫@些原 因,vmalloc()僅在絕對(duì)必要時(shí)才會(huì)使用——典型的就是為了獲得大塊內(nèi)存時(shí),例如,當(dāng)模塊被動(dòng)態(tài)插入到內(nèi)核中時(shí),就把模塊裝載到由 vmalloc()分配的內(nèi)存上。

總結(jié)

以上是生活随笔為你收集整理的Linux内核--内核地址空间分布和进程地址空间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。