一次性:作业必须一次性全部装入内存后才能开始运行
驻留性:装入的作业一直驻留在内存中
导致结果:
局部性原理:指程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址分别局限于一定区域
时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内
空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的数据都集中在一个较小区域内
在程序装入时,不用将全部读入到内存,只需要将当前执行的部分页或段读入到内存,就可开始执行程序
执行过程中,如果需执行的指令或访问的数据未在内存(称为缺页或缺段),则由处理器通知OS将相应的页或段调入到内存,然后继续执行程序
另一方面,操作系统将内存中暂时不使用的页或段调出保存在外存上,腾出空间存放将要装入的程序以及将要调入的页或段
具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的存储器系统,其逻辑容量由内存容量和外存容量之和决定,其运行速度接近于内存速度
多次性:一个作业允许分成多次调入内存,是虚拟存储器最重要的特征,是任何其他存储管理方式所不具有的(不连续性)
对换性:暂时不用的代码调出,需要时再调入。对换技术(部分对换)
虚拟性:从逻辑上扩充内存容量,使用户看到的内存容量大于实际内存容量,是虚拟存储器的重要的目标(大空间)
这些扩充内存的技术都是CPU时间和外存空间换取的内存空间,资源转换技术
虚拟性是以多次性和对换性为基础的,多次性和对换性以离散分配为基础
虚拟存储器的实现建立在离散管理的基础之上
请求分页系统
请求分段系统
大程序:可在较小的可用内存中执行较大的用户程序
大的用户空间:提供给用户可用的虚拟内存空间通常大于物理内存
并发:可在内存中容纳更多程序并发执行
易于开发:不会影响编程时的程序结构
基本思想:
请求页表作业:将用户地址空间中的逻辑地址映射为内存空间的物理地址
程序在执行时,首先检查页表,当状态位指示该页不在主存时,则引起一个缺页中断发生,其中断执行过程与一般中断相同
相同点:
在地址映射过程中,在页表中发现所要访问的页不在内存,则产生缺页中断。
操作系统接到此中断信号后,就调出缺页中断处理程序,根据页表中给出的外存地址,准备将该页调入内存
此时应将缺页的进程挂起(调页完成唤醒)
如果内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中相应页表项的状态位及相应的内存块号
若此时内存中没有空闲块,这要淘汰某页(若被淘汰页在内存期间被修改过,则要将其写回外存)
最小物理块:能保证进程正常运行所需的最小物理块数
进程应获得的最小物理块数,与硬件结构无关,取决于指令的格式、功能和寻址方式
固定分配策略和可变分配策略
全局置换策略和局部置换策略
物理块的分配策略
固定分配+局部置换
可变分配+全局置换
可变分配+局部置换
调入策略确定在外存中页面的调入时机。在页式虚拟管理中有两种常用策略
有足够的交换区:进程装入时,将其全部页面复制到交换区,以后总是从交换区调入
缺少足够的对换区:凡是不会被修改的页面,都直接从文件区读入,而被置换时不需调出;会被修改的页面,被置换时调出到交换区。以后从交换区调入,节省交换区空间
UNIX方式:由于与进程有关的文件都放在文件区,故凡是未运行过的页面,都应从文件区调入。而对于曾经运行过但又被换出的页面,由于被放在对换区,因此在下次调入时,应从对换区调入
所要访问的页面不在内存(存在位0),向CPU发出缺页中断
中断处理程序保留CPU环境分析中断原因转入中断处理程序
中断处理程序查找页表得到该页的外存物理块
f=F/A
F:访问页面失败的次数
A:访问页面成功与访问页面失败的次数之和
缺页率受以下几个因素影响:
功能:需要调入页面时,选择内存中哪个物理页面被置换
目标:把未来不再使用的或短期内较少使用的页面调出,通常只能在局部性原理指导下依据过去的统计数据进行预测
不适当的算法可能会导致进程发生抖动
一个好的页面置换算法应该具有较低的页面更换频率
选择“未来永不再使用的”或“在最长时间内不再被访问的”“在离当前最远位置上出现的”页面被置换
是一种理想情况,实际执行中是无法预知的,因而不能实现
“最佳”是指对于任意的内存固定空间m和程序p,缺页中断率最小
它是一个理论上的算法,可用作其他算法性能评估的依据
采用最佳置换算法,只发生了6次页面置换,发生了9次缺页中断,缺页率=9/21
置换原理:选择建立最早的页面被置换(选择在内存中驻留时间最久的页面予以淘汰)。可以通过链表来表示各页的建立时间先后
特点:性能较差。较早调入的页往往是经常被访问的页,这些页在FIFO算法下被反复调入和调出产生异常现象
一共发生了12次页面置换,比最佳置换算法多了1倍,缺页率=15/21=3/4,15次页面中断
FIFO是根据各个页面调入内存的时间来选择被淘汰页面,但页面调入的先后不能反映页面的使用情况。
FIFO页面淘汰算法会产生异常现象(Belady现象)即:当分配给进程的物理块数增加时,缺页次反而增加
Belady现象:采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的块数增多,缺页率反正提高的异常现象
Belady现象的描述:一个进程P要访问M个页,OS分配N个内存页面给进程P;对于一个访问序列S,发生缺页数为PE(S,N)。当N增大时,PE(S,N)时而增大,时而减少
Belady现象的原因:FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的
基本思想:基于程序的局部性原理,在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用,反之,已经很久没有使用的页面很有可能在未来较长一段时间内不会使用,因此,在缺页时:
置换原理:选择最后一次访问时间距离当前时间最长的一页并淘汰,即淘汰没有使用的时间最长(最近最久未使用)的页
特点:
寄存器:为每个在内存中的页面配置一个移位寄存器,表示为:
当进程访问某物理块时,要将相应的寄存器的Rn-1位置为1
定时信号将每隔一定时间将寄存器右移一次,把n位寄存器的数看作一个无符号的整数,最近最久未使用的页面就对应着具有最小数值的寄存器
栈:栈中存放当前内存中的页面号,每当访问一页时就调整一次堆栈,总是使最近访问的那页的页面号保持在栈顶,然后根据当前被访问时间的近远,依次排列,栈底总是最近最久未使用的那页的页面号(被淘汰)
原理:
也称最近未使用算法(NRU),它是LRU和FIFO的折中
选中某页淘汰时,若该页被修改过,需要先写入外存,再调入所需页。若未被修改,则可直接调入
改进的Clock算法淘汰页时,选中最近未使用且未修改的页淘汰
该算法需要使用页表中的访问位A和修改位M
在进行页面置换时,需要同时检查访问位和修改位,以确定该页是四类页面中的哪一种,执行过程可分成以下三步:
该算法与简单Clock算法比较,可减少磁盘的I/O操作次数
为了找到要淘汰的页面,可能需要经过几轮扫描,使该算法本身的开销有所增加
不适当地提高多道程序并发度,不仅不会提高系统吞吐量,反而会出现“抖动”现象,就是刚被换出页很快就要被访问,需重新调入,因此在调入前要先选一页调出;而这个刚被换出的页,很快又要被访问,又要将它调入,如此频繁地更换页面,以致一个进程在运行时,把大部分时间花费在页面置换的工作上,我们称该进程发生了“抖动”
存在位:在不在内存
修改位:是否修改过
访问字段:记录被访问的次数
外存地址
存取方式(权限位):用于标识本分段的存取属性是只执行、只读、还是允许读/写
增补位:这是请求分段式管理中特有的字段,用于表示本段在运行过程中,是否进行过动态增长
检查内存中是否有足够的空闲空间
在系统中配置一张共享段表,每个共享段在共享段表中都有一个表项,记录共享段的段号、段长、内存始址、存在位等,以及共享这个分段的每个进程的情况
共享进程计数count:整型变量count是为了记录有多少个进程需要共享该分段
存取控制字段
段号:对于同一个共享段,不同的进程可用不同的段号去共享该段
第一个进程:分配内存空间,调入共享段,进程的段表加一该共享段的表项,在共享段表中加一个表项,置count=1
以后的进程:在调用进程的段表增加一该共享段的表项,填写该共享段的物理地址;在共享段表中增加一个表项,添加该进程的有关内容,置count=count+1
count-1=0:取消进程段表中有关共享段的表项,回收物理内存,取消共享段表中有关共享段得到相应表项。
count-1!=0:取消进程段表中有关共享段的表项,取消共享段表中有关该进程的相应内容
在分段系统中,各个分段在逻辑上是独立的,因此信息保护也是比较容易实现的。一般采用以下方法来进行分段保护
通常的访问方式有:
(1)只读:只允许读访问
(2)只执行:只允许执行,不允许读,也不允许写
(3)读/写: 允许进程读写访问
处理器状态分为多个环,分别具有不同的存储访问特权级别,通常是级别高的在内环(如OS核心),编号最小(0环),级别最高
规则:程序可访问同环或更低级别环(外环)的数据;可调用同环或更高级别环(内环)的服务