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

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

3天內不再提示

Linux內存占用分析

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

內存占用分析

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

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

內存分布示意圖如下:

圖片

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

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

圖片

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

圖片

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

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

方案一

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

即kernel放到內存的最前面,opensbi放到后面:

圖片

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

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

    關注

    455

    文章

    50816

    瀏覽量

    423668
  • Linux
    +關注

    關注

    87

    文章

    11304

    瀏覽量

    209521
  • 內存
    +關注

    關注

    8

    文章

    3025

    瀏覽量

    74054
  • RISC
    +關注

    關注

    6

    文章

    462

    瀏覽量

    83734
收藏 人收藏

    評論

    相關推薦

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

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

    Linux下查詢進程占用內存方法總結

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

    linux下查詢進程占用內存方法有哪些?

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

    Linux的CPU和內存占用率查看

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

    基于IMX6查看Linux下的CPU和內存占用

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

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

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

    Android高效內存:讓圖片占用盡可能少的內存

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

    詳細介紹Linux 內存使用方法

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

    Java服務器內存和CPU占用過高的原因

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

    虛擬機:查看進程內存和CPU占用的方法

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

    Linux:測試進程占用的虛擬內存大小

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

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

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

    更低內存占用的通用Json庫-RyanJson

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

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

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

    Windows不明內存占用案例分析:Driver Locked

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