內部和外部碎片
內部和外部碎片的區別是許多喜歡提高計算機知識的人感興趣的話題。在瞭解這種差異之前,我們必須先看看什麼是碎片。碎片化是計算機內存(如隨機存取存儲器(RAM)或硬盤)中發生的一種現象,它會導致空閒空間的浪費和低效使用。雖然有效利用可用空間受到阻礙,但這也會導致性能問題。當一個小的空閒空間被分配到一個固定大小的內存後,剩餘的內存分配給應用程序。當動態分配內存時,會發生外部碎片,在加載和卸載多個插槽之後,空閒空間將被分配,而不是連續的。
什麼是內部碎片(internal fragmentation)?
考慮上圖中遵循的是固定大小的內存分配機制。最初,內存是空的,分配器將內存劃分為固定大小的分區。隨後,三個名為A、B、C的程序被加載到前三個分區,而第四個分區仍然是空閒的。程序A與分區的大小相匹配,因此在該分區中沒有浪費,但程序B和程序C小於分區大小。第二部分還有剩餘的空間。但是,這個空閒空間是不可用的,因為內存分配器只為程序分配完整的分區,而不分配其中的t部分。這種對自由空間的浪費稱為內部碎片。
在上面的示例中,它是大小相等的固定分區,但在有各種固定大小的分區可用的情況下,這種情況甚至會發生。通常,內存或最難的空間被劃分為大小通常為2的冪的塊,例如2、4、8、16字節。因此,一個3字節的程序或文件將被分配給一個4字節的塊,但該塊的一個字節將變得不可用,從而導致內部碎片。
什麼是外部碎片(external fragmentation)?
考慮上面的圖,其中內存分配是動態完成的。在動態內存分配中,分配器只為該程序分配所需的確切大小。第一次記憶是完全免費的。然後,不同大小的程序A、B、C、D和E依次加載,並按順序連續地放入內存中。然後,程序A和程序C關閉並從內存中卸載。現在內存中有三個可用空間區域,但它們並不相鄰。現在要加載一個名為program F的大型程序,但是兩個自由空間塊都不足以滿足程序F的需要。所有自由空間的添加對於程序F來說絕對是足夠的,但是由於缺少鄰接,空間對於程序F是不可用的。這稱為外部碎片。
內部的(internal)和外部碎片(external fragmentation)的區別
•使用固定大小內存分配技術時會發生內部碎片。當使用動態內存分配技術時,會發生外部碎片。
•當固定大小的分區分配給比該分區小的程序/文件,使該分區中的其餘空間不可用時,就會出現內部碎片。外部碎片是由於加載和卸載程序或文件一段時間後缺少足夠的相鄰空間,因為所有可用空間都分佈在這裡和那裡。
•外部破碎可通過壓實開採,將指定的塊體移到一側,從而獲得相鄰空間。但是,此操作需要時間,而且某些關鍵的指定區域(例如,系統服務無法安全移動)。在Windows中運行磁盤碎片整理程序時,我們可以觀察到這個壓縮步驟是在硬盤上完成的。
•可通過分段和分頁等機制防止外部碎片。這裡給出了一個邏輯連續的虛擬內存空間,而實際上文件/程序被分割成若干部分,放在這裡和那裡。
•可以通過分配多個內部分區和最適合的大小來分配。然而,內部分裂仍然沒有完全消除。
小結: