外部碎片和內部碎片的區別


這幾天一直看操作系統,看到內存的連續分配時,對於外部碎片和內部碎片時甚是不解,剛好在某論壇上發現了這樣一個生動的講解,

便迫不及待的相遇大家分享一下。

       外部碎片,是由於大量信息由於先后寫入、置換、刪除而形成的空間碎片。為了便於理解,我們將信息比作貨物,將存儲空間比作倉庫來舉例子。假設,我們有編號為1、2、3、4、5、6的6間倉庫庫房,前天送來了一大宗貨,依次裝入了1、2、3、4、5號倉庫,昨天又因故將4號庫房的貨物運走了,那么數值上說我們還有兩間空倉庫的空間,但是如果這時候送來兩間倉庫容量的貨物但要求必須連續存放的話,我們實際上是裝不下的。這時的4、6號倉庫,就成為一種空間的碎片。由於這樣的原因形成的空間碎片,我們稱之為外部碎片。從上面的例子我們可以理解,外部碎片是可以通過一些措施來改善或者解決的。對於在硬盤上的外部碎片,我們通常用磁盤碎片整理來解決,對應上面的例子,就是將5號倉庫的貨物及時移動到新騰出的4號倉庫,這樣,1-4號倉庫都是滿的,而5、6號倉庫則形成了有效的、連續的空間,能夠適應新的應用要求了;對於內存中的外部碎片,我們內存管理中常用的頁面管理形式,就是為了解決這個問題的。這里就不詳述了。
        內部碎片,是由於存量信息容量與最小存儲空間單位不完全相符而造成的空間碎片。還是沿用上面的例子,這次我們的6間倉庫目前都是空置的,但是假設我們管理倉庫的最小空間單位是間,今天運來了容量為2.5間倉庫的貨物,那也要占用我們1-3號3間倉庫,盡管3號倉庫還閑置着一半的空間,但是這半間倉庫已經不能再利用了(因為是以間為最小單位么);這時,我們的倉庫中就形成了半間倉庫的空間碎片,倉庫的有效容量只剩下3間倉庫了。

總之就是這么個道理~~~~

【外部碎片】
外部碎片指的是還沒有被分配出去(不屬於任何進程),但由於太小了無法分配給申請內存空間的新進程的內存空閑區域。
外部碎片是出於任何已分配區域或頁面外部的空閑存儲塊。這些存儲塊的總和可以滿足當前申請的長度要求,但是由於它們的地址不連續或其他原因,使得系統無法滿足當前申請。
多道可變連續分配只有外部碎片。
【內部碎片】
內部碎片就是已經被分配出去(能明確指出屬於哪個進程)卻不能被利用的內存空間;
內部碎片是處於區域內部或頁面內部的存儲塊。占有這些區域或頁面的進程並不使用這個存儲塊。而在進程占有這塊存儲塊時,系統無法利用它。直到進程釋放它,或進程結束時,系統才有可能利用這個存儲塊。
單道連續分配只有內部碎片。多道固定連續分配既有內部碎片,又有外部碎片。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM