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

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

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

什么是內(nèi)存碎片Linux

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

什么是內(nèi)存碎片?

內(nèi)存碎片在Linux很早的時(shí)候就已經(jīng)出現(xiàn)了,了解早期內(nèi)存碎片產(chǎn)生的歷史,有利于我們對(duì)它的理解。

假設(shè)現(xiàn)在有一塊32MB大小的內(nèi)存,一開始操作系統(tǒng)使用了最小的一塊——4MB大小,剩余的內(nèi)存要留給4個(gè)進(jìn)程使用,如圖(a)所示。

圖片

進(jìn)程A使用了操作系統(tǒng)往上的10MB內(nèi)存,進(jìn)程B使用了進(jìn)程A往上的6MB內(nèi)存,進(jìn)程C使用了進(jìn)程B往上的8MB內(nèi)存,如圖(b)所示,:

圖片

進(jìn)程D需要5MB內(nèi)存,所以剩余的內(nèi)存不足以裝載進(jìn)程D,這個(gè)內(nèi)存末位就形成了第一個(gè)空洞(內(nèi)存碎片)。假設(shè)某個(gè)時(shí)刻,操作系統(tǒng)需要運(yùn)行進(jìn)程D,因?yàn)橄到y(tǒng)中沒有足夠的內(nèi)存,所以需要選擇一個(gè)進(jìn)程來換出,為進(jìn)程D騰出足夠的空間。假設(shè)操作系統(tǒng)選擇進(jìn)程B來換出,這樣進(jìn)程D就裝載到了原來進(jìn)程B的地址空間里,于是產(chǎn)生了第二個(gè)空洞,如圖(c)所示:

圖片

假設(shè)操作系統(tǒng)某個(gè)時(shí)刻需要運(yùn)行進(jìn)程B,也需要選擇一個(gè)進(jìn)程來換出,假設(shè)進(jìn)程A被換出,那么操作系統(tǒng)中又產(chǎn)生了第三個(gè)空洞,如圖(d)所示:

圖片

隨著時(shí)間的推移,內(nèi)存空洞會(huì)越來越多,內(nèi)存的利用率也隨之下降,這些內(nèi)存空洞就是我們常說的內(nèi)存碎片。

圖片

看到這,你已經(jīng)知道了什么是內(nèi)存碎片,同時(shí)還了解了一種內(nèi)存管理機(jī)制——?jiǎng)討B(tài)分區(qū)法。上述舉例其實(shí)就是動(dòng)態(tài)分區(qū)法,操作系統(tǒng)早期使用動(dòng)態(tài)分區(qū)法來管理內(nèi)存。

怎么解決內(nèi)存碎片化問題?

思路其實(shí)很簡單:把多個(gè)小塊內(nèi)存拼成一個(gè)大塊內(nèi)存。

早期使用動(dòng)態(tài)分區(qū)法的操作系統(tǒng),為了解決碎片化問題,就是動(dòng)態(tài)地移動(dòng)進(jìn)程,使得進(jìn)程占用的空間是連續(xù)的,并且所有的空閑空間也是連續(xù),這樣就把多個(gè)小內(nèi)存塊拼起來了。但是缺點(diǎn)也非常明顯,進(jìn)程的遷移需要耗費(fèi)大量的時(shí)間。

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

    關(guān)注

    87

    文章

    11459

    瀏覽量

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

    關(guān)注

    8

    文章

    3108

    瀏覽量

    74986
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7082

    瀏覽量

    124943
  • 進(jìn)程
    +關(guān)注

    關(guān)注

    0

    文章

    206

    瀏覽量

    14215
