您当前的位置:首页 > 电脑百科 > 软件技术 > 软件技术

虚拟内存技术的前世今生

时间:2020-03-17 16:22:57  来源:  作者:

在20世纪60年代及70年代早期,计算机内存十分昂贵,而随着计算机的发展,计算机应用程序越来越大,系统内存无法满足应用程序的需求,虚拟内存技术应运而生,它可使内存耗量大的软件运行在实际内存容量小的计算机上,在此基础上,后续又引入一些安全及可靠性相关的特性,使得虚拟内存技术更加得到市场的青睐。

1940年代和1950年代,所有的大型程序都必须包含一个用于管理主存和辅存的逻辑,如Overlaying技术。虚拟内存技术的引入不止用于扩展主存,还可以使此类扩展尽可能让编程人员易于使用。多数早期系统为了让多程序或多任务成为可能,采用把内存分给多个程序的做法,而不是使用虚拟内存技术,如PDP-10。

到1956年,虚拟内存技术概念首次由德国Technische Universität Berlin物理学家Fritz-Rudolf Güntsch于他的博士论文《Logical Design of a Digital Computer with Multiple Asynchronous Rotating Drums and Automatic High Speed Memory Operation》里提及:它描述了一个主存大小为6*100字大小,地址空间大小为1000*100字的机器,该机器由硬件自动在主存和辅存之间搬移块数据。

在虚拟内存技术里占重要地位的换页技术首次在曼彻斯特大学(University of Manchester)实现,以用来扩展Atlas计算机的工作内存,将16384字大小的主存与98304字大小的辅存结合起来。Atlas官方发布时间为1962年,但换页机制的原型在1959年就已经完成。在1961年,Burroughs Corporation独立发布第一个支持虚拟内存的商用计算机,B5000,但其使用的段式技术而不是页式技术。

虚拟内存技术在主流操作系统里实现之前,有很多问题兹待解决,如动态地址转换需要昂贵且极难实现的专用硬件,乃至最初的实现甚至降低了内存的访问速度。这导致很多人担心新的系统层算法使用辅存会比之前的应用层算法效率更低。直到1969年,有关在商用计算机上应用虚拟内存技术的争辩终于划上句号,由David Sayre带领的IBM研究团队展示出他们的虚拟内存overlay系统可以比手动控制的运行得更好。在1970年代,运行基于虚拟存储技术操作系统的IBM 370提供了一个让商业用户将多个老系统迁移到更少却更强大的大型机上的手段,这大大提高了性价比。世界上首台引入虚拟内存的小型机是Norwegian NORD-1,到1970年代,其他小型机也相继实现了虚拟内存。

X86架构上首次引入虚拟内存技术的CPU是Intel 80286,但其采用的段交换技术并没有有效的增加段大小,之后的Intel 80386开始支持换页技术。

虚拟内存技术的前世今生

虚拟内存技术发展时间线

虚拟内存技术作为一种内存管理技术,使得操作系统可以结合软硬件技术将程序使用的地址,即虚拟地址,映射到物理地址,使得:

  • 程序可独占全部虚拟地址空间:各程序间地址不冲突,因为有自己的页表,同样的虚拟地址可以映射到不同的物理地址;
  • 程序可拥有连续的地址空间:可以把零碎的物理地址映射成连续的地址空间。

操作系统管理着虚拟地址到物理地址的映射关系,进行地址映射依赖的CPU硬件一般指的是内存管理单元(MMU,Memory Management Unit),它负责根据页表将虚拟地址自动映射为物理地址。

虚拟内存技术的最大好处在于使应用程序免于管理内存,增加安全性,并且使程序在理论上可用内存空间不受物理实际内存大小的限制。

需要注意的是,虽然多数的支持虚拟内存技术的现代操作系统的每个进程运行在它自己独有的地址空间,就好像每个程序都独占全部虚拟地址空间。但是嵌入式操作系统和其他专用的需要快速响应的计算机系统并不使用虚拟内存技术,一个因为是虚拟内存可能触发不可预知的延时,特别是当需要从辅存里读数据时;另外一个是因为将虚拟地址转换为物理地址一般是需要硬件支持的,而并不是所有嵌入式系统使用的CPU都带此功能。

