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

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

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

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

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

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

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

假設(shè)現(xiàn)在有一塊32MB大小的內(nèi)存,一開始操作系統(tǒng)使用了最小的一塊——4MB大小,剩余的內(nèi)存要留給4個進(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,這個內(nèi)存末位就形成了第一個空洞(內(nèi)存碎片)。假設(shè)某個時刻,操作系統(tǒng)需要運行進(jìn)程D,因為系統(tǒng)中沒有足夠的內(nèi)存,所以需要選擇一個進(jìn)程來換出,為進(jìn)程D騰出足夠的空間。假設(shè)操作系統(tǒng)選擇進(jìn)程B來換出,這樣進(jìn)程D就裝載到了原來進(jìn)程B的地址空間里,于是產(chǎn)生了第二個空洞,如圖(c)所示:

圖片

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

圖片

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

圖片

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

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

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

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

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

    關(guān)注

    87

    文章

    11304

    瀏覽量

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

    關(guān)注

    8

    文章

    3025

    瀏覽量

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

    關(guān)注

    37

    文章

    6827

    瀏覽量

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

    關(guān)注

    0

    文章

    203

    瀏覽量

    13961
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

    C語言malloc申請內(nèi)存時的碎片問題

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

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

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

    請問mymalloc會產(chǎn)生內(nèi)存碎片嗎?

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

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

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

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

    Linux buddyy系統(tǒng)是linux kernel比較穩(wěn)定的一個模塊,但是并不是說它沒有缺陷,Linux內(nèi)存管理系統(tǒng)自誕生之日,就一直存在物理內(nèi)
    的頭像 發(fā)表于 05-01 16:43 ?5462次閱讀
    如何避免<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的弱點之一,為了預(yù)防以及解決
    發(fā)表于 05-10 10:59 ?952次閱讀

    OPPO內(nèi)存碎片化引擎的作業(yè)

    OPPO宣傳的內(nèi)存碎片化引擎是個什么東西?它有何作用?針對上述問題,ColorOS官方微博特地發(fā)文科普,我們一起來看看。
    的頭像 發(fā)表于 03-15 16:20 ?3589次閱讀

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

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

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

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

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

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

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

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