《C专家编程》虚拟内存

以下全是个人理解的大白话,仅做总结,如不对,请评论探讨纠正

参考《C专家编程》7.3章节

虚拟内存这个概念存在于通用计算机中。

什么是通用计算机?

        通用是针对软件通用来说的,一台计算机,能够跑很多不同的人编写的程序。

        物理内存只有一块,假如是4GB的大小,如果没有虚拟内存,为了不产生冲突,每个人的代码在编译的时候,就必须考虑其他人的代码放置的位置,否则运行时,将产生不可预测的行为。当然如果你的计算机只运行你一个人的程序,这些都可以忽略,你完全可以为所欲为的安排程序的地址,只需要遵循芯片的启动的寻址即可

        

        怎么让程序员A不用考虑程序员B的程序地址,只要编译就能直接运行。那就是让每个程序员都能使用4GB的地址空间,但是这是芯片和操作系统的小把戏,实际的物理内存还是4GB,只是让每个程序员有错觉,自己拥有完整的4GB空间!

如何做?虚拟内存!

虚拟内存技术,把需要运行的程序的一部分加载到物理内存中,如果访问的数据或代码不在物理内存中,则将发生内存页的换入和换出。

什么是页?

是MMU管理内存映射的单位,具体要看MMU的数据手册。MMU是一种硬件芯片。这里面又涉及很多其他的知识了。

虚拟内存的理论基础

程序的局部性原理!程序的代码执行是顺序的,比如一个函数的代码肯定是被编译在连续的存储空间内,所以在执行一个函数的时候,该函数一般都是被完整的换入到了物理内存中,不会发生缺页的情况!如果代码的函数调用很频繁或类似goto的无条件跳转很多或指针用的多,可能会拉低执行效率,当然这可能在MMU的执行算法中得到了缓解。具体可以看看MMU的实现原理。

跟cache的关系

cache解决的是数据的访问速度的问题。CPU和物理内存之间的运行速度差异太大导致物理内存拉低CPU的执行速度,因为CPU没有获取到数据或代码必须要等待!cache可以放到CPU和MMU之间或MMU和物理内存之间(《C专家编程》这本书的说法)

虚拟内存解决的是通用计算机有限的物理内存运行多个程序的问题。

相似性:都是利用程序的局部性原理,都涉及到数据和代码的换入和换出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值