slab allocator

首先要说的是memory area,因为有时需要的内存没有一个page frame那么大,比方说只有10bytes,如果分配一个page frame给它,则会产生很多internal fraction。这是一方面,更重要的是很多
kernel的数据结构都不正好是一个或几个page frame那么大,那么在分配的时候就会造成很多internal fraction。为了解决这个问题,linux现在是采用sun solris的解决方法。在内存划出多块区域,
被称为cache用来存放常用的kernel object,每个cache用来存放一类kernel object,每个cache被分为多个slab,每个slab存放一些objects。这样就可以将internal fraction减少到最小,另外
还可以复用object(每个object还有构造函数和析构函数,函数指针存放在cache decriptor中),从而提高系统的运行效率。但是每个object都是按某个常数进行对齐的,一般是power of 2。因为我们
要知道硬件cache也是按一个常数(通常是power of 2)进行对齐,所以内存中的对齐有利充分利用cache。还有一个原因是,一旦对齐了后,计算下一个对象的开始地址就变得简单了,而且可以用高效的指令
来完成,比如1<<位移的次数。第三点优势在于,Usually, microcomputers access memory cells more quickly if their physical addresses are aligned with respect to the
word size (that is, to the width of the internal memory bus of the computer).所以object是按word size 进行对齐。
补充:
 linux还有一些通用的cache(general purpose cache),他们存放的object的大小是2的指数,从32到131072bytes。
在linux中还有per-cpu page frame cache,保存的是从buddy system中申请的一个个page frame,用来满足cpu对单个page frame的需求。所以linux为了提高系统的运行效率,还是动了不少脑经
的哦
2009/02/04 三

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Slab allocator是一种内存管理算法,用于操作系统中的内核空间。它的主要目的是提高内核内存的分配和释放效率。Slab allocator将内存划分为多个固定大小的块,这些块被称为slabs。当内核需要内存时,它会从一个slab中分配一个或多个块,并在使用后将它们释放回slab中,以便稍后再次使用。 Slab allocator有助于减少内存碎片和内存分配器的开销。它还可以提高内存分配和释放的速度,因为它使用预先分配的内存池来避免频繁的内存分配和释放操作。 在Linux内核中,Slab allocator是可选的,但它已经成为了主流的内存分配器。 ### 回答2: 操作系统中的slab allocator是一种内存分配算法,用于管理操作系统内核中的内存。它的设计目标是提高内存分配的效率和性能。 Slab allocator的思想是将内存划分成大小固定的内存块,称为slab。每个slab由连续的内存页面组成,其中一部分用于存储数据,另一部分用于管理数据块的分配和释放。 slab allocator维护了一个slab链表,每个链表上都是相同大小的slab。当需要分配内存时,slab allocator首先在合适大小的slab链表上查找空闲slab,如果找到,则从slab中分配一个数据块。如果链表上没有可用的slab,则会从内存中分配一个新的slab,并将其加入到链表中。 当需要释放内存时,slab allocator将数据块返回到对应的slab中。如果该slab中的所有数据块都被释放,则该slab会变为空闲状态,并将其从链表中移除。当系统需要更多内存时,slab allocator可以重新使用已经释放的slab。 通过使用slab allocator,操作系统可以减少内存分配和释放的开销。因为每个slab都是固定大小的,所以内存分配和释放的操作非常高效。另外,由于slab可以被重复使用,也减少了对内存的频繁申请和释放,从而提高了系统的整体性能。 总而言之,操作系统的slab allocator是一种高效的内存管理算法,通过减少内存分配和释放的开销,提高了系统的性能和效率。 ### 回答3: 操作系统中的slab allocator是一种用于内存管理的高效分配器。它主要用于解决频繁申请和释放小块内存时产生的内存碎片问题。 Slab allocator的基本思想是将连续的内存空间分为多个大小相等的slab。每个slab包含一定数量的固定大小的内存块。当应用程序需要分配一小块内存时,slab allocator会分配一个完整的slab给应用程序,然后应用程序从slab中分配所需内存块。当应用程序释放内存时,内存块被返回给slab allocator进行重复利用。 对于不同大小的内存块需求,slab allocator会维护一系列自由链表。每个自由链表对应一个固定大小的内存块。当应用程序需要申请内存时,slab allocator会从合适大小的自由链表中找到一个slab。如果没有可用的slab,它会首先去内存池(memory pool)中申请一个新的slab。 通过使用slab allocator,操作系统可以减少内存碎片的产生,并提高内存分配和回收的效率。由于内存分配是以slab为单位进行的,而不是单个页面或字节,所以减少了内存碎片化的问题。此外,重复利用slab中的内存块也减少了频繁分配和释放内存的开销。 总而言之,slab allocator是一种高效的内存管理机制,用于解决内存碎片化问题。它通过预分配和重复利用slab来提高内存分配和回收的效率,从而提高整个系统的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值