为什么会有虚拟内存

一、虚拟内存

虚拟内存(virtual memory),“Virtual memory is a memory management technique used by operating systems to give the appearance of a large, continuous block of memory to applications, even if the physical memory (RAM) is limited. It allows larger applications to run on systems with less RAM.”。
为什么有物理实际存在的内存还非要搞一个虚拟内存出来?开发者在开发时分配出来的地址空间是在虚拟内存还是物理内存中?逻辑地址和物理地址有什么关系?什么是页?什么是段?等等诸如这些问题都会出现。
不过,所有学习过《操作系统》这门课程的的都了解上述问题中自逻辑地址和物理这些以后的问题。因为,教科书上都对这些问题有着很详细的说明。甚至如果遇到一个好的老师,可能会结合实例给大家去分析,抽丝剥茧,让大家心里明白儿的。
但前两个问题,特别是第一个问题,为什么计算机中要搞一个虚拟的内存出来,其实很多书上和资料上都是语焉不详。也有很人可能不关心这个,不少的老师也不讲这个。其实这是非常重要的一环,明白了这一个环节,很基础性的问题,就迎刃而解了。比如第二个问题,在开发时new出来的内存是虚拟的还物理的,如果是虚拟的,为什么会在物理内存中真实执行呢?

二、虚拟内存的历史发展

虚拟内存的发展历史并没有大家想象的短(当然,谈不到长,毕竟计算机出现也没多少年,普及计算机的时间更短)。1956年,德国物理学家Fritz Rudolf Güntsch开发了虚拟内存。虚拟内存系统的第一个真实例子是在英国曼彻斯特大学开发Atlas计算机时创建的。该系统使用了一种称为分页的方法,该方法允许将虚拟地址(由程序使用)映射到计算机的主内存。Atlas计算机建于1959年,1962年开始工作。
1959年,英国曼彻斯特大学开发Atlas计算机使用了一种称为分页的方法,即许将虚拟地址(由程序使用)映射到计算机的主内存,这是不是已经和现在的虚拟内存管理有了原则的一致性?该系统在1962年投入工作。而在1961年,Burroughs公司发布了第一台使用分段方法的虚拟内存的计算机。
1965年,IBM在其商业电脑系统中,实现了虚拟内存的应用,支持了多用户的分时操作。
到此,大家学习的OS中的现代内存的管理的基础就出现了。
随着后来大家熟悉的Unix系统和DEC系统的演进,使得这项技术进一步的发展。直到个人PC的出现,再到现在的X64以及云和虚拟化的实际需求的不断进步,对虚拟内存同样提出了更高的要求,这就使得这项技术仍然在不断的发展中。

三、虚拟内存为什么出现

其实虚拟内存的出现,包括现在仍然大行其道,一个重要的原因就是内存资源的不足,更准确的说,是程序对内存无限制的需求。一般大家都比较清楚早期的电脑各种资源是相当少的,比如内存只有K字节的大小,和现在动辄几十G上百G简直是天上地上。虽然内存发展到现在容量和速度都有了无法想象的提高,但和早期的电脑一样,仍然无法满足实际的需求。
由于对内存的渴求,导致内存资源的瓶颈,特别在早期的电脑中,是直接操作物理内存的。而为了解决这个瓶颈,就产生了一些解决的方法,比如大家熟知的二八定律,其实真正运行的代码只占一小部分,那么暂时不运行的可以让渡给运行的代码,但这样一来,就大增加的编程的复杂度。因为需要处理代码进退的机制和读写的安全控制,也增加了程序运行的风险。
计算机技术中有一个名言,就是直接解决不了的问题,可以增加一个中间层来解决。那么就有牛人试着在物理内存与内存应用中间增加了一层虚拟内存。即开发者不再面对物理内存直接编程,而是面对一个中间的虚拟内存进行编程,而这个中间的虚拟内存可以在每个程序面前都让其认为获得了整个物理内存,其空间地址在当下也是足够大。只要不触及到一些受保护的地址和意外,内存应用就能安全的展开。
至于虚拟内存何时真正调度到物理内存,这个可以交由专业的开发人员去开发并维护。这样的好处,估计所有的开发者甚至是不懂开发的人员都明白有多么大。其实这和现实世界中一样,每个人并不需要学会制造电视才能看电视,不是学会造汽车才能开汽车。他们有异曲同工的道理。
而这其中的关键就在于,使用虚拟内存与直接使用物理内存的成本、效率和便捷性的对比效果如何。而事实上,恰恰这就是虚拟内存的优势所在。虽然虚拟内存增加了一层,导致了一定的效率的降低,但这种效率的损失远远小于其它优势迭加的收益,不然,这项技术也早已消失在计算机发展的历史上了。
大家在生活中经常遇到身旁有人说一句话“快就是慢,慢就是快。”其实就是这个道理,它不是简单的字面意思,而在背后有一个逻辑存在,如果这个逻辑不存在,那么前面的话就不成立了。虚拟内存的本质就是更好的利用内存资源并简化内存应用的难度。

四、虚拟内存的优势和不足

虚拟内存对计算机应用的发展起着至关重要的作用,它的优势包括:
1、极大增强了安全性,包括内存本身使用的安全也包括对外界影响导致的内存安全性
2、良好的扩展性,它可以支持更大的程序,甚至这个程序需要的内存远大于实际的物理内存;同时支持各种内存映射和COW等功能
3、灵活性,它可以动态的隔离资源,支持更多的任务和进程的同时工作
4、稳定性,由于其资源应用的独立性,增强了内存稳定运行的级别
5、便捷性,通过中间的虚拟内存控制而非直接面向物理内存,大大降低了相关的编程难度,更容易实现各种内存模型的应用
但是,随着虚拟内存在更多领域的应用,其一些劣势也暴露出来:
1、性能问题,在云和虚拟计算中,内存映射的效率问题
2、内存碎片,这个是没有办法解决的,只能尽量减少
3、增加了内存维护的复杂性,虽然对上层应用变得简捷,但对整体内存的管理和控制,还是增加了很多
4、占用了资源,为了引入虚拟内存,其本身就必需使用一部分的内存,这在某些情况下,还是相当可观的
5、失去了实时性,这个很好理解,不断的转换的过程就是实时性丢失的过程

五、总结

本文不是讲虚拟内存技术本身或者说其技术的特点。重点是讲述为什么会存在虚拟内存,这是给后来开发者或者说设计者的一个解决问题的思路。活学活用别人的思想,真正领会这些技术架构的思想并学习和吸收成为自己的思想,才能更好的解决面对的问题,进而从整体上提高自己的技术。
最后,技术的发展,不是凭空想象的,它一定是实际需求推动的。所以理论和实践相结合,是重中之重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值