05 操作系统的虚拟内存技术出现之前的覆盖技术和交换技术

理想的存储器:更大、更快、更便宜的非易失性存储器(存储器层次结构实现)

在早期(虚拟内存出现之前的解决方法)计算机系统当中,尤其是在多道程序运行的环境下,可能会出现内存不够的情况,怎么解决

  • 如果程序太大,超过了内存的容量,可以采用手动的覆盖(overlay)技术,只把需要的指令和数据保存在内存当中;
  • 如果程序太多,超过了内存的容量,可以采用自动交换技术(swapping)技术,把暂时不能执行的程序运送到外存当中;
  • 如果想要在有限容量的内存中,以更小的页粒度为单位装入更多更大的程序,可以采用自动的虚拟存储技术;

覆盖技术:

目标:是在较小的可用内存中运行较大的程序。常用多道程序系统,与分区存储管理配合使用。(产生于上世纪八十年代和九十年代初,当时的代表操作系统是DOS,硬件只有640K的内存)

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

  • 必要部分(常用功能)的代码和数据常驻内存;
  • 可选部分(不常用功能)在其它程序模块中实现,平时存放在外存当中,在需要的时候才装入内存;
  • 不存在调用关系的模块不必同时装入到内存当中,从而可以相互覆盖,即这些模块公用一个分区;

缺点

  • 有程序员来把一个大的程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,费时费力,增加了编程的复杂度;
  • 覆盖模块从外存装入内存,实际上是以时间的延长来换取空间的节省;

交换技术(由操作系统完成):

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

方法:

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

交换技术实现中的几个问题:

  • 交换时机的确定:何时需要发生交换?只有当内存空间不够或者有不够的危险时换出;
  • 交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝;必须能够对这些内存映像进行直接存取;
  • 程序换入时的重定位:换出后再换入的内存位置一定要在原来的位置上吗,不一定,最好采用动态地址映射的方法。

覆盖技术与交换技术的比较:
  • 覆盖只能发生在那些相互之间没有调用关系的进程模块之间,因此程序员必须给出程序内的各个模块之间的逻辑覆盖结构。

  • 交换技术是以在内存中的程序大小为单位来进行的,它不需要程序员给出各个模块之间的逻辑覆盖结构。换言之,交换发生在内存中程序与管理程序或者操作系统之间,而覆盖则发生在运行程序的内部;


提示:为了更好的理解知识点,博主在微信公众号中将操作系统知识进行了重新排版和插入图片。感兴趣的朋友可以扫码进行关注。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值