新闻资讯

掌握最新资讯,了解关于我们的最新动态!
您当前位置首页 > 新闻资讯 > IDC圈

虚拟内存

更新时间:2024-12-22 10:09

程序规模的增长远大于存储器容量的发展的速度,为了让更多的程序运行在有限的内存中,理想情况下,我们希望有更大、更快、更便宜的非易失性存储器。
从图中我们可以得出,把容量小、速度快的存储器我们希望放在靠近CPU的地方,让CPU可以更快的运行;由于内存相对于寄存器的速度较慢,因此寄存器和内存之间还有一层Cache,Cache目的是缓存内存的数据使得CPU尽量可以从Cache中获得内存数据,而不用每次访问主存,这样保证了CPU访问数据的效率更高。
操作系统支持存储器可以达到更大、更快、更便宜好用的理想状态,但是数据随着掉电会丢失的影响的情况还存在。

       如果程序太大,超过了内存的容量,可以采用手动的覆盖技术,只把需要的指令和数据保存至内存中;

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

       如果想要在有限容量的内存中,以更小的页力度为单位装入更多更大的程序,可以采用自动的虚拟存储技术

覆盖技术

如果是程序太大, 超出了内存的容量, 可以采用手动的覆盖(overlay)技术, 只把需要的指令和数据保存在内存当中。

目的 : 是在较小的可用内存中运行较大的程序, 常用于多道程序系统, 与分区存储管理配合使用

原理 :

       把程序按照其自身逻辑结构, 划分为若干个功能上相互独立的程序模块, 那些不会同时执行的模块共享同一块内存区域, 按时间先后来运行。(分时共享内存区域)

必要部分(常用功能)的代码和数据常驻内存;

可选部分(不常用功能)在其他程序模块中实现, 平时存放在外存中, 在需要用到时才装入内存;

不存在调用关系的模块不必同时装入到内存, 从而可以相互覆盖, 即这些模块共用一个分区。

也就是说,程序松耦合的部分可以按需装入内存,不需要的时候放在外存中,多个不常用部分共用一个分区.

A(20k) | B(50k) ____ C(30k) | ____ D(30k) ____ E(20k)  F(40k)

因此不需要将整个程序190k的数据全部放入内存中, 而是划分为常驻区(20k) 覆盖区0(50k)覆盖区1(40k) 压缩至了110k的内存空间使用

缺点 :

     由程序员来把一个大的程序划分为若干个小的功能模块, 并确定各个模块之间的覆盖关系, 费时费力, 增加了编程的复杂度;

     覆盖模块并从外存装入内存, 实际上是以时间延长来换取空间节省。

Turbo Pascal的Overlay系统单元支持程序员控制的覆盖技术。


成为冠星云会员,享受出众的上云实践机会和周到的尊贵服务!

立即注册