收藏 人收藏

    評(píng)論

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

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

    Linux內(nèi)存管理 Linux內(nèi)存管理是一個(gè)非常復(fù)雜的過程,主要分成兩個(gè)大的部分:內(nèi)核的內(nèi)存管理和進(jìn)程虛擬
    的頭像 發(fā)表于 05-11 17:54 ?6446次閱讀
    <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)存相關(guān)知識(shí)科普

    linux 內(nèi)存組織結(jié)構(gòu)和頁面布局,內(nèi)存碎片產(chǎn)生原因和優(yōu)化算法。
    發(fā)表于 08-08 10:57 ?476次閱讀

    走進(jìn)Linux內(nèi)存系統(tǒng)探尋內(nèi)存管理的機(jī)制和奧秘

    Linux 內(nèi)存是后臺(tái)開發(fā)人員,需要深入了解的計(jì)算機(jī)資源。合理的使用內(nèi)存,有助于提升機(jī)器的性能和穩(wěn)定性。本文主要介紹Linux 內(nèi)存組織結(jié)構(gòu)
    的頭像 發(fā)表于 01-05 09:47 ?1889次閱讀

    Linux內(nèi)存相關(guān)知識(shí)科普

    Linux 內(nèi)存是后臺(tái)開發(fā)人員,需要深入了解的計(jì)算機(jī)資源。合理的使用內(nèi)存,有助于提升機(jī)器的性能和穩(wěn)定性。本文主要介紹**Linu****x 內(nèi)存組織結(jié)構(gòu)和頁面布局,
    發(fā)表于 07-25 14:43 ?853次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)存</b>相關(guān)知識(shí)科普

    C語言malloc申請(qǐng)內(nèi)存時(shí)的碎片問題

    解決問題:malloc在申請(qǐng)內(nèi)存的時(shí)候,內(nèi)存碎片問題會(huì)導(dǎo)致原本內(nèi)存大小足夠,卻申請(qǐng)大內(nèi)存失敗。
    發(fā)表于 08-06 16:58 ?1902次閱讀
    C語言malloc申請(qǐng)<b class='flag-5'>內(nèi)存</b>時(shí)的<b class='flag-5'>碎片</b>問題

    Linux內(nèi)核內(nèi)存規(guī)整總結(jié)

    1.前言 伙伴系統(tǒng)作為內(nèi)核最基礎(chǔ)的物理頁內(nèi)存分配器,具有高效、實(shí)現(xiàn)邏輯簡介等優(yōu)點(diǎn),其原理頁也盡可能降低內(nèi)存外部碎片產(chǎn)生,但依然無法杜絕碎片問題。外部
    的頭像 發(fā)表于 11-11 11:17 ?1613次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核<b class='flag-5'>內(nèi)存</b>規(guī)整總結(jié)

    請(qǐng)問mymalloc會(huì)產(chǎn)生內(nèi)存碎片嗎?

    malloc申請(qǐng)內(nèi)存在釋放后,會(huì)產(chǎn)生內(nèi)存碎片,所以UCOSIII內(nèi)有專門的內(nèi)存申請(qǐng)。原子哥視頻(UCOSIII視頻19講)最后的時(shí)候說可以用原子哥自己的mamalloc函數(shù)來申請(qǐng)
    發(fā)表于 10-16 04:35

    如何避免內(nèi)存碎片的產(chǎn)生

    考試題型:單選 8 道,不定項(xiàng) 2 道,編程 2 道,問答 1 道考點(diǎn):進(jìn)程間通訊的方式,linux的基本指令(考了grep,chmod),根據(jù)代碼給出運(yùn)行的結(jié)果問答題:簡述內(nèi)存碎片的定義,如何避免
    發(fā)表于 12-21 07:50

    如何避免Linux的物理內(nèi)存碎片

    Linux buddyy系統(tǒng)是linux kernel比較穩(wěn)定的一個(gè)模塊,但是并不是說它沒有缺陷,Linux內(nèi)存管理系統(tǒng)自誕生之日,就一直存在物理內(nèi)
    的頭像 發(fā)表于 05-01 16:43 ?5675次閱讀
    如何避免<b class='flag-5'>Linux</b>的物理<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>化

    你知道linux kernel內(nèi)存碎片防治技術(shù)?

    Linux kernel組織管理物理內(nèi)存的方式是buddy system(伙伴系統(tǒng)),而物理內(nèi)存碎片正式buddy system的弱點(diǎn)之一,為了預(yù)防以及解決
    發(fā)表于 05-10 10:59 ?1062次閱讀

    一文解析Linux內(nèi)存系統(tǒng)

    Linux 內(nèi)存是后臺(tái)開發(fā)人員,需要深入了解的計(jì)算機(jī)資源。合理的使用內(nèi)存,有助于提升機(jī)器的性能和穩(wěn)定性。本文主要介紹Linux 內(nèi)存組織結(jié)構(gòu)
    的頭像 發(fā)表于 09-01 10:46 ?2610次閱讀
    一文解析<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)存</b>系統(tǒng)

    Linux內(nèi)存管理的基礎(chǔ)知識(shí)科普

    ,為什么還要看你這一篇,這正是我寫此文的原因,網(wǎng)上碎片化的相關(guān)知識(shí)點(diǎn)大都是東拼西湊,先不說正確性與否,就連基本的邏輯都沒有搞清楚,我可以負(fù)責(zé)任的說Linux內(nèi)存管理只需要看此文一篇就可以讓你入
    的頭像 發(fā)表于 06-08 15:24 ?2389次閱讀

    一文解析Linux內(nèi)存碎片整理原理

    內(nèi)存整理也是這樣,看起來很簡單,但實(shí)現(xiàn)起來就不那么簡單了。因?yàn)樵?b class='flag-5'>內(nèi)存整理后,需要修正進(jìn)程的虛擬內(nèi)存與物理內(nèi)存之間的映射關(guān)系。
    發(fā)表于 12-28 12:41 ?935次閱讀

    FreeRTOS內(nèi)存碎片是怎么來的

    內(nèi)存碎片 在看 FreeRTOS的內(nèi)存分配方法之前我們先來看一下什么叫做內(nèi)存碎片,看名字就知道是小塊的、
    的頭像 發(fā)表于 07-30 10:29 ?1132次閱讀
    FreeRTOS<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>是怎么來的

    如何解決內(nèi)存碎片內(nèi)存交換效率慢的問題

    內(nèi)存分頁 分段的好處是能產(chǎn)生連續(xù)的內(nèi)存空間,但是會(huì)出現(xiàn)大量內(nèi)存碎片內(nèi)存交換效率低的問題 先思考一下怎么解決這兩個(gè)問題,
    的頭像 發(fā)表于 10-09 16:57 ?1269次閱讀
    如何解決<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>與<b class='flag-5'>內(nèi)存</b>交換效率慢的問題

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品