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