一、虚拟存储器的基本概念☆
在虚存管理中,虚拟地址空间是指逻辑地址空间,实地址空间是指物理地址空间;前者的大小受机器的指令地址长度的限制,而后者的大小受物理内存大小的限制。
-
常规存储器管理不足的原因:
(1)一次性:作业在运行前一次性地全部装入内存
(2)驻留性:作业装入内存后,便一直驻留在内存中,直至作业运行结束。 -
局部性原理
(1)程序执行的特点:
①多数情况下仍是顺序执行。
②少部分的转移和过程调用指令会使程序执行由一部分区域转至另一部分区域(但研究表明调用深度多数情况下不超过5)
③许多由少数指令构成的循环结构会多次执行。
④对许多数据结构的处理(如数组)往往局限于很小的范围内。
(2)所有上述情况都表现出程序执行的局部性:
①时间局部性(temporal locality)
被引用过一次的存储器位置很可能在不远的将来再被多次引用。(循环结构)
②空间局部性(spatial locality)
如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。(数组)>>>>>交换技术与虚存使用的调入调出技术有何相同和不同之处?
相同点:都要在内存与外存之间交换信息
区别:
交换技术换出换进一般是整个进程,进程大小受物理存储器限制;
调入调出技术传递的是存储页或存储段,使进程映射具有了更大的灵活性,且允许进程的大小比可用的物理存储空间大的多 。 -
虚拟存储器的定义
(1)虚拟存储器:是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统
(2)优点:
①内存逻辑容量由内存容量和外存容量之和所决定
②运行速度接近于内存速度
③每位的成本却接近于外存 -
虚拟存储器的实现
(1)作用:允许将一个作业分多次调入内存
(2)虚拟的实现建立在离散分配存储管理基础上
*方式:请求分页/请求分段系统
*细节:分页/段机构、中断机构、地址变换机构、软件支持 -
虚拟存储器的特征
(1)多次性:一个作业被分成多次调入内存运行
(2)对换性:允许在作业的运行过程中进行换进、换出。(进程整体对换不算虚拟)
(3)虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。
二、请求分页存储管理方式☆☆☆☆
☆ 功能:基本分页 + “请求调页”和“页面置换”功能。
☆换入和换出基本单位都是长度固定的页面
☆请求分页技术的基本思想是:当一个进程的部分页面在内存时就可调度它运行;在运行过程中若用到的页面尚未在内存,则把它们动态换入内存。这样,就减少了对换时间和所需内存数量,允许增加程序的道数
☆请求分页技术是在简单分页技术基础上发展起来的,两者根本区别是:请求分页提供虚拟存储器,而简单分页系统并未提供虚拟存储器。
-
硬件支持:一台具有一定容量的内/外存的计算机+页表机制+缺页中断机构+地址转换机构
a. 页表机制
页表基本功能不变:逻辑地址映射为物理地址
增加了状态位、访问字段、修改位和外存地址
在内存中状态位为1,被访问过访问字段为1或者根据算法为时间,被修改过修改位为1
b. 缺页中断机构
(1)作为中断,需经历几个步骤
①保护CPU环境 ②分析中断原因 ③转入缺页中断处理程序 ④恢复CPU环境
(2)作为一种特殊中断,与一般中断有明显区别:
①在指令执行期间产生和处理中断信号
② 一条指令在执行期间,可能产生多次缺页中断缺页中断并不是阻塞,而是进程管理的一种方式
c. 地址变换机构
分页系统地址变换机构的基础上增加
①产生和处理缺页中断(请求调入)
②从内存中换出一页的功能(置换)
-
内存分配
作业不一次装入,部分装入的情况下如何为进程分配内存,涉及三个问题:
(1)最小物理块数的确定
①少于此数量进程将不能运行
②与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式
(2)物理块的分配策略
①固定分配、局部置换
困难:难以把握为每个进程分配“适量”物理块数
②可变分配、全局置换
最易实现,但会使其他进程缺页率提高,影响运行
③可变分配、局部置换
若频繁缺页中断,则系统再为进程分配若干物理快;若缺页率特别低,则适当减少分配给该进程的物理块。
(3)物理块的分配算法
①平均分配算法
②按比例分配算法
③考虑优先权的分配算法:一部分按比例分配给各进程;另一部分根据各进程优先权,适当地为其增加份额,分配给各进程 -
调页策略
(1)何时调入页面
①预调页策略
优点:一次调入若干页,效率较好
缺点:预测不一定准确,预调入的页面可能根本不被执行到。主要用于进程的首次调入,由程序员指出应该先调入哪些页。
②请求调页策略
优点:由请求调页策略所确定调入的页,一定会被访问;比较容易实现。
缺点:每次仅调入一页,需花费较大的系统开销,增加了磁盘I/O的启动频率。
(2)从何处调入页面
在请求分页系统中的外存分为:
对换区:连续存放数据,读写速度较快
文件区:离散分配方式,I/O速度相对慢====》发生缺页时,系统应从何处将缺页调入内存,分成三种情况:
①系统拥有足够的对换区空间:对换区
②系统缺少足够的对换区空间:对换区/文件区
③UNIX方式:随运行数据逐渐从文件区转到对换区
(3)页面调入过程
三、页面置换算法☆☆☆☆☆
缺页率:页面调入次数(缺页次数)/总的页面使用次数
-
最佳(Optimal)置换算法
优点:保证获得最低的缺页率
不足:无法实现,因为无法预知一进程将来的运行情况
作用:作为参照标准,评价其他算法 -
先进先出FIFO置换算法
优点:实现简单,把一进程已调入内存的页面按先后次序组织成一个队列,并设置一个指针(替换指针),使它总是指向队首最老的页面。
不足:与进程实际运行规律不相适应(较早调入的页往往是经常被访问的页,频繁被对换造成运行性能降低)
例题:假设一个作业,运行中依次使用的页面情况如下,分配给该进程的内存物理块只有3个,按最佳置换算法,内存中的页面如何变化,缺页率是多少?
总结:
*系统用队列对先进先出的页面次序进行记录
*队列最长等于分配的物理块数
*始终置换队首的最老页面==>Belady现象:出现分配的页面数增多,缺页率反而提高的异常现象
产生原因:FIFO算法的置换特征与进程访问内存的动态特征矛盾,即被置换的页面并不是进程不会访问的。 -
最近最久未使用(LRU)置换算法
对上述例题用LRU算法计算:
不足:
*有时页面过去和未来的走向之间并无必然的联系。
*相应的需较多的硬件支持:记录每个页面自上次被访问以来所经历的时间t,淘汰时选择页面t值最大的;以及需要快速地知道哪一页是最近最久未使用的页面,用寄存器或栈。(1)寄存器实现:
页面被访问后将寄存器最高为置1,每隔一段时间将所有寄存器右移1位,寄存器值最小的值被换出
(2)栈实现:
栈底是最先访问的页面,栈顶是最近访问的页面,若页面在栈中被重新访问,则将它置于栈顶,栈底页面被换出
例题:
某程序在内存中分配三个页面,初始为空,页面走向为4,3,2,1,4,3,5,4,3,2,1,5。
试分别利用OPT、FIFO及LRU算法计算缺页次数。
- CLOCK置换算法
①简单的CLOCK置换算法
找未被访问过的页面作为置换页,若指针经过的页use bit=1,修改use bit=0(暂不凋出,给被用过的页面驻留的机会 ),指针继续向下。到所有页面末尾后再返回队首检查。
②改进CLOCK置换算法
置换时根据修改位m和访问位a的值有4种不同情况的处理。
第一轮,搜索a=0,m=0
第二轮,搜索a=0,m=1,在找的过程中将a=1的置为0,若没有找到进行第三轮
第三轮,搜索a=0,m=0,将a=1置0,若没有找a=0,m=1的,此时一定可以找到
上述四种方法比较,LRU较为合适
- 其他置换方法
四、请求分段存储管理方式☆☆
- 请求分段中的硬件支持
(1)段表机制
①存取方式 :用于标识本分段的存取属性。R,R/W,W
②访问字段A :用于记录本段被访问的频繁程度。
③修改位M :表示该段在调入内存后是否被修改过。
④存在状态位P :指示该段是否已调入内存。
⑤增补位 :特有字段,表示该段运行中是否做过动态增长
⑥外存地址:用于指出该段在外存上的起始地址(盘块号)。
(2)缺段中断机构
请求掉段策略:虚段不在内存,阻塞请求进程,若内存中有合适的空闲区则从外存中读入段,修改段表及内存空闲链,唤醒请求进程,若内存没有合适的空闲区,则判断空闲分区之和是否≥段,若是,则空区拼接,形成一个合适的空区,若不是,则淘汰一个或几个实段,以形成一个合适的空区。
(3)地址变换机构
访问某段,判断是否大于段长,若是,则分段越界中断处理,若不是则判断是否符合存取方式,若不是,则分段保护中断处理,若是则判断是否在主存中,若段不在主存中则缺段中断处理,若段在主存中修改访问字段,如写访问,置修改位为1,形成访问主存地址,访问主存。 - 分段的共享和保护
(1)共享段表:共享计数count,若为0则回收共享段表空间
(2)分段保护
①越界检查
段表寄存器存放了段表长度;段表中存放了每个段的段长。
在进行存储访问时,将段号与段表长度比较,段内地址与段长比较。
②存取控制检查
尤其表现在不同进程对共享段的不同使用上。段表每个表项都设置“存取控制”字段,规定该段的访问方式:只读,只执行,读/写
③环保护机构
规定:低编号的环具有高优先权
遵循的原则:一个程序可以访问驻留在相同环或较低特权环中的数据。一个程序可以调用驻留在相同环或较高特权环中的服务。