chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

這樣,當(dāng)內(nèi)核需要用到某一種數(shù)據(jù)類型的時(shí)候,就會(huì)先根slab去要,slab如果沒有,slab就會(huì)去找buddy-system,拿到物理內(nèi)存之后,就按照請求劃分,返回調(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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1416

    瀏覽量

    41421
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11509

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Linux系統(tǒng)通過預(yù)留物理內(nèi)存實(shí)現(xiàn)ARM與FPGA高效通信的方法

    管理子系統(tǒng)管理。因此,需要預(yù)留一部分物理內(nèi)存,使其不被內(nèi)核管理。接下來將為大家詳細(xì)介紹在 Linux 系統(tǒng)通過預(yù)留物理
    的頭像 發(fā)表于 04-16 13:42 ?683次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)<b class='flag-5'>中</b>通過預(yù)留<b class='flag-5'>物理</b><b class='flag-5'>內(nèi)存</b>實(shí)現(xiàn)ARM與FPGA高效通信的方法

    如何使用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)存分配。我想知道分配給對象的內(nèi)存以及它們被分配到哪里,例如 SRA
    發(fā)表于 04-09 07:30

    golang內(nèi)存分配

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

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

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

    Linux服務(wù)器卡頓救星之一招釋放Cache內(nèi)存

    在程序運(yùn)行結(jié)束后不會(huì)自動(dòng)釋放。這可能會(huì)導(dǎo)致程序頻繁讀寫文件后可用物理內(nèi)存變得很少,必要時(shí)(比如內(nèi)存確實(shí)不夠用),需要主動(dòng)釋放緩存內(nèi)存。 注意:一般
    的頭像 發(fā)表于 01-16 10:04 ?1473次閱讀

    虛擬內(nèi)存溢出該怎么處理 虛擬內(nèi)存在服務(wù)器的應(yīng)用

    在現(xiàn)代計(jì)算機(jī)系統(tǒng),虛擬內(nèi)存是一種重要的資源管理技術(shù),它允許系統(tǒng)使用硬盤空間來擴(kuò)展物理內(nèi)存的容量。然而,當(dāng)系統(tǒng)運(yùn)行的程序和進(jìn)程超出了物理
    的頭像 發(fā)表于 12-04 09:49 ?818次閱讀

    Linux下如何管理虛擬內(nèi)存 使用虛擬內(nèi)存時(shí)的常見問題

    Linux系統(tǒng),虛擬內(nèi)存管理是操作系統(tǒng)內(nèi)核的一個(gè)重要功能,負(fù)責(zé)管理物理內(nèi)存和磁盤上的交換空間。以下是對
    的頭像 發(fā)表于 12-04 09:19 ?1338次閱讀

    什么是虛擬內(nèi)存分頁 Windows系統(tǒng)虛擬內(nèi)存優(yōu)化方法

    內(nèi)存有限的情況下。 虛擬內(nèi)存的作用 內(nèi)存擴(kuò)展 :虛擬內(nèi)存允許系統(tǒng)使用硬盤空間作為額外的內(nèi)存,從而
    的頭像 發(fā)表于 12-04 09:16 ?1450次閱讀

    虛擬內(nèi)存不足如何解決 虛擬內(nèi)存物理內(nèi)存的區(qū)別

    虛擬內(nèi)存不足的解決方案 虛擬內(nèi)存不足是計(jì)算機(jī)用戶經(jīng)常遇到的問題,尤其是在運(yùn)行大型軟件或多任務(wù)處理時(shí)。以下是一些解決虛擬內(nèi)存不足問題的方法: 增加物理
    的頭像 發(fā)表于 12-04 09:14 ?1477次閱讀

    求助,關(guān)于LM386芯片內(nèi)ESD保護(hù)電路設(shè)計(jì)和引腳分配情況求解

    2、3輸入引腳和1、7、8控制引腳和5輸出引腳都共用這一個(gè)ESD保護(hù)電路呢? 如能介紹LM386芯片內(nèi)ESD保護(hù)電路設(shè)計(jì)和引腳分配情況,將不勝感激!
    發(fā)表于 09-30 06:22

    邏輯內(nèi)存物理內(nèi)存的區(qū)別

    邏輯內(nèi)存物理內(nèi)存是計(jì)算機(jī)系統(tǒng)兩個(gè)重要的概念,它們在計(jì)算機(jī)的運(yùn)行和數(shù)據(jù)處理起著至關(guān)重要的作用。 1.
    的頭像 發(fā)表于 09-27 15:38 ?1770次閱讀

    轉(zhuǎn)載 golang內(nèi)存分配

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

    內(nèi)存管理的硬件結(jié)構(gòu)

    常見的內(nèi)存分配函數(shù)有malloc,mmap等,但大家有沒有想過,這些函數(shù)在內(nèi)核是怎么實(shí)現(xiàn)的?換句話說,Linux內(nèi)核的內(nèi)存管理是怎么實(shí)現(xiàn)的
    的頭像 發(fā)表于 09-04 14:28 ?656次閱讀
    <b class='flag-5'>內(nèi)存</b>管理的硬件結(jié)構(gòu)

    Linux內(nèi)核的頁面分配機(jī)制

    Linux內(nèi)核是如何分配出頁面的,如果我們站在CPU的角度去看這個(gè)問題,CPU能分配出來的頁面是以物理頁面為單位的。也就是我們計(jì)算機(jī)中常講
    的頭像 發(fā)表于 08-07 15:51 ?638次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核<b class='flag-5'>中</b>的頁面<b class='flag-5'>分配</b>機(jī)制