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

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

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

Linux內(nèi)存占用分析

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-10-08 10:38 ? 次閱讀

內(nèi)存占用分析

每顆芯片在出廠時,其bootrom就已經(jīng)固化在芯片內(nèi)部,假設(shè)bootrom的地址是0x0,即上電后,會從0x0地址處開始運行程序。

在啟動RISC-VLinux之前,需要先運行opensbi,因此應該把opensbi放到地址0x0處,這樣芯片上電后,就會從0x0地址處執(zhí)行opensbi。在opensbi運行完后,會跳轉(zhuǎn)到opensbi運行地址偏移2M的位置去執(zhí)行下一級boot(這里下一級boot是kernel),即跳轉(zhuǎn)到0x200000地址處運行kernel,因此應該把kernel放到內(nèi)存的0x200000處。

內(nèi)存分布示意圖如下:

圖片

對于kernel來說,在啟動時會從自己的kernel加載地址處(即0x200000)開始建立頁表映射,只有對物理內(nèi)存建立了頁表映射,后面才能訪問這些內(nèi)存。而kernel加載地址前面的2M內(nèi)存(即0x0- 0x200000)將被kernel忽略,不會對這2M內(nèi)存建立頁表,即kernel無法訪問這2M內(nèi)存。

在QEMU上RISC-V Linux的啟動信息

圖片

但opensbi實際不需要使用2M這么大的范圍,默認是512KB,opensbi的pmp會保護這512KB內(nèi)存,不讓其他程序訪問。

圖片

因此在Kernel和opensbi之間會存在1.5M的內(nèi)存空隙,并且這部分內(nèi)存空隙沒有程序使用,這就會造成內(nèi)存浪費,那如何讓kernel將前面的一部分內(nèi)存也利用起來呢?

優(yōu)化方案方案一:將opensbi放到內(nèi)存的最后面,kernel入口地址仍然保持2M對齊。

方案一

我們將opensbi放到內(nèi)存的最后面,kernel入口地址仍然保持2M對齊。

即kernel放到內(nèi)存的最前面,opensbi放到后面:

圖片

例如kernel放到內(nèi)存的0x0地址處,opensbi放到內(nèi)存的0x10000000地址處。這樣kernel前面就不會有預留內(nèi)存,只不過這樣需要修改bootrom的地址,將地址從0x0修改為0x0x10000000。這種方案只適合芯片還沒出廠前,因為用戶無法修改bootrom的地址,芯片出廠后,bootrom地址是固定的,假設(shè)bootrom地址為0x0,那么芯片上電后,就會從0x0開始運行程序,所以opensbi必須放到0x0地址處,這樣必然kernel只能往后偏移2M。

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

    關(guān)注

    452

    文章

    50206

    瀏覽量

    420940
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11207

    瀏覽量

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

    關(guān)注

    8

    文章

    2966

    瀏覽量

    73815
  • RISC
    +關(guān)注

    關(guān)注

    6

    文章

    461

    瀏覽量

    83637
