日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

Linux中的物理內(nèi)存的具體分配情況

454398 ? 來源: Chinaunix ? 作者:StolennnXB ? 2020-09-23 11:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux當中,物理內(nèi)存的劃分之前已經(jīng)寫過一篇了,今天來講講內(nèi)存的具體分配

首先,內(nèi)存被分成一個一個的節(jié)點,每個節(jié)點由不同的區(qū)域組成,當在區(qū)域內(nèi)部需要使用物理內(nèi)存的時候,就是今天要講的伙伴系統(tǒng)登場的時候了。

首先,各個內(nèi)存區(qū)域的空閑可用物理內(nèi)存被分割成一個一個的鏈表,每個鏈表當中的元素表示的空閑頁的大小都是相同的,且都是2的整數(shù)次冪,這一個個的鏈表,就按照整數(shù)次冪(之后叫order)的大小排列在一個數(shù)組當中。

當系統(tǒng)需要分配一個大小為k的空間的時候,會先將k按照2^order對其,之后就會先從本地節(jié)點上,按照order從小到達的次序去遍歷各個鏈表,直到找到剛好匹配。如果沒有剛好匹配,則需要在更大的鏈表上拿下一個更大塊的內(nèi)存,取出自己需要的之后,還要將剩下的部分塞回到對應order的鏈表之上。如果當前節(jié)點的所有鏈表均沒有匹配,則需要在其他節(jié)點上“遠程調(diào)度”,這種情況對應的消耗會比較大。

以上就是簡單的講述了伙伴系統(tǒng)的功能,其分配的基本單位是頁,一般為4k

由于buddy-system的基本單位為4k,但是內(nèi)核當中的數(shù)據(jù)結(jié)構(gòu)沒有那么大,而且頻繁分配釋放也會造成大量不必要的消耗,這時候就需要slab分配器出場了(它在嵌入式的兄弟叫slob,大型機上的兄弟較slub),其實slab的功能不僅僅是一個分配器,也是一個緩存管理器,其運行在伙伴系統(tǒng)之上。我們熟知的task_struct等很多內(nèi)核結(jié)構(gòu)都是由它來管理的。

當我們要申請一個slab緩存的時候,需要制定要緩存的固定類型,比如task_struct,這樣,當slab拿到物理內(nèi)存的時候,它就會把整塊的內(nèi)存排好,只用于存放task_struct,其他的數(shù)據(jù)類型也一樣,另外,所有的slab緩存是通過鏈表連在一起的。

當確定了slab緩存的類型之后,它就會根據(jù)固定類型的數(shù)據(jù)長度,選取對齊位置,選擇和是的padding進行對其,這個padding可以用來設(shè)置一些下一個空閑量偏移之類的東西。

這樣,當內(nèi)核需要用到某一種數(shù)據(jù)類型的時候,就會先根slab去要,slab如果沒有,slab就會去找buddy-system,拿到物理內(nèi)存之后,就按照請求劃分,返回調(diào)用方想要的。

