日期:2014-05-16  浏览次数:20800 次

Linux Slab分配器(七)--销毁缓存

销毁缓存首先要保证的一点就是缓存当中所有的对象都是空闲的,也就是之前分配出去的对象都已经释放回来了,其主要的步骤如下

1.将缓存从cache_chain链表中删除

2.将本地高速缓存、alien高速缓存和共享本地高速缓存中的对象都释放回slab并释放所有的free链表,然后判断full链表以及partial链表是否都为空,如果有一个不为空说明存在非空闲slab,也就是说有对象还未释放,此时无法销毁缓存,重新将缓存添加到cache_chain链表中

3.确定所有的slab都为空闲状态后,将缓存涉及到的所有描述符都释放(这些描述符都是保存在普通高速缓存中的)

 

负责销毁缓存的函数为kmem_cache_destroy()


 

drain_cpu_caches()的最终落脚在free_block()函数上,该函数在前面已做过分析,在此不再列出

 

slab_destroy()函数已在前文中分析

 


 


1楼zi77642475昨天 21:13