前言
本文是根据虚拟内存的总结,包括覆盖技术,交换技术,虚存技术。虚拟内存的起因是应用程序的运行内存越来越大,而内存的增长不能满足相应的需求,所有需要借助于disk的容量提高程序的运行空间。
覆盖技术
这个技术现在已经不再使用了,其实就是需要将应用程序模块化,然后按照程序运行的顺序,设计各模块在拷贝到内存中的时间。结合各个程序块的大小和执行顺序来设计哪几个模块共有一块内存区域,以及按照怎样的顺序覆盖。这些操作都是由程序员决定应用程序内部的运行。
自动交换技术
这种技术现在也不在使用了,交换技术主要发生在应用程序之间,由操作系统自行操作。
何时传入:当内存空间不管或者不够的时候换出;
何时交换:包含应用程序的所有拷贝;
还涉及到应用程序重定位的问题,采用动态地址映射解决。
虚存技术
这是现在最具有实际意思的虚拟内存技术,就是把应用程序中的需要的部分放在内存里面,应用程序的全部数据在disk中。交换的单位是一个页。
其中页面的换入和换出,是由操作系统自行完成的。根据虚存技术的要求,对开发的应用程序提出了如下的要求:指程序在执行过程中的一个较短的时期,所执行的指令地址和指令的操作数地址分别局限于一定的区域,这可以表现为。时间局部性,一条指令的一次执行和下次执行,一个数据的一次访问和下一次访问集中在一个较短的时间;空间局部性,当前指令和邻近指令,当前访问数据和邻近的几个数据都集中在一个较小区域。
有一个例子就是二维数组,考虑对二维数组的储存是是按照行的方向进行存储的,所以一行一行的读取数据比一列一列的读取数据运行效率有很大的提升。
基本特征
其主要的特点就是一个页或者一个段的交换。最关键的是何时交换,操作系统利用缺页异常来处理这个事情。对应的页表项为:页号,访问位,修改位,保护位,驻留位,帧号
驻留位:1表示页在内存中,0表示页不在内存中。访问的时候如果为0就会产生缺页异常;
保护位:表示可以对页做何种类型的访问;
修改位:表示此页在内存中是否被修改过,当系统回收该物理也时,根据该项决定是否需要拷贝回disk;
访问位:是否被访问过,被页面置换算法。
处理缺页异常的机制
应用程序在执行的时候,当问到一个逻辑页其驻留位为0的时候,就会产生缺页异常,如果当前还有空余的物理页就直接将该页对应的物理页拷贝到物理帧号为f的位置,并把当前逻辑页的驻留位改为1,对应的物理帧号改为f;如果没有空余的物理页了就采用页面置换算法选择一个需要替换的物理页f,并察看f所对应的逻辑页q的修改位是否为1,如果为1就将物理页的内容写回disk中,将q的驻留位改为0,然后进行一样是操作。
有几点需要注意:首先disk中存放了所以程序的所有数据,有需要的就会被调入到内存中;当有写页面需要置换出来的时候,如果该页面发生了改动,也就是其对应的逻辑页的修改位为1,就将该页拷贝回disk,否则直接丢弃