這幾天一直看操作系統,看到內存的連續分配時,對於外部碎片和內部碎片時甚是不解,剛好在某論壇上發現了這樣一個生動的講解,
便迫不及待的相遇大家分享一下。
外部碎片,是由於大量信息由於先后寫入、置換、刪除而形成的空間碎片。為了便於理解,我們將信息比作貨物,將存儲空間比作倉庫來舉例子。假設,我們有編號為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間倉庫了。
總之就是這么個道理~~~~