内存管理

  该结构与物理页相关,并非与虚拟页相关,该结构对页的描述是短暂的,即时包含的数据继续存在,因为交换等原因,他们并不可能和同一page相关。内核用这个数据结构仅仅描述当前时刻相关的物理页中存在的东西,这种数据结构的目的在于描述物理内存本身,而不是其中的数据。

kmalloc

  以字节为单位获得一块内核内存的大小

void *kmalloc(size_t size, int flags);

分配器标志:

  1. 行为修饰:特定情况下特定方法分配内存;如中断分配时要求程序不能睡眠
  2. 区修饰:到哪里去获取内存页
  3. 类型标志:组合行为修饰和区修饰

vmalloc

  在获得大块内存时:模块被动态插入内核

void *vmalloc(unsigned long size);

  分配的虚拟地址连续,物理地址无需连续;kmalloc保证物理地址也是连续的

  vmalloc把物理上不连续的页转为虚拟连续的必须建立页表,必须一个一个的映射,导致比内存映射抖动大得多

slab分配器

  不同的对象划分为高速缓存组,每种对象(struct_task、struct inode)对应一个高速缓存。kmalloc建立在slab上。高速缓存又被划分为slab;一般情况slab仅仅有一页组成。每个高速缓存可以由多个slab组成。

栈上的静态分配

  每个进程有自己的内核栈、中断栈。如果内核栈溢出,则会覆盖栈末端的thread_info结构中的数据

 

posted on 2020-11-22 15:47  tianzeng  阅读(85)  评论(0编辑  收藏  举报

导航