操作系统原理第09章
一条指令在执行期间,可能产生多次缺页中断。 如:swap A, B而指令本身和两个操作数A, B都跨越相
邻外存页的分界处,则产生5次缺页中断(由于已执行 到该指令,所以不可能出现指令本身的两次缺页)。必 须由CPU硬件确保对多个现场的保存。
缺页中断机构
地址变换机构
请求分页系统中的地址变换机构,是在分
例
假定系统为某进程分配了三个页框,并考虑有以下的
页面号引用串:7,0,l,2,0,3,0,4,2,3,0, 3,2,l,2,0,l,7,0,1。
Optimal算法的缺页次数9次。
例
假定系统为某进程分配了4个页框,并考虑有以下的页
面号引用串:1,2,3,4,1,2,5,1,2,3,4,5 。
Optimal算法的缺页次数6次。
页系统的地址变换机构的基础上,再为实 现虚拟存储器而增加了某些功能所形成的 ,如产生和处理缺页中断,以及从内存中 换出一页的功能等等,下图给出了请求分 页系统的地 址变换过程。
地址变换机构
请求分页存储管理的地址变换流程图
9.2.2 请求页面调度的性能
已知 缺页率0 p 1.0 如果p = 0 ,没有缺页 如果p = 1 , 每次访问都缺页 有效访问时间 = (1 – p) × ma + p×页错误时间 页错误时间= (产生页错误的时间+换出时间+ 换入时间+重启时间)
局部性原理的具体体现
程序在执行时,大部分是顺序执行的指令,
少部分是转移和过程调用指令。 过程调用的嵌套深度一般不超过5,因此执行 的范围不超过这组嵌套的过程。 程序中存在相当多的循环结构,它们由少量 指令组成,而被多次执行。 程序中存在相当多对一定数据结构的操作, 如数组操作,往往局限在较小范围内。
发生缺页中断时,操作系统检查引用位和修改位:使用引用位和 修改位:引用过或修改过置成1 第0类:无访问,无修改 --—最佳淘汰页 第1类:无访问,有修改 —--不太好,要写盘 第2类:有访问,无修改 —--不需写盘,但可能很快要再用 第3类:有访问,有修改 —--需写盘,也很快要再用 淘汰次序:第0类,第1类,第2类,第3类 操作系统随机从编号最小的非空类中选择一页淘汰。
请求分页的页表机制 它是在纯分页的页表机制上形成的,由于只将应用程序的一部分调入
内存,还有一部分仍在磁盘上,故需在页表中再增加若干项,供程序(数 据)在换进、换出时参考。在请求分页系统中的每个页表项如图所示。
其中各字段说明如下: 状态位P(存在位):用于指示该页是否已调入内存,供程序访问时参考 。 访问字段A:用于记录本页在一段时间内被访问的次数,或最近已有多长 时间未被访问,提供给置换算法选择换出页面时参考。 修改位M:表示该页在调入内存后是否被修改过。由于内存中的每一页 都在外存上保留一份副本,因此,若未被修改,在置换该页时就不需将 该页写回到外存上,以减少系统的开销和启动磁盘的次数;若已被修改 ,则必须将该页重写到外存上,以保证外存中所保留的始终是最新副本 。 外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该 页时使用。
置换算法
功能:需要调入页面时,选择内存中哪个物理页 面被置换。称为replacement policy。 (2) 出发点:把未来不再使用的或短期内较少使用的 页面调出,通常只能在局部性原理指导下依据过去的 统计数据进行预测; (3) 页面锁定(frame locking):用于描述必须常驻内 存的操作系统的关键部分或时间关键(time-critical)的 应用进程。实现方法为在页表中加上锁定标志位(lock bit)。
引入虚拟存储技术的好处
可在较小的可用内存中执行较大的用
户程序; 可在内存中容纳更多程序并发执行; 不必影响编程时的程序结构(与覆盖 技术比较) 提供给用户可用的虚拟内存空间通常 大于物理内存(real memory)
虚拟存储技术的特征
物理内存分配的不连续,虚拟地址空间使用的不连
续(数据段和栈段之间的空闲空间,共享段和动态 链接库占用的空间) 与交换的比较:调入和调出是对部分虚拟地址空间 进行 通过物理内存和快速外存相结合,提供大范围的虚 拟地址空间
缺页中断机构
在请求分页系统中,每当所要访问的页面不在内存时,便
要产生一缺页中断,请求OS将所缺页调入内存。与一般中 断的主要区别在于:
缺页中断在指令执行期间产生和处理中断信号,而一般中
断在一条指令执行完后检查和处理中断信号。 缺页中断返回到该指令的开始重新执行该指令,而一般中 断返回到该指令的下一条指令执行。
NRU算法
下图算法就是循环地通过相应的页表, 查寻页面访
问位为“0”的页面。在查找过 程中,那些被访问的 页所对应的访问位被重 新置为“0”。由此可见,实 际上这种近似 LRU算法,已经退化成一种“最近不 用”的 算法NRU(Not Recently Used)。
二次机会算法
改进型的clock算法(Enhanced SecondChance Algorithm)
第9章: 虚拟内存
9.1 背景 9.2 请求页面调度 9.3 进程创建 9.4 页面置换 9.5 帧分配 9.6 系统颠簸 9.7 举例 9.8 其他考虑
9.1 背景
9.1.1 局部性原理
早在1968年P.Denning就指出过,程序在执行时将呈现出 局部性规律,即在一段时间内,程序的执行仅局限于某个 部分;相应地,它所访问的存储空间也局限于某个区域内 。 局部性原理(principle of locality):指程序在执行过程中的 一个较短时期,所执行的指令地址和指令的操作数地址, 分别局限于一定区域。还可以表现为: 时间局部性,即一条指令的一次执行和下次执行,一个 数据的一次访问和下次访问都集中在一个较短时期内; 空间局部性,即当前指令和邻近的几条指令,当前访问 的数据和邻近的数据都集中在一个较小区域内。
虚存的实现
请求页式 请求段式
9.2 请求页式( Demand Paging)
它是在纯分页系统的基础上,增加了
请求调页功能、页面置换功能所形成 的页式虚拟存储系统,它是目前常用 的一种虚拟存储器的方式。
当一些页不在内存时的页表
硬件支持
请求分页的页表机制 缺页中断机构 地址变换机构
硬件支持
(1) 从理论上讲,应将那些以后不再被访问的页面换出,
或把那些在较长时间内不会再被访问的页面换出。
最佳(Optimal)置换算法
选择“未来不再使用的”或“在离当前最远位置上出
现的”页面被置换。 它是一种理想化的算法,性能最好,但在实际上难 于实现。但是要确定哪一个页面是未来最长时间内 不再被访问的,目前来说是很难估计的,所以该算 法通常用来评价其它算法的依据。 其他算法都是这 一算法的“近似”。
LRU的例
LRU缺页次数12
LRU硬件机构
硬件机构如: 每个页面设立计数器:用于记录每一页最后使 用的时间。 一个特殊的栈:把被访问的页面移到栈顶,于 是栈底的是最久未使用页面。 移位寄存器:被访问时左边最高位置1,定期 右移并且最高位补0,于是寄存器数值最小的 是最久未使用页面。(Additional-ReferenceBits Algorithm 近似的LRU算法)
先进先出(FIFO)置换算法
选择建立最早的页面被置换。可以通过链表来表示各页
的建立时间先后。性能较差。较早调入的页往往是经常 被访问的页,这些页在FIFO算法下被反复调入和调出。 并且有Belady现象。 Belady现象:采用FIFO算法时,如果对一个进程未 分配它所要求的全部页面,有时就会出现分配的页面 数增多,缺页率反而提高的异常现象。 Belady现象的描述:一个进程P要访问M个页,OS分 配N个内存页面给进程P;对一个访问序列S,发生缺 页次数为PE(S,N)。当N增大时,PE(S, N)时而增 大,时而减小。 Belady现象的原因:FIFO算法的置换特征与进程访 问内存的动态特征是矛盾的,即被置换的页面并不是 进程不会访问的。
例
假设: 存取内存的时间= 1 50%所置换的页被修改,因此需要被换出 交换时间 : 换出=5000 换入=10000 有效访问时间 =(1 – p) x 1 + p (15000) ≈1 + 15000P 由上式可以看出,有效访问时间与缺页率成正比。 请求分页方式应保持较低的缺页率; 提高磁盘I/O的速度,对改善请求分页系统的性能至关重
9.1.2 虚拟存储器的原理
虚拟存储的基本原理 在程序装入时,不必将其全部读入到内存,而只需将 当前需要执行的部分页或段读入到内存,就可让程序 开始执行。 在程序执行过程中,如果需执行的指令或访问的数据 尚未在内存(称为缺页或缺段),则由处理器通知操 作系统将相应的页或段调入到内存,然后继续执行程 序。 另一方面,操作系统将内存中暂时不使用的页或段调 出保存在外存上,从而腾出空间存放将要装入的程序 以及将要调入的页或段――具有请求调入和置换功能 ,只需程序的一部分在内存就可执行,对于动态链接 库也可以请求调入
要。为此,应选用高速磁盘和高速磁盘接口
9.3 进程创建 Process Creation
虚存在进程创建过程中带来的好处: 写拷贝- Copy-on-Write 内存映射文件- Memory-Mapped Files
Copy-on-Write
Copy-on-Write (COW) 允许父子进程在内
用堆栈来记录最近使用的页
近似的LRU置换算法(NRU算法)ock算法
该算法根据历史推算,选择在最 近的将来、最久
不会使用的页或段换出内存。 为实现该算法,必须记录下每次 对每页或段的访 问时间,故系统开销较大 当一存储块中的页面访问时,其相应的“页面访问” 位由硬件自动置“1”,而由页 面管理体制软件周 期性地(设周期为T,其值通常为几百毫秒),把 所有的页面访问位重 新置为“0”。这样,在时间 T内,某些被访问的页面,其对应的访问位为“1” 而未访 问的页面,其对应的访问位为“0”。