1、,Page 1,2019/1/10,第四章 存储器管理,操作系统,刘 刚 ,Page 2,2019/1/10,第四章 存储器管理,程序的装入和链接 连续分配方式 基本分页存储管理 基本分段存储管理 虚拟存储器的基本概念 请求分页存储管理方式 页面置换算法 请求分段存储管理方式,Page 3,2019/1/10,基本分段存储管理,分段存储管理方式的引入 分段系统的基本原理 信息共享 段页式存储管理方式,Page 4,2019/1/10,基本分段存储管理,不便于信息共享、保护、动态增长和链接,Page 5,2019/1/10,分段存储管理方式的引入,分页存储管理的主要目的是为了提高内存利用率 分段
2、存储管理的主要目的是为了满足用户在编程和使用上的要求 分段管理的主要目的 方便编程 用户作业通常按逻辑关系分若干个段 LOAD 1, A|; STORE 1,B|; 信息共享 程序与数据的共享是以信息的逻辑单位为基础 信息保护 动态增长 动态链接,Page 6,2019/1/10,4.4 基本分段存储管理方式,4.4.1 分段存储管理方式的引入,引入分段存储管理方式, 主要是为了满足用户和程序员的下述一系列需要:1) 方便编程通常,一个作业是由若干个自然段组成。因而,用户希望能把自己的作业按照逻辑关系划分为若干个段;每个段都有自己的名字和长度;要访问的逻辑地址是由段名(段号)和段内偏移量决定;
3、每个段都从0开始编址。这样,用户程序在执行中可用段名和段内地址进行访问。,Page 7,2019/1/10,4.4 基本分段存储管理方式,4.4.1 分段存储管理方式的引入,引入分段存储管理方式, 主要是为了满足用户和程序员的下述一系列需要:2) 信息共享 通常,在实现程序和数据的共享时,都是以信息的逻辑单位为基础的。为了实现的共享,也希望存储管理能与用户程序分段的组织方式相适应。,Page 8,2019/1/10,4.4 基本分段存储管理方式,4.4.1 分段存储管理方式的引入,引入分段存储管理方式, 主要是为了满足用户和程序员的下述一系列需要:3) 信息保护 在多道程序环境下,为了防止其它
4、程序对某种程序在内存中的数据有意无意的破坏,必须采用保护措施,对内存中信息的保护,同样是对信息的逻辑单位进行保护。因此,采用分段的组织和管理方式,对于实现保护功能,将是更有效和方便的。,Page 9,2019/1/10,4.4 基本分段存储管理方式,4.4.1 分段存储管理方式的引入,引入分段存储管理方式, 主要是为了满足用户和程序员的下述一系列需要: 4) 动态增长 在实际使用中,往往有些段特别是数据段,会不断地增长,而事先又无法确切地知道数据段会增长到多大。这种动态增长的情况是其它几种存储管理方式都难于应付的;而分段存储管理方式却能较好地解决这一问题。,Page 10,2019/1/10,
5、4.4 基本分段存储管理方式,4.4.1 分段存储管理方式的引入,引入分段存储管理方式, 主要是为了满足用户和程序员的下述一系列需要:5) 动态链接 通常,用户源程序经过编译所形成的若干个目标程序,还须再经过链接以形成可执行程序后,方能执行,进行的链接称为静态链接。动态链接是指在作业运行之前,并不把几个目标程序段链接起来。,Page 11,2019/1/10,存储器管理,连续分配方式,离散分配方式,分页存储管理,基本分页存储管理,请求分页存储管理,请求分页存储管理,虚拟存储器,页面置换算法,分段存储管理,基本分段存储管理,请求分段存储管理,请求分段存储管理,Page 12,2019/1/10,
6、4.2.4 可重定位分区分配,1. 动态重定位的引入,80kb,用户程序9,用户程序6,用户程序3,用户程序1,操作系统,紧凑,Page 13,2019/1/10,基本分段存储管理,分段存储管理方式的引入 分段系统的基本原理 信息共享 段页式存储管理方式,Page 14,2019/1/10,分段系统的基本原理,分段 分段存储管理方式中,作业的地址空间被分成若干个段(segment),每个段定义了一组逻辑信息 分段地址中的地址具有如下结构分段方式已得到许多编译程序的支持,31 16 15 0,216=26*210=64K,216=26*210=64K,Page 15,2019/1/10,分段系统
7、的基本原理,段表 在分段式存储管理系统中,为每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中的不同的分区中 系统为每个进程建立一张段映射表,简称为“段表” 每个段在段表中占一个表项,其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度,Page 16,2019/1/10,分段系统的基本原理,段表它记录了段号,段的首(地)址和长度之间的关系每一个程序设置一个段表,放在内存,属于进程的现场信息,Page 17,2019/1/10,分段系统的基本原理,利用段表实现地址映射,Page 18,2019/1/10,分段系统的基本原理,硬件支持 系统设置一对寄存器 段表始址寄存器用于
8、保存正在运行进程的段表的始址 段表长度寄存器用于保存正在运行进程的段表的长度,Page 19,2019/1/10,分段系统的基本原理,Page 20,2019/1/10,段表始址寄存器,段表长度寄存器,逻辑地址,Page 21,2019/1/10,4. 分页和分段的主要区别,(1) 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。 分段的目的是为了能更好地满足用户的需要。,Page 22,2019/1/10,(2) 页的大小固定且由系统决定,由系统把逻
9、辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定, 决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。(3) 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址; 而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名, 又需给出段内地址。,Page 23,2019/1/10,分段系统的基本原理,分页和分段的主要区别,Page 24,2019/1/10,基本分段存储管理,分段存储管理方式的引入 分段系统的基本原理 信息共享 段页式存储管理方式,Pag
10、e 25,2019/1/10,信息共享,分段存储的一个优点是易于实现段的共享,即允许若干个进程共享一个或多个分段 分页系统中虽然也能实现程序和数据的共享,但远不如分段系统方便 可重入代码(Reentrant Code)又称为“纯代码”(Pure Code)是一种允许多个进程同时访问的代码。可重入代码是一种不允许任何进程对它进行修改的代码,Page 26,2019/1/10,4.4.3 信息共享,例如,有一个多用户系统,可同时接纳40个用户,他们都执行一个文本编辑程序。如果文本编辑程序有160KB的代码和另外40KB的数据区,则总共需有8MB的内存空间来支持40个用户。如果160KB的代码是可重
11、入的,则无论在分页系统还是在分段系统中,该代码都能被共享。在分页系统中,为实现代码的共享,还需在每个进程的页表中,为自己的数据区建立页表项;而在分段系统中,只需为文本编辑程序设置一个段表项。,(160+40)*40=8000K,Page 27,2019/1/10,4.4.3 信息共享,例如,有一个多用户系统,可同时接纳40个用户,他们都执行一个文本编辑程序。如果文本编辑程序有160KB的代码和另外40KB的数据区,则总共需有8MB的内存空间来支持40个用户。如果160KB的代码是可重入的,则无论在分页系统还是在分段系统中,该代码都能被共享,在内存中只需保留一份文本编辑程序的副本,此时所需的内存
12、空间仅为:40*40+160=1760KB,而不是8000KB。假定每个页面的大小为4KB,那么,160KB的代码将占用40个页面,数据区占10个页面。,Page 28,2019/1/10,信息共享,Page 29,2019/1/10,信息共享,Page 30,2019/1/10,基本分段存储管理,分段管理的优缺点优点 便于动态申请内存 管理和使用统一化 便于共享 便于动态链接 缺点 产生碎片,段还需要连续的存储空间思考:与可变分区存储管理方案的相同点与不同点?,Page 31,2019/1/10,存储器管理,连续分配方式,离散分配方式,分页存储管理,分段存储管理,基本分页存储管理,基本分段存
13、储管理,基本分页存储管理,基本分段存储管理,段页式存储管理,Page 32,2019/1/10,基本分段存储管理,分段存储管理方式的引入 分段系统的基本原理 信息共享 段页式存储管理方式,Page 33,2019/1/10,段页式存储管理方式,基本原理 是分段和分页原理的结合 将用户程序分成若干个段,再把每一段分成若干个页,并为每一段赋予一个段名 段页式管理中,地址机构由段号、段内页号及页内地址三部分所组成,Page 34,2019/1/10,段页式存储管理方式,Page 35,2019/1/10,4.4.4 段页式存储管理方式,1. 基本原理,在段页式系统中,为了实现从逻辑地址到物理地址的变
14、换,系统中需同时配置段表和页表。由于允许将一个段中的页进行离散分配,因而使段表的内容略有变化:它不在是段的内存始址和段长,而是页表始址和页表长度。,Page 36,2019/1/10,段页式存储管理方式,利用段表和页表实现地址映射,Page 37,2019/1/10,2. 地址变换过程,在段页式系统中,需三次访问内存。第一次访问,是访问内存中的段表。第二次访问,是访问内存中的页表。第三次访问,才是真正从第二次访问所得的地址中,取出指令或数据。由于它的基本原理与分页及分段时的情况相似,故在此不再详述。,Page 38,2019/1/10,段页式存储管理方式,地址变换过程,Page 39,2019
15、/1/10,存储器管理,连续分配方式,离散分配方式,分页存储管理,分段存储管理,基本分页存储管理,请求分页存储管理,基本分段存储管理,请求分段存储管理,基本分页存储管理,基本分段存储管理,请求分页存储管理,请求分段存储管理,段页式存储管理,虚拟存储器,页面置换算法,Page 40,2019/1/10,第四章 存储器管理,程序的装入和链接 连续分配方式 基本分页存储管理 基本分段存储管理 虚拟存储器的基本概念 请求分页存储管理方式 页面置换算法 请求分段存储管理方式,Page 41,2019/1/10,虚拟存储器的基本概念,交换与覆盖 虚拟存储器的引入 虚拟存储器的实现方法 虚拟存储器的特征,P
16、age 42,2019/1/10,虚拟存储器的基本概念,交换技术与覆盖技术 是在多道环境下扩充内存的方法,用以解决在较小的存储空间中运行较大程序时遇到的矛盾 覆盖技术主要用在早期的操作系统中 交换技术被广泛用于小型分时系统中,交换技术的发展导致了虚存技术的出现,Page 43,2019/1/10,虚拟存储器的基本概念,交换与覆盖异同点 共同点:进程的程序和数据主要放在外存,当前需要执行的部分放在内存,内外存之间进行信息交换 不同点:如何控制交换?,Page 44,2019/1/10,虚拟存储器的基本概念,覆盖技术 把程序划分为若干个功能上相对独立的程序段,按照其自身的逻辑结构将那些不会同时执行
17、的程序段共享同一块内存区域 程序段先保存在磁盘上,当有关程序段的前一部分执行结束,把后续程序段调入内存,覆盖前面的程序段(内存“扩大”了) 覆盖:一个作业的若干程序段,或几个作业的某些部分共享某一个存储空间 一般要求作业各模块之间有明确的调用结构,程序员要向系统指明覆盖结构,然后由操作系统完成自动覆盖,Page 45,2019/1/10,虚拟存储器的基本概念,覆盖技术的缺点 对用户不透明,增加了用户负担 目前这一技术用于小型系统中的系统程序的内存管理上 MS-DOS的启动过程中,多次使用覆盖技术;启动之后,用户程序区TPA的高端部分与COMMAND.COM暂驻模块也是一种覆盖结构,Page 4
18、6,2019/1/10,虚拟存储器的基本概念,交换技术当内存空间紧张时,系统将内存中某些进程暂时移到外存,把外存中某些进程换进内存,占据前者所占用的区域,这种技术是进程在内存与外存之间的动态调度。多用于分时系统中,Page 47,2019/1/10,虚拟存储器的基本概念,交换技术实现中的几个问题 选择原则:将哪个进程换出内存? 交换时机的确定 交换时需要做哪些工作? 换入内存时位置的确定,Page 48,2019/1/10,虚拟存储器的基本概念,选择原则 将哪个进程换出内存? 例子:分时系统,时间片轮转法或基于优先数的调度算法,在选择换出进程时,要确定换出的进程是要长时间等待的 需要特殊考虑的
19、是:任何等待I/O进程中存在的问题 解决:从来不换出处于等待I/O状态的进程,有些I/O进程因DMA(直接存储器访问)而不能换出内存或换出前需要操作系统的特殊帮助,Page 49,2019/1/10,虚拟存储器的基本概念,交换时机的确定 何时需发生交换?例子: 只要不用就换出(很少再用) 只在内存空间不够或有不够的危险时换出,Page 50,2019/1/10,虚拟存储器的基本概念,交换时需要做哪些工作 盘交换区:足够大,存放所有用户程序的所有内存映像的拷贝 直接存取:必须能够对这些用户程序的内存映像进行存取操作,Page 51,2019/1/10,虚拟存储器的基本概念,换入内存时位置的确定
20、换出后再换入的内存位置一定要在换出前的原来位置上吗? 受地址“绑定”技术的影响,即绝对地址产生时机的限制,Page 52,2019/1/10,虚拟存储器的基本概念,覆盖与交换的比较 与覆盖技术相比,交换技术不要求用户给出程序段之间的逻辑覆盖结构;而且,交换发生在进程或作业之间 而覆盖发生在同一进程或作业内。 覆盖只能覆盖那些与覆盖段无关的程序段,Page 53,2019/1/10,虚拟存储器的基本概念,交换与覆盖 虚拟存储器的引入 虚拟存储器的实现方法 虚拟存储器的特征,Page 54,2019/1/10,虚拟存储器的基本概念,连续分配,离散分配,(基本)分页,(基本)分段,段页式,方便程序装
21、入 提高内存利用率,Page 55,2019/1/10,虚拟存储器的引入,程序装入内存时可能会出现如下问题 程序太大,要求的空间超出了内存总容量 有大量作业要求运行,但内存不能容下所有作业 程序暂时不执行或运行完是否还要占用内存 常规存储器管理方式的特征 一次性 要求作业全部装入内存才能运行 驻留性 程序装入内存后便一直驻留内存,直至运行结束,许多不用或暂时不用的程序占用了大量内存空间,而其他程序却无法装入!是否必要?,Page 56,2019/1/10,虚拟存储器的引入,局部性原理 1968年, Denning.P指出 程序执行时,除了少部分的转移和过程调用指令外,在大多数情况下仍是顺序执行
22、的 过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域,但经研究看出,过程调用的深度在大多数情况下都不超过5 程序中存在许多循环结构,这些虽然只由少数指令构成,但是它们将多次执行 程序中还包括许多对数据结构的处理,如对数组进行操作,它们往往都局限于很小的范围内,Page 57,2019/1/10,虚拟存储器的引入,局限性又表现在下述两个方面 时间局限性 如果程序中的某条指令一旦执行, 则不久以后该指令可能再次执行 如果某数据被访问过, 则不久以后该数据可能再次被访问 典型原因是因在程序中存在着大量循环操作 空间局限性 一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即
23、程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行,Page 58,2019/1/10,2. 局部性原理,早在1968年, Denning.P就曾指出: 程序在执行时将呈现出局部性规律,即在一较短时间内,程序的执行仅限于某个部分;相应地,它所访问的存储空间也局限于某个区域。,基于局部性原理,一个作业在运行之前,没有必要全部装入内存,而仅将那些当前要运行的那部分页面或段,先装入内存便可启动运行,其余部分暂时留在磁盘上。,Page 59,2019/1/10,虚拟存储器的引入,虚拟存储器的基本思想是:程序、数据、堆栈的大小可以超过内存的大小,操作系统把程序当前使用的
24、部分保留在内存,而把其它部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换 虚拟存储器支持多道程序设计技术,Page 60,2019/1/10,虚拟存储器的引入,虚拟存储器定义 是指具有请求调入功能和置换功能, 能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而其成本却又接近于外存。,Page 61,2019/1/10,虚拟存储器的引入,注意:一个虚拟存储器的最大容量是由计算机的地址结构确定的。如:若CPU的有效地址长度为32位,则程序可以寻址范围是0(232)-1 ,即虚存容量为 4GB。 虚拟存储器的容量与主存的实际大小没
25、有直接的关系,而是由主存与辅存的容量之和所确定。,Page 62,2019/1/10,虚拟存储器的基本概念,交换与覆盖 虚拟存储器的引入 虚拟存储器的实现方法 虚拟存储器的特征,Page 63,2019/1/10,虚拟存储器的实现方法,虚拟存储器的实现都是建立在离散分配的存储管理方式基础上的 主要有 请求分页系统 请求分段系统,Page 64,2019/1/10,虚拟存储器的实现方法,请求分页系统 在分页系统的基础上增加了请求调页功能和页面置换功能 硬件支持 请求分页的页表机制,它是在纯分页的页表机制上增加若干项而形成的,作为请求分页的数据结构; 缺页中断机构,即每当用户程序要访问的页面尚未调
26、入内存时 便产生一缺页中断,以请求OS将所缺的页调入内存; 地址变换机构, 它同样是在纯分页地址变换机构的基础上发展形成的 实现请求分页的软件 用于实现请求调页的软件和实现页面置换的软件,Page 65,2019/1/10,4.5.2 虚拟存储器的实现方法,2. 请求分段系统,为了实现请求分段,系统同样需要必要的硬件支持:(1)请求分段的段表机制。这是在纯分段的段表机制基础上,增加若干项而形成的;(2)缺段中断机构。每当用户程序所要访问的段尚未调入内存时,产生一缺段中断,请求OS将所缺的段调入内存;(3)地址变换机构。与请求调页类似,实现请求调段和置换功能也需要得到OS的支持。,Page 66
27、,2019/1/10,虚拟存储器的基本概念,交换与覆盖 虚拟存储器的引入 虚拟存储器的实现方法 虚拟存储器的特征,Page 67,2019/1/10,4.5.3 虚拟存储器的特征,虚拟存储器最基本的特征是离散性,在此基础上又形成了多次性及对换性的特征。其所表现出来的最重要的特征是虚拟性。1、离散性2、多次性3、对换性4、虚拟性,Page 68,2019/1/10,虚拟存储器的特征,多次性 一个作业被分成多次调入内存运行 对换性 允许在作业的运行过程中进行换进、换出 虚拟性 能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量 以CPU时间和外存空间换取昂贵内存空间,这是操作系统中
28、的资源转换技术,Page 69,2019/1/10,存储器管理,连续分配方式,离散分配方式,分页存储管理,分段存储管理,基本分页存储管理,请求分页存储管理,基本分段存储管理,基本分页存储管理,基本分段存储管理,请求分页存储管理,段页式存储管理,虚拟存储器,Page 70,2019/1/10,第四章 存储器管理,程序的装入和链接 连续分配方式 基本分页存储管理 基本分段存储管理 虚拟存储器的基本概念 请求分页存储管理方式 页面置换算法 请求分段存储管理方式,Page 71,2019/1/10,请求分页存储管理方式,请求分页中的硬件支持 内存分配策略和分配算法 调页策略,Page 72,2019/
29、1/10,请求分页中的硬件支持,系统需要解决的问题 系统如何获知进程当前所需页面不在主存 当发现缺页时,如何把所缺页面调入主存 当主存中没有空闲的页框时,为了要接受一个新页,需要把老的一页淘汰出去,根据什么策略选择欲淘汰的页面,Page 73,2019/1/10,请求分页中的硬件支持,页描述子的扩充(页表机制 ) 状态位P(中断位)指示该页是在内存还是在外存 访问位A 用于记录本页在一段时间内被访问的次数或记录本页在最近多长时间未被访问 修改位M 表示该页在内存中是否被修改过 外存地址 该页在外存上的地址,通常是物理块号,Page 74,2019/1/10,请求分页中的硬件支持,缺页中断机构
30、在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断。相应的中断处理程序把控制转向缺页中断子程序,执行此子程序,即把所缺页面装入主存,然后处理机重新执行缺页时打断的指令。这时,就将顺利形成物理地址。 缺页中断与一般中断的区别 在指令执行期间产生和处理中断信号 一条指令在执行期间可能产生多次缺页中断,例如,Page 75,2019/1/10,请求分页中的硬件支持,涉及6次缺页中断的指令,Page 76,2019/1/10,3. 地址变换机构,如果在快表中未找到该页的页表项,则应再到内存中去查找页表,再从找到的页表项中的状态位P,该页是否调入内存。其结果可能是:(1)该页已经调入内存,
31、这是应将此页的页表项写入快表,当快表已满时,应先调出按某种算法所确定的页的页表项,然后再写入该页的页表项。(2)该页尚未调入内存,这时便应产生缺页中断,请求OS从外存中把该页调入内存。,Page 77,2019/1/10,请求分页中的地址变换过程,Page 78,2019/1/10,请求分页存储管理方式,请求分页中的硬件支持 内存分配策略和分配算法 调页策略,Page 79,2019/1/10,内存分配策略和分配算法,最小物理块数的确定 指保证进程正常运行所需的最小物理块数。当系统分配的物理块数少于此值时,进程将无法运行 进程应获得的最小物理块数与计算机的硬件结构有关,取决于指令的格式、 功能
32、和寻址方式 对于单地址指令且采用直接寻址方式的机器,则所需最少2个物理块。其中,一块存放指令页面,另一块则存放数据页面 允许间接寻址的机器,至少要求有3个物理块 对于长度是两个或多于两个字节指令的机器,其指令本身可能跨两个页面,且源和目标地址所涉及的区域也可能跨两个页面,至少需要6个物理块,Page 80,2019/1/10,4.6.2 内存分配策略和分配算法,1. 最小物理块数的确定,不同的作业要求不同。如:允许间接寻址:则至少要求3个物理块。Mov A, BLoad 1, 1000直接寻址方式,则所需的最少物理块数为2,Page 81,2019/1/10,内存分配策略和分配算法,物理块的分
33、配策略 在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换时,也可采取两种策略,即全局置换和局部置换。于是可组合出以下三种适用的策略 固定分配局部置换(Fixed Allocation, Local Replacement) 可变分配全局置换(Variable Allocation, Global Replacement) 可变分配局部置换(Variable Allocation, Local Replacemen,问题:分配块数难确定,太少,缺页频繁,吞吐量降低;太多,内存驻留进程数减少,CPU或其它资源可能空闲,先分配给各进程一定数的物理块,系统有一空闲物理块队列,
34、缺页时从空闲队列取,若空闲队列空时,在选页调出,先分配给各进程一定数的物理块,缺页时从该进程在内存的页选一换出,若其频繁缺页,系统再分配若干附加物理块,Page 82,2019/1/10,内存分配策略和分配算法,物理块分配算法 平均分配算法 这是将系统中所有可供分配的物理块,平均分配给各个进程例如,当系统中有100个物理块,有5个进程在运行时,每个进程可分得20个物理块。这种方式貌似公平,但实际上是不公平的,因为它未考虑到各进程本身的大小。如有一个进程其大小为200页,只分配给它20个块,这样,它必然会有很高的缺页率;而另一个进程只有10页,却有10个物理块闲置未用,Page 83,2019/
35、1/10,内存分配策略和分配算法,按比例分配算法这是根据进程的大小按比例分配物理块的算法。如果系统中共有n个进程,每个进程的页面数为Si,则系统中各进程页面数的总和为:又假定系统中可用的物理块总数为m,则每个进程所能分到的物理块数为bi,将有:b应该取整,它必须大于最小物理块数,Page 84,2019/1/10,内存分配策略和分配算法,考虑优先权的分配算法 在实际应用中,为了照顾到重要的、紧迫的用户程序能尽快地完成, 应为它分配较多的内存空间 通常采取的方法是把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据各进程的优先权,适当地增加其相应份额后,分配给各进程
36、 在重要的系统,如实时控制系统,则可能是完全按优先权为各进程分配其物理块的,Page 85,2019/1/10,请求分页存储管理方式,请求分页中的硬件支持 内存分配策略和分配算法 调页策略,Page 86,2019/1/10,4.6.3 调页策略,何时调入页面 从何处调入页面 页面调入过程,Page 87,2019/1/10,调页策略,何时调入页面 预调页策略 采用一种以预测为基础的预调页策略,将那些预计在不久之后便会被访问的页面预先调入内存,成功率50% 请求调页策略 当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便提出请求,由OS将其所需页面调入内存 目前的虚拟存储
37、中大多采用此种策略,Page 88,2019/1/10,2. 从何处调入页面,在请求分页系统中的外存分为两部分:1.用于存放文件的文件区2.用于存放对换页面的对换区通常,由于对换区是采用连续分配方式,而文件是采用离散分配方式,故对换区的磁盘I/O速度比文件区的高。这样,每当发生缺页请求时,系统应从何处将缺页调入内存,可分成如下三种情况。,Page 89,2019/1/10,2. 从何处调入页面,在请求分页系统中的外存分为两部分:用于存放文件的文件区和用于存放对换页面的对换区。通常,由于对换区是采用连续分配方式,而事件是采用离散分配方式,故对换区的磁盘I/O速度比文件区的高。这样,每当发生缺页请
38、求时,系统应从何处将缺页调入内存,可分成如下三种情况:(1) 系统拥有足够的对换区空间,这时可以全部从对换区调入所需页面,以提高调页速度。为此,在进程运行前, 便须将与该进程有关的文件,从文件区拷贝到对换区。,Page 90,2019/1/10,(2) 系统缺少足够的对换区空间,这时凡是不会被修改的文件,都直接从文件区调入;而当换出这些页面时,由于它们未被修改而不必再将它们换出,以后再调入时,仍从文件区直接调入。但对于那些可能被修改的部分,在将它们换出时,便须调到对换区,以后需要时,再从对换区调入。(3) UNIX方式。由于与进程有关的文件都放在文件区,故凡是未运行过的页面,都应从文件区调入。
39、而对于曾经运行过但又被换出的页面,由于是被放在对换区,因此在下次调入时,应从对换区调入。由于UNIX系统允许页面共享,因此,某进程所请求的页面有可能已被其它进程调入内存,此时也就无须再从对换区调入。,Page 91,2019/1/10,调页策略,页面调入过程 每当程序所要访问的页面未在内存时,便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后,转入缺页中断处理程序。该程序通过查找页表,得到该页在外存的物理块地址 若此时内存能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表 若内存已满,则须先按照某种置换算法从内存中选出一页准备换出: 页未被修改过,可不必将该页写
40、回磁盘 页已被修改过, 则必须将它写回磁盘,然后再把所缺的页调入内存, 并修改页表中的相应表项,置其状态位为“1”,并将此页表项写入快表中。 在缺页调入内存后,利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据,Page 92,2019/1/10,请求分页中的地址变换过程,Page 93,2019/1/10,3. 页面调入过程,页面调入,页面在内存,页面未在内存,内存能容纳新页,内存已满,该页未被修改过,该页已被修改,缺页中断,置换算法,写回磁盘,Page 94,2019/1/10,第四章 存储器管理,程序的装入和链接 连续分配方式 基本分页存储管理 基本分段存储管理 虚拟存储器
41、的基本概念 请求分页存储管理方式 页面置换算法 请求分段存储管理方式,Page 95,2019/1/10,页面置换算法,最佳置换算法和先进先出置换算法 最近最久未使用(LRU)置换算法 CLOCK置换算法 其它置换算法,Page 96,2019/1/10,最佳置换算法和先进先出置换算法,最佳(Optimal)置换算法 最佳置换算法是由Belady于1966年提出的一种理论上的算法 其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面 采用最佳置换算法,通常可保证获得最低的缺页率,Page 97,2019/1/10,4.7 页面置换算法,4.7.1 最佳置换算法和
42、先进先出置换算法,1. 最佳(Optimal)置换算法采用最佳置换算法可保证获得最低的缺页率。但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法也是无法实现的,但是可利用该算法去评价其它算法。,Page 98,2019/1/10,最佳置换算法和先进先出置换算法,例:假定系统为某进程分配了三个物理块, 并考虑有以下的页面号引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1进程运行时, 先将7,0,1三个页面装入内存。 以后,当进程要访问页面2时将会产生缺页中断。此时OS根据最佳置换算法,将选择页面7予以淘汰
43、,页框(物理块),利用最佳页面置换算法时的置换图,2,6次页面置换,Page 99,2019/1/10,2. 先进先出(FIFO)页面置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中的驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,含有全局变量、常用函数、例程等的页面,FIFO置换算法并不能保证这些页面不被淘汰。,Page 100,2019/1/10,最佳置换算法和先进先出置换算法,先进先出(FIFO)页面置
44、换算法 选择在内存中驻留时间最长的页并淘汰之,页框,利用FIFO置换算法时的置换图,12次页面置换,Page 101,2019/1/10,页面置换算法,最佳置换算法和先进先出置换算法 最近最久未使用(LRU)置换算法 CLOCK置换算法 其它置换算法,Page 102,2019/1/10,4.7.2 最近最久未使用(LRU)置换算法,1. LRU(Least Recently Used)置换算法的描述,FIFO置换算法之所以性能较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。而最近最久未使用(LRU)的页面置换算法,则是根据页面调入内存后的使用情况
45、。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似。因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。,Page 103,2019/1/10,最近最久未使用(LRU)置换算法,LRU(Least Recently Used)置换算法的描述选择最后一次访问时间距离当前时间最长的一页并淘汰之。即淘汰没有使用的时间最长的页。实现代价很高(时间戳或硬件方法),LRU页面置换算法,引用率,7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1,页框,9次页面置换,Page 104,2019/1/10,2. LRU置换算法的硬件支持,把LRU算
46、法作为页面置换算法是比较好的,它对于各种类型的程序都能适用,但实现起来有相当大的难度,因为它要求系统具有较多的支持硬件。所要解决的问题有:一个进程在内存中的各个页面各有多久时间未被进程访问;如何快速地知道哪一页最近最久未使用的页面。为此,须利用以下两类支持硬件:1移位寄存器:定时右移2栈:当进程访问某页时,将其移出压入“栈顶”,“栈底”换出。,Page 105,2019/1/10,最近最久未使用(LRU)置换算法,LRU置换算法的硬件支持 寄存器 为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为 访问时将Rn-1位置成1,定时信号每隔一时间间隔右移一位,
47、则具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面,R=Rn-1Rn-2Rn-3 R2R1R0,t0,t1,t2,访问1,t3,Page 107,2019/1/10,图 4-28 某进程具有8个页面时的LRU访问情况,最近最久未使用(LRU)置换算法,Page 108,2019/1/10,最近最久未使用(LRU)置换算法,栈 进程访问某页时,将该页面的页号从栈中移出,再压入栈顶,用栈保存当前使用页面时栈的变化情况,Page 109,2019/1/10,页面置换算法,最佳置换算法和先进先出置换算法 最近最久未使用(LRU)置换算法 CLOCK置换算法 其它置换算法,Page 110,2
48、019/1/10,4.7.3 Clock置换算法,1. 简单的Clock置换算法,利用Clock算法时,只须为每页设置一位访问位,在将内存中的所有页面都通过链接指针链成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只须检查其访问位。,Page 111,2019/1/10,现对其中各字段说明如下:(1)状态位(存在位)P。用于指示该页是否调入内存,供程序访问时参考。(2)访问字段A。用于记录本页在一段时间内被访问的次数,或最近已有多长时间未被访问,提供给置换算法选择换出页面时参考。(3)修改位M。表示该页在调入内存后是否被修改过。由于内存中的每一页都在外存上保留一份副本
49、,因此,若未被修改,在置换该页时就不须将该写回到外存上,以减少系统的开销和启动磁盘的次数;若已被修改,则必须将该页重写到外存上,以保证外存中所保留的始终是最新副本。(4)外存地址。用于指出该页在外存上的地址,通常是物理块号,供调入该页时使用。,Page 112,2019/1/10,CLOCK置换算法,简单的CLOCK置换算法(近似的LRU算法) 当采用简单的CLOCK算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列 当某页被访问时,其访问位被置1 置换算法在选择一页淘汰时,只需检查页的访问位,是0换出,是1重新置0且暂不换出,再按FIFO检查下一个页面。检查到最后一个页面,若其访问位仍为1,则再返到队首检查。 由于该算法是循环地检查各页面的访问情况,故称为CLOCK算法,置换的是未使用过的页,又称为最近未用算法NRU(Not Recently Used),