色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從內存布局圖角度看內存管理

麥辣雞腿堡 ? 來源:TrustZone ? 作者:TrustZone ? 2023-10-30 17:50 ? 次閱讀

我們知道Linux是分為兩種狀態 用戶態和內核態,Linux內核需要跑在硬件平臺上,硬件平臺也有自己的狀態。這里還是ARM,ARM有其中處理器的模式。

用戶模式(user):用戶程序運行的模式。系統模式(system):特權模式。一般中斷模式(IRQ):普通中斷模式。快速中斷模式(FIQ):快速中斷模式。管理模式(supervisor):操作系統的內核通常運行在該模式下。數據訪問終止模式(abort):當數據或者指令預取終止時進入該模式,用于虛擬存儲及存儲保護。未定義指令模式(undefined):當未定義的指令執行時進入該模式,可用于支持硬件協處理器的軟件仿真

Linux內核的用戶態和內核態兩種模式分別對應的用戶模式和管理模式。

這里還是以32位,對應4GB,內核一般內核:用戶按照1:3的比例分配。這也是可以修改的。

我們知道分頁機制,賦予了每個進程都有尋址4GB的空間,因為每個進程都有自己的進程表。

內核空間是從3GB開始,lowmem這段空間其實就是我們常說的線性映射區。(為啥虛擬地址明明在高位卻是low,繼續看)所謂的線性映射區,就是物理內存線性地映射到這段內核空間的區域中。在 ARM32 平臺上,物理地址[0:760MB]的這一部分內存被線性映射到[3GB :3GB+760MB]的虛擬地址上(因為其物理地址在低位)。

線性映射區的虛擬地址和物理地址相差PAGE_OFFSET,即3GB。內核中有相關的宏來實現線性映射區的虛擬地址到物理地址的查找,例如pa(x)和va(x)。

其中,__pa()把線性映射區的虛擬地址轉換為物理地址,轉換公式很簡單,即用虛擬地址減去PAGE_OFFSET(3GB),然后加上PHYS_OFFSET(這個值在有的ARM平臺上為0,在ARM Vexpress平臺上為0x6000_0000)。

物理內存被分成了兩部分,低端的部分用在線性映射區,線性映射區就是這里的“lowmem”區域。剩下的高端部分的物理內存被稱為高端內存(High Memory),內核要使用它,必須通過高端映射的方式來訪問。

內核通常把低于760MB的物理內存稱為線性映射內存(Normal Memory),而高于760MB以上的稱為高端內存。 (這個高端是針對內核內存來說,780到1G)

這個分給內核的1G分成了高端和線性。

高端780到1G是干啥呢?剩下的264MB虛擬地址空間是保留給vmalloc機制、fixmap和高端異常向量表等使用的。內核很多驅動使用vmalloc機制來分配連續虛擬地址的內存,因為有的驅動不需要連續物理地址的內存;除此以外,vmalloc機制還可以用于高端內存的臨時映射。一個32位的系統中,實際支持的內存數量會超過內核線性映射的長度,但是內核要具有對所有內存的尋找能力。

(這里我想的是雖然在內核,但是我內核還是要對整個內存有個控制能力,這里就是體現,在vmalloc機制就可以干這個:個人看法,有糾正的大佬在評論區告訴小的一下)

編譯器在編譯目標文件并且鏈接完成之后,就可以知道內核映像文件最終的大小,接下來將其打包成二進制文件,該操作由arch/arm/kernel/vmlinux.ld.S 控制,其中也劃定了內核的內存布局。

內核image本身占據的內存空間從_text段到_end段,并分為如下幾個段。text段:_text和_etext為代碼段的起始和結束地址,包含了編譯后的內核代碼。init段:init_begin和init_end為init段的起始和結束地址,包含了大部分內核模塊初始化的數據。data段:_sdata和_edata為數據段的起始和結束地址,保存大部分內核的已初始化的變量。BSS段:bss_start和bss_stop為BSS段的開始和結束地址,包含初始化為0的所有靜態全局變量。

上述幾個段的大小在編譯鏈接時根據內核配置來確定,因為每種配置的代碼段和數據段長度都不相同,這取決于要編譯哪些內核模塊,但是起始地址_text 總是相同的。內核編譯完成之后,會生成一個System.map文件,查詢這個文件可以找到這些符號的具體數值。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19340

    瀏覽量

    230202
  • Linux
    +關注

    關注

    87

    文章

    11316

    瀏覽量

    209815
  • 內存
    +關注

    關注

    8

    文章

    3034

    瀏覽量

    74132
  • 進程
    +關注

    關注

    0

    文章

    203

    瀏覽量

    13965
