1、存储器管理,Operating System,2,2019/6/29,4.6 虚拟存储器,3,2019/6/29,虚拟存储器的引入,基本段页式存储管理的缺陷在于作业执行时必须全部装入内存,使得大型作业被拒绝或部分作业需要在外存长期等待 解决办法 物理扩充 逻辑扩充,4,2019/6/29,虚拟存储器的引入,基本存储管理方式的一次性(装入)和驻留性特征使得作业的响应效率大幅降低 程序执行时具有局部性规律 一段时间内程序执行局限在某段代码,访问的存储空间也局限于某个区域 eg:程序执行时通常是顺序执行,即使执行跳转或过程调用后,执行轨迹也只不过是转至另外的一个局部区域更加典型的还有循环结构和对某些
2、数据结构的处理,程序执行时表现出时间和空间的局限性,5,2019/6/29,虚拟存储器定义,具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统 虚存的逻辑容量由内外存容量之和决定,运行速度接近于内存,每bit成本接近于外存,6,2019/6/29,虚拟存储器的实现方法,程序运行前:仅装入当前要运行的主程序需要的部分页面或段 程序运行时: 若要访问的页(段)已装入内存,继续执行 若产生缺页或缺段且内存中还有足够的空间,则启动OS的请求调页(段)功能调入需要的页(段) 若产生缺页或缺段且内存空间不足时,先启动页(段)置换功能,将内存中暂时不用的页(段)调出内存,接着启动请求调
3、页(段)程序调入需要的页(段),7,2019/6/29,虚拟存储器的实现方法,存储模式:离散存储 分类 请求分页系统 在基本分页系统中增加请求调页和页面置换功能 硬件支持:请求分页的页表机制、缺页中断机构、地址变换机构 软件支持:请求调页程序、页面置换程序 请求分段系统 在基本分段系统中增加请求调段和段置换功能 硬件和软件支持与请求分页系统类似,8,2019/6/29,虚拟存储器的特征,多次性 作业可被分为多次调入内存 虚存的独有特征 对换性 允许作业换入换出 显著提高内存利用率 虚拟性 虚存对内存实行逻辑扩充,虚拟性以多次性和对换性为基础,后二者又以离散分配为基础,9,2019/6/29,4
4、.6 请求分页存储管理方式,10,2019/6/29,硬件支持,请求分页系统的数据换入和换出的基本单位都是长度固定的页面,具有实现简单的优势 需要请求分页页表机制、缺页中断机构和地址变换机构的支持,11,2019/6/29,页表机制,与基本分页系统的页表相比,需要增加支持页面换入、换出的数据结构,其页表项如下状态位:指示该页是否已被调入内存 访问字段:纪录本页在一段时间内被访问的次数或上次访问时间等信息 修改位:该页调入内存后是否被修改过,置换页面时若该位表示曾修改过,需要覆盖外存中的副本,以保证外存中的页面始终为最新 外存地址:指出该页对应外存物理帧号,12,2019/6/29,缺页中断机构
5、,当所要访问的页面不在内存时,启动缺页中断,请求OS在程序中断期间将需要的页面调入内存 缺页中断处理过程:保护现场、分析中断原因、转入缺页中断处理程序、恢复现场 特点(与普通中断相比) 指令执行期间产生和处理中断信号 指令执行时可能会产生多次缺页中断,13,2019/6/29,地址变换机构,开始,页号页表长度,CPU检索快表,越界中断,结束,页表项在快表中,访问页表,页在内存,修改快表,修改A和M,形成物理地址,保护现场,从外存中找到缺页,选择一页换出,内存满,该页被修改过,将该页写回外存,从外存读缺页,启动I/O硬件,从外存中换入一页,修改页表,Y,N,Y,N,Y,Y,Y,N,N,N,产生缺
6、页中断请求调页,缺页中断处理,14,2019/6/29,内存物理帧分配策略和分配算法,内存物理帧分配策略要考虑三方面问题 最小(最少)物理块数如何确定 物理块的分配策略 物理块的分配算法,15,2019/6/29,最小物理块数,保证进程运行所需的最小物理帧数与其所在硬件结构相关,不同的指令格式、功能和寻址方式对物理帧数的要求不同 单字节指令、直接寻址方式:2个帧 单字节指令、间接寻址方式:3个帧 多字节指令:6个以上的帧,16,2019/6/29,物理帧分配策略,内存可采用固定和可变两种策略进行分配,置换时有全局和局部置换,因此物理帧的分配策略可分为 固定分配局部置换 根据进程类型或程序员要求
7、,为进程分配固定数目的物理帧,进程运行期间不再新增空间,换出时从本进程占有的页面中选择一页;难度在于物理帧数目难以确定,过多或过少都有不良影响 可变分配全局置换 进程获取的物理帧数在运行过程中可以变化,换出时的页面可以是内存中的任意进程的页面,该方法会增加其他进程的缺页率 可变分配局部置换 根据进程类型或程序员要求分配初始数量的物理帧,换出时只从本进程占有页面中选择,但若缺页中断经常产生,则为该进程新增部分页面,以使缺页中断发生频度下降,即利用增减帧数量的方法来控制缺页率,17,2019/6/29,物理帧分配算法,采用固定分配策略时,可以使用下述算法 平均分配算法 物理块平均分配给各进程,小进
8、程浪费空间,大进程缺页率高 根据进程大小按比例分配 根据本进程页面数与系统中各进程页面数总和之比分配帧,但至少要满足最小物理块要求 按优先权分配 高优先权的进程获得的物理帧多 将帧分类,一类按比例分,一类专用来满足高优先权进程的额外需求,18,2019/6/29,调页策略,调入时机 预调页策略:在程序首次调入时,选择预计不久会被访问的页面调入内存,其性能优劣取决于预测准确度 请求调页策略:需要某页面时向OS提出请求,调入的页一定会在短时间内被用到,但一次调入一页使得系统开销大,增加了I/O时间 调入来源 来自于对换区:对换区大的系统可直接将进程的所有页面装入对换区,运行时直接从中高速置换 来自
9、于文件区:对换区小的系统,其进程页面的最初版本从文件区调入,若在运行时没有修改,置换时不必换出,直接覆盖即可;反之,将修改过的页面换出到对换区,需要时从对换区调入 UNIX方式:未运行过的页面,放在文件区等待调入;曾经运行过且被换出的页面放在对换区等待再次调入。再配合页面共享机制,使得当前进程所需页面可能已被其他进程调入内存或换出到对换区,19,2019/6/29,4.8 页面置换算法,请求调页系统中,换出页面时需要根据一定算法选择 最佳置换算法(OPT) 先进先出算法(FIFO) 最近最久未使用置换算法(LRU) Clock置换算法 最少使用置换算法 页面缓冲算法,20,2019/6/29,
10、最佳置换算法OPT,理想化算法 该算法选择的换出页面将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面 可以保证最低缺页率 最佳页面的无法预知性使得该算法不可实现 可以作为评价其他算法的标尺,21,2019/6/29,最佳置换算法OPT,某进程拥有三个物理帧,且按照如下顺序引用页面,则其置换图为,7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,7,7,0,7,0,1,2,0,1,2,0,3,2,4,3,2,0,3,2,0,1,7,0,1,内存尚有空间,仅调入页面,内存没有足够空间,需要进行置换,完成全部任务需要6次置换工作,22,2019/6/29,先
11、进先出页面置换算法FIFO,换出时选择最早进入内存的页面 实现方法 将所有已调入内存的页面按照不同进程组织为时间升序的队列,并在每个队列中设置替换指针,使其指向驻留在内存中最久的页面 特点 实现简单,但页面调入的先后顺序不一定符合实际运行规律,23,2019/6/29,先进先出页面置换算法FIFO,7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,7,7,0,7,0,1,2,0,1,2,3,1,2,3,0,4,2,0,0,1,3,7,0,2,7,0,1,7,1,2,0,1,2,4,2,3,0,2,3,4,3,0,共需12次页面置换,比最佳算法效率低一倍,24,20
12、19/6/29,最近最久未使用(LRU)置换算法,根据页面调入内存后的使用情况进行选择 选择最近最久未使用的页面予以换出,每个页面的访问字段都纪录了该页面自上次被访问以来所经历的时间t,换出时选择t值最大的页面,即最近最久未使用的页面,25,2019/6/29,LRU算法,7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,7,7,0,7,0,1,2,0,1,2,0,3,4,0,2,1,3,2,1,0,7,1,0,2,4,3,2,0,3,2,4,0,3,共需9次页面置换,比最佳算法效率低,26,2019/6/29,LRU算法的硬件支持,LRU算法性能较优,其面临的主
13、要问题是如何确定一个按照上次使用时间定义的排序序列,可选择如下两种方式 计数器:每个位于内存中的页面都要配置一个计数器用来标识进入内存的时间 页码堆栈:每当引用一个已在堆栈的页时,都将该页从堆栈中删除并压入顶部,27,2019/6/29,LRU算法的硬件支持,计数器方式 移位寄存器 每个页面配置一个n位移位寄存器,当进程访问某页面时,将其最高位设置为1,每过一个时钟周期将其右移一位 换出时选择移位寄存器值最小的页面 逻辑时钟 每个页面项中设置一个使用时间域,每次内存引用时,时钟寄存器的内容会复制到相应页的使用时间域中 换出时选择该域中值最小的页面 该算法需要搜索页表以查找计数值最小的页面,系统
14、的时空开销需要考虑,28,2019/6/29,LRU算法的硬件支持,设某系统中有8个页面,每个页面有一个8位移位寄存器,下图为某时刻的LRU访问情况,置换时应选择第 个页面换出,3,29,2019/6/29,LRU算法的硬件支持,页码堆栈 堆栈使用双向链表实现 进程访问某页面时,若该页在栈内,则从中删除并压入栈顶;若该页不在栈内,则从栈底删除最近最久未使用的页面,并将新页面压入栈顶 该算法中,栈顶总是最近访问的页面,栈底总是最近最久未使用的页面,30,2019/6/29,LRU算法的硬件支持,4 7 0 7 1 0 1 2 1 2 6,4,4,7,4,7,0,4,0,7,4,0,7,1,4,7
15、,1,0,4,7,0,1,4,7,0,1,2,4,7,0,2,1,4,7,0,1,2,7,0,1,2,6,31,2019/6/29,LRU算法的硬件支持,7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,7,7,0,7,0,1,2,1,0,0,2,1,2,4,0,1,2,3,7,1,0,0,2,1,3,2,4,0,3,2,4,0,3,3,0,2,0,3,2,3,0,2,2,3,0,2,1,3,1,0,2,0,7,1,1,0,7,7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,7,7,0,7,0,1,2,0,1,2,0,3,4,0,2
16、,1,3,2,1,0,7,1,0,2,4,3,2,0,3,2,4,0,3,堆栈使用,调度情况,2,0,1,2,0,1,2,0,1,32,2019/6/29,Clock置换算法,对LRU的改进,硬件支持要求低 该算法使用访问位帮助实现页置换 内存中所有页面链接为一个循环队列 访问位存在于页表项内,初值为0,每当读写一个页时均对其硬件置位 分类:基本clock置换算法(二次机会算法)和改进型clock置换算法,33,2019/6/29,Clock置换算法,二次机会算法 算法思想:选择换出页时首先检查访问位,若其值为0就直接置换该页;若为1就清零其访问位,且设其到达时间为当前时间,接着对下一个页面进
17、行同样的检查 实现方法:采用循环队列。用一个指针标识下一个要置换的页,当需要一个帧时,指针向前移动直到找到一个访问位为0的页(移动的同时清除访问位),新页将插入该页位置 最坏情况:所有页面的访问位均已清零,指针会遍历整个循环队列,以便给所有页面第二次机会,此时再选择页时将转变为FIFO置换,第二次机会,34,2019/6/29,Clock置换算法,0,0,1,1,0,1,1,下一页面,访问位,页,0,0,0,1,0,1,1,下一页面,访问位,页,0,0,0,0,0,1,1,下一页面,访问位,页,35,2019/6/29,Clock置换算法,改进型clock算法 算法思想:将访问位和修改位两个字
18、段组成有序对(A,M)来改进上述算法,其中有序对的组合可能有 (0,0)最近没有使用且没有修改用于置换的最佳页面,若换出需要I/O一次 (0,1)最近没有使用但修改过换出前需要将页写入外存,若换出需要I/O二次 (1,0)最近使用过但未修改可能很快要再使用,若换出需要I/O一次 (1,1)最近使用过且修改过可能很快要再使用,且换出前需要将页面写入外存,若换出需要I/O二次,36,2019/6/29,Clock置换算法,改进型clock算法 算法步骤 if(find(M=0 & A=0)swap the first located page and the needed one if(find(
19、A=0 & M=1)swap the first located page and the needed oneA=0elseA=0 for all pages do A=0goto 1 此算法为修改过的页面赋予较高优先级,降低了I/O次数,但可能经过多轮扫描才能找到可以用来置换的页面,算法运行开销增大,37,2019/6/29,最少使用置换算法(LFU),通过在各页表项中设置一个纪录访问次数的计数器,可以形成LFU算法 由于活跃页应该有较大的访问次数纪录值,因此可以将该计数器值最小的页面换出 每次访问某页时,将移位寄存器的最高位置位,每隔一定时间右移一次,则最近一段时间内使用最少的页面其按位
20、相加之和最小,38,2019/6/29,最少使用置换算法(LFU),Resolvent,New problem,每次访问某页时将移位寄存器最高位置1,并定期右移,形成指数衰减的使用次数值,移位寄存器只纪录某时间间隔内该页面的使用情况,不能反映页面的访问次数,关键在于时间间隔大小的设置,39,2019/6/29,页面缓冲算法,采用可变分配和局部置换方式,以及FIFO算法 该算法中要求设置两个链表空闲帧链表和已修改帧链表,被选中的页面若未被修改就插入前一链表,否则插入后一链表 被插入空闲帧链表的页面并不换出内存,将来直接被覆盖;被插入已修改链表的页面暂时不写入磁盘,待累积达到一定数量时才调出内存
21、新调入的页面直接使用空闲页面链表的第一个元素 这种方法可以显著减少I/O次数,且能以较小系统开销将这些页面再次分配给原进程使用,40,2019/6/29,4.9 请求分段存储管理方式,41,2019/6/29,请求分段存储管理方式,在基本段式管理基础上增加请求调段功能和段置换功能 运行时先调入若干分段,需要新段时置换暂时不用的段,42,2019/6/29,硬件支持,段表机制 缺段中断机构 地址变换机构,43,2019/6/29,段表机制,存取方式:标识存取属性为读、写、执行的组合 增补位:请求分段存储管理的特有字段,表示本段运行过程中是否有动态增长 访问字段A、修改位M、状态位P、外存基址的定
22、义同页式管理,段名,段长,段基址,存取方式,访问字段A,修改位M,状态位P,增补位,外存基址,44,2019/6/29,缺段中断机构,虚段S不在内存,内存中有合适空区,返回,Y,阻塞请求进程,从外存读入段S,修改段表及内存空区链,唤醒请求进程,拼接空区形成 合适大小空区,空区总容量能满足需求,淘汰一个或几个实段, 形成一个合适空区,N,Y,N,请求分段的中断处理过程,45,2019/6/29,地址变换机构,请求分段的地址变换过程,访问段S的w处数据,符合存取方式,返回,修改访问字段,写 访问时对M置位,形成物理地址 A=主存基址位移量w,分段越界中断处理,Y,w段长,段S在主存,分段保护中断处
23、理,缺段中断处理,Y,N,Y,N,N,46,2019/6/29,分段的共享,共享段表 各共享分段在共享段表中均有一对应表项,其中含有段号、共享进程计数器、存取控制字段等 共享进程计数器:纪录当前有多少个进程共享该段 段号:某进程使用该共享段时为其取的段号码 存取控制字段:说明不同进程的操作权限,47,2019/6/29,分段的共享,共享段分配 第一个使用共享段的进程促使系统为共享段分配空间,并在其自身段表项中纪录该空间基址,同时设置共享进程计数器为1;后继申请者只需在自身段表项中设置相应字段即可,同时将共享进程计数器加1 共享段回收 共享某段的进程释放该段时检查共享进程计数器的值,若为1就释放
24、物理空间并修改自身段表项的相关字段;若不为1,仅需修改自身段表项的相关字段,并对共享进程计数器减1,48,2019/6/29,分段的保护,分段保护措施 越界检查 段号不能超过段表长度、段内偏移不能超过段长 存取控制检查 不同进程对同一个共享分段的存取控制权限(只读、读写、只执行)不同,为各进程设置存取权限时要同时保证信息安全和运行需要 环保护机构 根据程序的重要程度和关联度将其分类,分别放置在三层软件环中,各程序的访问和调用遵循如下原则 访问:限制在本环或低特权环中 调用:限制在本环或高特权环中 高特权环编号小且接近底层,低特权环编号大且接近用户,49,2019/6/29,教学要求,掌握重定位
25、的基本概念及引入重定位和动态重定位的原因,了解重定位在连续分配方式、分页系统和分段系统中的不同实现方式 理解动态重定位分区分配方式 掌握分页和分段存储管理方式,理解分页系统的地址转换机制,了解分页和分段存储管理方式中的信息共享和保护,50,2019/6/29,教学要求,了解虚拟存储器的基本概念及基本特征,掌握其引入原因和实现的关键技术 掌握请求分页系统的基本概念,理解页表机制和地址变换过程 熟练掌握常用的页面置换算法,51,2019/6/29,作业,6、15、21、 在一个请求分页系统中,假定系统分配给一个作业的物理块数为3,且此作业的页面访问顺序为2、3、2、1、5、2、4、5、3、2、5、
26、2,试用FIFO和LRU两种算法分别计算出程序访问过程中发生的缺页次数(设初始装入时不计入缺页).,52,2019/6/29,作业,在采用页式存储管理的系统中,某作业J的逻辑地址空间为4页,每页2048字节,且已知该作业的页表如下,试求出逻辑地址4865所对应的物理地址,并画出该逻辑地址在地址变换机构中的转换过程。,作业,设一个“按需调页”虚存空间,页表由寄存器保存。在存在空闲页帧的条件下,处理一次缺页时间为8ms。若没有空闲页帧,但待换出页面并未更改,处理一次缺页的时间也是8ms。若待换出页面已更改,则需要20ms。访问一次内存需时100ns。设70%的待换出页面已更改,请问缺页率不超过多少才能保证有效访问时间小于或等于200ns?,53,2019/6/29,Thank You !,