課本源碼部分
第8章 伙伴系統 - 邊界標識法
——《數據結構》-嚴蔚敏.吳偉民版
源碼使用說明 鏈接☛☛☛ 《數據結構-C語言版》(嚴蔚敏,吳偉民版)課本源碼+習題集解析使用說明
課本源碼合輯 鏈接☛☛☛ 《數據結構》課本源碼合輯
習題集全解析 鏈接☛☛☛ 《數據結構題集》習題解析合輯
本源碼引入的文件 鏈接☛ Status.h
相關測試數據下載 鏈接☛ 數據包
文檔中源碼及測試數據存放目錄:數據結構\▲課本算法實現\▲08 動態存儲管理\02 BuddySystem
Linux內核內存管理的一項重要工作就是如何在頻繁申請釋放內存的情況下,避免碎片的產生。Linux采用伙伴系統解決外部碎片的問題,采用slab解決內部碎片的問題,在這裡我們討論外部碎片問題。
避免外部碎片的方法有兩種:一種是利用非連續內存的分配;另外一種則是用一種有效的方法來監視內存,保證在內核只要申請一小塊內存的情況下,不會從大塊的連續空閒內存中截取一段過來,從而保證了大塊內存的連續性和完整性。顯然,前者不能成為解決問題的普遍方法,一來用來映射非連續內存線性地址空間有限,二來每次映射都要改寫內核的頁表,進而就要刷新TLB,這使得分配的速度大打折扣,這對於要頻繁申請內存的內核顯然是無法忍受的。因此Linux采用後者來解決外部碎片的問題,也就是著名的伙伴系統。
伙伴系統的宗旨就是用最小的內存塊來滿足內核的對於內存的請求。
文件三 ☛ BuddySystem-main.c (測試文檔)
測試結果展示