第9章-物理内存_第1页
第9章-物理内存_第2页
第9章-物理内存_第3页
第9章-物理内存_第4页
第9章-物理内存_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

操作系统 北京大学计算中心付中南fuzhongnan 第9章物理内存 9 1背景9 2交换9 3连续内存分配9 4分页9 5页表结构9 6分段 第9章物理内存 CPU调度提高了CPU的使用率和计算机对用户的响应速度 为了实现这种性能的改进 必须将多个进程保存在内存中 也就是说 内存必须共享 因此 操作系统有必要对内存进行管理 本章目标详细描述内存硬件的各种组织方法讨论各种内存管理技术 第9章物理内存 9 1背景内存是现代计算机运行的中心 内存由很大一组字或字节组成 每个字或字节都有它们自己的地址 CPU根据程序计数器的值从内存中提取指令 这些指令可能会引起进一步对特定内存地址的读取和写入 内存单元只识别地址流 而不关心这些地址是如何产生的 因此在讨论内存管理时 我们只关心由运行的程序产生的地址 第9章物理内存 9 1背景9 1 1基本硬件CPU所能直接访问的存储器只有内存和处理器内的寄存器 因此 指令和指令使用的数据必须在内存中 如果不在内存中 那么CPU在使用指令或数据前必须先将它们移到内存中 系统要确保操作系统不被用户进程访问 以及确保用户进程不被其他不用进程访问 这种保护可通过硬件来实现 第9章物理内存 9 1背景9 1 1基本硬件首先要确保每个进程都有独立的内存空间 为此 需要确定进程可访问的合法地址 并确保进程只访问其合法地址 通过两个寄存器 可以实现这种保护 基地址寄存器 含有最小的合法物理内存地址界限地址寄存器 决定了可访问的范围的大小 第9章物理内存 9 1背景9 1 1基本硬件 第9章物理内存 9 1背景9 1 1基本硬件内存空间保护的实现 是通过CPU硬件对用户模式所产生的每一个地址与寄存器的地址进行比较来完成的 如果用户模式下执行的程序试图访问操作系统内存或其他用户内存 则会产生错误 加载基地址寄存器和界限地址寄存器只能通过特权指令来执行 特权指令只可在内核模式下执行 而只有操作系统在内核模式下执行 因此只有操作系统可以加载这两个寄存器 第9章物理内存 9 1背景9 1 1基本硬件 第9章物理内存 9 1背景9 1 2地址绑定程序以二进制可执行文件形式存储在磁盘上 为了执行 程序被调入内存并放在进程空间内 大多数情况下 用户程序在执行前 需要经过好几个步骤 在这些步骤中 地址可能有不同的表示形式 如在源程序中 地址常是用符号来表示的 编译器通常将这些符号地址绑定在可重定位的地址 链接程序再将这些可重定位的地址绑定成绝对地址 第9章物理内存 9 1背景9 1 2地址绑定地址绑定通常有以下几种情况 编译时 如果在编译时就知道进程将在内存中的驻留地址 那么就生成绝对代码加载时 如果编译时并不知道进程将驻留在内存的什么地方 那么编译器就必须生成可重定位代码 对于这种情况 最后绑定会延迟到加载时才进行 执行时 如果进程在执行时可以从一个内存段移到另一个内存段 那么绑定必须延迟到执行时才进行 第9章物理内存 9 1背景9 1 3逻辑地址空间与物理地址空间CPU所生成的地址通常称为逻辑地址内存单元所看到的地址通常称为物理地址编译和加载时的地址绑定方法生成相同的逻辑地址和物理地址执行时的地址绑定导致不同的逻辑地址和物理地址 这种情况 通常称逻辑地址为虚拟地址所有逻辑地址的集合称为逻辑地址空间 与这些逻辑地址对应的物理地址的集合称为物理地址空间 第9章物理内存 9 1背景9 1 3逻辑地址空间与物理地址空间运行时从虚拟地址到物理地址的映射是由被称为内存管理单元 MMU 的硬件设备来完成的 重定位寄存器 类似之前提到的基地址寄存器用户进程所生成的地址在送交内存之前 都将加上重定位寄存器的值 用户程序绝不会看到真正的物理地址 第9章物理内存 9 1背景9 1 3逻辑地址空间与物理地址空间 第9章物理内存 9 2交换进程需要在内存中以便执行 不过 进程可以暂时从内存中交换到备份存储上 当需要执行时再调回到内存中 通常 一个交换出的进程需要交换回到它原来所占用的内存空间 这一限制是有地址绑定方式决定 如果绑定是在编译或加载时所定的 那么就不可以移动到不同位置 如果绑定在运行时才确定 那么进程可以移到不同的地址空间 第9章物理内存 9 2交换交换需要备份存储 通常使用快速磁盘 系统有一个就绪队列 它包括在备份存储或者内存中准备运行的所有进程 交换的上下文切换时间较长 假设用户进程大小为10MB 备份存储的传输速度为40MBps的标准硬盘 10MB进程传入或传出内存的时间为10000KB 40000KBps 1 4s 250ms交换的总时间为500ms 第9章物理内存 9 2交换为了有效使用CPU 需要使每个进程的执行时间比交换时间长 交换还受其他因素限制 如果要换出进程 必须确保该进程完全处于空闲状态 待处理I O 交换需要很多时间 而且能为进程提供的执行时间却很少 因此现在交换已经使用不多 第9章物理内存 9 3连续内存分配内存通常分为两个区域 一个用于驻留操作系统 另一个用于用户进程 通常需要将多个进程同时放入内存 因此需要考虑如何为输入队列中需要调入内存的进程分配内存空间 采用连续内存分配时 每个进程位于一个连续的内存区域 第9章物理内存 9 3连续内存分配9 3 1内存映射与保护当CPU调度选择一个进程来执行时 作为上下文切换工作的一部分 调度程序会用正确的值来初始化重定位寄存器和界限地址寄存器 由于CPU所产生的每一地址都需要与寄存器进行核对 所以可以保证操作系统和其他用户程序及数据不受该进程的影响 第9章物理内存 9 3连续内存分配9 3 2内存分配最简单的内存分配方式就是将内存分为多个固定大小的分区 使用这种多分区方法 当一个分区空闲时 可以从输入队列中选择一个进程 调入空闲分区 当进程终止时 其分区可以被其他进程所使用 第9章物理内存 9 3连续内存分配9 3 2内存分配另一种方案是采用可变分区操作系统有一个表 用于记录哪些内存可用和哪些内存已被占用 一开始 所有内存都可用于用户进程 因此可以作为一大块可用内存 称为孔 hole 当有新进程需要内存时 为该进程查找足够大的孔 如果找到 可以从该孔为进程分配所需的内存 孔内未分配的内存可以下次再用 第9章物理内存 9 3连续内存分配9 3 2内存分配在任意时候 有一组可用孔大小列表和输入队列 操作系统根据调度算法对输入队列进行排序 内存不断地分配给进程 直到下一个进程的内存需求不能被满足为止 通常 一组不同大小的孔分散在内存中 当新进程需要内存时 系统为该进程查找足够大的孔 如果孔太大 那么就分为两块 一块分配给新进程 另一块回到孔集合 第9章物理内存 9 3连续内存分配9 3 2内存分配从一组可用空中选择一个空闲孔的动态存储分配的最常用方法有 首次适应 分配第一个足够大的孔 查找可以从头开始 也可以从上次首次适应结束时开始 一旦找到足够大的空闲孔 就可以停止 最佳适应 分配最小的足够大的孔 除非列表按大小排序 否则必须查找整个列表 这种方法可以产生最小剩余孔 最差适应 分配最大的孔 这种方法可以产生最大剩余孔 第9章物理内存 9 3连续内存分配9 3 3碎片首次适应方法和最佳适应方法都有外部碎片问题 随着进程装入和移出内存 空闲空间被分为小片段 当所有总的可用内存之和可满足请求 但并不连续时 就出现了外部碎片问题 内部碎片维护一个小孔的开小很大 避免这个问题的方法是将内存分为固定大小的单元来分配 采用这种方案 进程分配到的内存比所需的大 这两个数字之差称为内部碎片 第9章物理内存 9 4分页分页内存管理方案允许进程的物理地址空间可以是非连续的 分页避免了将不同大小的内存块匹配到备份存储上的问题 当位于内存中的代码或数据需要换出时 首先要在备份存储上找到空间 采用前面所述的内存管理方法 备份存储同样会遇到碎片问题 第9章物理内存 9 4分页9 4 1基本方法将物理内存分为固定大小的块 称为帧将逻辑内存分为同样大小的块 称为页当进程需要执行时 它的页从备份存储中调入到可用的内存帧中 备份存储也分为固定大小的块 其大小与内存帧一样 第9章物理内存 9 4分页9 4 1基本方法 第9章物理内存 9 4分页9 4 1基本方法分页硬件支持如上图所示 由CPU生成的每个地址分为两个部分 页号 p 和页偏移 d 页号作为页表中的索引 页表包含每页所在物理内存的基地址 这些基地址与页偏移的组合形成了物理地址 就可以送交物理单元 页大小是由硬件决定的 页的大小通常为2的幂 根据计算机结构的不同 其每页大小从512B 16MB不等 第9章物理内存 9 4分页9 4 1基本方法选择页的大小为2的幂可以方便地将逻辑地址转换为页号和页偏移 如果逻辑地址空间为2m 且页大小为2n单元 字或字节 那么逻辑地址的高m n位表示页号 而低n为表示页偏移 这样 逻辑地址如下表示 第9章物理内存 9 4分页9 4 1基本方法 abcd efgh ijkl mnop 0123 4567 891011 12131415 逻辑地址 页表 0 5 6 1 2 1 2 3 ijkl mnop 0 4 8 12 物理地址 第9章物理内存 9 4分页9 4 1基本方法如上图 如果页大小为4B 而物理内存为32B 8页 考虑一下用户视角的内存是如何映射到物理内存的 逻辑地址0的页号为0 页偏移为0 根据页表可以查到页号0对应为帧5 因此逻辑地址0映射为物理地址20 5 4 0 采用分页技术不会产生外部碎片 但是会产生内部碎片 第9章物理内存 9 4分页9 4 2硬件支持绝大多数操作系统为每个进程分配一个页表 指向页表的指针与其他寄存器的值一起存入进程控制块中 页表的硬件实现有多种方法 最简单的一种方法是将页表作为一组专用寄存器来实现 如果页表比较小 那么页表使用寄存器比较合理 但是绝大多数现代计算机都允许非常大的页表 因而需要将页表放入内存中并将页表的地址放入页表寄存器中 第9章物理内存 9 4分页9 4 3共享页分页的优点之一在于可以共享公共代码假设一个支持40个用户的系统 每个用户都执行一个文本编辑器 如果文本编辑器包括150KB的代码及50KB的数据空间 则需要8000KB来支持这40个用户 如果在物理内存中保存一个编辑器副本 每个用户的页表映射到编辑器的同一副本 而数据页映射到不同的帧 因此 为支持40个用户 只需要一个编辑器副本 150KB 再加上40个用户数据空间副本50KB 总的需求空间为2150KB 这是一个很明显的节省 第9章物理内存 9 4分页9 4 3共享页 第9章物理内存 9 4分页9 4 3共享页 data1 data2 ed1 ed2 ed3 data2 0 1 2 4 3 5 6 7 8 9 第9章物理内存 9 5页表结构9 5 1层次页表现代计算机支持大逻辑空间 232 264 这种情况下 页表本身可能非常大假设具有32位逻辑空间的计算机系统 如果系统的页大小为4KB 212 那么一个页表需要包括1百万个条目 232 212 假设每个条目有4B 那么每个进程需要4MB物理地址空间来存储页表本身 很难在内存中连续地分配这个页表 解决的办法是将页表划分为更小部分 第9章物理内存 9 5页表结构9 5 1层次页表二级分页算法 将页表再分页P1用来访问外部页表 P2是外部页表的页偏移 P1 P2 d 页码 页偏移 10 10 12 第9章物理内存 9 5页表结构9 5 1层次页表 逻辑地址 第9章物理内存 9 5页表结构9 5 2哈希页表处理超过32位地址空间的常用方法是使用哈希页表 并以虚拟页码作为哈希值 哈希页表的每一条目都包括一个链表的元素 每个元素都包含3个域 虚拟页码所映射的帧号指向链表中下一个元素的指针 第9章物理内存 9 5页表结构9 5 2哈希页表虚拟地址中的虚拟页号转换到哈希表中 用虚拟页号与链表中的每一个元素的第一个域相比较 如果匹配 那么相应的帧号 第二个域 就用来形成物理地址 如果不匹配 那么就对链表中的下一个节点进行比较 以寻找一个匹配的页号 第9章物理内存 9 6分段9 6 1基本方法用户通常愿意将内存看做是一组不同长度的段的集合 这些段之间并没有一定的顺序 另外 人们会认为程序是由主程序加上一组方法 过程 函数所构成的 还有各种数据结构 对象 数组 堆栈 变量等 每个模块或其它数据元素都可通过名称引用 堆栈 主程序 没有人关心这些元素所在内存的具体位置 第9章物理内存 9 6分段9 6 1基本方法分段就是支持这种用户视角的内存管理方案 逻辑地址空间是由一组段组成的 每个段都有名称和长度 地址指定了段名称和段内偏移 用户通过两个量来指定地址 段名称和偏移 在分页中 用户只指定一个地址 该地址通过硬件来分为页码和偏移 为简单起见 段是编号的 是通过段号而不是

温馨提示

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

评论

0/150

提交评论