操作系统ch4.8实例研究Linux虚存管理.ppt_第1页
操作系统ch4.8实例研究Linux虚存管理.ppt_第2页
操作系统ch4.8实例研究Linux虚存管理.ppt_第3页
操作系统ch4.8实例研究Linux虚存管理.ppt_第4页
操作系统ch4.8实例研究Linux虚存管理.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

4 8实例研究 Linux虚拟存储管理 4 8 1Linux存储管理概述4 8 2进程的虚拟地址空间4 8 3Linux物理内存空间的管理4 8 4用户态内存的申请与释放4 8 5内存的共享和保护4 8 6交换空间 页面的换出和调入4 8 7缓冲机制 4 8 1Linux虚拟存储管理概述 1 Linux用户进程可访问4GB线性地址空间 从0从3GB的虚拟内存地址是用户空间 3GB到4GB的虚拟内存地址是内核态空间 存放仅供内核态访问的代码和数据 Linux虚拟存储管理概述 2 页表分为三层 页目录PGD 中间页目录PMD和页表PTE Pentium计算机上被简化成两层 PGD和PMD合二为一 每个进程有一个页目录 存储该进程所使用的内存页面情况 Linux虚拟存储管理概述 3 使用fork 创建进程时 分配内存页面的情况 进程控制块1页 内核态堆栈1页 页目录1页 页表若干页 使用exec 系统调用时 分配内存页面的情况 可执行文件的第1页 用户堆栈的1页或几页 4 8 2Linux进程的虚拟地址空间 进程虚拟地址空间由许多个连续虚地址区域构成 采用虚存段vma及其链表来表示 一个vma是某个进程的一段连续虚存空间 这段虚存里的所有单元拥有相同特征 如属于同一进程 相同的访问权限 同时被锁定 同时受保护 数据结构vm area struct描述 1 structvm area struct structmm struct vm mm 虚存段参数 unsignedlongvm start 虚存段始址 unsignedlongvm end 虚存段末址 pgprot tvm page prot unsignedshortvm flags 按地址分叉的vma的AVL树 shrotvm avl height structvm area struct vm avl left structvm area struct vm avl right 按地址分叉的vma链接指针 structvm area struct vm next 或是在一个结点区双向环链表中 或在共享内存区映射表中 或未用 structvm area struct vm next share structvm area struct vm prev share 用于共享内存 数据结构vm area struct描述 2 数据结构vm area struct描述 3 structvm operations structvm ops 封装的操作如open close unsignedlongvm offset 相对文件中共享内存起点的位移 structinode vm inode 指向文件inode或NULL unsignedlongvm pte 进程虚存管理数据结构 4 8 3Linux物理内存空间的管理 物理内存以页框为单位 长度为4KB 对物理内存的管理通过mem map表描述 men map是由men map t组成的数组 每个men map t描述一个物理页框 typedefstructpage主要内容page前后向链接指针page页cache和ha指针page访问进程的计数page状态位和修改标记页帧内存放代码或数据所属文件的inode页帧年龄 越小越先换出页帧作为缓冲区 则指示地址页帧在mem map表中的下标 bitmap与free area的关系 页面分配和回收 1 所有的空闲物理页帧组织成NR MEM LISTS的双向链表 存储在free area数组中 每个链表节点的包括三个数据向 next和prev是链表指针 map指向bitmap表 页面分配和回收 2 采用buddy算法分配空闲块 当请求分配长度为2i个页帧的块时 从free area数组的第i条链表开始受搜索 如找不到 搜索第i 1条链表 以此类推 如果找到的空闲块正好等于需求 直接把它从来链表中删除 返回首地址 如果找到的空闲块大于需求 则需要把它一分为二 前半部分插入前一条链表 取后半部分 如果还大 则继续对分 取一半留一半 直至相等 同时 bitmap表页必须相应调整 页面分配和回收 3 回收空闲块时 根据bitmap表中的对应组 判断回收块的前后是否为空闲块 若是则合并 并调整bitmap表对应位 从free area的相应空闲链表中取下该空闲块并归还 这是一个递归过程 直到找不到空闲块邻居 将最大的空闲块插入free area的相应空闲链表 4 8 4用户态内存的申请与释放 1 用户进程使用vmalloc 和vfree 函数申请和释放大块存储空间 分配的存储空间在进程的虚地址空间中是连续的 但它对应的物理页框仍需缺页中断后 由缺页中断处理例程分配 所分配的页框也不是连续的 用户态内存的申请与释放 2 vmalloc 和vfree 函数 其执行如下 申请时需给出申请的长度 调用set vm area内部函数向vmlist索取虚存空间 如果申请成功 将会在vmlist中插入一个vm struct结构 并返回首地址 当申请到虚地址空间后更改页目录和页表 用户态内存的申请与释放 3 释放时需给出虚拟空间首地址 沿着vmlist搜索要释放的区域 找到表示该虚拟内存块的vm struct结构 并从vmlist表中删除 同时清除与释放虚存空间有关的目录项和页表项 4 8 5内存的共享和保护 1 内存共享以页共享的方式实现 共享该页的各个进程的页表项直接指向共享页 这种共享不需建立共享页表 节省内存 但效率较低 当共享页状态发生变化时 共享该页的各进程页表均需修改 要多次访问页表 内存的共享和保护 2 对进程的虚拟地址加锁或保护 实质是对vma段的vm flags属性与VM LOCKED进行或操作 虚存加锁后 对应的物理页框驻留内存 不再被页面置换程序换出 加锁操作有4种 对指定的一段虚拟空间加锁或解锁 对进程所有的虚拟空间加锁或解锁 内存的共享和保护 3 对进程的虚拟地址空间实施保护操作是对vma段的vm flags重置PROT READ PROT WRITE和PROT EXEC参数 并重新设定vm page prot属性 同时 对虚拟地址范围内所有页表项的访问权限也做调整 保护操作由系统调用mprotect实施 4 8 6交换空间 页面换出和调入1 交换空间 Linux采用两种方式保存换出页面 一是使用块设备 如硬盘的一个分区 称作交换设备另一种是使用文件系统的一个文件 称作交换文件 两者统称为交换空间 交换设备和交换文件的内部格式 1 前4096个字节是以字符串 SWAP SPACE 结尾的位图 位图的每位对应一个交换空间的页面 置位表示对应的页面可用于换页操作 第4096字节后是存放换出页面的空间 每个交换空间最多可以容纳 4096 10 8 1 32687个页面 最多允许管理MAX SWAPFILES 缺省值为8 个交换空间 交换设备和交换文件的内部格式 2 交换设备中 属于同一页面的数据总是连续存放的 第一个数据块地址一经确定 后续的数据块可按顺序读出或写入 交换文件中 同一页面的数据虽然逻辑上是连续的 但实际的物理存储是零散的 交换这样的页面 必须多次访问磁盘扇区 意味着磁头的反复移动 寻道时间的增加和效率的降低 2页交换进程和页面换出 1 当物理页面不够用时 存储管理必须释放部分物理页面 把它们的内容写到交换空间 内核态交换线程kswapd完成这项功能 Kswapd不仅能够把页面换出到交换空间 也能保证系统中有足够的空闲页面以保持存储管理系统高效的运行 页交换进程和页面换出 2 Kswapd在系统初启时由init创建 调用init swap timer 函数设定 并转入睡眠 每隔10ms响应函数swap tick 被周期性激活 它察看系统中空闲页面是否太少 依次从三条途径缩减物理页面 1 缩减pagecache和buffercache 2 换出SYSTEMV共享内存占用页面 3 换出或丢弃进程占用页面 3缺页中断和页面换入 1 当进程访问了一个还没有有效页表项的虚拟地址时 处理器将产生缺页中断 通知操作系统 并把缺页的虚拟地址 保存在CR2寄存器中 和缺页时访问虚存的模式一并传给缺页中断处理程序 缺页中断和页面换入 2 根据控制寄存器CR2传递的缺页地址 必须找到表示出现缺页的虚拟存储区的vm area struct结构 如果没有找到 说明进程访问了非法存储区 系统发出信号告知进程出错 系统检测缺页时访问模式是否合法 如果进程对该页的访问超越权限 系统也将发出信号 通知进程的存储访问出错 缺页中断和页面换入 3 通过以上两步检查 可以确定缺页中断是否合法 进而进程进一步通过页表项中的位P来区分缺页对应的页面是在交换空间 P 0且页表项非空 还是在磁盘中某一执行文件映像的一部分 最后进行页面调入操作 4 8 7缓冲机制 虚存管理的缓冲机制主要包括 kmalloccacheswapcachepagecache 1swapcache 1 如果被调出到交换空间的页面由于进程再次访问而调入物理内存 只要该页面调入后未被修改过 它的内容与交换空间中内容是一样的 交换空间中的备份是有效的 该页再度换出时 就不要执行写操作 采用swap cache表描述的swapcache来实现这种思想 swapcache实质上是关于页表项的一个列表 每一物理页框都在swap cache中占有一个表项 表项的总数就是物理页框总数 若该页框内容是新创建的 或虽曾换出过 但换出后 该页框已被修改过时 则该表项清0 内容非0的表项 正好是某个进程的页表项 描述了页面在交换空间中的位置 当一个物理页框调出到交换空间时 它先查swapcache 如果其中有与该面对应有效的页表项 那就不需要将该页写出 因为原有空间中内容与待换出的页面是一致的 swapcache 2 2pagecache 1 页缓冲的作用是加快对磁盘文件的访问速度 文件被映射到内存中 每次读取一页 而这些页就保存到pagecache中 用hash表page hash table来访问pagecac

温馨提示

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

评论

0/150

提交评论