19.slab分配器(简介及优点)
提供小内存块不是slab分配器的唯一任务。由于结构上的特点,它也用作一个缓存,主要针对经常分配并释放的对象。通过建立slab缓存,内核能够储备一些对象,供后续使用,即使在初始化状态,也是如此。举例来说,为管理与进程关联的文件系统数据,内核必须经常生成struct fs_struct的新实例。此类型实例占据的内存块同样需要经常回收(在进程结束时)。换句话说,内核趋向于非常有规律地分配并释放大小为sizeof{fs_struct}的内存块。slab分配器将释放的内存块保存在一个内部列表中,并不马上返回给伙伴系统。在请求为该类对象分配一个新实例时,会使用最近释放的内存块。这有两个优点。首先,由于内核不必使用伙伴系统算法,处理时间会变短。其次,由于该内存块仍然是“新”的,因此其仍然驻留在CPU高速缓存的概率较高。