什么是內(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
-
內(nèi)存
-
操作系統(tǒng)
-
進(jìn)程
相關(guān)推薦
Linux的內(nèi)存管理 Linux的內(nèi)存管理是一個非常復(fù)雜的過程,主要分成兩個大的部分:內(nèi)核的內(nèi)存管理和進(jìn)程虛擬
發(fā)表于 05-11 17:54
?6064次閱讀
linux 內(nèi)存組織結(jié)構(gòu)和頁面布局,內(nèi)存碎片產(chǎn)生原因和優(yōu)化算法。
發(fā)表于 08-08 10:57
?392次閱讀
Linux 內(nèi)存是后臺開發(fā)人員,需要深入了解的計算機資源。合理的使用內(nèi)存,有助于提升機器的性能和穩(wěn)定性。本文主要介紹Linux 內(nèi)存組織結(jié)構(gòu)
發(fā)表于 01-05 09:47
?1632次閱讀
Linux 內(nèi)存是后臺開發(fā)人員,需要深入了解的計算機資源。合理的使用內(nèi)存,有助于提升機器的性能和穩(wěn)定性。本文主要介紹**Linu****x 內(nèi)存組織結(jié)構(gòu)和頁面布局,
發(fā)表于 07-25 14:43
?732次閱讀
解決問題:malloc在申請內(nèi)存的時候,內(nèi)存碎片問題會導(dǎo)致原本內(nèi)存大小足夠,卻申請大內(nèi)存失敗。
發(fā)表于 08-06 16:58
?1639次閱讀
1.前言 伙伴系統(tǒng)作為內(nèi)核最基礎(chǔ)的物理頁內(nèi)存分配器,具有高效、實現(xiàn)邏輯簡介等優(yōu)點,其原理頁也盡可能降低內(nèi)存外部碎片產(chǎn)生,但依然無法杜絕碎片問題。外部
發(fā)表于 11-11 11:17
?1324次閱讀
malloc申請內(nèi)存在釋放后,會產(chǎn)生內(nèi)存碎片,所以UCOSIII內(nèi)有專門的內(nèi)存申請。原子哥視頻(UCOSIII視頻19講)最后的時候說可以用原子哥自己的mamalloc函數(shù)來申請
發(fā)表于 10-16 04:35
考試題型:單選 8 道,不定項 2 道,編程 2 道,問答 1 道考點:進(jìn)程間通訊的方式,linux的基本指令(考了grep,chmod),根據(jù)代碼給出運行的結(jié)果問答題:簡述內(nèi)存碎片的定義,如何避免
發(fā)表于 12-21 07:50
Linux buddyy系統(tǒng)是linux kernel比較穩(wěn)定的一個模塊,但是并不是說它沒有缺陷,Linux內(nèi)存管理系統(tǒng)自誕生之日,就一直存在物理內(nèi)
發(fā)表于 05-01 16:43
?5462次閱讀
Linux kernel組織管理物理內(nèi)存的方式是buddy system(伙伴系統(tǒng)),而物理內(nèi)存碎片正式buddy system的弱點之一,為了預(yù)防以及解決
發(fā)表于 05-10 10:59
?952次閱讀
OPPO宣傳的內(nèi)存反碎片化引擎是個什么東西?它有何作用?針對上述問題,ColorOS官方微博特地發(fā)文科普,我們一起來看看。
發(fā)表于 03-15 16:20
?3589次閱讀
Linux 內(nèi)存是后臺開發(fā)人員,需要深入了解的計算機資源。合理的使用內(nèi)存,有助于提升機器的性能和穩(wěn)定性。本文主要介紹Linux 內(nèi)存組織結(jié)構(gòu)
發(fā)表于 09-01 10:46
?2445次閱讀
,為什么還要看你這一篇,這正是我寫此文的原因,網(wǎng)上碎片化的相關(guān)知識點大都是東拼西湊,先不說正確性與否,就連基本的邏輯都沒有搞清楚,我可以負(fù)責(zé)任的說Linux內(nèi)存管理只需要看此文一篇就可以讓你入
發(fā)表于 06-08 15:24
?2116次閱讀
內(nèi)存碎片 在看 FreeRTOS的內(nèi)存分配方法之前我們先來看一下什么叫做內(nèi)存碎片,看名字就知道是小塊的、
發(fā)表于 07-30 10:29
?898次閱讀
內(nèi)存分頁 分段的好處是能產(chǎn)生連續(xù)的內(nèi)存空間,但是會出現(xiàn)大量內(nèi)存碎片與內(nèi)存交換效率低的問題 先思考一下怎么解決這兩個問題,
發(fā)表于 10-09 16:57
?1042次閱讀
評論