虚拟内存的出现是为了缓解内存不足的问题,
覆盖技术:
目标:是为了在较小的内存中运行较大的程序,常用于多道程序系统,与分区存储管理配合使用。
原理:把程序按照其自身逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按照时间先后来运行。
1、必要部分(常用功能)的代码和数据常驻内存。
2、可选部分(不常用功能)在其他程序模块装载到内存。
3、不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖,即这些模块共用一个
分区。
总结:覆盖技术就是把程序拆分,常用模块常驻内存,不常用模块放在外存,当使用到对应的模块时,将对应的模块载入到某个特定的内存块中,当另一个程序执行调用到不常用的模块时,装
载该程序的模块到这个特定的内存块中,后面载入到这个特定的内存块中的模块覆盖前一个程序
装载到这个特定内存块中的模块。(即特定内存块中不同程序的模块实现覆盖载入,提供对应的程序调用。)
A调用B和C,但是B和C之间不存在调用关系,那么B和C就可以放在同一个覆盖区内,而D和EF相互之间又不存在调用关系,所以D、E、E可以放在同一个覆盖区内。同时还可以通过调整不存在调用关系的模块之间的分组关系来优化总的占用空间。
缺点:
分模块比较复杂(可以编程的时候指定可以被覆盖的模块)。
换入换出费时。
交换技术:
目标:多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源。
方法:
1、可将暂时不能运行的程序送到外存,从而获得空闲内存空间。
2、操作系统把一个进程的整个地址空间的内容保存到外存中(换出swap out),而将外存中的某个进程的地址空间读入到内存中(swap in),换入换出内容的大小为整个程序的地址空间。
交换技术实现中的几个问题:
1、交换时机的确定:何时要发生交换?只当内存空间不够或有不够的危险时换出。
2、交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝:必须能对这些
内存映像进行直接存取。
3、程序换入时的重定位:换出后再换入的内存位置一定要在原来的位置上吗?最好采用动态映射的方法。
交换技术和覆盖技术的比较:
1、覆盖技术只能发生在那些相互之间没有调用关系的程序模块之间,因此程序员必须给出程序内各个模块之间的逻辑覆盖关系(发生在同一个程序内)。
2、交换技术是以内存中的程序大小为单位来进行的,他不需要程序员给出各个模块之间的逻辑覆盖结构,换言之,交换发生在内存中程序之间,而覆盖则发生在运行程序的内部。
虚存技术:
局部性原理:包括时间局部性和空间局部性,可以根据内存的局部性原理来优化代码,提高代码执行效率。
时间局部性:如果程序中的某一条指令一旦执行,则不久后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。
空间局部性:一旦程序访问了某个存储单元,则不久之后,其附近存储单元也将被访问。
虚存技术--基本特征
1、大的用户空间:通过把物理内存与外存相结合,提供给用户的虚拟内存空间通常大于实际的物理内存,即实现了这两者的分离。如32位的虚拟内存地址理论上可以访问4GB,而可能计算机上仅有256M的物理内存,但硬盘容量大于4GB.
2、部分交换:与交换技术相比,虚拟存储的调入和调出是对部分虚拟地址空间进行的。
3、不连续性:物理内存分配的不连续性,虚拟地址空间使用的不连续性(如上图彩色部分)。
————————————————
原文链接:https://blog.csdn.net/hello_java_Android/article/details/89971664