非连续内存分配是指将物理地址不连续的页框映射到线性地址连续的线性地址空间,主要应用于大容量的内存分配。采用这种方式分配内存的主要优点是避免了外部碎片,而缺点是必须打乱内核页表,而且访问速度较连续分配的物理页框慢。
相关阅读:
非连续内存分配的线性地址空间是从VMALLOC_START到VMALLOC_END(具体可以参见<

所有的vm_struct都会链入vmlist链表来管理,从2.6的某个内核版本开始,为了提高效率,内核又为vmalloc区添加了vmap_area结构和vm_struct共同描述,并且引入了红黑树来组织这些结构,鉴于红黑树的复杂,为了简化讨论,把重心放在非连续内存分配的机制上,涉及到vmap_area的具体代码不做详细的分析。
数据结构描述
在分析具体的代码之前,我们先了解描述vmalloc区的这两个数据结构