日期:2014-05-16 浏览次数:20846 次
销毁缓存首先要保证的一点就是缓存当中所有的对象都是空闲的,也就是之前分配出去的对象都已经释放回来了,其主要的步骤如下
1.将缓存从cache_chain链表中删除
2.将本地高速缓存、alien高速缓存和共享本地高速缓存中的对象都释放回slab并释放所有的free链表,然后判断full链表以及partial链表是否都为空,如果有一个不为空说明存在非空闲slab,也就是说有对象还未释放,此时无法销毁缓存,重新将缓存添加到cache_chain链表中
3.确定所有的slab都为空闲状态后,将缓存涉及到的所有描述符都释放(这些描述符都是保存在普通高速缓存中的)
负责销毁缓存的函数为kmem_cache_destroy()
drain_cpu_caches()的最终落脚在free_block()函数上,该函数在前面已做过分析,在此不再列出
slab_destroy()函数已在前文中分析