收藏 人收藏

    評論

    相關(guān)推薦

    Linux內(nèi)存管理是什么,Linux內(nèi)存管理詳解

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

    Linux下查詢進程占用內(nèi)存方法總結(jié)

    今天浩道跟大家一篇關(guān)于運維牛人如何在Linux下挖出吃內(nèi)存的進程,可以說是相當干的一個運維技能了,一起看看吧!
    發(fā)表于 07-27 10:51 ?1.4w次閱讀
    <b class='flag-5'>Linux</b>下查詢進程<b class='flag-5'>占用</b>的<b class='flag-5'>內(nèi)存</b>方法總結(jié)

    linux下查詢進程占用內(nèi)存方法有哪些?

    linux下查詢進程占用內(nèi)存方法
    發(fā)表于 04-08 06:03

    Linux的CPU和內(nèi)存占用率查看

    我們經(jīng)常需要查看CPU和內(nèi)存占用率,否則一旦存在情況很快就會有IDC(或客戶)找上門,Linux上查看資源使用情況有多種命令可以參考,CPU、內(nèi)存、IO、NETWORK等資源使用情況都
    發(fā)表于 07-24 06:52

    基于IMX6查看Linux下的CPU和內(nèi)存占用

    查看 Linux 下 CPU、內(nèi)存占用率方法1 : 如何查看 Linux內(nèi)存占用率 我們可
    發(fā)表于 10-30 10:18

    linux如何查看端口占用情況?

    今天要使用python寫一個端口探測的小程序,以檢測一些特定的服務(wù)端口有沒有被占用,突然發(fā)現(xiàn)自己居然不知道在linux中如何查詢端口被占用的情況。
    發(fā)表于 11-23 10:42 ?5500次閱讀
    <b class='flag-5'>linux</b>如何查看端口<b class='flag-5'>占用</b>情況?

    Android高效內(nèi)存:讓圖片占用盡可能少的內(nèi)存

    在做內(nèi)存優(yōu)化的時候,我們發(fā)現(xiàn)除了解決內(nèi)存泄露問題,剩下的就只有想辦法減少真實的內(nèi)存占用。而在App中,大部分內(nèi)存可能被我們圖片
    的頭像 發(fā)表于 06-02 11:05 ?4891次閱讀

    詳細介紹Linux 內(nèi)存使用方法

    Linux內(nèi)存管理上份為兩級,一級是線性區(qū),類似于00c73000-00c88000,對應于虛擬內(nèi)存,它實際上不占用實際物理內(nèi)存;一級是具
    發(fā)表于 05-16 17:13 ?504次閱讀

    Java服務(wù)器內(nèi)存和CPU占用過高的原因

    造成服務(wù)器內(nèi)存占用過高只有兩種情況:內(nèi)存溢出或內(nèi)存泄漏
    的頭像 發(fā)表于 03-21 15:50 ?2.2w次閱讀

    虛擬機:查看進程內(nèi)存和CPU占用的方法

    虛擬機:查看進程內(nèi)存和CPU占用的方法
    的頭像 發(fā)表于 06-22 11:06 ?8384次閱讀

    Linux:測試進程占用的虛擬內(nèi)存大小

    Linux:測試進程占用的虛擬內(nèi)存大小
    的頭像 發(fā)表于 06-23 09:23 ?2843次閱讀
    <b class='flag-5'>Linux</b>:測試進程<b class='flag-5'>占用</b>的虛擬<b class='flag-5'>內(nèi)存</b>大小

    分析Linux操作系統(tǒng)的內(nèi)存

    前言:在Linux上不像在Windows上看內(nèi)存那樣方便,而且還有Swap這個新的概念,所以知道如何來看Linux內(nèi)存還是有一定意義的
    的頭像 發(fā)表于 03-31 16:43 ?1336次閱讀

    更低內(nèi)存占用的通用Json庫-RyanJson

    RyanJson是一個小巧的c語言json解析器,包含json文本文件解析 / 生成,專門針對內(nèi)存占用進行優(yōu)化,相比cJSON內(nèi)存占用減少30% - 60%,運行速度和cJSON差不多
    的頭像 發(fā)表于 08-24 17:23 ?1547次閱讀
    更低<b class='flag-5'>內(nèi)存</b><b class='flag-5'>占用</b>的通用Json庫-RyanJson

    分享排查Linux系統(tǒng)CPU占用的一個Shell腳本

    眾所周知,Linux系統(tǒng)CPU占用100%這個異?,F(xiàn)象還是經(jīng)常遇到的,因此分析其導致異常原因是解決問題的根本。
    的頭像 發(fā)表于 09-04 09:17 ?1753次閱讀
    分享排查<b class='flag-5'>Linux</b>系統(tǒng)CPU<b class='flag-5'>占用</b>的一個Shell腳本

    Windows不明內(nèi)存占用案例分析:Driver Locked

    前一段有客戶反映Windows系統(tǒng)下不明內(nèi)存占用越來越多,128GB物理內(nèi)存的主機,啟動完成后就有大約一半的內(nèi)存占用,導致留給應用的
    的頭像 發(fā)表于 09-25 14:49 ?1725次閱讀
    Windows不明<b class='flag-5'>內(nèi)存</b><b class='flag-5'>占用</b>案例<b class='flag-5'>分析</b>:Driver Locked