0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

從進(jìn)程的角度看內(nèi)存

麥辣雞腿堡 ? 來(lái)源:TrustZone ? 作者:TrustZone ? 2023-10-30 18:02 ? 次閱讀

在windows下的可執(zhí)行文件的格式為.exe,而Linux的下的是ELF。這是一種文件格式,就是告訴你文件是怎么存儲(chǔ)的。

整個(gè)ELF的圖看看

圖片

這些內(nèi)容和內(nèi)核空間定義也差不多。

代碼段(.text):程序源代碼編譯后的機(jī)器指令被存放在這個(gè)代碼段里。

數(shù)據(jù)段(.data):存放已初始化的全局變量和已初始化的局部靜態(tài)變量。

bss段(.bss):用來(lái)存放未初始化的全局變量以及未初始化的局部靜態(tài)變量。

寫(xiě)一個(gè)程序,其實(shí)是依賴很多的其他的程序,因此自己寫(xiě)的程序需要編譯鏈接后才能使用。

時(shí)起到輔助作用,暫時(shí)先不用關(guān)注它們。程序在編譯鏈接時(shí)會(huì)盡量把相同權(quán)限屬性的段分配在同一個(gè)空間里,例如,把可讀可執(zhí)行的段放在一起,包括代碼段、init段等;把可讀可寫(xiě)的段放在一起,包括.data段和.bss段等。ELF把這些屬性相似并且鏈接在一起的段叫作分段(Segment),進(jìn)程在裝載時(shí)是按照這些分段來(lái)映射可執(zhí)行文件的。

描述這些分段的結(jié)構(gòu)叫作程序頭(Program Header),它描述了ELF文件是如何映射到進(jìn)程地址空間的,這是我們比較關(guān)心的。

可以使用objdump或者readelf工具來(lái)查看ELF文件包含哪些段。

我們可以通過(guò)“readelf -l”命令來(lái)查看這些程序頭。

在看的時(shí)候主要關(guān)注LOAD類(lèi)型的分段,其他的都是在LOAD的時(shí)候起到輔助作用。

這是都是靜態(tài)的。

在如果你想去看看靜態(tài)的,可以通過(guò)proc文件系統(tǒng)來(lái)看看Linux內(nèi)核的運(yùn)行情況。每個(gè)進(jìn)程運(yùn)行之后,在/proc/pid/maps節(jié)點(diǎn)會(huì)列出當(dāng)前進(jìn)程的地址映射情況。

圖片

第1行中顯示了地址0x10000~0x870000這段進(jìn)程地址空間,它的屬性是只讀并且可執(zhí)行的,由此我們知道它是代碼段,也就是之前看到的代碼段的程序頭。

第2行中顯示了地址0x96000~0x98000,它的屬性是可讀可寫(xiě)的進(jìn)程地址空間,也就是我們之前看到的數(shù)據(jù)段的程序頭。

第 3 行中顯示了地址0x98000~0xbb000,這段進(jìn)程地址空間叫作堆空間(Heap),也就是通常使用malloc分配的內(nèi)存,大小是140KB。test進(jìn)程主要使用malloc分配100KB的內(nèi)存,這里看到Linux內(nèi)核會(huì)分配比100KB稍微大一點(diǎn)的內(nèi)存空間。

第4行顯示test進(jìn)程的棧(stack)空間。

第5行是Sigpage的進(jìn)程地址空間,Sigpage是ARM體系結(jié)構(gòu)中特有的頁(yè)面。

第6行是ARM中高端映射的異常向量(vectors)。

這里說(shuō)的進(jìn)程地址空間,在 Linux 內(nèi)核中使用一個(gè)叫作 VMA的術(shù)語(yǔ)來(lái)描述,它是vm_area_struct數(shù)據(jù)結(jié)構(gòu)的簡(jiǎn)稱(chēng),在虛擬內(nèi)存管理部分會(huì)詳細(xì)介紹它。另外,/proc/pid/smaps節(jié)點(diǎn)會(huì)提供更多的地址映射的細(xì)節(jié),以代碼段的VMA和堆的VMA為例。

