内存与地址

物理地址和物理内存

物理内存不需要我多解释,无非是真实的可见的物理存储器件,就像下面所画的一样,硬件电路通过总线能够依次查找到对应存储单元的值,物理上是高低电位,对应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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值