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

Linux內存管理之slab機制(銷毀cache)

cache的銷毀很簡單,依次檢查和釋放本地CPU cache、共享cache、三鏈以及cache本身。從cache的創建我們看到,創建的cache主要是從cache_cache中獲得的,因為cache_cache中對象的大小就是cache結構體的大小,所以這裡只是釋放到cache_cache就OK了。

[cpp]

  1. static void __kmem_cache_destroy(struct kmem_cache *cachep)  
  2. {  
  3.     int i;  
  4.     struct kmem_list3 *l3;  
  5.     /* 釋放每個cpu local cache使用的struct array_cache對象 
  6.     ,注意此時是online cpu, cpu如果是down狀 
  7.       態,並沒有釋放 */  
  8.     for_each_online_cpu(i)  
  9.         kfree(cachep->array[i]);  
  10.   
  11.     /* NUMA: free the list3 structures */  
  12.     for_each_online_node(i) {/*對每個在線的節點*/  
  13.         l3 = cachep->nodelists[i];  
  14.         if (l3) {  
  15.             /* 釋放shared local cache使用的struct array_cache對象 */  
  16.             kfree(l3->shared);  
  17.             free_alien_cache(l3->alien);  
  18.             kfree(l3);/*釋放三鏈*/  
  19.         }  
  20.     }  
  21.     /*釋放cache,因為該cache為cache_cache中的對象,所以調用對象釋放 
  22.     函數*/  
  23.     kmem_cache_free(&cache_cache, cachep);  
  24. }  
Copyright © Linux教程網 All Rights Reserved