早期的程序是直接使用物理地址的,现在有操作系统的平台一般都不会这么做,现在ARM平台都用虚拟地址。当然,如果非要拿它当单片机用也是可以的。
虚拟地址
一段程序就是CPU的一个个动作,每个动作就是做一个最简单的数学题,但是题从哪来呢?
我们知道,当给安装一个程序的时候,硬盘空间就会变小,因此可以初步判断,那一道道数学题是存在硬盘里的。
做题的是CPU,题目在硬盘,但问题是CPU不能直接访问硬盘,因为CPU只能记住几个数,现在的硬盘每次至少能给出512个字节,而且还很慢。
不过,CPU可以直接访问(先暂时认为是直接的)内存,我们是有办法把512个字节先放到内存,然后慢慢算的,这个过程先不讨论,先关心CPU怎么做内存里的数学题的。
题目在硬盘里之后,CPU就从某个地址开始,一道道地做题,把结果再放回内存某处,或者是根据结果控制其它硬件的行动。
现在电脑上运行的程序可不止一个哦。比如,我们可以同时开着下载器和播放器两不耽误,哪怕我们不用多核CPU,这也是可以做到的。那么问题来了,程序A可以读取程序B的题目或计算结果吗?换个问法,微信能读取支付宝的用户资料吗?当然是不行的,但是大家都用物理地址的话,只要把地址都读个遍,对方程序的题目就都能获得了,这题目就可能是对方的加解密算法哦。当然,自己也没有隐私可言。
有了虚拟地址就不一样了,每个程序有自己独立的地址空间,32位机一般是4G的空间,每个进程都可以认为这些空间都是属于它自己使用的,这个空间就是虚拟地址空间,没有人可以打扰的空间。