虚拟地址空间比实际的物理内存容量大,必然会引发内存和外部存储设备之间的数据交换,在20世纪60年代,早期的虚拟内存技术进行内存交换时,将整个应用程序都从内存交换到硬盘或外部存储介质上,并将另外一个程序从硬盘或外部存储介质交换到内存上运行,而并不是按内存的页来替换,被交换出内存的程序如果是正在运行中,则先挂起。对于大程序,为了减少占用内存,可能将程序分成多份,使它们可以在不同的时间占用同一份内存。但这种方法不是一种换页的方法,它仅仅减少程序的内存占用空间。后续的架构使用内存分段(memory segmentation),各程序段作为一个整体在硬盘和内存之间进行交换。程序段包含程序所有代码的代码段或数据段,这些段必须处在连续的内存空间里,因此需要通过额外的计算和搬移算法来解决内存空间碎片化的问题。这之后发明了页表,这让处理器工作在抽象的连续的址空间上,而页则成为了内存和硬盘之间交换的基本单位。

当软件试图访问一个不在内存中的页时,处理器将该操作当作Page fault对待,这会将系统控制权由程序转到操作系统,操作系统则:

1. 确定数据在硬盘上的位置;

2. 获取RAM中一个空的页帧以存放数据;

3. 加载数据到该页帧;

4. 更新页表指向该页帧;

5. 控制权返回给程序,重新执行导致Page fault的指令。

如果所有页帧都在使用中,则操作系统必须选择其中一个页帧给程序使用。如果被驱逐的页帧由另外一个程序动态申请并保存了数据,又或者在该页帧数据读到RAM后被程序修改了(换句话说,该页帧是"脏"的了),则该页帧在被释放前,数据必须回写到硬盘里。如果一个程序之后又引用了该页帧,则产生一个Page fault,触发切页操作,该页被再次读到RAM里。

上世纪60年代的大型机的操作系统和80年代中期的个人电脑操作系统多数都没有虚拟内存功能,除了以下大型机操作系统:

· Altas的Altas Supervisor

· Electrologica X8的THE multiprogramming system(纯软件的虚拟内存技术)

· Burroughs B5000的MCP

· IBM System/360 Model 67的MTS,TSS/360,CP/CMS

· GE 645的Multics

· RCA Spectra 70/46的Time Sharing Operating System

以及个人电脑Apple的Lisa,它的操作系统支持虚拟内存。


<完>



