歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux內存管理之伙伴系統(建立)

內核使用伙伴系統來解決內存分配引起的外部碎片問題。

一、數據結構描述

結構zone中的free_area數組描述伙伴系統該數組為free_area結構

 
  1. struct zone {  
  2. ……  
  3.     struct free_area    free_area[MAX_ORDER];  
  4. ……  
  5. };  
 
  1. struct free_area {/*鏈表類型為5類,對於分類為新加入的*/  
  2.     struct list_head    free_list[MIGRATE_TYPES];  
  3.     unsigned long       nr_free;  
  4. };  

下圖為伙伴系統在管理區中的表示。


 

二、伙伴系統的初始化

在初始化物理管理區的時候初始化伙伴系統的,具體實現在下面的函數中:

Start_kernel()->setup_arch()->paging_init()->zone_sizes_init()->free_area_init_nodes()->free_area_init_node()->free_area_init_core()->init_currently_empty_zone()->zone_init_free_lists()

 
  1. /*初始化對應zone中所有order和所有類型的鏈表*/  
  2. static void __meminit zone_init_free_lists(struct zone *zone)  
  3. {  
  4.     int order, t;  
  5.     for_each_migratetype_order(order, t) {  
  6.         INIT_LIST_HEAD(&zone->free_area[order].free_list[t]);  
  7.         zone->free_area[order].nr_free = 0;  
  8.     }  
  9. }  
Copyright © Linux教程網 All Rights Reserved