From 02a8fcb62ea977bb0bd20770058c8c4e5f01bdf6 Mon Sep 17 00:00:00 2001 From: gatieme Date: Wed, 17 Aug 2016 16:56:15 +0800 Subject: [PATCH] ... --- .../06-non_contiguous)pages/README.md | 513 ++++++++++++++++++ .../04-buddy/07-kernel_mapping/README.md | 62 +++ .../04-buddy/images/kernel_space.jpg | Bin 0 -> 22429 bytes .../02-memory/04-buddy/images/vmalloc.jpg | Bin 0 -> 69497 bytes .../04-buddy/images/vmalloc_space.png | Bin 0 -> 27622 bytes .../02-memory/04-buddy/images/vmlloc_map.jpg | Bin 0 -> 85265 bytes 6 files changed, 575 insertions(+) create mode 100644 study/kernel/02-memory/04-buddy/06-non_contiguous)pages/README.md create mode 100644 study/kernel/02-memory/04-buddy/07-kernel_mapping/README.md create mode 100644 study/kernel/02-memory/04-buddy/images/kernel_space.jpg create mode 100644 study/kernel/02-memory/04-buddy/images/vmalloc.jpg create mode 100644 study/kernel/02-memory/04-buddy/images/vmalloc_space.png create mode 100644 study/kernel/02-memory/04-buddy/images/vmlloc_map.jpg diff --git a/study/kernel/02-memory/04-buddy/06-non_contiguous)pages/README.md b/study/kernel/02-memory/04-buddy/06-non_contiguous)pages/README.md new file mode 100644 index 0000000..75f0b9b --- /dev/null +++ b/study/kernel/02-memory/04-buddy/06-non_contiguous)pages/README.md @@ -0,0 +1,513 @@ +内存中不连续的页的分配 +======= + +| 日期 | 内核版本 | 架构| 作者 | GitHub| CSDN | +| ------- |:-------:|:-------:|:-------:|:-------:|:-------:| +| 2016-06-14 | [Linux-4.7](http://lxr.free-electrons.com/source/?v=4.7) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux内存管理](http://blog.csdn.net/gatieme/article/category/6225543) | + + + + +在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. + +Linux内核使用二进制伙伴算法来管理和分配物理内存页面, 该算法由Knowlton设计, 后来Knuth又进行了更深刻的描述. + +伙伴系统是一个结合了2的方幂个分配器和空闲缓冲区合并计技术的内存分配方案, 其基本思想很简单. 内存被分成含有很多页面的大块, 每一块都是2个页面大小的方幂. 如果找不到想要的块, 一个大块会被分成两部分, 这两部分彼此就成为伙伴. 其中一半被用来分配, 而另一半则空闲. 这些块在以后分配的过程中会继续被二分直至产生一个所需大小的块. 当一个块被最终释放时, 其伙伴将被检测出来, 如果伙伴也空闲则合并两者. + +* 内核如何记住哪些内存块是空闲的 + +* 分配空闲页面的方法 + +* 影响分配器行为的众多标识位 + +* 内存碎片的问题和分配器如何处理碎片 + + +#1 内存中不连续的页的分配 +------- + + +根据上文的讲述, 我们知道物理上连续的映射对内核是最好的, 但并不总能成功地使用. 在分配一大块内存时, 可能竭尽全力也无法找到连续的内存块. + +在用户空间中这不是问题,因为普通进程设计为使用处理器的分页机制, 当然这会降低速度并占用TLB. + +在内核中也可以使用同样的技术. 内核分配了其内核虚拟地址空间的一部分, 用于建立连续映射. + + +在IA-32系统中, 前16M划分给DMA区域, 后面一直到第896M作为NORMAL直接映射区, 紧随直接映射的前896MB物理内存,在插入的8MB安全隙之后, 是一个用于管理不连续内存的区域. 这一段具有线性地址空间的所有性质. 分配到其中的页可能位于物理内存中的任何地方. 通过修改负责该区域的内核页表, 即可做到这一点. + +![内核虚拟地址空间的划分](../images/kernel_space.jpg) + +![内核虚拟地址空间的划分](../images/vmalloc_space.png) + +Persistent mappings和Fixmaps地址空间都比较小, 这里我们忽略它们, 这样只剩下直接地址映射和VMALLOC区, 这个划分应该是平衡两个需求的结果 + +1. 尽量增加DMA和Normal区大小,也就是直接映射地址空间大小,当前主流平台的内存,基本上都超过了512MB,很多都是标配1GB内存,因此注定有一部分内存无法进行线性映射。 + +2. 保留一定数量的VMALLOC大小,这个值是应用平台特定的,如果应用平台某个驱动需要用vmalloc分配很大的地址空间,那么最好通过在kernel参数中指定vmalloc大小的方法,预留较多的vmalloc地址空间。 + +3. 并不是Highmem没有或者越少越好,这个是我的个人理解,理由如下:高端内存就像个垃圾桶和缓冲区,防止来自用户空间或者vmalloc的映射破坏Normal zone和DMA zone的连续性,使得它们碎片化。当这个垃圾桶较大时,那么污染Normal 和DMA的机会自然就小了。 + +通过这种方式, 将内核的内核虚拟地址空间划分为几个不同的区域 + +下面的图是VMALLOC地址空间内部划分情况 + + + +![内核虚拟地址空间的划分](../images/vmalloc.jpg) + + +#2 用vmalloc分配内存 +------- + +vmalloc是一个接口函数, 内核代码使用它来分配在虚拟内存中连续但在物理内存中不一定连续的内存 + +```cpp +// http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=4.7#L70 +void *vmalloc(unsigned long size); +``` + +该函数只需要一个参数, 用于指定所需内存区的长度, 与此前讨论的函数不同, 其长度单位不是页而是字节, 这在用户空间程序设计中是很普遍的. + +使用vmalloc的最著名的实例是内核对模块的实现. 因为模块可能在任何时候加载, 如果模块数据比较多, 那么无法保证有足够的连续内存可用, 特别是在系统已经运行了比较长时间的情况下. + +如果能够用小块内存拼接出足够的内存, 那么使用vmalloc可以规避该问题 + +内核中还有大约[400处地方调用了vmalloc](http://lxr.free-electrons.com/ident?v=4.7;i=vmalloc), 特别是在设备和声音驱动程序中. + +因为用于vmalloc的内存页总是必须映射在内核地址空间中, 因此使用`ZONE_HIGHMEM`内存域的页要优于其他内存域. 这使得内核可以节省更宝贵的较低端内存域, 而又不会带来额外的坏处. 因此, `vmalloc`等映射函数是内核出于自身的目的(并非因为用户空间应用程序)使用高端内存页的少数情形之一. + +所有有关vmalloc的数据结构和API结构声明在[`include/linux/vmalloc.h`](http://lxr.free-electrons.com/source/include/linux/vmalloc.h)和[``]() + +| 声明头文件 | `NON-MMU`实现 | `MMU`实现 | +|:------------:|:------------------:|:-----------:| +| [`include/linux/vmalloc.h`](http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=4.7) | [`mm/nommu.c`](http://lxr.free-electrons.com/source/mm/nommu.c?v=4.7) | [`mm/vmalloc.c`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7) | + +##2.1 数据结构 +------- + + +内核在管理虚拟内存中的`vmalloc`区域时, 内核必须跟踪哪些子区域被使用、哪些是空闲的. 为此定义了一个数据结构`vm_struct`, 将所有使用的部分保存在一个链表中. 该结构提的定义在[include/linux/vmalloc.h?v=4.7, line 32](http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=4.7#L32) + + +```cpp +// http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=4.7#L32 +struct vm_struct { + struct vm_struct *next; + void *addr; + unsigned long size; + unsigned long flags; + struct page **pages; + unsigned int nr_pages; + phys_addr_t phys_addr; + const void *caller; +}; +``` + +>注意, 内核使用了一个重要的数据结构称之为`vm_area_struct`, 以管理用户空间进程的虚拟地址空间内容. 尽管名称和目的都是类似的, 虽然二者都是做虚拟地址空间映射的, 但不能混淆这两个结构。 +> +> +> +>1. 前者是内核虚拟地址空间映射,而后者则是应用进程虚拟地址空间映射。 +> +>2. 前者不会产生page fault,而后者一般不会提前分配页面,只有当访问的时候,产生page fault来分配页面。 + + + + +对于每个用vmalloc分配的子区域, 都对应于内核内存中的一个该结构实例. 该结构各个成员的语义如下 + +| 字段 | 描述 | +|:-----:|:-----:| +| next | 使得内核可以将vmalloc区域中的所有子区域保存在一个单链表上 | +| addr |定义了分配的子区域在虚拟地址空间中的起始地址。size表示该子区域的长度. 可以根据该信息来勾画出vmalloc区域的完整分配方案 | +| flags | 存储了与该内存区关联的标志集合, 这几乎是不可避免的. 它只用于指定内存区类型 | +| pages | 是一个指针,指向page指针的数组。每个数组成员都表示一个映射到虚拟地址空间中的物理内存页的page实例 | +| nr_pages | 指定pages中数组项的数目,即涉及的内存页数目 | +| phys_addr | 仅当用ioremap映射了由物理地址描述的物理内存区域时才需要。该信息保存在phys_addr中 | +| caller | | + +其中`flags`只用于指定内存区类型, 所有可能的flag标识以宏的形式定义在[include/linux/vmalloc.h?v=4.7, line 14](http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=4.7#L14) + +```cpp +// http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=4.7#L14 +/* bits in flags of vmalloc's vm_struct below */ +#define VM_IOREMAP 0x00000001 /* ioremap() and friends */ +#define VM_ALLOC 0x00000002 /* vmalloc() */ +#define VM_MAP 0x00000004 /* vmap()ed pages */ +#define VM_USERMAP 0x00000008 /* suitable for remap_vmalloc_range */ +#define VM_UNINITIALIZED 0x00000020 /* vm_struct is not fully initialized */ +#define VM_NO_GUARD 0x00000040 /* don't add guard page */ +#define VM_KASAN 0x00000080 /* has allocated kasan shadow memory */ +/* bits [20..32] reserved for arch specific ioremap internals */ +``` + +| flag标识 | 描述 | +|:-----:|:-----:| +| VM_IOREMAP | 表示将几乎随机的物理内存区域映射到vmalloc区域中. 这是一个特定于体系结构的操作 | +| VM_ALLOC | 指定由vmalloc产生的子区域 | +| VM_MAP | 用于表示将现存pages集合映射到连续的虚拟地址空间中 | +| VM_USERMAP | | +| VM_UNINITIALIZED | | +| VM_NO_GUARD | | +| VM_KASAN | | + +下图给出了该结构使用方式的一个实例. 其中依次映射了3个(假想的)物理内存页, 在物理内存中的位置分别是1 023、725和7 311. 在虚拟的vmalloc区域中, 内核将其看作起始于VMALLOC_START + 100的一个连续内存区, 大小为3*PAGE_SIZE的内核地址空间,被映射到物理页面725, 1023和7311 + +![将物理内存页映射到vmalloc区域](../images/vmlloc_map.jpg) + + +##2.2创建vm_area +------- + +因为大部分体系结构都支持`mmu,` 这里我们只考虑有`mmu的`情况. 实际上没有`mmu`支持时, `vmalloc`就无法实现非连续物理地址到连续内核地址空间的映射, `vmalloc`退化为`kmalloc`实现. + +###2.2.1 vmlist全局链表 +------- + +在创建一个新的虚拟内存区之前, 必须找到一个适当的位置. `vm_area`实例组成的一个链表, 管理着`vmalloc`区域中已经建立的各个子区域. 定义在[`mm/vmalloc`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1170)的全局变量[`vmlist`]( http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1170)是表头. 定义在[mm/vmalloc.c?v=4.7, line 1170]( http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1170) + + +```cpp +// http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1170 +static struct vm_struct *vmlist __initdata; +``` + + + +###2.2.2 分配函数 +------- + +内核在mm/vmalloc中提供了辅助函数`get_vm_area`和`__get_vm_area`, 它们负责参数准备工作, 而实际的分配工作交给底层函数`__get_vm_area_node`来完成, 这些函数定义在[mm/vmalloc.c?v=4.7, line 1388](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1388) + +```cpp +struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, + unsigned long start, unsigned long end) +{ + return __get_vm_area_node(size, 1, flags, start, end, NUMA_NO_NODE, + GFP_KERNEL, __builtin_return_address(0)); +} +EXPORT_SYMBOL_GPL(__get_vm_area); + +struct vm_struct *__get_vm_area_caller(unsigned long size, unsigned long flags, + unsigned long start, unsigned long end, + const void *caller) +{ + return __get_vm_area_node(size, 1, flags, start, end, NUMA_NO_NODE, + GFP_KERNEL, caller); +} + +/** + * get_vm_area - reserve a contiguous kernel virtual area + * @size: size of the area + * @flags: %VM_IOREMAP for I/O mappings or VM_ALLOC + * + * Search an area of @size in the kernel virtual mapping area, + * and reserved it for out purposes. Returns the area descriptor + * on success or %NULL on failure. + */ +struct vm_struct *get_vm_area(unsigned long size, unsigned long flags) +{ + return __get_vm_area_node(size, 1, flags, VMALLOC_START, VMALLOC_END, + NUMA_NO_NODE, GFP_KERNEL, + __builtin_return_address(0)); +} + +struct vm_struct *get_vm_area_caller(unsigned long size, unsigned long flags, + const void *caller) +{ + return __get_vm_area_node(size, 1, flags, VMALLOC_START, VMALLOC_END, + NUMA_NO_NODE, GFP_KERNEL, caller); +} +``` + +这些函数是负责实际工作的`__get_vm_area_node`函数的前端. 根据子区域的长度信息, `__get_vm_area_node`函数试图在虚拟的`vmalloc`空间中找到一个适当的位置. 该函数定义在[mm/vmalloc.c?v=4.7, line 1354](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1354) + + + 由于各个`vmalloc`子区域之间需要插入1页(警戒页)作为安全隙, 内核首先适当提高需要分配的内存长度. + +```cpp +static struct vm_struct *__get_vm_area_node(unsigned long size, + unsigned long align, unsigned long flags, unsigned long start, + unsigned long end, int node, gfp_t gfp_mask, const void *caller) +{ + struct vmap_area *va; + struct vm_struct *area; + + BUG_ON(in_interrupt()); + if (flags & VM_IOREMAP) + align = 1ul << clamp_t(int, fls_long(size), + PAGE_SHIFT, IOREMAP_MAX_ORDER); + + size = PAGE_ALIGN(size); + if (unlikely(!size)) + return NULL; + + area = kzalloc_node(sizeof(*area), gfp_mask & GFP_RECLAIM_MASK, node); + if (unlikely(!area)) + return NULL; + + if (!(flags & VM_NO_GUARD)) + size += PAGE_SIZE; + + va = alloc_vmap_area(size, align, start, end, node, gfp_mask); + if (IS_ERR(va)) { + kfree(area); + return NULL; + } + + setup_vmalloc_vm(area, va, flags, caller); + + return area; +} +``` + +`start`和`end`参数分别由调用者设置, 比如`get_vm_area`函数和`get_vm_area_caller`函数传入`VMALLOC_START`和`VMALLOC_END`. 接下来循环遍历vmlist的所有表元素,直至找到一个适当的项 + + +###2.2.3 释放函数 +------- + +[`remove_vm_area`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1454)函数将一个现存的子区域从vmalloc地址空间删除. + + +函数声明如下, [`include/linux/vmalloc.h?v=4.7, line 121`](http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=4.7#L121) +```cpp +// http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=4.7#L121 +struct vm_struct *remove_vm_area(void *addr); +``` + +函数定义在[`mm/vmalloc.c?v=4.7, line 1454`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1454) +```cpp +// http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1446 +/** + * remove_vm_area - find and remove a continuous kernel virtual area + * @addr: base address + * + * Search for the kernel VM area starting at @addr, and remove it. + * This function returns the found VM area, but using it is NOT safe + * on SMP machines, except for its size or flags. + */ +struct vm_struct *remove_vm_area(const void *addr) +{ + struct vmap_area *va; + + va = find_vmap_area((unsigned long)addr); + if (va && va->flags & VM_VM_AREA) { + struct vm_struct *vm = va->vm; + + spin_lock(&vmap_area_lock); + va->vm = NULL; + va->flags &= ~VM_VM_AREA; + spin_unlock(&vmap_area_lock); + + vmap_debug_free_range(va->va_start, va->va_end); + kasan_free_shadow(vm); + free_unmap_vmap_area(va); + + return vm; + } + return NULL; +} +``` + + + +##2.3 vmalloc分配内存区 +------- + +`vmalloc`发起对不连续的内存区的分配操作. 该函数只是一个前端, 为`__vmalloc`提供适当的参数, 后者直接调用`__vmalloc_node`. + + +`vmalloc`只是`__vmalloc_node_flags`的前端接口, 复杂向`__vmalloc_node_flags`传递数据, 而`__vmalloc_node_flags`又是`__vmalloc_node`的前端接口, 而后者又将实际的工作交给`__vmalloc_node_range`函数来完成 + + + +[`vmalloc`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1754)函数定义在[`mm/vmalloc.c?v=4.7, line 1754`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1754), 将实际的工作交给`__vmalloc_node_flags`函数来完成. + +```cpp +// http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1754 +/** + * vmalloc - allocate virtually contiguous memory + * @size: allocation size + * Allocate enough pages to cover @size from the page level + * allocator and map them into contiguous kernel virtual space. + * + * For tight control over page level allocator and protection flags + * use __vmalloc() instead. + */ +void *vmalloc(unsigned long size) +{ + return __vmalloc_node_flags(size, NUMA_NO_NODE, + GFP_KERNEL | __GFP_HIGHMEM); +} +EXPORT_SYMBOL(vmalloc); +``` + +[`__vmalloc_node_flags`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1747)函数定义在[`mm/vmalloc.c?v=4.7, line 1747`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1747), 通过`__vmalloc_node`来完成实际的工作. + +```cpp +// http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1747 +static inline void *__vmalloc_node_flags(unsigned long size, + int node, gfp_t flags) +{ + return __vmalloc_node(size, 1, flags, PAGE_KERNEL, + node, __builtin_return_address(0)); +} +``` +[`__vmalloc_node`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1719)函数定义在[`mm/vmalloc.c?v=4.7, line 1719`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1719), 通过`__vmalloc_node_range`来完成实际的工作. + + +```cpp +// http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1719 +/** + * __vmalloc_node - allocate virtually contiguous memory + * @size: allocation size + * @align: desired alignment + * @gfp_mask: flags for the page level allocator + * @prot: protection mask for the allocated pages + * @node: node to use for allocation or NUMA_NO_NODE + * @caller: caller's return address + * + * Allocate enough pages to cover @size from the page level + * allocator with @gfp_mask flags. Map them into contiguous + * kernel virtual space, using a pagetable protection of @prot. + */ +static void *__vmalloc_node(unsigned long size, unsigned long align, + gfp_t gfp_mask, pgprot_t prot, + int node, const void *caller) +{ + return __vmalloc_node_range(size, align, VMALLOC_START, VMALLOC_END, + gfp_mask, prot, 0, node, caller); +} +``` + +[`__vmalloc_node_range`](http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1658)最终完成了内存区的分配工作 + + +```cpp +// http://lxr.free-electrons.com/source/mm/vmalloc.c?v=4.7#L1658 +/** + * __vmalloc_node_range - allocate virtually contiguous memory + * @size: allocation size + * @align: desired alignment + * @start: vm area range start + * @end: vm area range end + * @gfp_mask: flags for the page level allocator + * @prot: protection mask for the allocated pages + * @vm_flags: additional vm area flags (e.g. %VM_NO_GUARD) + * @node: node to use for allocation or NUMA_NO_NODE + * @caller: caller's return address + * + * Allocate enough pages to cover @size from the page level + * allocator with @gfp_mask flags. Map them into contiguous + * kernel virtual space, using a pagetable protection of @prot. + */ +void *__vmalloc_node_range(unsigned long size, unsigned long align, + unsigned long start, unsigned long end, gfp_t gfp_mask, + pgprot_t prot, unsigned long vm_flags, int node, + const void *caller) +{ + struct vm_struct *area; + void *addr; + unsigned long real_size = size; + + size = PAGE_ALIGN(size); + if (!size || (size >> PAGE_SHIFT) > totalram_pages) + goto fail; + + area = __get_vm_area_node(size, align, VM_ALLOC | VM_UNINITIALIZED | + vm_flags, start, end, node, gfp_mask, caller); + if (!area) + goto fail; + + addr = __vmalloc_area_node(area, gfp_mask, prot, node); + if (!addr) + return NULL; + + /* + * In this function, newly allocated vm_struct has VM_UNINITIALIZED + * flag. It means that vm_struct is not fully initialized. + * Now, it is fully initialized, so remove this flag here. + */ + clear_vm_uninitialized_flag(area); + + /* + * A ref_count = 2 is needed because vm_struct allocated in + * __get_vm_area_node() contains a reference to the virtual address of + * the vmalloc'ed block. + */ + kmemleak_alloc(addr, real_size, 2, gfp_mask); + + return addr; + +fail: + warn_alloc_failed(gfp_mask, 0, + "vmalloc: allocation failure: %lu bytes\n", + real_size); + return NULL; +} +``` + +实现分为3部分 + +* 首先, get_vm_area在vmalloc地址空间中找到一个适当的区域. + +* 接下来从物理内存分配各个页 + +* 最后将这些页连续地映射到vmalloc区域中, 分配虚拟内存的工作就完成了. + +如果显式指定了分配页帧的结点,则内核调用`alloc_pages_node`, 否则,使用alloc_page从当 +前结点分配页帧。 + +分配的页从相关结点的伙伴系统移除. 在调用时,vmalloc将gfp_mask设置为GFP_KERNEL | +__GFP_HIGHMEM,内核通过该参数指示内存管理子系统尽可能从ZONE_HIGHMEM内存域分配页帧。理 +由已经在上文给出:低端内存域的页帧更为宝贵,因此不应该浪费到vmalloc的分配中,在此使用高 +端内存域的页帧完全可以满足要求。 +内存取自伙伴系统,而gfp_mask设置为GFP_KERNEL | __GFP_HIGHMEM,因此内核指示内存管 +理子系统尽可能从ZONE_HIGHMEM分配页帧。其原因我们已经知道 + + + +#3 备选映射方法 +------- + +除了vmalloc之外,还有其他方法可以创建虚拟连续映射。这些都基于上文讨论的__vmalloc函数或使用非常类似的机制 + + +* vmalloc_32的工作方式与vmalloc相同,但会确保所使用的物理内存总是可以用普通32位指针寻址。如果某种体系结构的寻址能力超出基于字长计算的范围,那么这种保证就很重要。例如,在启用了PAE的IA-32系统上,就是如此。 + +* vmap使用一个page数组作为起点,来创建虚拟连续内存区。与vmalloc相比,该函数所用的物理内存位置不是隐式分配的,而需要先行分配好,作为参数传递。此类映射可通过vm_map实例中的VM_MAP标志辨别。 + +* 不同于上述的所有映射方法,ioremap是一个特定于处理器的函数,必须在所有体系结构上实现。它可以将取自物理地址空间、由系统总线用于I/O操作的一个内存块,映射到内核的地址空间中。 + +该函数在设备驱动程序中使用很多,可将用于与外设通信的地址区域暴露给内核的其他部分使用(当然也包括其本身). + + + +#4 释放内存 +------- + + +有两个函数用于向内核释放内存, vfree用于释放vmalloc和vmalloc_32分配的区域,而vunmap +用于释放由vmap或ioremap创建的映射。这两个函数都会归结到__vunmap + +```cpp +void __vunmap(void *addr, int deallocate_pages) +``` + + +addr表示要释放的区域的起始地址,deallocate_pages指定了是否将与该区域相关的物理内存 +页返回给伙伴系统。vfree将后一个参数设置为1,而vunmap设置为0,因为在这种情况下只删除映射, +而不将相关的物理内存页返回给伙伴系统。图3-40给出了__vunmap的代码流程图 + + +不必明确给出需要释放的区域长度,长度可以从vmlist中的信息导出。因此__vunmap的第一个 +任务是在__remove_vm_area(由remove_vm_area在完成锁定之后调用)中扫描该链表,以找到 +相关项。 +unmap_vm_area使用找到的vm_area实例,从页表删除不再需要的项。与分配内存时类似,该函 +数需要操作各级页表,但这一次需要删除涉及的项。它还会更新CPU高速缓存。 +如果__vunmap的参数deallocate_pages设置为1(在vfree中),内核会遍历area->pages的所 +有元素,即指向所涉及的物理内存页的page实例的指针。然后对每一项调用__free_page,将页释放 +到伙伴系统。 +最后,必须释放用于管理该内存区的内核数据结构。 \ No newline at end of file diff --git a/study/kernel/02-memory/04-buddy/07-kernel_mapping/README.md b/study/kernel/02-memory/04-buddy/07-kernel_mapping/README.md new file mode 100644 index 0000000..517a5d6 --- /dev/null +++ b/study/kernel/02-memory/04-buddy/07-kernel_mapping/README.md @@ -0,0 +1,62 @@ +服务器体系与共享存储器架构 +======= + +| 日期 | 内核版本 | 架构| 作者 | GitHub| CSDN | +| ------- |:-------:|:-------:|:-------:|:-------:|:-------:| +| 2016-06-14 | [Linux-4.7](http://lxr.free-electrons.com/source/?v=4.7) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux内存管理](http://blog.csdn.net/gatieme/article/category/6225543) | + + + + +在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. + +Linux内核使用二进制伙伴算法来管理和分配物理内存页面, 该算法由Knowlton设计, 后来Knuth又进行了更深刻的描述. + +伙伴系统是一个结合了2的方幂个分配器和空闲缓冲区合并计技术的内存分配方案, 其基本思想很简单. 内存被分成含有很多页面的大块, 每一块都是2个页面大小的方幂. 如果找不到想要的块, 一个大块会被分成两部分, 这两部分彼此就成为伙伴. 其中一半被用来分配, 而另一半则空闲. 这些块在以后分配的过程中会继续被二分直至产生一个所需大小的块. 当一个块被最终释放时, 其伙伴将被检测出来, 如果伙伴也空闲则合并两者. + +* 内核如何记住哪些内存块是空闲的 + +* 分配空闲页面的方法 + +* 影响分配器行为的众多标识位 + +* 内存碎片的问题和分配器如何处理碎片 + + +#1 高端内存与内核映射 +------- + + +尽管`vmalloc`函数族可用于从高端内存域向内核映射页帧(这些在内核空间中通常是无法直接看到的), 但这并不是这些函数的实际用途. + +重要的是强调以下事实 : 内核提供了其他函数用于将`ZONE_HIGHMEM`页帧显式映射到内核空间, 这些函数与vmalloc机制无关. 因此, 这就造成了混乱. + + +#2 持久内核映射 +------- + +如果需要将高端页帧长期映射(作为持久映射)到内核地址空间中, 必须使用kmap函数. 需要映射的页用指向page的指针指定,作为该函数的参数。该函数在有必要时创建一个映射(即,如果该页确实是高端页), 并返回数据的地址. + +如果没有启用高端支持, 该函数的任务就比较简单. 在这种情况下, 所有页都可以直接访问, 因此只需要返回页的地址, 无需显式创建一个映射. + +如果确实存在高端页, 情况会比较复杂. 类似于vmalloc, 内核首先必须建立高端页和所映射到的地址之间的关联. 还必须在虚拟地址空间中分配一个区域以映射页帧, 最后, 内核必须记录该虚拟区域的哪些部分在使用中, 哪些仍然是空闲的. + + + +##2.1 数据结构 +------- + +核在IA-32平台上在`vmalloc`区域之后分配了一个区域, 从`PKMAP_BASE`到`FIXADDR_START`. 该区域用于持久映射. 不同体系结构使用的方案是类似的. + +```cpp +// http://lxr.free-electrons.com/source/mm/highmem.c?v=4.7#L126 +static int pkmap_count[LAST_PKMAP]; +``` +`pkmap_count`(在[mm/highmem.c?v=4.7, line 126](http://lxr.free-electrons.com/source/mm/highmem.c?v=4.7#L126)定义)是一容量为`LAST_PKMAP`的整数数组, 其中每个元素都对 +应于一个持久映射页。它实际上是被映射页的一个使用计数器,语义不太常见。该计数器计算了内核 +使用该页的次数加1。如果计数器值为2,则内核中只有一处使用该映射页。计数器值为5表示有4处使 +用。一般地说,计数器值为n代表内核中有n-1处使用该页。 +和通常的使用计数器一样,0意味着相关的页没有使用。计数器值1有特殊语义。这表示该位置关 +联的页已经映射,但由于CPU的TLB没有更新而无法使用,此时访问该页,或者失败,或者会访问到 +一个不正确的地址。 +内核利用下列数据结构,来建立物理内存页的page实例与其在虚似内存区中位置之间的关联: \ No newline at end of file diff --git a/study/kernel/02-memory/04-buddy/images/kernel_space.jpg b/study/kernel/02-memory/04-buddy/images/kernel_space.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d10f840e2753bc37b6700e9150a7e237d1c90cd GIT binary patch literal 22429 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 J%nm>Me*wzKHjDrO literal 0 HcmV?d00001 diff --git a/study/kernel/02-memory/04-buddy/images/vmalloc.jpg b/study/kernel/02-memory/04-buddy/images/vmalloc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9c44da97e6eb3f39d6740ae2d8eb2a2726a1be0 GIT binary patch literal 69497 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 b%cgw)buIsT?*G~Y|JnopU+n>wKhysWk@IlA literal 0 HcmV?d00001 diff --git a/study/kernel/02-memory/04-buddy/images/vmalloc_space.png b/study/kernel/02-memory/04-buddy/images/vmalloc_space.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc50018bb7bb8d6e7aab2ec1e84920a8abee3bb GIT binary patch literal 27622 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
_JOEDCq-F~TdZAbiiE2A*mhNA7O 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

5MDb$UT?3xLtPB&hNyBSP?pL!kwkd2+y5H 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