Chapter5虚拟存储器

前一章所介绍的各种存储器管理方式称为传统存储器管理方式,有以下两个特征:
1)一次性。作业必须一次性全部装入内存后才能开始运行。
2)驻留性。作业被装入内存后,就一直驻留在内存中,其中任何部分都不会被换出。即使有的进程被阻塞了,或有的模块运行一次就不需要了。
但这两个特征并不是程序运行时所必须的,因为有局部性原理,所以可以采用虚拟存储器,应用程序在运行之前没有必要将之全部装入内存,而仅须将哪些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在盘上。程序在运行是,若它所要访问的页(段)已调入内存,便可继续执行下去;若要访问的页(段)尚未调入内存(缺页/缺段),便发出中断请求。


虚拟存储器:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
具有以下三个特征:1)多次性;2)对换性;3)虚拟性
虚拟性以多次性和对换性为基础,多次形和对换性建立在离散分配的基础上。


请求分页存储管理方式
在分页系统的基础上增加了请求调页功能和页面置换功能。

请求分页中的硬件支持
1.请求页表机制
([页号][物理块号][状态位P][访问字段A][修改位M][外存地址])
状态位P:用于指示该页是否已调入内存,供程序访问时参考。
访问字段A:记录本页在一段时间内被访问次数或最近已有多长时间未被访问。在置换程序中会作为是否被换出的参考。
修改位M:是否被修改过,决定被换出的时候要不要写回到外存。
外存地址:通常是物理块号(外存上的)
2.缺页中断机构
缺页中断作为中断同样需要经历保护CPU现场,分析中断原因,转入缺页中断处理程序,处理完后恢复CPU现场等步骤。但与一般的中断不同的是:
1)在指令执行期间产生和处理中断信号
2)一条指令在执行期间可能会产生多次缺页中断
3.地址变换机构
pic
快表 页:内存块号
快表中没有就去内存中的页表找 页:内存块号
页表中指示该页不再内存中 就根据外存地址(外存物理块号)来调页
然后要修改页表(状态位,物理块号)
修改快表

请求分页中的内存分配
1.最小物理块数的确定
为保证进程能正常运行,最小需要多少物理块。若太少的话,进程执行中的缺页率就会上升。
2.内存分配策略
固定和可变分配策略。
全局和局部置换策略。
1)固定分配局部置换
固定分配:为每个进程分配一组固定数目的物理块,在运行期间不再改变。
局部置换:只能从分配给该进程的n个页面中选出一页换出,然后再调入一页,以保证分配给该进程的内存空间不变。
2)可变分配全局置换
可变分配:先为每个进程分配一定数目的物理块,在运行期间可根据情况适当增加或减少。
全局置换:缺页时给它一个空闲块,或者从所有进程的全部物理块中挑一页换出。
3)可变分配局部置换
若进程在运行中频繁发生缺页中断,则系统须再为该进程分配若干附加的物理块,直至该进程的缺页率减少到适当程度为止。反之,若一个进程在运行过程中缺页率特别低,则此时可适当减少分配给该进程的物理块数,但不引起其缺页率明显增加。
3.物理块分配算法
在采用固定分配策略时,如何将系统中可供分配的所有物理块分配给各个进程。
1)平均分配算法
2)按比例分配算法
进程的页面数/总页面数*总块数(取整并大于最小物理块数)
3)考虑优先权的分配算法
把内存中可供分配的所有物理块分成两部分:一部分按比例分配给各进程;另一部分根据优先权进行分配,为高优先进程适当增加份额。


