操作系统笔记--虚拟内存的使用

1--背景概念

        在计算机系统中,当多道程序同时运行时可能会出现内存不足的情况,一般可通过以下技术进行解决:

覆盖技术

        当程序太大超出内存容量时,可以采用手动覆盖的技术,只把需要的指令和数据保存在内存当中;

交换技术

        当程序太大超出内存容量时,可以采用自动交换的技术,把暂时不能执行的程序送到外存中;

虚拟存储技术

        采用自动的虚拟存储技术可以实现在有限容量的内存中,以更小的页粒度为单位来装入更大更多的程序;

2--覆盖和交换技术的缺陷

覆盖技术

        需要程序员自己把整个程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,增加了程序员的负担;

交换技术

        以进程作为交换的单位,需要把进程的整个地址空间都换进换出,增加了处理器的开销;

3--虚存技术

        虚存技术兼顾覆盖技术和交换技术的特点,即虚存技术不把程序的所有内容都放在内存中,同时虚存技术可以实现进程的部分内容在内存和外存之间进行交换,这一过程由操作系统自动完成,无需程序员的干涉;

        虚存技术的实现基于程序的局部性原理:即程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域,具体表现为:

        时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短的时期内;

        空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近访问的几个数据都集中在一个较小的区域内;

实例说明:

操作系统笔记--虚拟内存的使用_第1张图片

操作系统笔记--虚拟内存的使用_第2张图片

         程序 1 将按一列一列的形式进行访问,但由于C语言的数组在实际存储中是按行进行存储的,所以程序 1 这种访问方式在访问每一个数据时,操作系统都会把整行(页)的数据加载到内存中,导致内存负担的加重;

        而程序 2 将按一行一行的形式进行访问,访问当个数据时,操作系统只需将本行数据加载到内存即可,待访问下一行的数据时再把下一行的数据加载到内存当中;

        因此,程序 2 的设计满足程序的局部性原理,显然对于虚拟内存管理来说是更优的设计;

你可能感兴趣的:(操作系统)