虚拟内存

起因

经常出现内存不够了。程序规模的增长大于存储器容量的增长。
理想的存储器:更大,更快,更便宜,非易失性存储。
实际的存储器

在这里插入图片描述

在这里插入图片描述

-不常用的放在硬盘上,常用的放在内存上。

覆盖技术

相互之间没有调用关系放到一个模块,调用时间不同,占用空间的时间不同

在这里插入图片描述

由程序员来把一个大的程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,费时费力,增加了编程的复杂度。
-覆盖模块从外存装入内存,是以时间换空间。

交换技术

多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源。

-可将暂时不能运行的程序送到外存,从而获得空闲内存空间。
-操作系统把一个进程的整个地址空间的内容保存到外存中(换出swap out),而将将外存中的某个进程的地址空间读入到内存中(换入swap in)。换入换出内容大小为整个程序的地址空间。

覆盖技术和交换技术的比较

覆盖只能发生在那些(程序内)相互之间没有调用关系的程序模块之间,因此程序员必须给出程序内的各个模块之间的逻辑覆盖结构。
-交换技术是以在内存中的程序大小为单位来进行的,它不需要程序员给出各个模块之间的逻辑覆盖结构。
—>交换发生在内存中 程序 与 管理程序或操作系统 之间,而覆盖则发生在运行程序的内部。

虚存技术

解决覆盖技术给程序员负担大和交换技术处理器开销大的问题。
-像覆盖技术一样,不是把程序的所有内容都放在内存中,因而能够运行比当前的空闲内存空间还要大的程序。但做得更好,能由操作系统自动完成,无需程序员介入
-能像交换技术那样,能够实现进程在内存和外存之间的交换,因而获得更多的空闲内存空间。但能做得更好,只对进程的部分内容在内存和外存之间进行交换。
在这里插入图片描述

程序的局部性

指程序在执行过程中的一个较短时间,所执行的指令地址和指令的操作数地址分别局限于一定区域,表现为:
->时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短的时间里
->空间局部性:当前指令和领近的几条指令,当前访问的数据和领近的几个数据都集中在一个较小区域内
程序的局部性原理表明,从理论上来说,虚拟存储技术是能够实现的,而且在实现了以后应该能够取得一个满意的效果的。
在这里插入图片描述

在这里插入图片描述

注意,方法1是按行访问,也就是每跳过1024个访问一个,考虑到4k只能放1024个数字(一个int占32位,4个byte),所以每次访问都会换入换出,不满足空间局部性。

若内存地址访问通过查找页表发现对应页表项存在位为0,说明虚拟地址空间对应的物理地址空间是没有的,出现访问异常

 

posted @ 2021-08-16 00:31  wsq1219  阅读(45)  评论(0编辑  收藏  举报