页面调入策略
1.何时调入页面
1)预调页策略
预计在不久之后便会被访问的页面预先调入内存,但这个预测的成功率不太高。
在采用工作集的系统中,每个进程都具有一张表,表中记录有运行时的工作集,每当程序被调度运行时,将工作集中的所有页调入内存。
2)请求调页策略
发现要访问的页不在时才调。
每次仅调入一页,须花费较大的系统开销,增加了磁盘I/O的启动频率。
2.从何处调入页面
外存被分为两部分:存放文件的文件区,存放对换页面的对换区。
由于对换区采用连续分配方式,文件区采用离散分配方式,所以对换区的数据存取速度比对换区高。
1)系统拥有足够的对换空间。
在进程运行前将与该进程有关的文件从文件区拷贝到对换区,然后全部从对换区调入所需页面。
2)系统缺少足够的对换空间。
凡是不会被修改的文件,都直接从文件区调入,这样换出的时候就不用写回,下次还是从文件区调。对于那些可能被修改的部分,在将它们换出时便须调到对换区,以后需要时从对换区调入。
3)UNIX方式
未运行过的页面从文件区调,曾经运行过又被换出的页面从对换区调。UNIX系统允许页面共享,某进程所请求的页面有可能已被其它进程调入内存,此时也无需从对换区调了。
3.页面调入过程
缺页中断-》保存CPU现场-》缺页中断程序-》从页表找到外存上的物理块-》若内存能容纳新页(若内存不够则要置换出一页并且要考虑是否需要写回),启动磁盘I/O,将所缺之页调入内存,修改页表-》修改块表-》访问内存中的数据
整个过程对用户是透明的
4.缺页率
页面访问次数/(页面访问失败次数+成功次数)
缺页率受以下因素影响
1)页面大小。页面划分较大,缺页率较大。
2)进程所分配物理块的数目越多缺页率越低。
3)页面置换算法。
4)程序固有特性。局部化程度越高,缺页率越低。
缺页中断处理时间:
假设页面被修改的概率为β,缺页中断处理时间为ta,没被修改的话终端处理时间时tb
t=βta+(1-β)tb


woc刚才忘记保存了,哭了orz
页面置换算法
不适当的算法会导致抖动:刚被换出的页很快又要被使用

最佳置换算法
换出距离下一次访问最久的页

先进先出FIFO
把一个进程已调入内存的页面按先后次序链接成一个队列,并设置一个指针,称为替换指针,总是指向最老的页面。

最近最久为使用LRU
距离上一次被访问时间最久
硬件支持(寄存器和栈之一)
1)为内存中的每个页面配一个移位寄存器
访问时把最高位置1,然后定时右移一位,将寄存器数看作整数,数值最小的就是最久未访问的
pic
2)栈
用一个栈保存当前使用的各页面的页面号,某页面被访问时把它从栈中移出放到栈顶。置换栈底的页。

最少使用LFU
移位寄存器,被访问时最高位置一,定时右移,ΣRi最小的就是最少被访问的


访问内存的有效时间
1)页在内存,页表项在快表
EAT=访问快表的时间λ+访问内存的时间t
2)在内存,不再快表
EAT=λ+t+修改快表λ+t
3)不再内存
EAT=λ+t+缺页中断处理β+λ+t(修改页表的时间包含在中断处理了)
综合,假设命中率为a,缺页率为f
EAT=λ+at+(1-a)[t+f(β+λ+t)+(1-f)(λ+t)]
若不考虑命中率仅考虑缺页率,λ=0,a=0


请求分段存储管理方式
在分段系统的基础上增加了请求调段及分段置换功能。
([段名][段长][段基址][存取方式][访问字段A][修改位M][存在位P][增补位][外存始址])
存取方式:段是逻辑单位,所以可以根据信息的属性对其加以保护。只执行,只读,允许读/写
增补位:本段在运行过程中是否做过动态增长

缺页中断机构
pic

地址变换机构
pic

分段的共享
1.共享段表
pic
count:仅当count为0时,系统才能回收内存
不同的进程赋予不同的存取权限
段号:对于一个共享段,在不同的进程中可以用不同的段号去访问它。
2.共享段的分配
在调用进程的段表中增加一项,填写共享段的物理地址;
在共享段的段表中增加一项,填写调用进程的信息,count+1
3.共享段的回收
撤销调用进程段表中该段的表项,count-1,若为0,回收内存,不为0,撤销共享段表项中调用进程的记录。

分段的保护
1.越界检查
段号与段表长度的比较;段内地址与段长的比较
2.存取控制检查
3.环保护机构
一个程序可以访问驻留在相同环或较低特权环(外环)中的数据
一个程序可以调用驻留在相同环或较高特权环(内环)中的服务

你可能感兴趣的:(Chapter5虚拟存储器)