收藏 人收藏

    評論

    相關推薦

    Linux kernel內存管理模塊結構分析

    基于上面章節的需求,Linux kernel虛擬內存(VM)、DMA mapping以及DMA buffer sharing三個角度,對內存進行
    發表于 09-19 11:55 ?1787次閱讀
    Linux kernel<b class='flag-5'>內存</b><b class='flag-5'>管理</b>模塊結構分析

    Linux的內存管理是什么,Linux的內存管理詳解

    Linux的內存管理 Linux的內存管理是一個非常復雜的過程,主要分成兩個大的部分:內核的內存管理
    的頭像 發表于 05-11 17:54 ?6092次閱讀
    Linux的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>是什么,Linux的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>詳解

    走進Linux內存系統探尋內存管理的機制和奧秘

    Linux 內存是后臺開發人員,需要深入了解的計算機資源。合理的使用內存,有助于提升機器的性能和穩定性。本文主要介紹Linux 內存組織結構和頁面布局
    的頭像 發表于 01-05 09:47 ?1644次閱讀

    Linux內存相關知識科普

    ,Linux 內核幾種內存管理的方法,內存使用場景以及內存使用的那些坑。**內存的原理和結構,
    發表于 07-25 14:43 ?738次閱讀
    Linux<b class='flag-5'>內存</b>相關知識科普

    ARM32 Linux的內存布局

    一部分空間是內核無法訪問到的,對于該問題內核借助于高端內存(highmem)方法來管理多余的內存,本章的主要講解以下內容什么是高端內存及其作用ARM32 Linux的
    發表于 04-24 14:20

    Elastos內存管理對軟件調試的支持

    軟件調試支持是操作系統的重要組成部分,而由于內存管理不善造成的軟件BUG占軟件故障的很大比例。內存管理
    發表于 12-01 15:38 ?19次下載
    Elastos<b class='flag-5'>內存</b><b class='flag-5'>管理</b>對軟件調試的支持

    了解并學習Linux內存模型

    model,其實就是cpu的角度,其物理內存的分布情況,在linux kernel中,使用什么的方式來管理這些物理
    發表于 05-12 09:44 ?706次閱讀
    了解并學習Linux<b class='flag-5'>內存</b>模型

    進程虛擬內存布局以及進程的虛擬內存分配釋放流程,涉及的代碼

    我們計劃通過一系列文章來介紹虛擬內存分配/釋放,缺頁處理,內存壓縮/回收,內存分配器等知識,梳理虛擬內存管理。本章節結合代碼介紹進程虛擬
    的頭像 發表于 06-28 09:38 ?4137次閱讀

    STM32內存管理

    內存管理詳解1、介紹內存管理,是指軟件運行時對計算機內存資源的分配和使用的技術。其最主要的目的是如何高效,快速的分配,并且在適當的時候釋放和
    發表于 12-24 19:37 ?13次下載
    STM32<b class='flag-5'>內存</b><b class='flag-5'>管理</b>

    JVM內存布局的多方面了解

      JVM內存布局規定了Java在運行過程中內存申請、分配、管理的策略,保證了JVM的穩定高效運行。不同的JVM對于內存的劃分方式和
    發表于 07-08 15:09 ?414次閱讀

    探討JVM的內存布局

    JVM內存布局規定了Java在運行過程中內存申請、分配、管理的策略,保證了JVM的穩定高效運行。
    的頭像 發表于 09-09 15:57 ?844次閱讀

    JVM內存布局詳解

    JVM內存布局規定了Java在運行過程中內存申請、分配、管理的策略,保證了JVM的穩定高效運行。不同的JVM對于內存的劃分方式和
    的頭像 發表于 04-26 10:10 ?538次閱讀
    JVM<b class='flag-5'>內存</b><b class='flag-5'>布局</b>詳解

    詳解Java虛擬機的JVM內存布局

    JVM內存布局規定了Java在運行過程中內存申請、分配、管理的策略,保證了JVM的穩定高效運行。不同的JVM對于內存的劃分方式和
    的頭像 發表于 07-13 09:52 ?533次閱讀
    詳解Java虛擬機的JVM<b class='flag-5'>內存</b><b class='flag-5'>布局</b>

    軟件角度看看內存

    關于內存軟件的角度去查看,其實作為一個軟件程序員,大多數對這個維度的接觸還是蠻多的。linux中有個free命令,其就是查看系統內存的情況。 free命令的選項也比較簡單,常用的參
    的頭像 發表于 10-30 17:41 ?724次閱讀
    <b class='flag-5'>從</b>軟件<b class='flag-5'>角度</b>看看<b class='flag-5'>內存</b>

    Linux 內存管理總結

    一、Linux內存管理概述 Linux內存管理是指對系統內存的分配、釋放、映射、管理、交換、壓縮
    的頭像 發表于 11-10 14:58 ?546次閱讀
    Linux <b class='flag-5'>內存</b><b class='flag-5'>管理</b>總結
    主站蜘蛛池模板: av av在线| 97精品免费视频| 中文字幕成人免费高清在线| 国产精品人妻在线观看| 日韩欧美精品有码在线播放| 白丝女仆被强扒内裤| 男女亲吻摸下面吃奶视频| 18岁男人女人插孔| 麻豆高潮AV久久久久久久| 自慰弄湿白丝袜| 麻豆COMCN| 91嫩草国产在线观看免费| 毛片免费大全| 97伦理97伦理2018最新| 男女生爽爽爽视频免费观看 | 男同志china免费视频| 91久久线看在观草草青青 | 老师xxxx69动漫| 777ZYZ玖玖资源站最稳定网址| 龙岩综合频道| wwwav在线| 天天影视香色欲综合网| 国产午夜精品一区二区| 亚洲区视频在线观看| 久久国产亚洲精品AV麻豆| 91精品欧美一区二区三区| 日本久久精品免视看国产成人 | 末班车动漫无删减免费| xxxx88| 深夜释放自己在线观看| 国产在线精彩视频| 中文字幕不卡在线视频| 欧美老少欢杂交另类| 国产成人v视频在线观看| 亚洲高清毛片一区二区| 久久亚洲伊人| 大学生高潮无套内谢视频| 亚洲精品www久久久久久| 门事件快播| 国产剧情麻豆mv| 4484在线观看视频|