-虚拟存储器

Posted 吹灭读书灯 一身都是月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了-虚拟存储器相关的知识,希望对你有一定的参考价值。

文章中的GoodNotes笔记截图来与我的一位学姐🥰

第五章-虚拟存储器

5.1 虚拟存储器概述

一、虚拟存储器的引入

  1. 常规存储器管理方式的特征和局部性原理

    • 一次性:要求所有作业全部装入内存才能运行

    • 驻留性:时间局限性 & 空间局限性

二、虚拟存储器的定义和特征

定义:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存和外存容量决定,运行速度接近内存速度,成本接近外存。

特征:

  • 多次性:一个作业中的程序和数据运行被分成多次调入内存运行,最重要的特征,使虚拟存储器具有从逻辑上扩大内存的功能。
  • 对换性:一个作业的程序和数据无需在作业运行时常驻内存,允许运行过程中进行换进、换出。
  • 虚拟性:能从逻辑上扩大内存容量,使得用户看到的内存容量远大于实际的内存容量。

三、实现方法

  1. 分页请求系统

    在分页系统的基础上,增加了请求调页功能和页面置换功能

  2. 分段请求系统

    在分段系统的基础上,增加了请求调段功能和分段置换功能

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 分段的共享和保护

以上是关于-虚拟存储器的主要内容,如果未能解决你的问题,请参考以下文章

JVM的内存结构

JVM内存模型

Java虚拟机笔记

第九章 虚拟内存管理

java虚拟机 第二章Java内存区域与内存溢出异常

java虚拟机