Tags:虚拟内存   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
程序经过编译后,变成了可执行的文件,可执行文件主要包括代码和数据两部分,代码是只读的,数据则是可读可写的。可执行文件由操作系统加载到内存中,交由CPU去执行,现在问题来了,CPU怎...【详细内容】
2021-04-25  Tags: 虚拟内存  点击:(295)  评论:(0)  加入收藏
前面讲到过写时复制缺页异常(COW),一般用于父子进程之间共享页,而我们会常见一种缺页异常是匿名映射缺页异常,今天我们就来讨论下这种缺页异常,让大家彻底理解它。注:本文使用linux-5.0内核源代码。文章分为以下几节内容:...【详细内容】
2020-09-10  Tags: 虚拟内存  点击:(90)  评论:(0)  加入收藏
Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样进程就可以很方便地访问内存,更确切地说是访问虚拟内存。1、什么是虚拟内存假设某个进...【详细内容】
2020-08-17  Tags: 虚拟内存  点击:(221)  评论:(0)  加入收藏
大家好,我是良许。熟悉计算机的小伙伴都知道,我们常说的主机三大件分别是主板,CPU,内存,可见内存在计算机主机中的角色也非同一般,喜欢 DIY 主机的小伙伴对这三大件的了解更是精益...【详细内容】
2020-08-11  Tags: 虚拟内存  点击:(79)  评论:(0)  加入收藏
在20世纪60年代及70年代早期,计算机内存十分昂贵,而随着计算机的发展,计算机应用程序越来越大,系统内存无法满足应用程序的需求,虚拟内存技术应运而生,它可使内存耗量大的软件运行...【详细内容】
2020-03-17  Tags: 虚拟内存  点击:(143)  评论:(0)  加入收藏
虚拟内存:第一层理解1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝...【详细内容】
2019-12-26  Tags: 虚拟内存  点击:(94)  评论:(0)  加入收藏
一、 虚拟地址的由来在早期的计算机中,要运行一个程序,会把这个程序全部都加载到内存,程序是直接运行到物理内存上的。也就是说,程序运行时直接访问的就是实际的物理内存地址。...【详细内容】
2019-12-02  Tags: 虚拟内存  点击:(131)  评论:(0)  加入收藏
最近在进行服务器内存优化的时候,发现一个非常奇妙的问题,我们的认证服务器(AuthServer)负责跟第三方渠道SDK打交道,由于采用了curl阻塞的方式,所以这里开了128个线程,奇怪的是每次...【详细内容】
2019-10-30  Tags: 虚拟内存  点击:(164)  评论:(0)  加入收藏
内存是什么?内存对于用户来说就是一个字节数组,我们可以根据地址来访问到某个字节或者某些字节:很久之前的内存很久很久之前,一台机器上只放置一个程序,操作系统仅仅作为一个函...【详细内容】
2019-09-20  Tags: 虚拟内存  点击:(208)  评论:(0)  加入收藏
▌简易百科推荐
现在很多手机的摄像头都会比电脑的高,因此有不少小伙伴想要在有些时候用手机摄像头代替电脑摄像头,那么具体应该如何操作呢?下面就和小编一起来看看连接手机摄像头的方法吧。更...【详细内容】
2021-12-28  装机吧    Tags:Win10   点击:(2)  评论:(0)  加入收藏
今天教大家通过windows的CMD终端查看WIFI密码 使用管理权限打开CMD 查看本机连接过WIFI名称netsh wlan show profiles 查询某一个WIFI的密码比如这里我想查询猪猪侠的...【详细内容】
2021-12-27  吉祥同学学安全    Tags:wifi密码   点击:(1)  评论:(0)  加入收藏
从本质上来讲,PE系统最广泛的用途只是用来安装系统。通过其内置的Ghost软件来调用第三方的GHO系统镜像来完成系统的安装。从表面来看,最终的系统是否纯净、是否安全,与Gho镜像...【详细内容】
2021-12-27  u盘装系统    Tags:pe工具   点击:(3)  评论:(0)  加入收藏
Safari是苹果在iPhone和iPad上的默认网络浏览器。虽然我们天天都在使用,但是,你是否深入研究了Safari的所有功能和设置?"无痕浏览"、"阅读器"视图和下载文件等标准选项只是其...【详细内容】
2021-12-16  趣玩公社    Tags:Safari   点击:(21)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个开源的 HTML5 视频播放器插件&mdash;&mdash;MuiP...【详细内容】
2021-12-16  GitHub精选    Tags:插件   点击:(23)  评论:(0)  加入收藏
给电脑安装软件,最让人担心的就是安装到“拖家带口”的,而这样的手法正是国产软件惯用的!全家桶自动安装、软文弹窗等等,这些让我们讨厌的却是软件的直接收入来源。 那么在你安...【详细内容】
2021-12-15  老毛桃winpe    Tags:软件   点击:(18)  评论:(0)  加入收藏
不知道你是否遇到过这么一种情况:在一个A4大小的图框画一个接近满框的图形,在打印的时候却发现图形很小根本不符合模型空间的实际情况。看似明显是比例问题,但又不知道究竟是什...【详细内容】
2021-12-14  设计师小仁君    Tags:CAD   点击:(21)  评论:(0)  加入收藏
哈喽大家好! 前几天一个朋友向我疯狂吐槽。 快到年底了,公司要统计年度数据。 需要把一月到十二月份,十二张表格的数据,全部汇总到一个表格内。 这样的数据汇报每年都会有,每到年...【详细内容】
2021-12-14  秋叶Excel    Tags:Excel   点击:(23)  评论:(0)  加入收藏
我发现最近不少小叶子的留言都和 Excel 相关,我寻思是时候出一期解决 Excel 疑难杂症的小合集了。于是毛毛在众多问题中,挑了三个被问次数最多的有关 Excel 的问题,今天就来给...【详细内容】
2021-12-14  叶PPT    Tags:Excel   点击:(30)  评论:(0)  加入收藏
大家好,我是Stark-C。油猴简介【油猴】一款免费的浏览器扩展和最为流行的用户脚本管理器,它是一个附加组件(扩展程序),让用户安装一些脚本使大部分HTML为主的网页改变得更方便易...【详细内容】
2021-12-13  什么值得买    Tags:油猴   点击:(46)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条