1 操 作 系 统 | 存 储 器 管 理 1 CUIT 徐虹 第五章存储器管理 ?存储管理的机制 ?存储管理的功能 ?分区管理 ?分页管理 ?分段管理 操 作 系 统 | 存 储 器 管 理 2 CUIT 徐虹 5.1 存储管理的功能 ?存储管理的目的 ?主存的分配和管理 ?记住内存每个位置的状态。 ?在系统程序或用户作业提出申请 时,实施分配,并修改分配记录。 ?接受系统或用户释放的存储区, 或主动收回不再用的存储区,并 相应地修改分配记录表 操 作 系 统 | 存 储 器 管 理 3 CUIT 徐虹 ?提高内存利用率 ? “扩充”内存容量 ?信息保护 操 作 系 统 | 存 储 器 管 理 4 CUIT 徐虹 ?内外存数据传输的控 ?用户程序控制 ?操作系统控制 ?交换(Swapping):由OS把那在内 存中处于等待状态的进程换出内存,就 绪进程换入内存。 ?请求调入(On demand)和预调入 (On prefetch) 操 作 系 统 | 存 储 器 管 理 5 CUIT 徐虹 ?内存的分配与回收 ?存储分配的方式: ?直接分配: ?静态分配: ?动态分配: ?程序设计方面:程序独立性,程序模块化, 表格处理。 ?系统方面:能重新分配主存,程序在需要时 调入内存 操 作 系 统 | 存 储 器 管 理 6 CUIT 徐虹 ?内存管理的内容 ?分配结构: ?放置策略: ?交换策略: ?调入策略: ?回收策略: 2 操 作 系 统 | 存 储 器 管 理 7 CUIT 徐虹 ?内存信息的共享与保护 ?上下界保护法 ?保护键法 ?为每个被保护存储块分配一个单独的保 护键,在程序状态字中设置相应的开关 字段,不同的进程值不一样,匹配时, 方可进行访问。 ?界限寄存器与CPU 的用户态和核心 态工作方式相结合 ?用户态进程只能访问在界限寄存器所规 定范围内的内存部分,而核心态进程则 可访问整个内存地址空间。 操 作 系 统 | 存 储 器 管 理 8 CUIT 徐虹 5. 2 程序的装入和链接 ?程序的装入 ?绝对装入方式(Absolute Loading Mode) ?编译程序产生绝对地址目标代码,由 装入程序根据装入模块中的地址,将 程序和数据装入内存。 操 作 系 统 | 存 储 器 管 理 9 CUIT 徐虹 ?2.可重定位装入方式(Relocatable Loading Mode) ?重定位:在装入时对目标程序中的指令和 数据地址的修改过程。 ?静态地址重定位:是指作业在装入时随即 进行的地址变换方式,这一工作由装配程 序完成。 ?优点:无需增加硬件地址变换机构;实现 简单。 ?缺点:程序经地址定位后就不能再移动了; 程序在存储空间中只能连续分配;多个用 户难以共享存于内存中的同一程序。 操 作 系 统 | 存 储 器 管 理 10 CUIT 徐虹 ?3.动态运行时装入方式(Dynamic Run-Time Loading) ?程序执行过程中,当访问指令或数据时, 才进行的地址变换方法,称为动态重定 位。 ?靠硬件地址变换机构实现的。 ?基地址寄存器(重定位寄存器)BR ?程序虚地址寄存器VR ?地址MA=(BR)+(VR) ?优点:可对内存进行非连续分配;提供 了实现虚存的基础;有利于程序段的共 享。 操 作 系 统 | 存 储 器 管 理 11 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 12 CUIT 徐虹 ?程序的链接 ?静态链接 ?装入时动态链接 ?运行时动态链接 3 操 作 系 统 | 存 储 器 管 理 13 CUIT 徐虹 5. 3 连续分配存储管理方式 ?单一连续分配 ?存储区的分配 ?内存分配和回收策略 ?优点 ?管理简单,不要求专用的硬件支 持;为防止破坏OS ,设置界限寄 存器;易于实现。 操 作 系 统 | 存 储 器 管 理 14 CUIT 徐虹 ?缺点 ?存储器利用率低 ?缺乏灵活性,小于内存,否则提供覆 盖。 ?某些系统中安全性差。 ?信息不共享 ?CPU 利用率低,周转时间长。 操 作 系 统 | 存 储 器 管 理 15 CUIT 徐虹 ?固定分区 ?工作原理 ?在系统生成时,将内存划分为若干 各分区,每个分区的大小可以不等, 一经划分,不能更改。 ?系统对内存的管理和控制通过分区 说明表说明各区的区号,大小,起 始地址及状态。 ?特点 ?可使多个作业共享内存,但管理简 单,内存利用率太低,对工作负荷 明确的作业比较合适。 操 作 系 统 | 存 储 器 管 理 16 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 17 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 18 CUIT 徐虹 ?动态分区 ?工作原理 存储空间的划分是在装入作业时进行 的,且使分区大小正好适应作业的需要。 ?数据结构 ?空闲分区表:序号,大小,起址,状态 ?空闲分区链:在每个分区中附上一个表 格信息,状态(0,1),大小,指针 (空白分区才有) 4 操 作 系 统 | 存 储 器 管 理 19 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 20 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 21 CUIT 徐虹 ?分区管理算法 ?首次适应算法(First Fit) ?每个空白区按地址递增的顺序链接在一 起。 ?特点:尽量使用低端地址,以保持高址 部分的大空间区;低址部分有很多小空白 区,回收时花销较大,费时。 ?循环首次适应算法 ?从上次查找的位置开始查找。 操 作 系 统 | 存 储 器 管 理 22 CUIT 徐虹 ?最佳适应算法 ?空白区按大小递增的顺序链在一起。变量 FREE 中的始端指针总指向最小的空白区。 ?特点:平均而言,查找时间较少;选择最适 合的空白区。形成很多小碎片;找一个大空 白区时较慢;回收时费时;先拼接,再把该 区插入适当位置。 ?最差适应算法 ?空白区按容量递减次序排列。 ?特点:分配时间快;剩下的空白分区仍可用; 各空白区比较均匀地减少,工作一段时间后, 就不能满足大空白区的要求;回收麻烦。 操 作 系 统 | 存 储 器 管 理 23 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 24 CUIT 徐虹 ?算法分析 ?特点:有助于多道程序设计;只需要界地 址寄存器,用于存储保护;算法简单,易 于实现。但会产生碎片,降低存储器的利 用效率;分区的大小,受内存容量限制。 ?几种算法比较:搜索速度,释放速度,空 闲区的利用。 5 操 作 系 统 | 存 储 器 管 理 25 CUIT 徐虹 ?分区的分配 ?在未分配表中找出一个足够大的空白分 区; ?如比进程要求的大,则分为两部分; ?修改两个说明表的有关信息,并回送一 个所分配分区的序号或该分区的始址。 ?分区的回收 ?检查回收的分区是否与空白区邻接,如 有则加以合并,上邻接,下邻接,上下 邻接。 ?修改两张说明表。 操 作 系 统 | 存 储 器 管 理 26 CUIT 徐虹 ?伙伴系统 操 作 系 统 | 存 储 器 管 理 27 CUIT 徐虹 ?可重定位分区分配 ?原理:内存紧凑 ?地址映射 ?地址空间:在编译后,一个目标程序所 限定的地址,即地址空间仅仅是指程序 用来访问信息所用的一系列地址单元的 集合,这些单元编号称为逻辑地址(相 对地址)。 ?存储空间:指主存中一系列存储信息的 物理单元的集合,这些单元的编号称为 物理地址或绝对地址。 ?重定位:把作业地址空间中使用的逻辑 地址变换成主存中的物理地址的过程。 操 作 系 统 | 存 储 器 管 理 28 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 29 CUIT 徐虹 ?实现 ?动态重定位技术:访问指令或数据时,通 过重定位寄存器来自动修改访问存储器的 地址。 ?内存拼接 ?在某个分区被回收时,如不与空白区邻接, 则立即进行拼接。 ?在为作业分配而找不到足够大的空白区时 再进行拼接。 操 作 系 统 | 存 储 器 管 理 30 CUIT 徐虹 ?分区的保护措施 ?界地址存储管理 ?采用上,下界寄存器的方案。 ?采用基地址,限长寄存器的方法。 ?保护键 ?给每个存储块都分配一个单独的保护键, 而在程序状态字中设置保护键字段,对不 同的作业赋予不同的代码。 6 操 作 系 统 | 存 储 器 管 理 31 CUIT 徐虹 5. 4 覆盖与交换技术 ?覆盖技术 ?覆盖是指一个作业的若干程序段, 或几个作业的某些部分共享一段存 储空间。 ?覆盖的管理(覆盖区的管理,覆盖 的调入调出)是由系统实施。但要 求程序员提供一个明确的覆盖结构。 操 作 系 统 | 存 储 器 管 理 32 CUIT 徐虹 A 20K B 50K C 30K D 30K E 20K F 40K 常住部分20K 覆盖区0 50K 覆盖区1 40K 0 20K 70K 110K 操 作 系 统 | 存 储 器 管 理 33 CUIT 徐虹 ?交换技术 ?交换 ?交换就是把主存中的信息以文件的形式写入 到辅存,接着将指定的信息从辅存续入主存, 并将控制转给它。 ?交换空间的管理 ?文件区:离散分配,提高存储空间的利用率; ?对换区:连续分配,提高交换速度。 ?对换空间的分配与回收:注意空闲区的拼接 ?交换区分配算法:首次适应算法、循环适应 算法和最佳适应算法。 操 作 系 统 | 存 储 器 管 理 34 CUIT 徐虹 ?换入和换出 消息M 中有:分区号i,基址basei,长度sizei, 方向和外存交换区中分区始址。 SWAPIN Begin local m m.base = basei; m.ceiling = basei + sizei; m.direction = “in” ; m.source = backupstorebasei ; send ((m,i),device queue ) ; end 操 作 系 统 | 存 储 器 管 理 35 CUIT 徐虹 SWAPOUT (i) Begin local m m.base = basei; m.ceiling = basei + sizei; m.direction = “out” ; m.destination = base of free area on swap area ; backupstorebasei = m.destination ; send ((m,i),device queue ) ; end 操 作 系 统 | 存 储 器 管 理 36 CUIT 徐虹 5. 5 分页存储管理 ?基本原理 ?实现方法 ?各进程的地址空间分成大小相等的页, 把内存的存储空间也分成与页大小相 同的片,称为物理块。在分配存储空 间时,以块为单位来分配。 ?页面大小:2 i (1K,2K,4K 等) 7 操 作 系 统 | 存 储 器 管 理 37 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 38 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 39 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 40 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 41 CUIT 徐虹 ?地址变换 ?页表 采用动态重定位技术,为作业的每页设置一个重 定位寄存器,这些寄存器组成一组,称为页表。 其中一个表目为该页在主存中的块号。 在主存中专门分配一些存储单元来存放页表。 页表始址和长度存放在控制寄存器中。 ?页表的大小 操 作 系 统 | 存 储 器 管 理 42 CUIT 徐虹 8 操 作 系 统 | 存 储 器 管 理 43 CUIT 徐虹 ?页表始址的选择 为了快速地根据页表始址和页号找到所需相 应表目,页表的始址应为2 的幂。 例:页表始址P A 0---12位,页号:13—17位 页表为32 字节。 P A =2 5 P S :页表区始址 P AI =P S + i*2 5 (0〈I〈N-1,N为作业个数〉 操 作 系 统 | 存 储 器 管 理 44 CUIT 徐虹 ?快表---采用联想存储器加快查表速度 在地址变换机构中,加入一个高速,小容 量、具有并行查询能力的联想存储器,构成 快表,存放正运行的作业的当前页号和块号。 在快表中找到,直接进行地址转换;未找 到,则在主存页表继续查找,并把查到的页 号和块号放入联想存储器的空闲单元中,如 没有,淘汰最先装入的页号。 操 作 系 统 | 存 储 器 管 理 45 CUIT 徐虹 ?地址变换 页号P页内地址W 31 12 11 0 找到地址变换 (P,W) ———— (B,W )————(实际地址) 在开始执行(或恢复执行)一个作业时,由系统把页表 始址和页表长度放入控制寄存器中。 操 作 系 统 | 存 储 器 管 理 46 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 47 CUIT 徐虹 ?例:一个三页长的进程,每页长1K。 页号页面号(块号) 0 2 1 3 2 8 指令:100 LOAD 1,2500 的地址变换过程为: 根据控制寄存器找到页表的始址和长度, 该指令地址=2*1024+100 = 2148 执行:2500 = 2048+452 P=2 W=452 B= 8 2500单元的物理地址=1024*8+452 = 8644 操 作 系 统 | 存 储 器 管 理 48 CUIT 徐虹 ?分页存储管理算法 ?管理表目 ?作业表(JT)——整个系统一张,每个 作业对应一个表目 ?内容:页表长度,页表始址,状态 ?存储分块表(MBT)——整个系统一张 ?表示方式:链表,位示图 ?页表(PT)——每个作业一张 ?分页存储分配算法 9 操 作 系 统 | 存 储 器 管 理 49 CUIT 徐虹 ?多级页表 ?两级页表 ?引入 ?两级页表的结构 外层页号P1内层页号P2页内地址D 31 22 21 12 11 0 ?地址变换 ?多级页表结构 操 作 系 统 | 存 储 器 管 理 50 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 51 CUIT 徐虹 ?反置页表 ?原理 ?在每个物理块内设置一个表项:页号及进 程标识符。 ?为每个进程建立一个外部页表,当访问页 不在内存时,才访问外部页表。 ?地址变换 ?特点 操 作 系 统 | 存 储 器 管 理 52 CUIT 徐虹 ?分页存储管理方案的评价 ?优点 ?有效解决存储器的零头问题,能在更高 的程度上进行多道程序设计,从而相应 提高了存储器和CPU 的利用率。 ?缺点 ?采用动态地址变换为增加计算机成本和 降低CPU 的速度。 ?表格占内存空间,费时来管理表格。 ?存在页内碎片。 ?作业动态的地址空间受内存容量限制。 操 作 系 统 | 存 储 器 管 理 53 CUIT 徐虹 5. 6 分段存储管理 分段存储管理:方便编程、分段共享、分段保 护、动态链接和动态增长。 ?基本思想 把程序按内容或过程(函数)关系分成 段,每段有自己的名字。段式管理程序 以段为单位分配内存,然后通过地址映 射机构把段式虚地址转换成实际的内存 物理地址。 操 作 系 统 | 存 储 器 管 理 54 CUIT 徐虹 ?实现原理 ?段式虚存空间 ?进程的虚地址空间为二维的,段长不固定, 每个段定义一组逻辑上完整的程序或数据。 段号S 段内地址W 31 16 15 0 例:CALL [X] | (Y) LOAD 1,[A] | 6 STORE 1,[B] | (C) 10 操 作 系 统 | 存 储 器 管 理 55 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 56 CUIT 徐虹 ?内存的分配和回收 ?内存的分配 ?内存中有足够的空闲区满足该段的要求 ?分配算法:最先适应算法;最佳适应;最 坏适应算法。 ?不满足 ?所有空闲区之和是否满足,如满足则合并。 ?内存的回收 操 作 系 统 | 存 储 器 管 理 57 CUIT 徐虹 ?段式管理的地址变换 ?段表(Segment Mapping Table) 段号始址长度存取方式 ?动态地址变换 ?当进程执行时,管理程序把其段表始址和段 表长度放入段表寄存器中,以段号为索引,查 段表。 ?对内存二次以上访问,可采用高速联想寄存 器,加快查找速度。 操 作 系 统 | 存 储 器 管 理 58 CUIT 徐虹 ?段的共享与保护 ?共享 ?使用相同的段名,置适当的续写控制 ?共享段的保护与淘汰 ?保护措施 ?越界保护 ?存取保护 ?环保护机构 操 作 系 统 | 存 储 器 管 理 59 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 60 CUIT 徐虹 ?性能评价 ?优点 ?便于程序模块化处理和处理变化的数据结构。 ?便于共享分段 ?便于动态链接。 ?缺点 ?地址变换费时,管理表格,硬件支持,使OS 复杂。 ?为满足段的动态增长和减少碎片,要用拼接 技术。 ?段长不定,管理困难;段长受内存可用区的 限制。 11 操 作 系 统 | 存 储 器 管 理 61 CUIT 徐虹 5. 7 段页式存储管理 ?基本思想 ?为什么提出段页式管理 ?基本思想 ?用分段方法来分配和管理虚存,用 分页方法来分配和管理实存。 ?特点 操 作 系 统 | 存 储 器 管 理 62 CUIT 徐虹 ?实现原理 ?虚地址构成 段号S 页号P 页内地址D 有效地址长度决定作业地址空间的范围(虚存 容量) 例:在IBM /370 中,24位有效地址,(共32) 位,虚存16 M。有256 段,每段最多16 页, 每页4K。 程序的分段,由程序员或编译程序按信息 的逻辑结构划分,分页由OS 自动完成。 操 作 系 统 | 存 储 器 管 理 63 CUIT 徐虹 ?段表和页表 ?段表:每个进程一张。管理内存分配与释 放,存储保护和地址变换等。 ?页表:每个段一张。管理页面保护,页表 始址,页表长度。 ?段表与页表的关系 ?动态地址变换过程 ?为提高地址转换速度,设置快速联想寄存 器,存放当前最常用的段号,页号和对应 的内存页面与其它控制用栏目。 操 作 系 统 | 存 储 器 管 理 64 CUIT 徐虹 操 作 系 统 | 存 储 器 管 理 65 CUIT 徐虹 ?评价 ?优点 ?保留了请求页式和分段存储管理的全部优 点,提供了大量虚存空间,有效利用内存, 为组织多道程序运行提供了方便。 ?缺点 ?增加硬件成本,系统的复杂性和管理上的 开销。仍有碎片,各种表格占内存。 操 作 系 统 | 存 储 器 管 理 66 CUIT 徐虹 小结 ?常用内存管理方法:分区式,页式, 段式,段页式 ?内存管理的核心是解决内外存的统 一以及之间的数据交换问题 ?内存扩充,内存的分配与回收,地 址变换,内存的保护与共享,内外 存数据交换的控制等。 ?几种存储管理方法的比较。