如果是釋放固定的類型,也不是直接返還給物理內(nèi)存,slab依舊持有,方便下一次調(diào)用的是時候,直接從緩存拿,而較少調(diào)用buddy-system的次數(shù)

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

    關(guān)注

    4

    文章

    1476

    瀏覽量

    43099
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11822

    瀏覽量

    219602
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    反射內(nèi)存卡的具體應用

    反射內(nèi)存卡在各種場景下的具體應用
    的頭像 發(fā)表于 04-20 16:42 ?164次閱讀

    LuatOS的內(nèi)存分配機制

    不同 LuatOS 硬件平臺在內(nèi)存布局上存在差異,Lua 運行內(nèi)存、系統(tǒng)內(nèi)存與 PSRAM 擴展內(nèi)存分配方式各有區(qū)別。部分型號將系統(tǒng)與腳本
    的頭像 發(fā)表于 04-16 12:37 ?135次閱讀
    LuatOS的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>分配</b>機制

    Linux內(nèi)核伙伴系統(tǒng)內(nèi)存申請函數(shù)詳解:從原理到實戰(zhàn)

    Linux 內(nèi)核,內(nèi)存管理是整個系統(tǒng)穩(wěn)定運行的基石,而伙伴系統(tǒng)(Buddy System) 作為內(nèi)核物理內(nèi)存
    的頭像 發(fā)表于 02-10 16:58 ?3745次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核伙伴系統(tǒng)<b class='flag-5'>內(nèi)存</b>申請函數(shù)詳解:從原理到實戰(zhàn)

    Linux內(nèi)核大塊內(nèi)存申請:從場景到落地全解析

    網(wǎng)卡、硬盤等外設(shè)的 DMA 控制器,要求內(nèi)存物理地址連續(xù)(無法識別虛擬地址映射),且需一次性分配大尺寸緩沖區(qū)(如 1GB 網(wǎng)絡(luò)幀緩存)。
    的頭像 發(fā)表于 02-09 16:41 ?812次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核大塊<b class='flag-5'>內(nèi)存</b>申請:從場景到落地全解析

    Linux下擴充Swap交換空間:解決內(nèi)存不足的實用指南,這些影響要注意!

    大家在使用 Linux 系統(tǒng)(比如常用的 Ubuntu)時,是不是偶爾會遇到 “內(nèi)存不足” 的彈窗?比如運行大型編譯任務、多開虛擬機、做數(shù)據(jù)分析,或者把 Linux 當服務器用的時候,物理
    的頭像 發(fā)表于 02-09 16:33 ?569次閱讀
    <b class='flag-5'>Linux</b>下擴充Swap交換空間:解決<b class='flag-5'>內(nèi)存</b>不足的實用指南,這些影響要注意!

    RK平臺Linux IOMMU開發(fā):從原理到實戰(zhàn)

    在瑞芯微(RK)芯片的 Linux 開發(fā),IOMMU(輸入輸出內(nèi)存管理單元)是個關(guān)鍵部件 —— 它能實現(xiàn)設(shè)備虛擬地址(IOVA)與物理地址的轉(zhuǎn)換,還能控制讀寫權(quán)限、處理缺頁 / 總線
    的頭像 發(fā)表于 02-04 16:24 ?2985次閱讀
    RK平臺<b class='flag-5'>Linux</b> IOMMU開發(fā):從原理到實戰(zhàn)

    Linux如何防止內(nèi)存沖突?

    在聊這個話題之前,我們先回憶一下單片機系統(tǒng)是如何分配內(nèi)存的?如果沒有bootloader,那硬件環(huán)境起來之后就直接進入主程序運行,如果有引導程序bootloader,那就需要設(shè)置好跳轉(zhuǎn)地址,否則設(shè)置不對,系統(tǒng)就無法啟動了。
    的頭像 發(fā)表于 01-30 16:51 ?1449次閱讀
    <b class='flag-5'>Linux</b>如何防止<b class='flag-5'>內(nèi)存</b>沖突?

    Linux如何修改ddr的分配容量

    在 U-Boot 修改 DDR 容量通常涉及以下幾個步驟,尤其是在嵌入式系統(tǒng),當更換或升級DDR內(nèi)存芯片后:
    的頭像 發(fā)表于 01-30 16:49 ?1576次閱讀

    keilc語言的動態(tài)分配內(nèi)存

    。 由于上述兩種情況,該函數(shù)在使用時就需要注意,看下面的代碼: 在使用realloc時我們要注意上述代碼隱藏的風險。 2.常見的動態(tài)內(nèi)存分配錯誤動態(tài)
    發(fā)表于 01-21 06:04

    【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗】+讀深入理解Linux內(nèi)核內(nèi)存分配

    每個內(nèi)存地址是虛擬的,不是直接指向RAM的任何地址。當用戶訪問內(nèi)存的存儲單元時,都會進行地址轉(zhuǎn)換以匹配相應的物理
    發(fā)表于 01-16 20:05

    嵌入式系統(tǒng),動態(tài)分配內(nèi)存可能發(fā)生的問題是什么?

    盡管不像非嵌入式計算機那么常見,嵌入式系統(tǒng)還是有從堆(heap)動態(tài)分配內(nèi)存的過程的。 那么嵌入式系統(tǒng),動態(tài)分配
    發(fā)表于 12-22 09:42

    rk基于linux/android內(nèi)存管理

    。內(nèi)存整體使用布局如下,以 ARM64 為例(常規(guī)情況): ? ? 上表的 Start Addr Offset 一欄表示基于 DDR base 的地址偏移; Fastboot 地址和大小由
    的頭像 發(fā)表于 12-15 10:42 ?301次閱讀
    rk基于<b class='flag-5'>linux</b>/android<b class='flag-5'>內(nèi)存</b>管理

    Linux Swap交換空間詳解:Android編譯內(nèi)存不足?這樣擴充立竿見影

    ? ? 在 ?Linux? 系統(tǒng)使用過程,你是否遇到過? “ 內(nèi)存不足 ”? 的報錯?比如編譯? Android? 源碼時,明明按教程操作,卻因物理
    的頭像 發(fā)表于 12-06 08:10 ?4600次閱讀

    FLASH的代碼是如何得到運行的呢

    指令的地址。正常情況下自動加“4”,遇到分支跳轉(zhuǎn)的時候,由跳轉(zhuǎn)指令設(shè)置值。那么指針是什么?指針是一個變量的地址,在含有操作系統(tǒng)(比如Linux、Windows)即硬件層面含有內(nèi)存管理單元(MMU)的
    發(fā)表于 12-04 08:06

    RTThread線程退出后rt_malloc動態(tài)創(chuàng)建的資源沒有釋放怎么解決?

    測試過程,在一個線程中用rt_malloc動態(tài)創(chuàng)建4KB的資源,在線程運行過程中用rt_thread_delete()使線程退出,用memtrace查看內(nèi)存分配情況,動態(tài)創(chuàng)建的4KB的資源仍然存在
    發(fā)表于 10-13 07:06
    连南| 长泰县| 大余县| 文山县| 广州市| 五华县| 山东| 疏附县| 遂宁市| 鄄城县| 四平市| 略阳县| 安乡县| 齐齐哈尔市| 岳普湖县| 乌什县| 克拉玛依市| 宽城| 禹州市| 富裕县| 五华县| 会东县| 平利县| 灌云县| 永丰县| 华蓥市| 师宗县| 聂拉木县| 惠州市| 木里| 华坪县| 富源县| 吴川市| 永嘉县| 海门市| 筠连县| 自治县| 海安县| 广东省| 陇南市| 荥阳市|