91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)注

    4

    文章

    1468

    瀏覽量

    42880
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11760

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

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

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

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

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

    Linux如何修改ddr的分配容量

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

    keilc語(yǔ)言的動(dòng)態(tài)分配內(nèi)存

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

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

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

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

    盡管不像非嵌入式計(jì)算機(jī)那么常見(jiàn),嵌入式系統(tǒng)還是有從堆(heap)動(dòng)態(tài)分配內(nèi)存的過(guò)程的。 那么嵌入式系統(tǒng),動(dò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 ?214次閱讀
    rk基于<b class='flag-5'>linux</b>/android<b class='flag-5'>內(nèi)存</b>管理

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

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

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

    測(cè)試過(guò)程,在一個(gè)線程中用rt_malloc動(dòng)態(tài)創(chuàng)建4KB的資源,在線程運(yùn)行過(guò)程中用rt_thread_delete()使線程退出,用memtrace查看內(nèi)存分配情況,動(dòng)態(tài)創(chuàng)建的4KB的資源仍然存在
    發(fā)表于 10-13 07:06

    如何使用LAX_CODEGEN啟用動(dòng)態(tài)內(nèi)存分配

    我目前正在探索NXP_MBDToolbox_LAX。lax_codegen 生成的代碼基于靜態(tài)分配。我想管理大型向量,如何使用 LAX_CODEGEN 啟用動(dòng)態(tài)內(nèi)存分配?
    發(fā)表于 04-10 08:09

    如何查看S32DSS32平臺(tái)的內(nèi)存分配?

    大家好,我正在使用 s32DS for s32 平臺(tái),我想查看我的項(xiàng)目的內(nèi)存分配。我想知道分配給對(duì)象的內(nèi)存以及它們被分配到哪里,例如 SRA
    發(fā)表于 04-09 07:30

    golang內(nèi)存分配

    作者:錢文 Go 的分配采用了類似 tcmalloc 的結(jié)構(gòu).特點(diǎn): 使用一小塊一小塊的連續(xù)內(nèi)存頁(yè), 進(jìn)行分配某個(gè)范圍大小的內(nèi)存需求. 比如某個(gè)連續(xù) 8KB 專門用于
    的頭像 發(fā)表于 03-31 15:00 ?515次閱讀
    golang<b class='flag-5'>內(nèi)存</b><b class='flag-5'>分配</b>

    Nand flash 和SD卡(SD NAND)存儲(chǔ)扇區(qū)分配表異同

    軟件界面中找到 SD 卡對(duì)應(yīng)的磁盤。 右鍵點(diǎn)擊該磁盤,選擇 “打開(kāi)分區(qū)表” 選項(xiàng),即可查看 SD 卡的分區(qū)表信息,包括存儲(chǔ)扇區(qū)的分配情況。在分區(qū)表,可以看到每個(gè)分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、扇區(qū)總數(shù)等
    發(fā)表于 03-13 10:45