-虚拟存储器
Posted 吹灭读书灯 一身都是月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了-虚拟存储器相关的知识,希望对你有一定的参考价值。
文章中的GoodNotes笔记截图来与我的一位学姐🥰
第五章-虚拟存储器
5.1 虚拟存储器概述
一、虚拟存储器的引入
-
常规存储器管理方式的特征和局部性原理
-
一次性:要求所有作业全部装入内存才能运行
-
驻留性:时间局限性 & 空间局限性
-
二、虚拟存储器的定义和特征
定义:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存和外存容量决定,运行速度接近内存速度,成本接近外存。
特征:
- 多次性:一个作业中的程序和数据运行被分成多次调入内存运行,最重要的特征,使虚拟存储器具有从逻辑上扩大内存的功能。
- 对换性:一个作业的程序和数据无需在作业运行时常驻内存,允许运行过程中进行换进、换出。
- 虚拟性:能从逻辑上扩大内存容量,使得用户看到的内存容量远大于实际的内存容量。
三、实现方法
-
分页请求系统
在分页系统的基础上,增加了请求调页功能和页面置换功能
-
分段请求系统
在分段系统的基础上,增加了请求调段功能和分段置换功能
5.2 请求分页存储管理方式
5.2.1 硬件支持
1、页表机制
- 状态位(存在位)P:用于指示该页是否调入内存,供程序访问时参考。
- 访问字段A:记录本页在一段时间内被访问的次数,或记录本页最近已经多久未被访问。
- 修改位M:标识该页在调入内存后是否被修改过,用于判断调出时是否需要更新外存对应的页。
- 外存地址:指出该页在外存上的地址,通常是物理块号。
2、缺页中断机构
访问的页不在内存时产生,要从外存调入
缺页中断也需要经历保护CPU环境、分析中断原因、转入缺页中断处理程序进行处理,中断处理完成后恢复CPU环境这几步骤。但是缺页中断和普通中断不同:
- 在指令执行期间产生中断和处理中断信号。
- 一条指令在执行期间可能产生多次缺页中断。
3、地址变换机构
5.2.2 请求分页中的内存分配
5.3 页面置换算法
5.3.1 最优页面置换算法(OPT)
将以后永不使用的或是最长时间内不在访问的页面,过于理想化,可以用作评判置换算法优劣的标准。
5.3.2 先进先出(FIFO)算法
选择在内存内驻留时间最长的页面进行置换,实现方便,但效果不好。
5.3.3 最近最久未使用算法(LRU)
Least Recently Used : 由于无法实现OPT中未来的最优, 退而求其次,用最近的过去当作最近的将来的近似。以最近的时间为评判标准,每个页面的访问字段中记录距离上次访问的时间t
,每次置换时选取t值最大的置换出去。这种用过去近似未来的方法比FIFO
更优,但页面的过去和未来没有明显的联系,所以在极端情况下,该算法还是会退化为FIFO
的。
最少使用置换算法( LFU)
思想类似于LRU,但是以最近一段时间页面访问次数为评判依据,每次将最近访问次数最少的置换出去。实现方式也是利用一个寄存器,每次被访问则将最高位置1,每隔一定时间右移一位,则寄存器中1个数最少的就是最近时间内访问次数最少的。
5.3.4 Clock置换算法NRU
LRU算法需要硬件支持,实际大多采用近似算法
具体实现方式如下:
- 为每页设置一个访问位,1表示访问过,0表示未被访问,所有页面用循环链表连接。
- 当需要进行页面置换时,将指针顺时针遍历页面,如果访问位为1则将其变为0,直到遇到第一个访问位为0的页面,将其置换出去。
由于每次只能判断某个页面是否被访问过,置换时将未使用过的页面置换出去,又把该算法称为最近未用算法(NRU)。
5.3.5 改进型Clock算法
同时考虑页面的使用情况和修改情况
某个页面被换出后,如果该页面被修改过,则还需写入内存,如果未被修改过则无需写入内存。所以,在选择置换的页面时,同样是访问位为0的页面,置换出未被修改过的页面显然是更好的方法。
实现方法是,增加一个修改位M:
- 第一轮先寻找访问位和修改位都为0的,找到则置换。
- 第二轮找访问位为0,修改位为1的,同时将访问位为1的改为0
- 如果还未找到,则重新寻找访问位和修改位为0的(因为部分页面的访问位在第三轮变为0了)
- 还未找到则寻找访问位为0,修改位为1的,必然可以找到。
5.4 “抖动”
是指刚刚被换出的内容又被访问,因此马上又要换入的频繁置换页面的现象。
原因:进程太多,分配给每个进程的物理块太少
5.5 请求分段存储管理方式
5.5.1 硬件支持
5.5.2 分段的共享和保护
以上是关于-虚拟存储器的主要内容,如果未能解决你的问题,请参考以下文章