Linux x86内存管理学习总结.pdf_第1页
Linux x86内存管理学习总结.pdf_第2页
Linux x86内存管理学习总结.pdf_第3页
Linux x86内存管理学习总结.pdf_第4页
Linux x86内存管理学习总结.pdf_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux x86 内存管理学习总结 吴发松 2012 6 15 硬件基础硬件基础 x86 8个通用寄存器个通用寄存器 EAX EBX ECX EDX EBP ESP ESI EDI AX BX CX DX BP SP SI DI AH BH CH DH AL BL CL DL 6个个16位的段寄存器位的段寄存器 CS DS SS ES FS GS 指令指针寄存器和标志寄存器指令指针寄存器和标志寄存器 EIP EFLAGS 控制寄存器控制寄存器 CR0 机器状态字机器状态字 CR1 intel保留保留 CR2 页故障地址页故障地址 CR3 页目录地址页目录地址 系统地址寄存器系统地址寄存器 全局描述符表寄存器全局描述符表寄存器 中断描述符表寄存器中断描述符表寄存器 局部描述符表寄存器局部描述符表寄存器 任务状态寄存器任务状态寄存器 其它其它 调试寄存器调试寄存器 测试寄存器测试寄存器 地址的转换地址的转换 相关概念相关概念 虚拟地址虚拟地址 线性地址线性地址 物理地址物理地址 实模式下的地址转换实模式下的地址转换 段地址段地址 段内偏移段内偏移 保护模式下的地址转换保护模式下的地址转换 MMU把虚拟地址转换成物理地址把虚拟地址转换成物理地址 分段机制分段机制 作用作用 把虚拟地址转换成线性地址把虚拟地址转换成线性地址 段描述符表段描述符表 全局描述符表全局描述符表 中断描述符表中断描述符表 局部描述符表局部描述符表 段描述符段描述符 8字节字节 段基地址段基地址 32位位 段界限段界限 20位位 段属性段属性 12位位 段选择符段选择符 分页机制分页机制 作用作用 把线性地址转换成物理地址把线性地址转换成物理地址 页的大小页的大小 4k 页表页表 物理页面基地址物理页面基地址 页的属性页的属性 页表项页表项 用低用低12位表示页的属性位表示页的属性 4k 2 12 则则32位的页表位的页表 项恰好可以表示页的映射关系项恰好可以表示页的映射关系 下级页表或物理页面的基地址属性 多级页表多级页表 如果不分级如果不分级 则则 4GB的线性地址空间可以划分为的线性地址空间可以划分为1M个个4KB大小的页大小的页 即即 页表中有页表中有1M个页表项个页表项 二级页表二级页表 即把即把1M个页表项组成的个页表项组成的 大大 页表页表 划分成划分成1K个个 小小 页表页表 每个表中有每个表中有1K个页表项个页表项 这样这样32位的线性地址就被划分成如下结构位的线性地址就被划分成如下结构 n级页表级页表 以此类推以此类推 页内偏移页页目录 线性地址到物理地址的转换线性地址到物理地址的转换 二级页表二级页表 扩展分页扩展分页 页的大小为页的大小为4M 32位的线性地址划分为位的线性地址划分为 目录域目录域 高高10位位 页内偏移页内偏移 低低22位位 Linux的分页机制的分页机制 2 4 x 三级分页三级分页 页目录页目录 中间目录中间目录 页表页表 虚拟地址空间虚拟地址空间 相关概念相关概念 虚拟内存虚拟内存 32位系统上位系统上 每个进程都拥有每个进程都拥有4GB的虚拟的虚拟 地址空间地址空间 内核空间内核空间 0 xC0000000 0 xFFFFFFFF 用户空间用户空间 0 x00000000 0 xBFFFFFFF 内核空间到物理内存的映射内核空间到物理内存的映射 从物理地址从物理地址0 x00000000开始映射开始映射 物理地址和虚拟地址之间有一个偏移物理地址和虚拟地址之间有一个偏移 PAGE OFFSET Linux对物理内存的描述对物理内存的描述 UMA和和NUMA UMA的重要特征的重要特征 整个物理内存都是均匀的整个物理内存都是均匀的 CPU访访 问这个空间中的任何地址所需要的时间都相同问这个空间中的任何地址所需要的时间都相同 存储节点存储节点 访问时间相同的存储空间叫一个访问时间相同的存储空间叫一个 存储节点存储节点 页面的数据结构页面的数据结构 系统在初始化阶段根据系统的内存大小建立一个系统在初始化阶段根据系统的内存大小建立一个page 结构的数组结构的数组mem map 数组的下标就是内存中物理数组的下标就是内存中物理 页面的序号页面的序号 内核的内存管理区内核的内存管理区Zone ZONE DMA 896M 高端内存区高端内存区 理解内核的高端内存区理解内核的高端内存区 内核在内核在0 xc0000000 0 xffffffff 大小为大小为1G的逻辑的逻辑 地址空间内运行地址空间内运行 但真正的物理内存可能大于但真正的物理内存可能大于 1G 即即 不可以把所有的内核地址空间按不可以把所有的内核地址空间按 逻辑逻辑 地址地址 物理地址物理地址 0 xc0000000 的方式简单的和物的方式简单的和物 理地址建立映射理地址建立映射 因为那样的话因为那样的话 内核将无法访内核将无法访 问超过问超过1G的物理内存的物理内存 X86的解决方法是把内核的地址空间划分为的解决方法是把内核的地址空间划分为3个个 区区 即即 ZONE DMA 16M ZONE NORMAL 16 896M ZONE HIGHMEM 896M 1G 前两个区和物理地址建立简单的映射关系前两个区和物理地址建立简单的映射关系 逻逻 辑地址辑地址 物理地址物理地址 0 xc0000000 ZONE HIGHMEM区区128M的地址空间则的地址空间则 预留预留 出来出来 以便根据需要用它来映射以便根据需要用它来映射896M以上的物以上的物 理内存理内存 达到达到 内核可以访问所有物理内存内核可以访问所有物理内存 的目的目 的的 可以这样理解可以这样理解 高端内存高端内存 不仅仅是内核逻辑地不仅仅是内核逻辑地 址空间中的概念址空间中的概念 也确实是对应着物理内存中的也确实是对应着物理内存中的 高端内存高端内存 Linux高端内存区的划分高端内存区的划分 内核将高端内存划分为内核将高端内存划分为3部分部分 对应对应3种不同的映种不同的映 射方式射方式 非连续映射区非连续映射区 VMALLOC START VMALLOC END 永久内核映射区永久内核映射区 PKMAP BASE FIXADDR START 临时映射区临时映射区 FIXADDR START 4G 永久内核映射永久内核映射 使用一个专门页表使用一个专门页表 pkmap page table Pte t pkmap page table 大小为大小为LAST PKMAP 通常为通常为4M ifdef CONFIG X86 PAE define LAST PKMAP 512 else define LAST PKMAP 1024 endif 映射的线性地址从映射的线性地址从PKMAP BASE 0 xfe000000 开始开始 Kmap kunmap 临时内核映射临时内核映射 Km type 每个每个cpu占用一块这样的空间占用一块这样的空间 每个每个cpu占用的空间又被划分为多个小空间占用的空间又被划分为多个小空间 每个小空间的大小为每个小空间的大小为1 个个page 使用每个使用每个cpu数据的原因数据的原因 是为了提高系统性能是为了提高系统性能 减少数据锁定减少数据锁定 减少缓存失效减少缓存失效 Kmap atomic kunmap atomic 非连续映射区非连续映射区 动态映射动态映射 由链表由链表vmlist链接链接 Struct vm struct Unsigned long flags Void addr Unsigned long size Struct vm struct next Struct vm struct vmlist 一个一个vm struct表示一个表示一个vmalloc area Vmalloc area的创建的创建 Get vm area 非连续存储区的分配和释放非连续存储区的分配和释放 Vmalloc vmalloc area pages Vfree 内存的分配和回收内存的分配和回收 伙伴算法伙伴算法 所有空闲页面分所有空闲页面分10个链表个链表 每个链表中的一个块含有每个链表中的一个块含有2的幂次方的幂次方 个页面个页面 如如 第第0个链表中块的大小为个链表中块的大小为2的的0次方个页面次方个页面 第第1个链表中块的大小为个链表中块的大小为2的的1次方个页面次方个页面 第第9个链表中块的大小为个链表中块的大小为2的的9次方次方 即即512个页面个页面 数据结构数据结构 Struct free area struct struct page next struct page prev unsigned int map free area 10 物理内存的分配和回收物理内存的分配和回收 Slave分配机制分配机制 物理页面的分配和释放物理页面的分配和释放 分配分配 Struct page alloc page gfp t gfp mask unsigned int order Void page address struct page page Struct page alloc page gfp t gfp mask Unsigned long get free page gfp t gfp mask 获得填充为获得填充为0的页的页 Unsigned long get zeroed page unsigned int gfp mask 其它其它 get free page s 释放释放 Void free pages struct page page unsigned long order Void free pages unsigned long addr unsigned int order Void free page unsigned long addr Slave分配机制分配机制 作用作用 不需要一次性的至少分配一个页面不需要一次性的至少分配一个页面 减少内存减少内存 浪费浪费 为某种常用的特定对象分配一个缓冲区为某种常用的特定对象分配一个缓冲区 并把缓冲区划分为多个并把缓冲区划分为多个slab 实际上是实际上是3个个slab链表链表 slabs full slabs partial slabs empty 每个每个slab由一个或多个连续页面组成由一个或多个连续页面组成 可以装载多个可以装载多个 对象对象 通用内存分配和释放通用内存分配和释放 Void kmalloc size t size gfp t flags Void kfree const void ptr 标志的选择标志的选择 GFP DMA GFP KERNEL GFP DMA GFP ATOMIC DMA内存 可以睡眠 DMA内存 不可以睡眠 GFP ATOMICtasklet GFP A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论