Linux 內(nèi)存管理:虛擬內(nèi)存空間布局

虛擬內(nèi)存布局

Linux 內(nèi)核給每個(gè)進(jìn)程都提供了一個(gè)獨(dú)立的虛擬地址空間骏庸,并且這個(gè)地址空間是連續(xù)的募舟。這樣景东,進(jìn)程就可以很方便地訪問(wèn)內(nèi)存,更確切地說(shuō)是訪問(wèn)虛擬內(nèi)存捆探。虛擬地址空間的內(nèi)部又被分為內(nèi)核空間用戶空間兩部分然爆,

不同字長(zhǎng)(也就是單個(gè) CPU 指令可以處理數(shù)據(jù)的最大長(zhǎng)度)的處理器,地址空間的范圍也不同黍图。32 位系統(tǒng)的內(nèi)核空間占用 1G曾雕,位于最高處,剩下的 3G 是用戶空間助被。而 64 位系統(tǒng)的內(nèi)核空間和用戶空間都是 128T剖张,分別占據(jù)整個(gè)內(nèi)存空間的最高和最低處,剩下的中間部分是未定義的揩环。

image

用戶態(tài)空間分布

用戶空間主要用來(lái)存儲(chǔ)如下數(shù)據(jù):

  • 程序代碼
  • 全局變量
  • 常量字符串
  • 函數(shù)棧搔弄,存放方法局部變量
  • 堆,申請(qǐng)一小塊內(nèi)存,存放在堆中
  • glibc關(guān)聯(lián)函數(shù)代碼
image

Text Segment

是存放二進(jìn)制可執(zhí)行代碼的位置

Data Segment

存放靜態(tài)常量,從高地址開(kāi)始向下增長(zhǎng)

BSS Segment

存放未初始化的靜態(tài)變量

malloc函數(shù)申請(qǐng)一小塊內(nèi)存,存放在堆中检盼,從低地址開(kāi)始向上增長(zhǎng)

mmap映射區(qū)

  • mmap用來(lái)存放malloc函數(shù)申請(qǐng)一大塊內(nèi)存區(qū)域肯污,mmap不僅僅可以用來(lái)映射物理內(nèi)存同時(shí)也可以用來(lái)映射文件,所謂映射文件就時(shí)將文件數(shù)據(jù)拷貝到物理內(nèi)存中某個(gè)區(qū)域,這塊區(qū)域通過(guò)頁(yè)表映射到用戶mmap映射區(qū)中吨枉。這樣用戶可以像訪問(wèn)內(nèi)存一樣訪問(wèn)文件蹦渣。

  • 當(dāng)mmap區(qū)域映射到文件時(shí)我們稱(chēng)為文件映射,非文件時(shí)稱(chēng)為匿名映射貌亭。

  • 當(dāng)內(nèi)存空間不足時(shí)可以將內(nèi)存數(shù)據(jù)寫(xiě)入磁盤(pán)中的某個(gè)文件柬唯,這個(gè)過(guò)程稱(chēng)為換出,當(dāng)進(jìn)程訪問(wèn)這些內(nèi)存時(shí)圃庭,再?gòu)拇疟P(pán)讀取這些數(shù)據(jù)到內(nèi)存中這個(gè)過(guò)程稱(chēng)為換入锄奢。而這個(gè)寫(xiě)入的文件被稱(chēng)為swap文件

image

這塊地址用來(lái)存放方法局部變量,從高地址開(kāi)始向下增長(zhǎng)

內(nèi)核態(tài)空間分布

內(nèi)核空間主要用來(lái)存儲(chǔ)如下數(shù)據(jù)

  • 內(nèi)核的代碼要在內(nèi)存里面剧腻;
  • 內(nèi)核中也有全局變量拘央;
  • 每個(gè)進(jìn)程都要有一個(gè) task_struct;
  • 每個(gè)進(jìn)程還有一個(gè)內(nèi)核棧书在;
  • 在內(nèi)核里面也有動(dòng)態(tài)分配的內(nèi)存灰伟;
  • 虛擬地址到物理地址的映射表

內(nèi)核態(tài)的虛擬空間和某一個(gè)進(jìn)程沒(méi)有關(guān)系,所有進(jìn)程通過(guò)系統(tǒng)調(diào)用進(jìn)入到內(nèi)核之后儒旬,看到的虛擬地址空間都是一樣的栏账。在內(nèi)核態(tài)帖族,32 位和 64 位的布局差別比較大,主要是因?yàn)?32 位內(nèi)核態(tài)空間太小了挡爵。

32位操作系統(tǒng)內(nèi)核空間

image
直接映射區(qū)

