上一篇主要围绕内存的相关概念和特性做了阐述,这篇主要对内存的物理结构和特性进行描述。
- 内存物理结构
- 内存如何存取数据
1.内存物理结构
内存条主要由存储颗粒、各种控制元器件、金手指组成,而其中最重要的就是内存的存储颗粒。内存颗粒部件目前主要由外国厂商控制,虽然我们的国产颗粒也在奋起直追,但与国外大厂的差距还是挺大的,比较欣慰的是国产光威系列似乎评价还不错。
先来看一下内存条长什么样。上图就是内存条,内存颗粒就是上图中这些黑色的方块,这些方块里面大有洞天。我们将它放大看一下:
每个内存颗粒里面是有多层存储颗粒,这里是 8 层,每一层称为一个 bank。把这 8 个 bank 叠在一起就是一颗存储芯片 chip。每个 bank 是一个存储阵列,长得四四方方的,形状是一个矩形,上面是一个个的存储单元 Cell。bank 上面的这些存储单元会划分为行和列,所以 bank 可以利用行和列唯一定位到一个存储单元 cell 上。上图描述的每个内存颗粒的大小为 128MB,颗粒里面每个 bank 是 16 MB,每个 cell 的大小为 1 byte(字节,8 bits)。通常来讲,一个 cell 的大小也是 1 byte。
我们看到上面的内存条有 8 个内存颗粒,但有些内存条会有 9 个内存颗粒,多出来那个是用来做 ECC 校验的(用来保证内存的数据是正确的,不正确的话在很多情况下也能进行自动纠正),当然这是比较高端的内存条才用,一般用在服务器上,我们常用的内存条是没有这个功能的。
在双通道的情况下(这里插了四根内存条),内存的物理结构如下所示:
每个内存插槽表示为一个 channel,然后每个内存条会有两面的内存颗粒,那每一面都有八个内存颗粒,每一面的内存颗粒统称为一个 rank。上图中的 channel 0 的 DIMM0 与 channel 1 的 DIMM0 组成双通道,每个通道都有一个控制器(memory controller)进行控制。
2.内存如何存取数据
从上面的了解可以得知,内存的物理层级结构为:Channel(插槽) -> DIMM(内存条) -> Rank(面) -> Chip(内存颗粒) -> Bank(颗粒层) -> Cell(存储单元,由行列两个数值决定)。
那计算机是如何精确的获取某个位置的存储信息呢?这就需要用到内存的物理地址。
上图是个 32 位的物理地址示意图,每个物理地址都会由这几部分组成:Channel 信息、DIMM 信息、Rank 信息、Bank 信息、行数、列数。
CPU 如果要获取某个位置上的信息,那就得向内存控制器发送这么一个数据地址。内存控制器在接到 CPU 的指令后会根据这个物理地址将对应的位置上的存储单元信息返回给 CPU。问题来了,内存每次都是只获取一个 cell 上的数据(1 byte)吗?并不是。每个 chip 中还有一个行缓存,所以每次内存都会获取同一行不同列的数据,即 8 个 cell,而不单单一个 cell,即使 cpu 只需要其中一个 cell。
ps.欢迎关注官方公众号"哈扣"。
来源:oschina
链接:https://my.oschina.net/u/4732490/blog/4720484