物理地址和物理内存
物理内存不需要我多解释,无非是真实的可见的物理存储器件,就像下面所画的一样,硬件电路通过总线能够依次查找到对应存储单元的值,物理上是高低电位,对应0/1表示。
————————————————-————————————————
| | | | | | | | | A
————————————————-————————————————
| | | | | | | | | B
————————————————-————————————————
| | | | | | | | | C
————————————————-————————————————
| | | | | | | | | D
————————————————-————————————————
1 2 3 4 5 6 7 8
比方这里A2就是第一排第二个存储单元,那么A2就是它的物理地址。假如现在你的电脑上插了1 个8GB的内存条,对应的就有8GB,也就是8589934592个内存单元。再假如现在你的电脑是32位的系统,那么cpu能寻找到每一个内存单元吗?如果能寻找到,那么对于32位操作系统最大的寻址能力是多少呢?对于64位的系统来说呢?这个问题下面解答。
二、内存寻址
假定没有内存管理单元(MMU)的支持下,对于32位操作系统而言,你给到CPU的地址是32位的,也就是一个long型的数据,所以最大的寻址能力就是2^32,也就是4 GB。所以,对于32位系统而言,你插个8 GB内存是有一半的空间,系统是没法寻找到的,等于浪费。而对于64位系统来说,寻址能力理论上可以达到2^64,但是,处理器所支持的RAM大小地址总线上的管脚限制,早期的Intel处理器只能支持4 GB寻址,从奔腾pro开始才出现了物理地址扩展的机制来支持更大内存空间,所以如果没有这个机制,或者这个机制被关闭,对于手机来说经常如此,那么内存寻址仍然只有4 GB。
但是,现代计算机都是会存在MMU的,这是一个硬件电路,能够将一个逻辑地址转换成一个线性地址,也就是虚拟地址。
三、逻辑地址和线性地址(虚拟地址)
逻辑地址,就是指机器语言指令中用来指定一个操作数或一条指令的地址,由一个段(segment)和偏移量(offset)组成,说地直白点就是CPU拿到的地址。
线性地址,也叫虚拟地址,就是题主所问的虚拟地址。值得注意的是这个地址就是一个32位无符号的整型数,所以虚拟地址空间总共就是4 GB大小。
系统中的每个进程所使用的地址就是线性地址或者说虚拟地址,而不是什么逻辑地址,更不是物理地址,所以对每个独立的进程来说,线性空间大小是4 GB是没有错的,且其中0-1GB的地址空间给予内核访问,其它3GB由每个进程自己访问。
那是不是说一个进程就只能访问4GB的物理内存大小呢?答案是否定的,具体访问到哪个物理地址要看MMU将线性地址转换后的物理地址才能知道,所以有可能两个进程的地址同时访问同一个物理地址,这在物理地址很小的情况下是经常会发生的事情。当然,同一时刻,一个物理内存单元只可能由某个进程来访问,至于具体原理,这个MMU来实现的,这里不细讲。
四、地址转换
有了MMU,CPU拿到的逻辑地址就可以经过它来找到对应的物理地址了。
MMU有两个硬件电路单元,一个称之为分段单元(segmentation unit)、一个称之为分页单元(paging unit),下面是它的工作原理:
--------------- --------------
逻辑地址 ----> | 分段单元 | ----> 线性地址 ----> | 分页单元 | ----> 物理地址
--------------- --------------
所以,如果系统、CPU、MMU和内存坐在一起,那肯定会发生下面的对话:
系统:CPU我给你个逻辑地址0xff84ed43,你去找到这个人
CPU: 好的系统,我去问问MMU。 MMU,我这里有个地址0xff84ed43,你帮忙找一下
MMU: 好的,请求分段单元,这个地址你先找到他家所在街道的地址
分段单元:报告,已经找到了他家所在的街道地址,地址是0x56ac21fe
MMU:好的,请求分页单元,这个是他家的街道地址,你找到他家住几号。
分页单元:报告,已经找到了,他家具体地址是0x12345678
CPU:谢谢,我这就去找他
虚拟内存(虚拟地址空间是不等于虚拟内存的)
虚拟内存是一种逻辑上扩充物理内存的技术。基本思想是用软、硬件技术把内存与外存这两级存储器当做一级存储器来用。虚拟内存技术的实现利用了自动覆盖和交换技术。简单的说就是将硬盘的一部分作为内存来使用。
摘录:https://blog.youkuaiyun.com/u014379540/article/details/52263114
https://www.zhihu.com/question/290504400/answer/485124116
4万+

被折叠的 条评论
为什么被折叠?