直接映射區(qū)竖般,就是這一塊空間是連續(xù)的,和物理內(nèi)存是非常簡(jiǎn)單的映射關(guān)系茶鹃,直接宏函數(shù)就得到物理內(nèi)存的位置涣雕,大小為896M,其中前 1M 已經(jīng)在系統(tǒng)啟動(dòng)的時(shí)候被占用闭翩,1M之后到896M主要用來(lái)存儲(chǔ)內(nèi)核代碼 胞谭,內(nèi)核的全局變量內(nèi)核棧男杈。

//運(yùn)算規(guī)則 虛擬內(nèi)存地址減去 3G,就得到物理內(nèi)存的位置
__pa(vaddr) 返回與虛擬地址 vaddr 相關(guān)的物理地址调俘;
__va(paddr) 則計(jì)算出對(duì)應(yīng)于物理地址 paddr 的虛擬地址伶棒。
內(nèi)核動(dòng)態(tài)映射空間 vmalloc區(qū)

用來(lái)申請(qǐng)內(nèi)核動(dòng)態(tài)分配的內(nèi)存(使用vmalloc函數(shù))

持久內(nèi)核映射

用來(lái)存儲(chǔ)內(nèi)核進(jìn)程數(shù)據(jù)結(jié)構(gòu) task_struct

固定映射區(qū)域

主要用于滿足特殊需求

最后區(qū)域

用戶態(tài)的進(jìn)程要映射一個(gè)文件到內(nèi)存中,先要映射用戶態(tài)進(jìn)程空間的一段虛擬地址到物理內(nèi)存彩库,然后將文件內(nèi)容寫(xiě)入這個(gè)物理內(nèi)存供用戶態(tài)進(jìn)程訪問(wèn)肤无。但對(duì)于操作系統(tǒng)而言能夠操作硬件資源只能時(shí)操作系統(tǒng)內(nèi)核來(lái)完成。

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骇钦,一起剝皮案震驚了整個(gè)濱河市宛渐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眯搭,老刑警劉巖窥翩,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鳞仙,居然都是意外死亡寇蚊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)棍好,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仗岸,“玉大人,你說(shuō)我怎么就攤上這事借笙“遣溃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵业稼,是天一觀的道長(zhǎng)盗痒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)盼忌,這世上最難降的妖魔是什么积糯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任掂墓,我火速辦了婚禮,結(jié)果婚禮上看成,老公的妹妹穿的比我還像新娘君编。我一直安慰自己,他們只是感情好川慌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布吃嘿。 她就那樣靜靜地躺著,像睡著了一般梦重。 火紅的嫁衣襯著肌膚如雪兑燥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天琴拧,我揣著相機(jī)與錄音降瞳,去河邊找鬼。 笑死蚓胸,一個(gè)胖子當(dāng)著我的面吹牛挣饥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沛膳,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼扔枫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了锹安?” 一聲冷哼從身側(cè)響起短荐,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叹哭,沒(méi)想到半個(gè)月后忍宋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡话速,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年讶踪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泊交。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乳讥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出廓俭,到底是詐尸還是另有隱情云石,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布研乒,位于F島的核電站汹忠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宽菜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一谣膳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铅乡,春花似錦继谚、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至挚赊,卻和暖如春诡壁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荠割。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工妹卿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔑鹦。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓纽帖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親举反。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 本文轉(zhuǎn)載自 https://juejin.im/post/59f8691b51882534af254317 參考:...
    xingdong閱讀 2,711評(píng)論 0 3
  • 概述 我們都知道一個(gè)進(jìn)程是與其他進(jìn)程共享CPU和內(nèi)存資源的扒吁。正因如此火鼻,操作系統(tǒng)需要有一套完善的內(nèi)存管理機(jī)制才能防止...
    SylvanasSun閱讀 3,834評(píng)論 0 25
  • 在linux下,使用top,free等命令查看系統(tǒng)或者進(jìn)程的內(nèi)存使用情況時(shí)雕崩,經(jīng)晨鳎看到buff/cache meme...
    analanxingde閱讀 698評(píng)論 0 2
  • 1. 硬鏈接和軟連接區(qū)別 硬連接-------指通過(guò)索引節(jié)點(diǎn)來(lái)進(jìn)行連接。在Linux的文件系統(tǒng)中盼铁,保存在磁盤(pán)分區(qū)...
    杰倫哎呦哎呦閱讀 2,234評(píng)論 0 2
  • “媽媽?zhuān)愕拇差^柜上為什么有這么多水果”粗蔚? 下午兒子放學(xué),來(lái)到醫(yī)院看我饶火,突然發(fā)現(xiàn)那堆如小山的水果鹏控、紅棗、枸杞等時(shí)肤寝,...
    靈魂的天空閱讀 688評(píng)論 0 4