1、5.5.2 简单段式(simple segmentation),返回,页式管理是把内存视为一维线性空间;而段式管理是把内存视为二维空间,与进程逻辑相一致。,简单段式管理的基本原理,1、分段 将程序的地址空间划分为若干个段(segment),程序加载时,分配其所需的所有段(内存分区),这些段不必连续;物理内存的管理采用动态分区。需要CPU的硬件支持。,程序通过分段(segmentation)划分为多个模块,如代码段、数据段、共享段。 方便编程,可以分别编写和编译 LOAD 1, A | STORE 1, B | 可以针对不同类型的段采取不同的保护 可以按段为单位来进行共享,包括通过动态链接进行代
2、码共享 动态链接 动态增长,便于改变进程占用空间的大小 缺点: 进程全部装入内存。,2. 简单段式管理的数据结构,进程段表:描述组成进程地址空间的各段,可以是指向系统段表中表项的索引。每段有段基址(base address)和段长度 系统段表:系统内所有占用段 空闲段表:内存中所有空闲段,可以结合到系统段表中,3. 简单段式管理的地址变换,段式地址变换举例,5.5.3 页式管理和段式管理的比较,分页是出于系统管理的需要,分段是出于用户应用的需要。 一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。 页大小是系统固定的,而段大小则通常不固定。 逻辑地址表示: 分页是一维的,
3、各个模块在链接时必须组织成同一个地址空间; 分段是二维的,各个模块在链接时可以每个段组织成一个地址空间。 通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。,返回,页式管理与段式管理的比较,第六章 虚拟存储器(VIRTUAL MEMORY),6. 1 局部性原理 6. 2 虚拟存储器的原理 6.3 虚拟存储技术的种类 6.4 存储保护和共享 6. 5 虚拟存储的调入策略、分配策略和清除策略 6. 6 置换算法 6. 7 虚拟存储中的负载控制,返回,6.1 局部性原理,局部性原理(principle of locality):指程序在执行过程中的一个较短时期,所执行的指令地址和指令
4、的操作数地址,分别局限于一定区域。还可以表现为: 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内; 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的数据都集中在一个较小区域内。,返回,局部性原理的具体体现 程序在执行时,大部分是顺序执行的指令,少部分是转移和过程调用指令。 过程调用的嵌套深度一般不超过5,因此执行的范围不超过这组嵌套的过程。 程序中存在相当多的循环结构,它们由少量指令组成,而被多次执行。 程序中存在相当多对一定数据结构的操作,如数组操作,往往局限在较小范围内。,6.2 虚拟存储器的原理,在程序装入时,不必将其全部读入到内
5、存,而只需将当前需要执行的部分页或段读入到内存,就可让程序开始执行。 在程序执行过程中,如果需执行的指令或访问的数据尚未在内存(称为缺页或缺段),则由处理器通知操作系统将相应的页或段调入到内存,然后继续执行程序。 另一方面,操作系统将内存中暂时不使用的页或段调出保存在外存上,从而腾出空间存放将要装入的程序以及将要调入的页或段。只需程序的一部分在内存就可执行。,返回,1. 虚拟存储的基本原理,处理机中的存储管理单元,2. 引入虚拟存储技术的好处,大程序:可在较小的可用内存中执行较大的用户程序; 大的用户空间:提供给用户可用的虚拟内存空间通常大于物理内存(real memory) 并发:可在内存中
6、容纳更多程序并发执行; 易于开发:与覆盖技术比较,不必影响编程时的程序结构,3. 虚拟存储技术的特征,离散性:物理内存分配的不连续 多次性 部分交换:与交换技术相比较,虚拟存储的调入和调出是对部分虚拟地址空间进行的; 虚拟性(大空间):通过物理内存和快速外存相结合,提供大范围的虚拟地址空间 总容量不超过物理内存和外存交换区容量之和,6.3 虚拟存储技术的种类,6. 3.1 虚拟页式 6. 3.2 虚拟段式 6. 3.3 段页式,返回,6.3.1 虚拟页式(virtual paging),需要在进程页表中添加若干项 标志位:存在位(present bit,内存页和外存页),修改位(modifie
7、d bit) 访问统计:在近期内被访问的次数,或最近一次访问到现在的时间间隔 外存地址,返回,在简单页式存储管理的基础上,增加请求调页和页面置换功能。,1. 对进程页表的修改,虚拟页式的进程页表,2. 缺页中断 由处理器的地址变换机构产生缺页中断,然后调用操作系统提供的中断处理例程。 3. 缺页率(page fault rate) 缺页率表示“缺页次数 / 内存访问次数”(比率)或“缺页的平均时间间隔的倒数”,6.3.2 虚拟段式(virtual segmentation),需要在进程页表中添加若干项: 标志位:存在位(present bit),修改位(modified bit/dirty b
8、it),增长位(该段是否增长过,在虚拟页式中没有该位) 访问统计:如使用位(use bit) 存取权限:如读R,写W,执行X 外存地址 地址变换和缺段中断:指令和操作数必定不会跨越在段边界上,返回,在简单段式存储管理的基础上,增加请求调段和段置换功能。,虚拟段式管理的段表,6.3.3 段页式(combined paging and segmentation),存储管理的分配单位是:段,页 逻辑地址的组成:段号,页号,页内偏移地址。 地址变换:先查段表,再查该段的页表。缺段中断和缺页中断。,返回,是虚拟页式和虚拟段式存储管理的结合。,虚拟段页式管理中的段表和页表,段页式地址变换,6.4 存储保护
9、和共享,存储保护的目的: 保护系统程序区不被用户侵犯(有意或无意的) 不允许用户程序读写不属于自己地址空间的数据(系统区地址空间,其他用户程序的地址空间),返回,1. 存储保护,由于存储保护检查是针对每个存储访问操作进行的,必须由相应的处理器硬件机构支持。,存储保护类型 界限保护(上界寄存器/下界寄存器或基址寄存器/限长寄存器):所有访问地址必须在上下界之间;每个进程都有自己独立的进程空间,如果一个进程在运行时所产生的地址在其地址空间之外,则发生地址越界。当程序要访问某个内存单元时,由硬件检查是否允许,如果允许则执行,否则产生地址越界中断,由操作系统进行相应处理。 访问方式保护(保护键):通过
10、保护键匹配来判断存储访问方式是否合法。对于允许多个进程共享的存储区域,每个进程都有自己的访问权限。如果一个进程对共享区域的访问违反了权限规定,则发生操作越权(即读写保护)。对每个内存区域指定一个键值和若干禁止的访问方式,进程中也指定键值,如果访问时键值不匹配而且是被禁止的访问方式,则出错;,2. 存储分配的安全性考虑,把一个页面分配给进程之前,先要清除页面中的数据(如全部填充为0),以免该进程读取前一进程遗留在页面中的数据;,3. 存储共享,共享段:被连接或被释放一次则对引用计数加1或减1,计数减至0则可将该共享段删除;目的在于进程间的信息交流。 共享页面:在物理页面表中有引用计数。只能共享不
11、被修改的页面。这对用户应用是透明的,完全由操作系统控制,目的在于减少系统内的物理页面总数。,通过引用计数(reference count)来描述存储区的共享,引用计数表示共享它的进程的数目;具体的存储共享方式有两种:,6.5 虚拟存储的调入策略、分配策略和清除策略,请求调页(demand paging):只调入发生缺页时所需的页面。 优点:容易实现。 缺点:对外存I/O次数多,开销较大 预调页(prepaging):在发生缺页需要调入某页时,一次调入该页以及相邻的几个页。 优点:提高调页的I/O效率。 缺点:基于预测,若调入的页在以后很少被访问,则效率低。常用于程序装入时的调页。,返回,1.
12、调入策略 (fetch policy),调入策略确定在外存中的页面调入时机。在虚拟页式管理中有两种常用策略。,2. 分配策略 (assignment policy),在虚拟段式管理中,如何对物理内存进行分配,可采用最佳适应、最先适应等。 在虚拟页式和段页式管理中,地址变换最后通过页表进行,因此不必考虑分配策略。,3. 清除策略(cleaning policy),请求清除(demand cleaning):该页被置换时才调出,把清除推迟到最后一刻。 缺点:调入所缺页面之前还要调出已修改页面,缺页进程的等待时间较长, 预清除(precleaning):该页被置换之前就调出,因而可以成批调出多个页面
13、。 缺点:可能形成不必要的开销。已修改页面被调出之后仍停留在内存,如果这些页面被置换之前就被再次修改,则这些页面可以返还到进程的常驻集(常驻集指虚拟页式管理中给进程分配的物理页面数目。),而之前所做的调出操作就成为不必要的开销。这种策略发展成为页面缓冲算法(page buffering)。,在虚拟页式管理中,何时将已修改页面调出到外存上。有两种常用清除策略:,5.6.6 置换算法,功能:需要调入页面时,选择内存中哪个物理页面被置换。称为replacement policy。 目标:把未来不再使用的或短期内较少使用的页面调出,通常只能在局部性原理指导下依据过去的统计数据进行预测; 页面锁定(fr
14、ame locking):用于描述必须常驻内存的操作系统的关键部分或时间关键(time-critical)的应用进程。实现方法为在页表中加上锁定标志位(lock bit)。,返回,最佳算法(OPT, optimal) 最近最久未使用算法(LRU, Least Recently Used) 先进先出算法(FIFO) 轮转算法(clock) 最不常用算法(LFU, Least Frequently Used) 页面缓冲算法(page buffering),1. 最佳算法(OPT, optimal),选择“未来不再使用的”或“在离当前最远位置上出现的”页面被置换。这是一种理想情况,是实际执行中无法预
15、知的,因而不能实现。可用作性能评价的依据。,2. 最近最久未使用算法 (LRU, Least Recently Used),一个特殊的栈:把被访问的页面移到栈顶,于是栈底的是最久未使用页面。 每个页面设立移位寄存器:被访问时左边最高位置1,定期右移并且最高位补0,于是寄存器数值最小的是最久未使用页面。,选择内存中最久未使用的页面被置换。这是局部性原理的合理近似,性能接近最佳算法。但由于需要记录页面使用时间的先后关系,硬件开销太大。硬件机构如:,3. 先进先出算法(FIFO),选择建立最早的页面被置换。可以通过链表来表示各页的建立时间先后。性能较差。较早调入的页往往是经常被访问的页,这些页在FI
16、FO算法下被反复调入和调出。并且有Belady现象。,Belady现象:采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多,缺页率反而提高的异常现象。 Belady现象的描述:一个进程P要访问M个页,OS分配N个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N)。当N增大时,PE(S, N)时而增大,时而减小。 Belady现象的原因:FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的。,Belady现象的例子,进程P有5页程序访问页的顺序为:1, 2, 3, 4, 1, 2, 5, 1, 2, 3,
17、4, 5;如果在内存中分配3个页面,则缺页情况如下:12次访问中有缺页9次;,缺页:Y Y Y Y Y Y Y Y Y 缺页率:9/12=75%,如果在内存中分配4个页面,则缺页情况如下:12次访问中有缺页10次;,缺页: Y Y Y Y Y Y Y Y Y Y 缺页率: 10/12=83.3%,4. 轮转算法(clock),每页有一个使用标志位(use bit),若该页被访问则置user bit=1。 置换时采用一个指针,从当前指针位置开始按地址先后检查各页,寻找use bit=0的页面作为被置换页。 指针经过的user bit=1的页都修改user bit=0,最后指针停留在被置换页的下一
18、个页。,也称最近未使用算法(NRU, Not Recently Used),它是LRU(最近最久未使用算法)和FIFO的折衷。,5. 最不常用算法(LFU, Least Frequently Used),选择到当前时间为止被访问次数最少的页面被置换; 每页设置访问计数器,每当页面被访问时,该页面的访问计数器加1; 发生缺页中断时,淘汰计数值最小的页面,并将所有计数清零;,6. 页面缓冲算法(page buffering),被置换页面的选择和处理:用FIFO算法选择被置换页,把被置换的页面放入两个链表之一。 如果页面未被修改,就将其归入到空闲页面链表的末尾 否则将其归入到已修改页面链表。,它是对
19、FIFO算法的发展,通过被置换页面的缓冲,有机会找回刚被置换的页面;,需要调入新的物理页面时,将新页面内容读入到空闲页面链表的第一项所指的页面,然后将第一项删除。 空闲页面和已修改页面,仍停留在内存中一段时间,如果这些页面被再次访问,只需较小开销,而被访问的页面可以返还作为进程的内存页。 当已修改页面达到一定数目后,再将它们一起调出到外存,然后将它们归入空闲页面链表,这样能大大减少I/O操作的次数。,7. 置换算法举例,某程序在内存中分配三个页面,初始为空,页面走向为4,3,2,1,4,3,5,4,3,2,1,5。,4 3 2 1 4 3 5 4 3 2 1 5 4 4 4 4 4 4 4 4
20、 4 4 4 43 3 3 3 3 3 3 3 2 1 1 2 1 1 1 5 5 5 5 5 5 Y Y Y Y Y Y Y 共缺页中断7次,4 3 2 1 4 3 5 4 3 2 1 5 4 4 4 1 1 1 5 5 5 2 2 23 3 3 4 4 4 4 4 4 1 1 2 2 2 3 3 3 3 3 3 5 Y Y Y Y Y Y Y Y Y Y 共缺页中断10次,LRU:,4 3 2 1 4 3 5 4 3 2 1 5 4 4 4 1 1 1 5 5 5 5 5 53 3 3 4 4 4 4 4 2 2 2 2 2 2 3 3 3 3 3 1 1 Y Y Y Y Y Y Y Y
21、Y 共缺页中断9次,FIFO:,6.7 常驻集和工作集策略,常驻集与缺页率的关系: 每个进程的常驻集越小,则同时驻留内存的进程就越多,可以提高并行度和处理器利用率;另一方面,进程的缺页率上升,使调页的开销增大。 进程的常驻集达到某个数目之后,再给它分配更多页面,缺页率不再明显下降。该数目是“缺页率常驻集大小”曲线上的拐点(curve),或内存要求的临界值,也称工作集。,返回,这里要讨论的问题是分给每个进程多少物理页面,以及如何动态调整各进程的物理页面数。,1. 常驻集(resident set),常驻集指虚拟页式管理中给进程分配的物理页面数目。,2. 抖动问题(thrashing),随着驻留内存的进程数目增加,或者说进程并发水平(multiprogramming level)的上升,处理器利用率先是上升,然后下降。这里处理器利用率下降的原因通常称为虚拟存储器发生“抖动”,也就是:每个进程的常驻集不断减小,缺页率不断上升,频繁调页使得调页开销增大。OS要选择一个适当的进程数目,以在并发水平和缺页率之间达到一个平衡。,