关于进程虚拟地址为什么是4G的讨论

重点:
因为我们平时用的机器一般是32位的,32位地址线能索引的最大内存量是4G,所以分配给进程的虚拟地址都是4G,而64位的这个值应该是4G个4G!

1、什么叫进程
当程序安静地躺在硬盘上时,它是一个“文件”,非要给点区别的话,它是一个“可执行文件”;而当程序运行起来,它就从硬盘上一跃进入内存,这时它就被叫做一个“进程/process”了。

2、什么叫进程
或许有些读者想打开机箱:明明只插了1G,甚至只有512兆的内存啊?操作系统如何给每个进程都分配出4 G的内存空间呢?在本章前部的《从代码到程序》一节,我们已经说过,程序运行在操作系统之上,要访问硬件,通过要假手操作系统。内存可是最重要的硬件了,元老级的操作系统确实允许我们直接操纵内存,但现代的操作系统都不允许了。这样,操作系统就有了玩猫腻的机会——当然,是在硬件支持的情况下。首先,预备的并不是真实的内存空间大小,而是“内存地址”大小,更严格地说,是内存的“虚拟地址”(真实内存地址称为“物理地址”)。如果我们把内存空间的最小单位想像成一个格子。那么内存地址就是格子的门牌号码。这里的4G,是指有4G个内存“虚拟地址”——再直白一点,就是每个进程可以获得4G个门牌号,而不是4G个真实的内存空间。房子少,门牌却多,这些门牌最终要挂在哪里呢?答曰:一部分挂到真实的物理地址上去,一部分可能被挂到“虚拟内存(硬盘空间)”上,还有很大一部分,哪儿也不挂,整个儿就是操作系统给进程开的白条。“虚拟内存”和“虚拟地址”没多大关系。后者是指操作系统分配给每个进程一致的,从“0”到“4294967295”的内存地址。前者则是指操作系统经常性地拿硬盘空间假装成内存空间欺骗进程。
有关4G内存空间的几个迷底我们一并揭开:第一、“内存不够,硬盘来凑”。但是,请注意:访问真实内存的速度,是“纳秒(十亿分之一秒)/ns”级,访问硬盘的速度,却是“毫秒(千分之一秒)/ms”级。程序需要读写(物理)文件很正常,但如果一个程序需要非常频繁地读写文件,就需要考虑其设计思路是否有问题。比如读取配置文件,一般被设计成在程序启动期间,读入内存,之后一直使用内存数据。如果在程序运行过程中,配置文件会被外部修改,则应争取设置成“通知”机制,即外部有修改后,程序能够收到一个通知,然后重读文件,而不应设计成每次需要配置,就从文件中读取(配置数据的使用频度往往很高)。第二、 虽然承诺是4G,但实际上这是一个按需分配的过程,绝大多数进程,需要的最多不过数百兆。操作系统分给每个进程是4G的内存虚拟地址(门牌),绝不是直接就给出4G内存(那样的话,系统直接挂掉了)。第三、 在4G里,还需要分出2G用来预留和其操作系统、和其它进程共享使用,这部分内存,当前进程默认状态下没有访问权限。第四、 最后一迷底很重要:谁负责内存“虚拟地址”与“物理地址”的变换呢?是硬件,主要是CPU。物理内存是兵家必争之地——至少未来十年之内还是——读写内存必须非常迅速,这件要求软件(包括操作系统)实现不了,只能交给硬件去做。而操作系统所做的,是屏蔽掉多数应用程序直接读写物理内存的权限。  上面的迷底一开,会不会让读者您很鄙视“4G空间”这一说了?且莫!通过“虚拟地址”的内存访问模式,称为“保护模式”,对应的,允许程序直接访问物理内存,称为“实模式”。“实模式”存在不少问题。比如,随便一个程序对物理内存胡作非为了,整个操作系统——甚至就是整台机器, 直接就宕掉了。再如,没有系统实现的虚拟内存时,程序必须自己处理如何将暂时不用的数据,存到硬盘上,等需要时,又如何读出来,令程序员烦不胜烦;现在有了4G空间,程序员一口气写6个程序,脸不红心不跳的,真是方便多了!

3、

ARM系列的MMU

ARM出品的CPU,MMU作为一个协处理器存在。根据不同的系列有不同搭配。需要查询DATASHEET才可知道是否有MMU。如果有的话,一定是编号为15的协处理器。可以提供32BIT共4G的地址空间。
ARM MMU提供的 分页机制有1K/4K/64K 3种模式. 本文介绍的是目前 操作系统通常使用的4K模式。
涉及的 寄存器,全部位于协处理器15.
ARM cpu 地址转换涉及三种地址: 虚拟地址(VA,Virtual Address),变换后的虚拟地址(MVA,Modified Virtual Address), 物理地址(PA,Physical Address)。没有启动MMU时,CPU核心、cache、MMU、外设等所有部件使用的都是 物理地址。启动MMU后,CPU核心对外发出的是 虚拟地址VA,VA被转换为MVA供cache、MMU使用,并再次被转换为PA,最后使用PA读取实际设备。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值