虚拟存储OS3续.ppt_第1页
虚拟存储OS3续.ppt_第2页
虚拟存储OS3续.ppt_第3页
虚拟存储OS3续.ppt_第4页
虚拟存储OS3续.ppt_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

第三章存储管理虚拟存储器 VirtualMemory 续 教学目的 为了在内存空间运行超过内存总容量的大作业 或者同时运行大量作业 解决的方法是从逻辑上扩充内存容量 这就是虚拟存储技术所要解决的主要问题 本课要介绍虚拟存储技术实现的各种方案 每种方案所需的硬件和软件支持 教学要求 掌握虚拟存储器的理论基础和定义 熟悉虚拟存储器实现方式和特征 掌握请求分页的页表机制 缺页中断机构和地址变换机构 熟悉页面的分配和置换策略 页面的分配的算法 熟练掌握最佳置换算法 先进先出 FIFO 置换算法 最近最久未使用置换算法LRU 掌握Clock置换算法和页面缓冲算法 掌握有效访问时间计算 熟悉工作集概念 掌握请求分段的段表机制 缺段中断机构和地址变换机构 熟悉分段的共享和保护 一 虚拟存储器的基本概念 1 虚拟存储器的引入1 局部性原理早在1968年P Denning就指出过 程序在执行时将呈现出局部性规律 即在一段时间内 程序的执行仅局限于某个部分 相应地 它所访问的存储空间也局限于某个区域内 那么程序为什么会出现局部性规律呢 原因可以归结为以下几点 程序在执行时 除了少部分的转移和过程调用指令外 大多数仍是顺序执行的 子程序调用将会使程序的执行由一部分内存区域转至另一部分区域 但在大多数情况下 过程调用的深度都不超过5 程序中存在许多循环结构 循环体中的指令被多次执行 程序中还包括许多对数据结构的处理 如对连续的存储空间 数组的访问 往往局限于很小的范围内 虚拟存储器的引入 1 所以局限性表现为 时间局限性 如果程序中的某条指令一旦执行 则不久的将来该指令可能再次被执行 如果某个存储单元被访问 则不久以后该存储单元可能再次被访问 产生时间局限性的典型原因是在程序中存在着大量的循环操作 空间局限性 一旦程序访问了某个存储单元 则在不久的将来 其附近的存储单元也最有可能被访问 即程序在一段时间内所访问的地址 可能集中在一定的范围内 其典型原因是程序是顺序执行的 2 虚拟存储器的定义根据局部性原理 一个作业在运行之前 没有必要把全部作业装入内存 而仅将那些当前要运行的那部分页面或段 先装入内存便可启动运行 其余部分暂时留在磁盘上 虚拟存储器的引入 2 程序在运行时如果它所要访问的页 段 已调入内存 便可继续执行下去 但如果程序所要访问的页 段 尚未调入内存 称为缺页或缺段 此时程序应利用OS所提供的请求调页 段 功能 将它们调入内存 以使进程能继续执行下去 如果此时内存已满 无法再装入新的页 段 则还须再利用页 段 的置换功能 将内存中暂时不用的页 段 调出至磁盘上 腾出足够的内存空间后 再将所要访问的页 段 调入内存 使程序继续执行下去 这样 便可使一个大的用户程序在较小的内存空间中运行 也可使内存中同时装入更多的进程并发执行 从用户角度看 该系统所具有的内存容量 将比实际内存容量大得多 人们把这样的存储器称为虚拟存储器 虚拟存储器的引入 3 虚拟存储器是具有请求调入功能和置换功能 能仅把作业的一部分装入内存便可运行作业的存储器系统 它能从逻辑上对内存容量进行扩充的一种虚拟的存储器系统 其逻辑容量由内存和外存容量之和所决定 其运行速度接近于内存速度 而每位的成本却又接近于外存 可见 虚拟存储技术是一种性能非常优越的存储器管理技术 故被广泛地应用于大 中 小型机器和微型机中 2 虚拟存储器实现方式 1 请求分页系统 它是在分页系统的基础上 增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统 它允许只装入若干页 而非全部程序 的用户程序和数据 就可以启动运行 以后再通过调页功能和页面置换功能 陆续把将要运行的页面调入内存 同时把暂不运行的页面置换到外存上 置换时以页面为单位 2 请求分段系统 它是在分段系统的基础上 增加了请求调段和分段置换功能所形成的段式虚拟存储系统 它允许只装入若干段 而非全部段 的用户程序和数据 就可以启动运行 以后再通过调段功能和置换功能将不运行的段调出 同时调入将要运行的段 置换以段为单位 3 请求段页式系统 它是在段页式系统的基础上 增加了请求调页和页面置换功能所形成的段页式虚拟存储系统 虚拟存储器实现方式 1 3 虚拟存储器的特征离散性 指在内存分配时采用离散的分配方式 它是虚拟存储器的最基本的特征 多次性 指一个作业被分成多次调入内存运行 即在作业运行时没有必要将其全部装入 只须将当前要运行的那部分程序和数据装入内存即可 多次性是虚拟存储器最重要的特征 对换性 指允许在作业的运行过程中在内存和外存的对换区之间换进 换出 虚拟性 指能够从逻辑上扩充内存容量 使用户所看到的内存容量远大于实际内存容量 二 请求分页存储管理方式 1 请求分页中的硬件支持它是在纯分页系统的基础上 增加了请求调页功能 页面置换功能所形成的页式虚拟存储系统 它是目前常用的一种虚拟存储器的方式 1 请求分页的页表机制它是在纯分页的页表机制上形成的 由于只将应用程序的一部分调入内存 还有一部分仍在磁盘上 故需在页表中再增加若干项 供程序 数据 在换进 换出时参考 在请求分页系统中的每个页表项如图所示 请求分页中的硬件支持 1 其中各字段说明如下 状态位 存在位P 用于指示该页是否已调入内存 供程序访问时参考 访问字段A 用于记录本页在一段时间内被访问的次数 或最近已有多长时间未被访问 提供给置换算法选择换出页面时参考 修改位M 表示该页在调入内存后是否被修改过 由于内存中的每一页都在外存上保留一份副本 因此 若未被修改 在置换该页时就不需将该页写回到外存上 以减少系统的开销和启动磁盘的次数 若已被修改 则必须将该页重写到外存上 以保证外存中所保留的始终是最新副本 外存地址 用于指出该页在外存上的地址 通常是物理块号 供调入该页时使用 请求分页中的硬件支持 2 2 缺页中断机构在请求分页系统中 每当所要访问的页面不在内存时 便要产生一缺页中断 请求OS将所缺页调入内存 与一般中断的主要区别在于 缺页中断在指令执行期间产生和处理中断信号 而一般中断在一条指令执行完后检查和处理中断信号 缺页中断返回到该指令的开始重新执行该指令 而一般中断返回到该指令的下一条指令执行 一条指令在执行期间 可能产生多次缺页中断 3 地址变换机构请求分页系统中的地址变换机构 是在分页系统的地址变换机构的基础上 再为实现虚拟存储器而增加了某些功能所形成的 如产生和处理缺页中断 以及从内存中换出一页的功能等等 下图给出了请求分页系统的地址变换过程 缺页中断处理是否否是是否产生缺页中否是断请求调页是 开始 程序请求访问一页 越界中断 CPU检索快表 页表项是否在快表中 访问页表 页是否在内存中 修改快表 修改访问位和修改位 形成物理地址 地址变换结束 保留CPU现场 从外存中找到缺页 页号 页表长度 内存满否 选择一页换出 该页是否被修改 将该页写回外存 将一页从外存换入内存 修改页表 CPU从外存读缺页 启动I O硬件 2 页面分配 1 最少物理块数在为进程分配物理块时 首先应该考虑的问题是 能保证进程能正常运行所需的最少物理块数 称为最小物理块数 若系统为某进程所分配的物理块数少于此值时 进程将无法运行 这取决于指令的格式 功能和寻址方式 2 页面的分配和置换策略在请求分页系统中 可采取两种分配策略 固定和可变分配策略 在进行置换时 也可采取两种策略 全局置换和局部置换 于是可组合成以下三种策略 固定分配局部置换策略 它基于进程的类型 交互型或批处理型等 或根据程序员 系统管理员的建议 为每个进程分配一固定页数的内存空间 在整个运行期间都不再改变 如果进程在运行中发现缺页 则只能从该进程在内存的固定页面中选出一页换出 然后再调入另一页 保证分配给该进程的内存空间不变 页面分配 1 可变分配全局置换策略 系统为每个进程分配一定数目的物理块 而OS本身也保持一个空闲物理块队列 当某进程发现缺页时 由系统从空闲物理块队列中 取出一物理块分配给该进程 并将欲调入的缺页装入其中 当空闲物理块队列中的物理块用完时 OS才能从内存中选择一页调出 该页可能是系统中任一进程的页 可变分配局部置换 根据进程的类型或程序员的要求 为每个进程分配一定数目的内存空间 但当某进程发生缺页时 只允许从该进程在内存的页面中选出一页换出 而不影响其它进程的运行 页面分配 2 3 页面分配算法在采用固定分配策略时 可采用以下几种物理块分配方法 平均分配算法 将系统中所有可供分配的物理块 平均分配给各个进程 按比例分配算法 这是根据进程的大小按比例分配物理块 考虑优先权的分配算法 该方法是把内存中可供分配的所有物理块分成两部分 一部分按比例分配给各进程 另一部分则根据各进程的优先权 适当地增加其相应份额后 分配给各进程 3 页面调入策略 为能使进程运行 必须事先将一部分要执行的程序和数据调入内存 1 调入页面的时机为了将进程运行时所缺的页面调入内存 可采取策略有 预调页策略是一种主动的缺页调入策略 即将那些预计在不久的将来会被访问的程序或数据所在的页面 预先调入内存 由于预测的准确率不高 50 所以这种策略主要用于进程的首次调入 有的系统将预调页策略用于请求调页 例如在VAX VMS操作系统中 采用了一种称为群页式的调页策略 当系统将进程所请求的页面调入内存时 也同时将其相邻的几个页面调入内存 请求调页策略是指当进程在运行中发生缺页时 就立即提出请求 由系统将缺页调入内存 目前的虚拟存储器中 大多采用此策略 但这种策略在调页时须花费较大的系统开销 如需频繁启动磁盘I O 页面调入策略 1 2 从何处调入页面在虚拟存储系统中 外存 硬盘 常常被分成两部分 文件区 用于存放文件 和对换区 用于存放对换页面 通常 对换区的磁盘I O速度比文件区要高 每当进程发出缺页请求时 系统应从何处将缺页调入内存呢 在UNIX系统中 对于从未运行过的页面 都应从硬盘文件区调入 对于曾经运行过而又被换出的页面 可以从对换区调入 对于共享页面 该页面可能已由其它进程调入内存 此时就无须再从对换区调入 三 页面置换算法 PageReplacementAlgorithms 在进程运行过程中 如果发生缺页 此时内存中又无空闲块时 为了保证进程能正常运行 就必须从内存中调出一页程序或数据送磁盘的对换区 但将哪个页面调出 则须根据一定的页面置换算法来确定 置换算法的好坏将直接影响系统的性能 不适当的算法可能会导致进程发生 抖动 Thrashing 即刚被换出的页很快又被访问 需重新调入 导致系统频繁地更换页面 以致一个进程在运行中把大部分时间花费在完成页面置换的工作上 我们称该进程发生了 抖动 颠簸 从理论上讲 应将那些以后不再被访问的页面换出 或把那些在较长时间内不会再被访问的页面换出 下面介绍几种常用的置换算法 页面置换算法 1 1 最佳 Optimal 置换算法它是一种理想化的算法 性能最好 但在实际上难于实现 即选择那些永不使用的 或者是在最长时间内不再被访问的页面置换出去 但是要确定哪一个页面是未来最长时间内不再被访问的 目前来说是很难估计的 所以该算法通常用来评价其它算法 例 假定系统为某进程分配了三个物理块 并考虑有以下的页面号引用串 7 0 l 2 0 3 0 4 2 3 0 3 2 l 2 0 l 7 0 1 如下图所示 进程运行时先将7 0 1三个页面装入内存 当进程访问页面2时 产生缺页中断 此时OS根据最佳置换算法 页面7将在第18次才被访问 是三页中将最久不被访问的页面 所以被淘汰 接着访问页面0时 发现已在内存中 而不会产生缺页中断 以此类推 从图可以看出 采用最佳置换算法 只发生了6次页面置换 最佳 Optimal 置换算法 1 发生了6次面置换 9次缺页中断 2 先进先出 FIFO 置换算法 3 最近最久未使用置换算法LRU LeastRecentlyUsed 4 Clock置换算法 最近未用算法NUR NotUsedRecently 将最近一段时间未引用过的页面换出 Clock置换算法 1 简单 Clock 置换算法的数据结构 存储器分 块表 例子1 计算缺页次数 某程序在内存中分配三个页面 初始为空 页面走向为4 3 2 1 4 3 5 4 3 2 1 5 FIFO432143543215页1432143555211页243214333522页34321444355xxxxxxx xx 共缺页中断9次 LRU432143543215页1432143543215页243214354321页34321435432xxxxxxx xxx共缺页中断10次 理想淘汰算法 最佳页面算法 OPT 淘汰以后不再需要的或最远的将来才会用到的页面OPT432143543215页1432111555211页243333333555页34444444444xxxx x xx 共缺页中断7次 例子2 计算缺页次数 某程序在内存中分配m页初始为空 页面走向为1 2 3 4 1 2 5 1 2 3 4 5 当m 3 m 4时缺页中断分别为多少 用FIFO算法 例子2 计算缺页次数 m 3时 缺页中断9次m 4时 缺页中断10次注 FIFO页面淘汰算法会产生异常现象 Belady现象 即 当分配给进程的物理页面数增加时 缺页次数反而增加 5 影响缺页次数的因素 1 分配给进程的物理页面数 2 页面本身的大小 3 程序的编制方法 4 页面淘汰算法 例子3 内存分配一页 初始时第一页在内存 页面大小为128个整数 矩阵A128X128按行存放 程序编制方法1 Forj 1to128Fori 1to128A i j 0 程序编制方法2 Fori 1to128Forj 1to128A i j 0 5 性能分析 1 缺页率对有效访问时间的影响在请求分页系统中 假设存储器的访问时间ma为100ns 一般为10ns 几百ns 缺页率为p 缺页中断时间为25ms 则有效访问时间就可以表示为 有效访问时间 1一p ma十p 缺页中断时间 1一p 0 1十p 25000 0 1十24999 9p由上式可以看出 有效访问时间与缺页率成正比 如果缺页率为0 1 则有效访问时间约为25 s 与直接访问存储器的有效访问时间 0 1 s 相比的时间 程序执行的性能将受到严重的影响 如果希望在缺页时 仅使有效访问时间延长不超过10 则可计算出缺页率p 0 0000004 由此得出 要求在2500000次的访问中才发生一页缺页 即请求分页方式应保持非常低的缺页率 否则 将使程序执行速度受到严重影响 此外 提高磁盘I O的速度 对改善请求分页系统的性能至关重要 为此 应选用高速磁盘和高速磁盘接口 性能分析 1 2 工作集程序在运行中所产生的缺页情况 会影响程序的运行速度及系统性能 而缺页率的高低又将是与每个进程所占用的物理块数目有关 这里我们简单地分析一下应为每个进程分配多少个物理块 才能把缺页率保持在一个合理的水平上 缺页率与进程所分得的物理块数目有密切关系 下图说明了的缺页率与进程分得的物理块数目N之间的关系曲线 从图中可以看出 缺页率随着所分得的物理块数目的减少而递增 并在所分到的物理块数目较少处 出现一个拐点 在拐点上限以左时 随着分到的物理块数目的增加 缺页率明显地减少 而过了拐点 在下限以右时 随着分到的物理块数目的增加 却对缺页率的改善并不明显 所以 为进程分配的物理块数 应取在该曲线的拐点左右 性能分析 2 缺页率拐点所分得的物理块数工作集的理论是在1968年由Denning提出来的 他认为 程序在运行时对页面的访问是不均匀的 即往往在某段时间内的访问仅局限于较少的若干个页面 如果能够预知程序在某段时间间隔内要访问哪些页面 并能将它们提前调入内存 将会大大地降低缺页率 从而减少置换工作 提高CPU的利用率 性能分析 3 所谓工作集是指 在某段时间间隔 里 进程实际要访问的页面的集合 Denning认为 虽然程序只需有少量的几页在内存就可以运行 但为了使程序能够有效地运行 较少地产生缺页 就必须使程序的工作集全部在内存中 把某进程在时间t的工作集记为w t 把变量 称为工作集 窗口尺寸 WindowsSize 正确选择工作集窗口 的大小 对存储器的有效利用和系统吞吐量的提高 都将产生重要的影响 在WindowsNT中 虚拟存储管理程序 VirtualMemoryManager 为每一个进程分配固定数量的页面 并且这个数目可以进行动态的调整 那么这个数量如何确定 又如何进行动态的调整呢 这个数目就是由每个进程的工作集来确定 并且根据主存的负荷和进程的缺页情况动态地调整其工作集 性能分析 4 其具体的作法是 一个进程在创建时就指定了一个最小工作集 该工作集的大小是保证进程运行在主存中应有的最小页面数 但在主存负荷不太大 页面不太满 时 虚存管理程序还允许进程拥有尽可能多的页面作为其最大工作集 当主存负荷发生变化时 如空闲页架 块 不多了 虚存管理程序就使用 自动调整工作集 的技术来增加主存中可用的自由页架 方法是检查主存中的每个进程 将它当前工作集大小与其最小工作集进行比较 如果大于最小值 则从它们的工作集中移去一些页面作为主存自由页面 可为其它进程所使用 若主存自由页面仍然太小 则不断进行检查 直到每个进程的工作集都达到最小值为止 当每个工作集都已达到最小值时 虚存管理程序跟踪进程的缺页数量 根据内存中自由页面数量可以适当增加其工作集的大小 6 虚拟存储中的负载控制 降低缺页率 缺页率越低 虚拟存储器的平均访问时间延长得越小 提高外存的访问速度 外存和内存的访问时间比值越大 则达到同样的平均访问时间 所要求的缺页率就越低 即在平均访问时间不变的条件下 外存速度越快 要求的缺页率就越松 高 返回 这里要讨论的是OS要在内存中驻留多少个并发进程是较好的 1 改善时间性能的途径 2 抖动问题 thrashing 随着驻留内存的进程数目增加 或者说进程并发水平 multiprogramminglevel 的上升 处理器利用率先是上升 然后下降 这里处理器利用率下降的原因通常称为虚拟存储器发生 抖动 也就是 每个进程的常驻集不断减小 缺页率不断上升 频繁调页使得调页开销增大 OS要选择一个适当的进程数目 以在并发水平和缺页率之间达到一个平衡 3 负载控制 loadcontrol 策略 决定驻留内存的进程数目 在避免出现抖动的前题下 尽可能提供进程并发水平 OS不能完全控制进程的创建 但它可通过进程挂起来减少驻留内存的进程数目 即 需要减少驻留内存的进程数目时 可以将部分进程挂起并全部换出到外存上 如 低优先级的 缺页率高的 常驻集最小的 页面最多的 等等 基于工作集策略的算法 如PFF VSWS 它们隐含负载控制策略 只有那些常驻集足够大的进程才能运行 从而实现对负载的自动和动态控制 L S判据 策略 Denning 1980 让缺页的平均间隔时间 是指真实时间而不是虚拟时间 等于对每次缺页的处理时间 即缺页率保持在最佳水平 这时CPU的利用率达到最大 假设系统中CPU和缺页处理两部分同时满负荷工作时 系统利用率最高 基于轮转置换算法的负载控制策略 定义一个轮转计数 描述轮转的速率 即扫描环形页面链的速率 当轮转计数少于一定的阈值时 表明缺页较少或存在足够的空闲页面 当轮转计数大于阈值时 隐含系统的进程并发水平过高 需降低系统负载 四 请求分段存储管理方式 请求分段系统在分段系统的基础上实现的虚拟存储器 是以分段为单位进行换入 换出的 在程序运行之前只要先调入若干个分段 不必调入所有的分段 便可启动运行 当所访问的段不在内存时可请求OS将所缺的段调入内存 为实现请求分段存储管理方式 同样需要一定的硬件支持和相应的软件 有段表机制 缺段中断机构以及地址变换机构 1 请求分段中的硬件支持1 段表机制在请求分段式管理中在段表中增加若干项 以供程序在调进 调出时参考 请求分段的段表项如下 请求分段中的硬件支持 1 在段表项中 除了段名 号 段长 段在内存的起始地址外 还增加了以下几项 存取方式 用于标识本分段的存取属性是只执行 只读 还是允许读 写 访问字段A 用于记录该段被访问的频繁程度 修改位M 用于表示该段进入内存后 是否已被修改过 存在位P 说明本段是否已调入内存 增补位 用于表示本段在运行过程中 是否进行过动态增长 外存起址 指示本段在外存中的起始地址 即起始盘块号 2 缺段中断机构在请求分段系统中 采用的是请求调段策略 即当进程所要访问的段未调入内存时 便由缺段中断机构产生一缺段中断信号 由缺断中断处理程序将所需的段调入内存 缺段中断的处理过程如下图 请求分段中的硬件支持 1 拼接后形成合适大小的空闲区 淘汰一个或几个段以形成合适大小的空闲区 虚段不在内存中 阻塞请求的进程 内存中有合适的空闲区 从外存读入段 修改段表和内存空闲链 唤醒请求进程 返回 空闲区大小总和能否满足 N N 请求分段中的硬件支持 2 3 地址变换机构请求分段系统中的地址变换机构 是在分段系统地址变换机构的基础上形成的 由于被访问的段并非全在内存 所以在地址变换时 若发现所要访问的段不在内存时 必须先将所缺的段调入内存 并修改了段表之后 才能再利用段表进行地址变换 为此 在地址变换机制中又增加了某些功能 如缺段中断的请求及其处理等 请求分段中的硬件支持 3 4 段的动态链接经过编释或汇编得到的一组目标程序需经链接程序 连接装配成一个一维的线性连续地址空间 这一过程称为静态链接 但是这种连接装配过程既复杂又费时 还经常发生许多被连接好的摸块在作业运行过程中根本不用 而造成连接时的机时和主存空间的浪费 所以最好能采用什么时候用到那一段则连接该段的方法 这种方法称为动态连接方法 段的动态链接是指 在一个程序运行开始时 只将主程序装配好并调入主存 其它各段的装配是在主程序段运行过程中逐步进行的 每当需要调用一个新段时 再将该段装配好 并与主程序段连接 在分段存储管理环境中 由于逻辑地址空间是二维的 每段有自己的段名 因而实现动态连接比较容易 5 请求段页式地址变换机构如下图 启动要处理指令 计算有效地址 访问地址v s p d S 段表长吗 段连接了吗 段在主存吗 P 页表长吗 访问类型合法吗 页在主存吗 缺页中断处理 执行下一条指令 访问该地址完成指令 形成主存地址 出错处理 越界中断处理 连接中断处理 缺段中断处理 允许动态增长吗 出错处理 N N N N N N N 2 分段共享与保护 分段存储管理方式实现分段的共享和保护只须在每个进程的段表中 用相应的表项来指向共享段在内存中的起始地址 为了实现分段共享 应配置相应的共享段表 用来对共享段进行操作 在系统中 用共享段表来记录了每一个共享段的段号和段长 内存始址 存在位等信息 并记录共享此分段的每个进程的情况 共享段表如下图所示 分段共享与保护 1 其中 共享进程计数器COUNT 记录有多少个进程需要共享该分段 存取控制字段 说明不同的进程对该分段不同的存取权限 段号 对于同一个共享段 不同的进程可以使用不同的段号去共享该段 五 Windows98虚拟存储技术 1 Intel80386提供的存储管理方式在Inte180386芯片中 包含了存储管理部件MMU MemoryManagementUnit 由它来提供实现虚拟存储器所需的硬件支持 即请求段表 页表 机制 缺段 页 机构 地址变换机构 其地址变换过程分两步进行 第一步由分段部件将逻辑地址转换为线性地址 并将该地址送分页部件 第二步由分页部件将线性地址变换为物理地址 如果仅用分段存储管理方式 其分页部件将被旁路 失效 此时分段部件送出的线性地址便是物理地址 直接送内存地址寄存器 为了提高分段和分页的地址变换速度 在分段和分页部件中 都配置了高速缓冲存储器 作为快速段表和页表 80386既支持分段 也支持分页 可根据需要构成以下四种存储管理方式 1 不分段也不分页的存储管理方式 Windows98虚拟存储技术 1 2 分页不分段存储管理方式 UNIX 386系统 3 分段不分页存储管理方式 4 分段分页存储管理方式 2 分段存储管理1 段描述符表80386为每个用户任务所配置的段表 称为局部描述符表LDT LocalDescriptorTable 其中 每个表项为一个段的描述符 共8个字节长 此外 还配置了一张对系统任务都有用的全局描述符表GDT GlobalDescriptorTable 在任一时刻GDT和某一个LDT是可被访问的 在分段部件中 还配置了全局描述符表寄存器GDTR和局部描述符表寄存器LDTR 它们都是6个字节长 分别指向当前的GDT和LDT 两个描述符的格式基本上相同 如图所示 各字段说明如下 Windows98虚拟存储技术 2 段的基址 32位 定义了段在4GB线性地址空间中的始址 段界限值 规定了段的最大长度 其单位可以是字节或页 4KB 这取决于粒度单位G 当G为1时 表示段长是以页为单位 当G为0时 表示段长以字节为单位 由于段长为20位 故当G为1时 最大段长为4GB 312319161512870 段的基址15 0段界限值15 0段基址GD00界限值PDPLSTYPEA段基址31 2419 1623 16 Windows98虚拟存储技术 3 2 分段的地址变换机构段寄存器在80386处理器中 共有6个段寄存器 它们是 代码段寄存器CS 栈段寄存器SS 四个数据段寄存器DS ES FS和GS 段寄存器和8086一样仍为16位 在实方式时 段中存放段的基址的高16位 因此 将它左移4位后与偏移量相加 便形成20位的物理地址 但在保护方式下 16位的段寄存器已不足以用来存放32位的段的基址 所以在段寄存器中所存放的是指向描述符表中某个描述符的指针 此时 段寄存器中的TI l位 用来指示描述符表的类型 即或者指示选择全局描述符表 或者指示选择局部描述符表 RPL 2位 为请求者的特权级 描述符表项索引Index 13位 可用来在8K个描述符中任选其一 虚地址结构和地址变换 Windows98虚拟存储技术 4 在80386中的虚地址结构如下 13位1位2位32位其中 TI为描述符表类型 RPL是请求者特权级 S为段号Index项 用来选择描述符 其前16位实际上是放在段寄存器中的 分段部件中 是将逻辑地址变换为线性地址 在进行地址变换时 首先是从相应的段寄存器中取得段号S 即获得指向段描述符表的指针Index 如果此时TI 0 则从GDT中选择一描述符 否则 TI 1 从LDT中选择一描述符 从所获得的描述符中可得到段的基址 然后将段的基址与偏移量相加 得到线性地址 对于只分段 不分页的存储管理方式 此线性地址就是内存的物理地址 若是既分段 又分页的存储管理方式 则还须将此线性地址送分页部件 再形成物理地址 段号STIRPL偏移量 Windows98虚拟存储技术 5 3 Windows98系统地址空间的划分Intel386以后的CPU有了32位或64位的内存寻址范围 所以系统的地址空间可达4GB或更大 在Windows98系统提供了4GB虚拟的32位的地址空间 给每个进程分配2GB的专用地址空间 而把剩余的2GB地址空间分成系统空间 1GB 和用于所有的共享内存区域的单个共享的用户空间 1GB 这个1GB的共享区域对于用户态是可写的 所以任何Win32应用程序都可以写共享内存区和映象文件 映象文件是指把驻留在盘上的文件看成是虚拟主存的一部分 MS DOS应用程序和Win16应用程序也都在这个共享的空间中 WindowsNT将共享内存区域放在专用进程地址空间内 每一个基于MS DOS的程序和32位Windows程序都有各自的4GB虚拟地址空间 16位Windows应用程序共享单个的4GB地址空间 4GB的地址空间分为两部分 2GB用于用户应用程序 2GB用于操作系统组件 程序以如下方式使用虚拟地址空间里的地址 Windows98虚拟存储技术 6 0 1MB 基于MS DOS的程序就像真的在MS DOS环境中运行那样使用这些地址 所有其它程序将忽略这些地址 这些地址仍可为程序加载的实模式设备驱动程序所使用 1 4MB 由于WindowsNT在这些地址空间上加载 为了维护与NT的兼容性 Windows98与32位程序也不使用这一段地址空间 但由于向下兼容的缘故 16位程序使用这些地址 4MB 2GB WIN32应用程序使用 2GB 3GB 由DLL 动态链接库 和其它共享组件使用 3GB 4CB 低层的内存管理 文件系统 驱动程序 VxD 使用 这些地址一般是Ring0组件使用 Windows98虚拟存储技术 7 4 VMM 虚拟存储管理程序Windows98用虚拟存储管理程序 VirtualMemoryManager 来实现请求调页的虚拟存储技术 把系统4GB的虚拟地址空间映射到机器的物理内存上 32MB或64MB Windows98的虚拟存储管理程序通过两个内存管理进程向应用程序提供虚拟内存 一个是页面调度 paging 负责在物理内存和硬盘的交换文件之间交换数据 另一个是地址转换 负责物理地址和虚拟地址空间的地址或映象文件I O之间的转换 VMM将物理内存分成一个个大小为4KB页面 或称为块 将虚拟地址空间 应用程序所在的空间 也划分成4KB大小的页 当程序要运行时 一部分页面被装入物理内存 另一部分则放在硬

温馨提示

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

评论

0/150

提交评论