1、1,第4章 存储管理,重要内容存储器连续存储空间管理分页存储管理分段存储管理虚拟存储管理Intel x86分段和分页存储结构Linux虚拟存储管理Windows 2003虚拟存储管理,2,存储管理的功能,分配和去配请求和释放主存空间抽象和映射抽象成一维数组或二维地址空间地址转换隔离和共享隔离实现存储保护功能超越隔离机制,提高主存利用率存储扩充虚拟,允许进程虚拟地址空间大于主存空间,3,4.1 存储器,4.1.1 存储器的层次 4.1.2 地址转换与存储保护,4,4.1.1 存储器的层次,5,4.1.2 地址转换与存储保护(1),程序的编译、链接、装入和执行,6,地址转换与存储保护(2),逻辑地
2、址(虚地址):CPU所生成的地址物理地址(实地址):内存单元所看到的地址逻辑地址空间:由程序所生成的所有逻辑地址的集合物理地址空间:由逻辑地址所对应的所有物理地址的集合地址转换或重定位:把逻辑地址转换为物理地址,7,静态重定位地址转换工作在进程执行前一次完成;无须硬件支持,易于实现,但不允许程序在执行过程中移动位置。早期单用户单任务系统动态重定位地址转换推迟到最后的可能时刻,即进程执行时才完成;允许程序在主存中移动、便于主存共享、主存利用率高。,地址转换与存储保护(3),8,例:使用重定位寄存器的动态重定位,9,存储保护问题:保护操作系统不受用户进程所影响,保护用户进程不受其他用户进程所影响方
3、法存储键保护系统将主存划分成大小相等的若干存储块,并给每个存储块都分配一个单独的保护键(锁);在程序状态字PSW中设置有保护键字段,对不同的作业赋予不同的代码(钥匙);钥匙和锁相配才允许访问界限寄存器(下页图)上、下界防护:硬件为分给用户作业的连续的主存空间设置一对上、下界,分别指向该存储空间的上、下界基址、限长防护:基址寄存器存放当前正执行者的程序地址空间所占分区的始址,限长寄存器存放该地址空间的长度,地址转换与存储保护(4),10,正运行的进程是进程2,11,4.2 连续存储空间管理,4.2.1 固定分区存储管理 4.2.2 可变分区存储管理 4.2.3 伙伴系统4.2.4 主存不足的存储
4、管理技术,12,4.2.1 固定分区存储管理,固定分区存储管理的基本思想主存空间被分成数目固定不变的分区,各分区的大小不等,每个分区只装入一个作业。固定分区存储管理的数据结构主存分配表:指出各分区的起始地址和长度;占用标志:指示此分区是否被使用。作业进入固定分区排队策略每个分区有单独的作业等待队列;所有等待处理的作业排成一个等待队列。,13,固定分区存储管理的地址转换和存储保护,14,固定分区的优缺点,优点能够解决单道程序运行在并发环境下不能与CPU速度匹配的问题解决了单道程序运行时主存空间利用率低的问题实现简单缺点大作业可能无法装入主存空间利用率不高,会出现内碎片扩充困难限制多道运行程序的个
5、数,15,4.2.2 可变分区存储管理,可变分区存储管理是按作业的实际大小来划分分区,且分区个数也是随机的,实现多个作业对主存的共享,进一步提高主存资源利用率。,16,可变分区方式主存分配示例,操作系统,作业1,空闲区,作业2,空闲区,操作系统,作业1,空闲区,作业2,空闲区,作业3,操作系统,作业1,空闲区,作业3,17,可变分区存储管理数据结构,可变分区主存分配表可由两张表格组成,已分配区表未分配区表,18,可变分区回收算法,19,链表空闲区管理方法,空闲区开头单元存放本空闲区长度及下个空闲区起始地址,把所有空闲区都链接起来,设置第一块空闲区地址指针,让它指向第一块空闲区地址。申请空闲区:
6、沿链查找并取一个长度能满足要求的空闲区;归还空闲区:把此空闲区链入空闲区链表的相应位置。,20,可变分区管理分配算法,1)最先适应分配算法空闲区通常按地址从小到大排列,分配第一个满足长度要求的空闲区;优点:分配从低地址开始,使高地址部分比较少用,以保持一个大空闲区,有利于大作业的装入;缺点:分区利用不均衡,回收分区比较麻烦。,21,2)下次适应分配算法1)的变种,每次分配时从未分配区的上次扫描结束处顺序查找。可以解决1)的缺点。3) 最优适应分配算法分配能满足要求的最小区。可以将空闲区按照大小从小到大排列,查找第一个满足要求的。优点:主存利用率好。缺点:分割剩下的空闲区比较小,难以利用;查找时
7、间比较长。,22,4)最坏适应分配算法分配能满足要求的最大区;可以将空闲区按照大小从大到小排列,查找第一个满足要求的。效率大致等同于最先适应法。5) 快速适应分配算法为经常用到的长度的空闲区设置单独的链表。优点:查找快速;缺点:归还时与相邻空闲区的合并即复杂又费时。,23,下表为某系统中的空闲分区表,系统采用可变式分区存储管理策略。现有以下作业序列:96KB,20KB,200KB,分别使用首次适应、最佳适用和最坏适用算法来处理这个作业序列,试问哪一种算法可以满足该作业序列的请求,为什么?,例题:,24,可变分区地址转换与存储保护,25,多对基址/限长寄存器,26,4.2.3 伙伴系统,伙伴原理
8、伙伴系统是一种固定分区和可变分区折中的主存管理算法,基本原理:任何尺寸为2i的空闲块可以被分为两个尺寸为2i-1的空闲块,这两个空闲块称为伙伴。伙伴通过对大块的物理主存划分而获得假如从第0个页面开始到第3个页面结束的主存每次都对半划分,那么第一次划分获得大小为2页的伙伴,如0、1和2、3进一步划分,可以获得大小为1页的伙伴,例如0和1,2和3,27,伙伴系统原理,28,2.Linux伙伴系统,1) 以page结构为数组元素的mem_map 数组2) 以free_area_struct结构为数组元素的free_area数组3) 位图数组(bitmap),29,3.Linux基于伙伴的slab分配
9、器(1),为什么要使用slab分配器?缓冲机制,能够提高效率slab的结构见下页图slab的操作kmem-cache-create()kmem-cache-aloc() 与kmem-cache-free()kmem-cache-grow() 与kmem-cache-reap()kmalloc()kfree()kmem-getpages() 与kmem-frepages(),30,Linux基于伙伴的slab分配器(2),slab分配器组成,31,4.2.4 主存不足的存储管理技术,1.移动技术,32,有关移动问题讨论,移动条件在可变分区算法中,随着进程不断的装入和撤销,导致主存中常常出现分散的
10、小空闲区,称为碎片。当在未分配区中找不到足够大的空闲区来装入新进程时,可采用移动技术,将分散的空闲空闲区汇集成片。移动时机进程撤销之后释放分区时,如果它不与空闲区邻接,立即实施移动。进程装入分区时,如果它不与空闲区邻接,立即实施引动。,33,移动算法(假设进程A请求分配x KB主存)步骤1:查主存分配表,若有大于x KB的空闲区,转步骤4;步骤2:若空闲区总和小于x KB,则令进程A等待主存资源;步骤3:移动主存的相关分区信息;修改主存分配表的有关表项;修改被移动者的基础寄存器等信息;步骤4:分配x KB主存;修改主存分配表的有关项;设置进程A的基址寄存器;有申请者等待时予以释放,算法结束。开
11、销非常大,极少使用,34,2.对换技术,对换的作用通过将主存和磁盘的进程移出移入,解决主存容量不足的问题。对换进程的选择选择哪个进程换出;决定把进程的哪些信息移出去;需要确定对换时机。UNIX对换器Windows对换器,35,在任何时候只在内存中保留所需的指令和数据由用户实现,让不会同时调用的子模块共同使用同一内存区,A30K,A占用BC共用DEF共用,3.覆盖技术,36,碎片,外部碎片:存在分区外,所有内存之和可以满足请求,但不连续内部碎片:存在分区内,但已不能满足任何请求解决外部碎片问题的方法紧缩(compaction):移动内存内容,以便所有空闲空间合并成一整块允许物理地址空间为非连续
12、分页 分段,37,4.3 分页式存储管理,4.3.1 分页式存储管理的基本原理 4.3.2 快表4.3.3 分页式存储空间的分配和去配4.3.4 分页式存储空间的页面共享和保护4.3.5 多级页表4.3.6 反置页表,38,4.3.1 分页式存储管理,为什么要引进分页技术?基本原理页面:进程逻辑地址空间分成大小相等的区; 页框(帧):主存物理地址空间分成大小相等的区,其大小跟页面大小相等;逻辑地址形式:页号页内位移 页表和地址转换(后面图),基本原理(1),39,基本原理(2),作业的页面与分给的页框如何建立联系呢?逻辑地址(页面)如何变换成物理地址(页框)呢?作业的物理地址空间由连续变成分散
13、后,如何保证程序正确执行呢?,使用动态重定位技术,给每个页面设立重定位寄存器,重定位寄存器的集合便称页表。页表是操作系统为每个用户作业建立的,用来记录程序页面和主存对应页框的对照表。,40,0 1 2 3,0 1 2 3 4 5 6 7,逻辑内存,页表,物理内存,页号 帧号,帧号,物理内存和逻辑内存的分页模型,41,逻辑地址到物理地址的转换,0 1 2 3,页表,例:说明:页大小为4B,页表如图所示,将逻辑地址0、3、4、13转换为相应物理地址答案:20、23、24、9,0/4=00 54+0=203/4=03 54+3=234/4=10 64+0=2413/4=31 24+1=9,42,练习
14、:逻辑地址到物理地址的转换,说明:页大小为1024B,页表如图所示,将逻辑地址1011、2148、3000、4000、5012转换为相应物理地址,0 1 2 3,页表,答案:3059、1124、1976、7072、逻辑地址非法,1011/1024=01011 21024+1011=30592148/1024=2100 11024+100=11243000/1024=2952 11024+952=19764000/1024=3928 61024+928=70725012/1024=4916 页号4不存在,43,4.3.2 快表,相联存储器(翻译后备缓冲(translation look-asid
15、e buffer,TLB):关联的快速内存TLB与页表一起工作(了解工作过程),44,采用相联存储器的地址转换,假定访问主存时间为100毫微秒,访问相联存储器时间为20毫微秒,相联存储器为32个单元时快表命中率可达90%,按逻辑地址存取的平均时间为:(10020)90%(100+100+20)(1-90%)130比两次访问主存的时间1002+20200下降了三成多。,45,4.3.3 分页式存储空间的分配和去配(1),位示图法每位与一帧相对应,用0/1表示对应块为空闲/已占用,用另一专门字记录当前空闲块数。链表方法每个表项包含:进程占用区(P)还是空闲区(H)起始地址长度指向下一表项的指针,4
16、6,主存分配的位示图和链表方法,47,4.3.4 分页存储空间的页面共享和保护(1),数据共享允许不同进程对共享的数据页用不同的页号,只要让各自页表中的有关表项指向共享的数据页框;程序共享指令包含指向其它指令或数据的地址。标志位保护方法在页表中增加标志位,指出此页的信息只读/读写/只可执行/不可访问等。键保护方法,48,分页存储空间的页面共享和保护(2),共享库 包含共享函数的目标代码块动态链接器负责动态链接。动态链接:共享库运行时可加载到任意的主存区域,并在主存中和一个程序链接起来。编译和动态链接共享库的过程,49,分页存储空间的页面共享和保护(3),50,4.3.5 多级页表,多级页表的概
17、念 多级页表的具体做法 逻辑地址结构逻辑地址到物理地址转换过程,51,多级页表的概念,系统为每个进程建一张页目录表,它的每个表项对应一个页表页,而页表页的每个表项给出了页面和页框的对应关系,页目录表是一级页表,页表页是二级页表。逻辑地址结构有三部分组成:页目录、页表页和位移。,52,多级页表地址转换过程,页框号 页内位移,页目录位移 页表页位移 页内位移,B,F,进程一级页表,进程二级页表,物理地址,逻辑地址,页目录表控制寄存器,53,解决页表页占用主存空间的问题,进程运行涉及页面的页表页应放在主存,其他页表页使用时再调入,在页目录表中增加特征位,指示对应的页表页是否已调入主存,地址转换机构根
18、据逻辑地址中的dir,去查页目录表对应表项,如未调入,应产生一个”缺页表页”中断信号,请求操作系统将页表页调入主存。,54,SUN SPARC计算机三级分页结构,55,多级页表结构的本质,多级不连续导致多级索引。以二级页表为例,用户程序的页面不连续存放,要有页面地址索引,该索引是进程页表;进程页表又是不连续存放的多个页表页,故页表页也要页表页地址索引,该索引就是页目录。页目录项是页表页的索引,而页表页项是进程程序的页面索引。,56,4.3.5 反置页表(1),57,反置页表(2),IPT是为主存中的每一个物理块建立一个页表并按照块号排序,该表每个表项包含正在访问该页框的进程标识、页号及特征位,
19、用来完成主存页框到访问进程的页号、即物理地址到逻辑地址的转换。,58,反置页表(3),反置页表地址转换过程如下:逻辑地址给出进程标识和页号,用它们去比较IPT,若整个反置页表中未能找到匹配的页表项,说明该页不在主存,产生请页中断,请求操作系统调入;否则,该表项的序号便是页框号,块号加上位移,便形成物理地址。,59,分页技术不会产生外部碎片,但会产生内部碎片分页的重要特点是用户观点的内存和实际的物理内存的分离分页可以共享共同代码,分页内存管理方案小结,60,4.4 分段式存储管理,4.4.1 程序的分段结构4.4.2 分段式存储管理的基本原理4.4.3 段的共享和保护4.4.4 分段和分页的比较
20、,61,4.4.1 程序的分段结构,分段存储管理引入的主要原因满足用户(程序员)编程和使用上的要求。模块化程序设计的分段结构(下页图)分页存储管理-一维地址结构分段存储管理-二维地址结构,62,模块化程序设计的分段结构,63,4.4.2 分段式存储管理的基本原理(1),两维逻辑地址段号:段内地址段表段表指出主存中各分段的段号、段起始地址和段长度,起到基址/限长寄存器的作用。段式存储管理的地址转换和存储保护,64,分段式存储管理的基本原理(2),65,段表:将二维的逻辑地址映射为一维物理地址段基地址:包含该段在内存中的开始物理地址段界限:指定该段的长度逻辑地址:段号s段内偏移d逻辑地址到物理地址
21、的转换段号与段表长度进行比较,若段号超过了段表长度,则越界(非法地址),否则转2)根据段表始址和段号计算出该段对应段表项的位置,从中读出该段在内存的起始地址,检查段内地址是否超过该段的段长,若超过则越界(非法地址),否则转3)将该段的起始地址与段内位移相加,从而得到要访问的物理地址,逻辑地址到物理地址转换,66,逻辑地址到物理地址转换例,说明:段表如表1所示,将表2所示逻辑地址转换为相应物理地址答案:见表3,表1 表2 表3,90+88,10096,67,说明:段表如表1所示,将表2所示逻辑地址转换为相应物理地址答案:见表3,逻辑地址到物理地址转换练习,表1 表2,表3,210+430,235
22、0+10,50090,1350+400,11295,段号5不存在,68,4.4.3 段的共享,多对基址/限长寄存器 段的共享,是通过不同作业段表中的项指向同一个段基址来实现。几道作业共享的例行程序就可放在一个段中,只要让各道作业的共享部分有相同的基址/限长值。对共享段的信息必须进行保护。,69,4.4.4 分段和分页的比较(1),分段是信息的逻辑单位,由源程序的逻辑结构所决定,用户可见,段长可根据用户需要来规定,段起始地址可从任何主存地址开始。分段方式中,源程序(段号,段内位移)经连结装配后地址仍保持二维结构。,70,分段和分页的比较(2),分页是信息的物理单位,与源程序的逻辑结构无关,用户不
23、可见,页长由系统确定,页面只能以页大小的整倍数地址开始。分页方式中,源程序(页号,页内位移)经连结装配后地址变成了一维结构。,71,4.5 虚拟存储管理,4.5.1 虚拟存储管理的概念4.5.2 请求分页虚拟存储管理4.5.3 请求分段虚拟存储管理4.5.4 请求段页式虚拟存储管理,72,4.5.1 虚拟存储管理的概念,虚拟内存(virtual memory):允许进程的执行不必完全在内存中,程序可以比物理内存大。在许多情况下不需要将整个程序放到内存中:处理异常错误条件的代码(几乎不执行)数组、链表和表通常分配了比实际所需更多的内存程序的某些选项或特点可能很少使用能够执行只有部分在内存中的程序
24、的好处程序不再受现有的物理内存空间限制更多程序可同时执行,CPU利用率相应增加用户程序会运行的更快,73,虚拟存储器,虚拟存储器的定义:在具有层次结构存储器的计算机系统中,采用自动实现部分装入和部分对换功能,为用户提供一个比物理主存容量大得多的,可寻址的一种“主存储器”。,74,虚拟存储器的概念图,75,程序的局部性原理,指程序在执行过程中的一个较短时间内,所执行的指令地址或操作数地址分别局限于一定的存储区域中。又可细分时间局部性和空间局部性。时间局部性:最近访问过的程序代码和数据很快又被访问。空间局部性:某存储单元被使用之后,其相邻的存储单元也很快被使用。,76,实现虚拟存储器须解决的问题,
25、主存辅存统一管理问题 逻辑地址到物理地址的转换问题 部分装入和部分对换问题,77,虚拟存储管理实现技术,请求分页虚拟存储管理 请求分段虚拟存储管理 请求段页式虚拟存储管理,78,4.5.2 请求分页虚拟存储系统,1.请求分页虚拟存储系统的硬件支撑(1)主存管理单元MMU完成逻辑地址到物理地址的转换功能,它接受虚拟地址作为输入,物理地址作为输出,直接送到总线上,对主存单元进行寻址。,79,分页式虚拟存储系统的硬件支撑(2),80,MMU主要功能,(1)管理硬件页表基址寄存器。(2)分解逻辑地址。(3)管理快表TLB。(4)访问页表。(5)发出缺页中断或越界中断,并将控制权交给内核存储管理处理。(
26、6)设置和检查页表中各个特征位。,81,2.请求分页虚拟存储系统的基本原理,分页式虚存不把作业信息(程序和数据)全部装入主存,仅装入立即使用的页面,在执行过程中访问到不在主存的页面时,产生缺页中断,再从磁盘动态地装入 。 怎样才能发现页面不在主存中呢?怎样处理这种情况呢?采用的办法是:扩充页表的内容,增加驻留标志位和页面辅存的地址等信息。,82,页式虚拟存储管理页表扩展,其它标志:访问权限位 修改位(Modified)引用位(Renferenced),83,请求分页虚存地址转换过程(1),84,请求分页虚存地址转换过程(2),85,请求页式虚拟存储系统优缺点,优点:作业的程序和数据可按页分散存
27、放在主存中,减少移动开销,有效解决了碎片问题;既有利于改进主存利用率,又有利于多道程序运行。缺点:要有硬件支持,要进行缺页中断处理,机器成本增加,系统开销加大。,86,3.页面装入策略和页面清除策略,页面装入主存,有两种策略:请页式调度:仅调入所需页面预调式调度:使用前预先调入若干页何时把一个修改过的页面写回辅存储器,有两种策略:请页式清除:仅当一页被选中进行替换且被修改过,才写回磁盘。预清除:成批进行,所有 被更改过的页面,在需要替换前把它们都写回磁盘。,87,4.页面分配策略,系统为进程分配主存,需考虑因素:分给进程的空间越小,同一时间处于主存的进程就越多,至少有一个进程处于就绪态的可能性
28、就越大如果进程只有小部分在主存里,即使局部性很好,缺页中断率还会相当因程序的局部性原理,分给进程的主存超过一定限度后,再增加主存空间,不会明显降低进程的缺页中断率。,88,页面分配策略:固定分配,进程保持页框数固定不变,称固定分配;进程创建时,根据进程类型和程序员的要求决定页框数,只要有一个缺页中断产生,进程就会有一页被替换。,89,页面分配策略:可变分配,进程分得的页框数可变, 称可变分配;进程执行的某阶段缺页率较高,说明目前局部性较差,系统可多分些页框以降低缺页率,反之说明进程目前的局部性较好,可减少分给进程的页框数,90,页面替换策略:局部替换和全局替换,如果页面替换算法的作用范围是整个
29、系统,称全局页面替换算法,它可以在运行进程间动态地分配页框。如果页面替换算法的作用范围局限于本进程,称为局部页面替换算法,它实际上需要为每个进程分配固定的页框。,91,固定分配和局部替换策略配合使用(1),进程分得的页框数不变,发生缺页中断,只能从进程的页面中选页替换,保证进程的页框总数不变。策略难点:应给每个进程分配多少页框?给少了,缺页中断率高;给多了,使主存中能同时执行的进程数减少,进而造成处理器和其它设备空闲。,92,固定分配和局部替换策略配合使用(2),采用固定分配算法,系统把页框分配给进程,采用:平均分配按比例分配优先权分配,93,可变分配和全局替换策略配合使用,先每个进程分配一定
30、数目页框,os保留若干空闲页框,进程发生缺页中断时,从系统空闲页框中选一个给进程,这样产生缺页中断进程的主存空间会逐渐增大,有助于减少系统的缺页中断次数。系统拥有的空闲页框耗尽时 ,会从主存中选择一页淘汰,该页可以是主存中任一进程的页面,这样又会使那个进程的页框数减少,缺页中断率上升。,94,可变分配和局部替换配合使用,其实现要点如下:(1)新进程装入主存时,根据应用类型、程序要求,分配给一定数目页框,可用请页式或预调式完成这个分配。(2)产生缺页中断时,从该进程驻留集中选一个页面替换。(3)不时重新评价进程的分配,增加或减少分配给进程的页框以改善系统性能。,95,5.缺页中断率,页面替换当主
31、存空间已满又必须装入新页时,选择主存中某页淘汰。页面淘汰算法选择哪页被淘汰的算法。“抖动”(Thrashing)现象刚被淘汰的页面立即又要调用,调入不久又被淘汰,淘汰不久再被调入如此反复,整个系统频繁调页,使得几乎无时间进行计算任务。,96,影响缺页中断率的因素(1),假定作业p共计n页,系统分配给它的主存块只有m块(mn)。如果作业p在运行中成功的访问次数为S, 不成功的访问次数为F,则总的访问次数为:A = S + F 又定义:f = F / A 称f为缺页中断率。,97,影响缺页中断率的因素(2),影响缺页中断率f的因素有:(1)主存页框数。(2)页面大小。(3)页面替换算法。(4)程序
32、特性。,98,6.全局页面替换策略,1) 最佳页面替换算法OPT 2) 先进先出页面替换算法FIFO 3) 最近最少用页面替换算法LRU 4) 第二次机会页面替换算法SCR 5) 时钟页面替换算法Clock注:所有算法例子中采用请页时调度,即最初假设主存中没有页面。,99,1)最佳替换算法,调入一页而必须淘汰一个旧页时,所淘汰的页应该是以后不再访问的页或距现在最长时间后再访问的页。OPT算法(Optimal) ,可用来作为衡量各种具体算法的标准。,100,OPT例,(可用帧数量3)引用串如下:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,缺页率 p=9/20=
33、45%,101,2)先进先出页面替换算法,基于程序总是按线性顺序来访问物理空间这一假设。算法总是淘汰最先调入主存的那一页,或者说在主存中驻留时间最长的那一页(常驻的除外)。实现技术 (1)设置具有m个元素的页号表,控制换页 (2)引入指针链成队列,102,FIFO例,容易理解和实现,性能并不总是很好例(可用帧数量3)引用串如下:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,缺页率 p=15/20=75%,103,Belady异常:页错误率随着所分配的帧数增加而增加的现象,例:,可用帧数3,9次缺页,可用帧数4, 10次缺页,104,3)最近最少用页面替换算法,
34、算法淘汰的页面是在最近一段时间里较久未被访问的那页。根据程序局部性原理,那些刚被使用过的页面,可能马上还要被使用,而在较长时间里未被使用的页面,可能不会马上使用到。,105,LRU例,思想:置换过去最长时间没有使用的页例(可用帧数量3)引用串如下:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,缺页率 p=12/20=60%,106,LRU算法实现:页面淘汰队列,队列中存放当前在主存中的页号,每当访问一页时就调整一次,使队列尾总指向最近访问的页,队列头就是最近最少用的页。发生缺页中断时总淘汰队列头所指示的页;执行一次页面访问后,需要从队列中把该页调整到队列尾。,
35、107,LRU算法实现:标志位法,每页设置一个引用标志位R,访问某页时,由硬件将页标志位R置1,隔一定时间t将所有页的标志R均清0。发生缺页中断时,从标志位R为0的页中挑选一页淘汰。挑选到要淘汰的页后,也将所有页的标志位R清0。,108,LRU算法实现:多位计数器法,每个页面设置一个多位计数器,又叫最不常用页面替换算法LFU。每当访问一页时,就使它对应的计数器加。当发生缺页中断时,可选择计数值最小的对应页面淘汰,并将所有计数器全部清。,109,LRU算法实现:多位计时器法,为每个页面设置一个多位计时器,每当页面被访问时,系统的绝对时间记入计时器。比较各页面的计时器的值,选最小值的未使用的页面淘
36、汰,因为,它是最“老”的未使用的页面。,110,4)第二次机会页面替换算法,改进FIFO算法,把FIFO与页表中的”引用位”结合起来使用;检查FIFO中的队首页面(最早进入主存的页面),如果它的”引用位”是0,这个页面既老又没有用,选择该页面淘汰; 如果”引用位”是1,说明它进入主存较早,但最近仍在使用。把它的”引用位”清0,并把这个页面移到队尾,把它看作是一个新调入的页。算法含义:最先进入主存的页面,如果最近还在被使用的话,仍然有机会作为像一个新调入页面一样留在主存中。,111,5)时钟页面替换算法,算法实现要点:一个页面首次装入主存,其“引用位”置0 。主存中的任何页面被访问时, “引用位
37、”置1。淘汰页面时,从指针当前指向的页面开始扫描循环队列,把迁到的“引用位”是1的页面的“引用位”清0,跳过这个页面; 把所迁到的“引用位”是0的页面淘汰掉,指针推进一步。扫描循环队列时,如果迁到的所有页面的“引用位”为1,指针就会绕整个循环队列一圈,把碰到的所有页面的“引用位”清0;指针停在起始位置,并淘汰掉这一页,然后,指针推进一步。,112,时钟页面替换改进算法(1),把”引用位”和”修改位”结合起来使用,共组合成四种情况:(1)最近没有被引用,没有被修改(r=0,m=0)(2)最近被引用,没有被修改(r=1,m=0)(3)最近没有被引用,但被修改(r=0,m=1)(4)最近被引用过,也
38、被修改过(r=1,m=1),113,时钟页面替换改进算法(2),步1:选择最佳淘汰页面,从指针当前位置开始,扫描循环队列。扫描过程中不改变”引用位”,把迂到的第一个r=0,m=0的页面作为淘汰页面。步2:如果步1失败,再次从原位置开始,查找r=0且m=1的页面,把把迂到的第一个这样的页面作为淘汰页面,而在扫描过程中把指针所扫过的页面的”引用位”r置0。步3:如果步2失败,指针再次回到了起始位置,由于此时所有页面的”引用位”r均己为0,再转向步1操作,必要时再做步2操作,这次一定可以挑出一个可淘汰的页面。,114,页置换算法练习,已知页面走向为1、2、1、3、1、2、4、2、1、3、4,且开始执
39、行时内存中没有页面。若只给该作业分配2个物理块。当采用FIFO、OPT、LRU页置换算法时缺页率为多少?假定现有一种置换算法,该算法淘汰页面的策略为当需要淘汰页面时,就把刚使用过的页面作为淘汰对象,试问就相同的页面走向,其缺页率又为多少?假如分配3个物理块呢?,115,1 2 1 3 1 2 4 2 1 3 4,FIFO 9/11=81.8%OPT 7/11=63.6%LRU 8/11=72.7%NEW 8/11=72.7%,2个物理块,116,1 2 1 3 1 2 4 2 1 3 4,3个物理块,FIFO 5/11=45.5%OPT 5/11=45.5%LRU 6/11=54.5%NEW
40、6/11=54.5%,117,7.局部页面替换算法,1) 局部最佳页面替换算法 2) 工作集模型和工作集置换算法 3) 模拟工作集替换算法4) 缺页频率替换算法,118,1) 局部最佳页面替换算法,实现思想: 进程在时刻t访问某页面,如果该页面不在主存中,导致一次缺页,把该页面装入一个空闲页框。不论发生缺页与否,算法在每一步要考虑引用串,如果该页面在时间间隔(t,t+)内未被再次引用,那么就移出页面;否则,该页被保留在进程的驻留集中,直到再次被引用。,119,局部最佳页面替换算法例,120,2)工作集模型和工作集置换算法,进程工作集指“在某一段时间间隔内进程运行所需访问的页面集合”。实现思想:
41、 工作集模型用来对局部最佳页面替换算法进行模拟实现,不向前查看页面引用串,而是基于程序局部性原理向后看,在任何给定时刻,一个进程不久的将来所需主存页框数,可通过考查其过去最近的时间内的主存需求做出估计。,121,工作集替换示例,122,3) 模拟工作集替换算法,老化(Aging)算法 例如,时间间隔T定为1000次存储器引用,页面P在时刻t+0时寄存器为“1000”,在时刻t+1000时寄存器为“0100”,在时刻t+2000时寄存器为“0010”,在时刻t+3000时寄存器为“0001”,在时刻t+4000时寄存器为“0000”,此时,页面p被移出工作集,时间戳算法 若t_offt_max,
42、把页面从工作集中移出,123,4)缺页频率替换算法,缺页频率替换算法根据连续的缺页之间的时间间隔来对缺页频率进行测量,每次缺页时,利用测量时间调整进程工作集尺寸。规则:如果本次缺页与前次缺页之间的时间超过临界值,那么,所有在这个时间间隔内没有引用的页面都被移出工作集。,124,PFF替换示例,125,8.请求分页虚拟存储管理的几个设计问题,1)页面大小考虑页表大小大页内存利用小页(减少碎片)页读写所需时间大页精度小页降低页错误数量大页分析:没有最佳答案,趋向于大页,126,2)页面交换区,替换算法要挑选页面淘汰出主存,但被淘汰出去的页面可能很快使用,又要被重新装入主存。操作系统必须保存被淘汰的
43、页面,例如UNIX/Linux使用交换区临时保存页面,系统初始化时,保留一定盘空间作交换区。,127,3)写时复制(1),写时复制(copy-on-write)是存储管理节省物理主存(页框)的一种页面级优化技术,已被UNIX和Windows等采用,能减少主存页面内容的复制操作,减少相同内容页面在主存的副本数目。,128,写时复制(2),原始数据原始数据原始数据,进程地址空间,物理地址空间,物理地址空间,页面2副本,页面1,页面2,页面3,页面1,页面2,页面3,129,4.5.3 请求分段虚拟存储系统,分段式虚拟存储系统把作业的所有分段的副本都存放在辅助存储器中,当作业被调度投入运行时,首先把
44、当前需要的一段或几段装入主存,在执行过程中访问到不在主存的段时再把它们装入。,130,段式虚拟存储管理的段表扩展,段表中增加供管理使用的一些表项:特征位 00(不在主存) 01(在主存) 11(共享段);存取权限 00(可执行) 01(可读) 11(可写),131,段表中增加供管理使用的一些表项:扩充位 0(固定长) 1(可扩充);标志位 00(未修改) 01(已修改) 11(不可移动);,132,S段在主存,否,是,BS段长度,发越界中断,是,否,形成绝对地址,继续执行指令,操作系统,硬件,符合存取权限,发保护中断,是,否,发缺段中断,请求分段虚存管理的地址转换,133,请求分段虚拟存储管理
45、实现分段的共享和保护,段共享表 段的共享段的保护,134,4.5.4 请求段页式虚拟存储管理,段式存储是基于用户程序结构的存储管理技术,有利于模块化程序设计,便于段的扩充、动态链接、共享和保护,但会生成段内碎片浪费存储空间页式存储是基于系统存储器结构的存储管理技术, 存储利用率高,便于系统管理,但不易实现存储共享、保护和动态扩充把两者结合起来就是段页式存储管理,135,虚地址以程序的逻辑结构划分成段(段页式存储管理的段式特征)实地址划分成位置固定、大小相等的页框(段页式存储管理的页式特征)将每一段的线性地址空间划分成与页框大小相等的页面,于是形成了段页式存储管理的特征。逻辑地址形式为:,请求段
46、页式存储管理的基本原理,136,请求段页式存储管理的数据结构,段页式存储管理的数据结构包括:作业表:登记进入系统中的所有作业及该作业段表的起始地址,段表:至少包含这个段是否在主存,以及该段页表的起始地址,页表:包含该页是否在主存(中断位)、对应主存块号。,137,请求段页式存储管理的动态地址转换(1),从逻辑地址出发,先以段号s和页号p作索引去查快表,如果找到,那么立即获得页p的页框号p,并与位移d一起拼装得到访问主存的实地址,从而完成了地址转换。若查快表失败,就要通过段表和页表作地址转换了,用段号s作索引,找到相应表目,由此得到s段的页表起址s,再以p作索引得到s段p页对应的表目,得到页框号
47、p;这时一方面把s段p页和页框号p置换进快表,另一方面用p和d生成主存实地址,从而完成地址转换。,138,请求段页式存储管理的动态地址转换(2),如查段表时,发现s段不在主存,产生“缺段中断”,引起系统查找s段在辅存的位置,将该段页表调入主存;如查页表时,发现s段的p页不在主存,产生“缺页中断”,引起系统查找s段p页在辅存的位置,并将该页调入主存,当主存已无空闲页框时,就会导致淘汰页面。,139,请求段页式存储管理的动态地址转换(3),140,4.6 Intel x86分段和分页存储结构,Intel x86系列CPU提供三种工作模式:实地址模式、保护模式和虚拟8086模式Intel x86上虚拟存储管理核心表 :LDT和GDT 段寄存器和虚拟地址,(b) 段寄器高13位为段选择符,(a)虚拟地址,段选择符,