另外,/proc/pid/smaps節(jié)點(diǎn)會(huì)提供更多的地址映射的細(xì)節(jié),以代碼段的VMA和堆的VMA為例。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1336

    瀏覽量

    40084
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207912
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2903

    瀏覽量

    73538
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67767
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux 內(nèi)核的角度談線程棧和進(jìn)程

    虛擬地址通過(guò)頁(yè)表(Page Table)映射到物理內(nèi)存,頁(yè)表由操作系統(tǒng)維護(hù),并被處理器的內(nèi)存管理單元(MMU)硬件引用。 每個(gè)進(jìn)程都擁有一套屬于它自己的頁(yè)表,因此對(duì)于每個(gè)進(jìn)程而言都好像
    的頭像 發(fā)表于 09-25 15:23 ?2407次閱讀
    <b class='flag-5'>從</b> Linux 內(nèi)核的<b class='flag-5'>角度</b>談線程棧和<b class='flag-5'>進(jìn)程</b>棧

    如何EMI角度PCB layout 法規(guī)

    ` 如何EMI角度PCB layout 法規(guī)如何從EMI角度PCB Layout 法則有以下幾個(gè)重點(diǎn)Point 1: 先了解導(dǎo)線或傳輸線的幅射或天線效應(yīng) 對(duì)應(yīng)國(guó)際法規(guī)EMI幅射量
    發(fā)表于 02-19 18:36

    Linux上對(duì)進(jìn)程進(jìn)行內(nèi)存分析和內(nèi)存泄漏定位

    。(棧)5、采用mmap方式映射到虛擬地址空間中的內(nèi)存段這是我的機(jī)器上,redis 進(jìn)程的情況,第一行:r-xp可知其權(quán)限為只讀、可執(zhí)行,該段內(nèi)存地址對(duì)應(yīng)于執(zhí)行文件的代碼段,程序的代
    發(fā)表于 07-09 08:15

    架構(gòu)的角度如何寫(xiě)好代碼 + 我的思考

    架構(gòu)漫談(八):架構(gòu)的角度如何寫(xiě)好代碼 + 我的思考
    發(fā)表于 06-18 06:16

    如何安全的角度自動(dòng)駕駛

    安全的角度自動(dòng)駕駛
    發(fā)表于 01-25 06:42

    步進(jìn)電機(jī)驅(qū)動(dòng)IC的角度步進(jìn)電機(jī)

    步進(jìn)電機(jī)驅(qū)動(dòng)IC的角度步進(jìn)電機(jī),歸納相關(guān)知識(shí)點(diǎn)。一、單極性與雙極性電機(jī): 單極性電機(jī),由單極性IC驅(qū)動(dòng)。其一端接Vcc,另一端由IC控制連接或斷開(kāi)?!《p極性電機(jī),由雙極性IC驅(qū)動(dòng)。雙端都由IC控制。二、單極性電機(jī)的內(nèi)部結(jié)構(gòu)
    發(fā)表于 08-31 06:31

    進(jìn)程間通信之共享內(nèi)存

    8.5.1 共享內(nèi)存概述 可以說(shuō),共享內(nèi)存是一種最為高效的進(jìn)程間通信方式。因?yàn)?b class='flag-5'>進(jìn)程可以直接讀寫(xiě)內(nèi)存,不需要任何數(shù)據(jù)的復(fù)制。為了在多個(gè)
    發(fā)表于 10-18 16:08 ?1次下載
    <b class='flag-5'>進(jìn)程</b>間通信之共享<b class='flag-5'>內(nèi)存</b>

    編譯原理的角度C語(yǔ)言如何轉(zhuǎn)換成匯編語(yǔ)言的?

    編譯原理的角度C語(yǔ)言是如何轉(zhuǎn)換成匯編語(yǔ)言的?
    的頭像 發(fā)表于 02-25 15:52 ?2481次閱讀
    <b class='flag-5'>從</b>編譯原理的<b class='flag-5'>角度</b><b class='flag-5'>看</b>C語(yǔ)言如何轉(zhuǎn)換成匯編語(yǔ)言的?

    進(jìn)程虛擬內(nèi)存布局以及進(jìn)程的虛擬內(nèi)存分配釋放流程,涉及的代碼

    我們計(jì)劃通過(guò)一系列文章來(lái)介紹虛擬內(nèi)存分配/釋放,缺頁(yè)處理,內(nèi)存壓縮/回收,內(nèi)存分配器等知識(shí),梳理虛擬內(nèi)存的管理。本章節(jié)結(jié)合代碼介紹進(jìn)程虛擬
    的頭像 發(fā)表于 06-28 09:38 ?3877次閱讀

    鴻蒙內(nèi)核源碼分析:進(jìn)程是內(nèi)核的資源管理單元

    系統(tǒng)的角度,進(jìn)程是資源管理單元。進(jìn)程可以使用或等待CPU、使用內(nèi)存空間等系統(tǒng)資源,并獨(dú)立于其
    發(fā)表于 11-24 17:52 ?23次下載
    鴻蒙內(nèi)核源碼分析:<b class='flag-5'>進(jìn)程</b>是內(nèi)核的資源管理單元

    Linux進(jìn)程內(nèi)存消耗和泄漏詳解

    當(dāng)我們?cè)u(píng)估進(jìn)程消耗多少內(nèi)存時(shí),就是指在用戶空間消耗的內(nèi)存,即虛擬地址在0~3G的部分,對(duì)應(yīng)的物理地址內(nèi)存。內(nèi)核空間的內(nèi)存消耗屬于內(nèi)核,系統(tǒng)調(diào)
    的頭像 發(fā)表于 05-14 10:07 ?2608次閱讀
    Linux<b class='flag-5'>進(jìn)程</b>的<b class='flag-5'>內(nèi)存</b>消耗和泄漏詳解

    SMT焊接角度BGA封裝的優(yōu)勢(shì)

    smt焊接的角度,BGA芯片的貼裝公差為0.3mm,比以往的QFP芯片的貼裝精度要求0.08mm要低得多。一般來(lái)講在小拇指大小甚至更小的空間上做SMT貼片打樣貼裝,那么更大的貼裝公差就意味著更高的可靠性和貼裝精度。
    的頭像 發(fā)表于 07-11 10:47 ?460次閱讀

    摩托車(chē)怎么就干不過(guò)小電驢了?線路板的角度差別

    摩托車(chē)怎么就干不過(guò)小電驢了?線路板的角度差別
    的頭像 發(fā)表于 10-30 16:06 ?412次閱讀

    軟件角度看看內(nèi)存

    關(guān)于內(nèi)存,軟件的角度去查看,其實(shí)作為一個(gè)軟件程序員,大多數(shù)對(duì)這個(gè)維度的接觸還是蠻多的。linux中有個(gè)free命令,其就是查看系統(tǒng)內(nèi)存的情況。 free命令的選項(xiàng)也比較簡(jiǎn)單,常用的參
    的頭像 發(fā)表于 10-30 17:41 ?608次閱讀
    <b class='flag-5'>從</b>軟件<b class='flag-5'>角度</b>看看<b class='flag-5'>內(nèi)存</b>

    線程、進(jìn)程、多線程、多進(jìn)程和多任務(wù)之間有何關(guān)系?

    進(jìn)程是程序執(zhí)行時(shí)的一個(gè)實(shí)例,即它是程序已經(jīng)執(zhí)行到課中程度的數(shù)據(jù)結(jié)構(gòu)的匯集。內(nèi)核的觀點(diǎn),進(jìn)程的目的就是擔(dān)當(dāng)分配系統(tǒng)資源(CPU時(shí)間、內(nèi)存
    的頭像 發(fā)表于 01-11 13:39 ?289次閱讀
    線程、<b class='flag-5'>進(jìn)程</b>、多線程、多<b class='flag-5'>進(jìn)程</b>和多任務(wù)之間有何關(guān)系?