虚拟内存
- 常用的应用程序放到内存中,不常用的放入硬盘中。
- 手动覆盖:程序超过内存容量后,只把需要的指令和数据保存在内存中。
- 自动交换:程序超过内存容量后,暂时不能执行的送到外存中。
- 虚拟存储:有限的内存中,以更小的粒度(段、页),装入更多更大的程序。基于段存储和页存储。
覆盖技术
- 原理:划分为若干个功能上相对独立的模块,不会同时执行的模块共享同一块内存区域,按照时间先后执行。
- 常用功能常驻内存
- 不常用功能平时放在外存中,需要再装入内存
- 不存在调用关系的模块,可以不用同时存在,以便相互覆盖,就是公用一个分区(内存空间)。
如图:两种覆盖分区方式,第一种110k内存,第二种100k。就是利用不存在调用关系的模块,可以不用同时存在,以便相互覆盖。
- 缺点:1.时间换空间 2.代码块分析成本
交换技术
- 目标:让正在 运行或者将要运行获取更多内存空间
- 暂时不能运行的送到外存
- 操作系统把一个进程的整个地址空间保存到外存swap out,把外存中某个进程的整个地址空间读入内存中swap in,换入换出大小为整个程序的地址空间。
- 交换时机:确实是内存空间不够的时候。
- 交换区大小:硬盘中预留的空间一定要能存放所有用户进程的所有内存映像的拷贝;
- 程序换入重新定位:换出后的内存地址一定要在原来的位置,采用动态地址映射的方法。
覆盖交换对比
- 覆盖发生在一个模块里面,代价是程序员指定模块逻辑关系。
- 交换粒度是一个程序。操作系统内部完成,开销相对大。
虚拟内存管理技术
目标:
1.类似覆盖但可以减轻程序员负担。
2.类似交换,可以减小交换粒度。
- 局部性原理
- 较短时期内,指令地址和指令的操作数地址局限在一定区域。
- 时间局部性:较小时期
- 空间局部性:较小区域
- 如果程序局部性很好,执行效率就会高。内存优化-程序员
- 较短时期内,指令地址和指令的操作数地址局限在一定区域。
- 实现原理
基于MMU+操作系统+页面+段+局部性原理
- 特征
- 用户空间大:如32位CPU,理论上空间可访问4GB,而计算机内存仅仅256M,但硬盘容量大于4G。(推导过程:232byte =》232=210*210*210*22 =》 210bit = 1Byte =》1Byte* 210 =1KB =》1KB* 210=1MB =》1MB*210=1GB =》 1GB* 22=4GB) 内存不够,硬盘来凑,使得应用程序认为可以有4G内存可以使用,其实大部分是虚拟内存。
- 部分交换:每次交换都是以页或者段为粒度,由操作系统控制。粒度更小。
- 不连续性:体现在本来所有数据都应该连续的放在虚拟内存中的情况,由于操作系统要把某些数据换出去,造成所谓的不连续。
虚拟内存管理技术--虚拟页式内存管理
- 定义:在页式存储管理的基础上,增加请求页面和页面置换的功能。
- 思路
- 新页表结构
修改位和访问位都可以提高页面置换效率
图展示了当驻留位为0,产生缺页中断。
图上展示了缺页中断的处理流程。 - 外存存储的数据结构:后援存储BackingStore
- 文件:例如一个数组以文件的形式存储在外存中。
- 代码:存储在外存中的可执行程序。
- 动态链接库:代码运行过程中需要很多库,这些库需要的时候才会被读进来,平时就放在外存中。
- 其他段:代码运行过程中产生的一些数据,因为有可能很大,占用很大空间,需要被换出,硬盘专门开辟一个分区swapfile来装载这些文件。
- 虚拟存储性能
dirty page写操作,page fault 代表缺页中断几率。如果p足够小,EAT无限接近于10。代码考虑局部性原理。