内存的那些事
内存:一个让人happy的东西
转眼大学毕业已经7年了,依稀记得刚步入大学,怀揣着对大学的生活的向往和对新知识的渴望,走进自己的大学宿舍,一起看了四年的记录片,最后确实增长了不少姿势。所以讲了这么多,有没有了一些画面感。这些画面感也全部是存储在我们大脑里,挥之不去。
最新的哈弗发布了一篇关于人脑记忆的结构图,论证了一些人脑如何规划信息,存储信息,查询信息的方式,总结一下主要依赖各种神经元的组合形成。如果想转行生物或者心理学的同学,这里给你们一个传送门。
单根内存是这样的
类比于人类,内存就如临时记忆的存储器,可以用作临时数据的存储,可以用于长期数据的中转(外设交互)。单独看一根内存条,如下图:

内存条主要有下面几大部件组成:
- PCB( Printed Circuit Board):中文名称为印制电路板,又称印刷线路板,主要承载芯片和电路线的板子
- 针脚:主要用来连接主板电路的接口
- SPD(Surge protection Device)芯片: 浪涌保护器,用来平衡电路信号的芯片
- 内存芯片:主要通过存储颗粒来存储数据,说到存储颗粒,也就是我们现在炒的很热的晶元电路了。把内存芯片放大来看,其实就是一个存储矩阵,每一个存储矩阵都是由纵横两级电路加上一个电位器控制形成的存储单元,存储大小为1bit。
![]()
电路通过列地址和行地址来确定寻址空间,最后结合时钟电路,来触发读写动作,使电容芯片进行充电或者放电动作,来实现0或1的存储,最后又由一列数据来标识一个特殊的含义,也就实现了于CPU的对话啦。
内存在主板上的分布
内存主要会提供给CPU使用(当然也可以通过DMA的方式提供给其他注册好的设备使用)。如下图所示简化的电路图。(中间的TC5517为一个2K的内存芯片)

从图中的TC5517来看,内存4类引脚
- 地址引脚:主要用来和CPU寄存器交互进行地址寻址使用。
- 数据引脚:主要用来和寄存器,外界存储进行交互,实现数据存储和读取。
- 控制引脚:主要实现数据库读写控制,信号平衡控制
- 电源引脚:为芯片提供必要的电信号
架构的区别
按照主板上的分布和于CPU交互的架构来区分,又可以分为UMA架构和NUMA架构,他们都是SMP的一种。SMP称为共享存储型多处理机(Shared Memory mulptiProcessors), 也称为对称型多处理机(Symmetry MultiProcessors)。

对比一下各类架构的优缺点,下面我整理了一个表格
| 序号 | UMA | NUMA |
|---|---|---|
| 1 | UMA代表统一内存访问。也就是所CPU不管访问哪一块内存,访问速度都是一致的。 | NUMA代表非统一内存访问,CPU到不同的内存有不同的路径延迟,有两类内存(本地内存和远端内存) |
| 2 | 在统一内存访问中,使用单个内存控制器。 | 在非统一内存访问中,使用了不同的内存控制器。 |
| 3 | 统一内存访问比非统一内存访问慢。 | 非统一内存访问比统一内存访问快。 |
| 4 | 统一内存访问的带宽有限。 | 非统一内存访问比统一内存访问具有更大的带宽。 |
| 5 | 统一内存访问适用于通用应用程序和分时应用程序。 | 非统一内存访问适用于实时应用程序和时间紧迫的应用程序。 |
| 6 | 在统一内存访问中,内存访问时间是平衡的或相等的。 | 在非统一内存访问中,内存访问时间不相等。 |
| 7 | 统一内存访问中使用的总线有3种类型:单,多和交叉开关。 | 在非统一内存访问中,有两种总线类型:树型和分层总线。内部通过QPI总线连接 |
总结
这边文章主要从微观到宏观(主板级)认识了一下内存是个什么东西,内存对于电脑来说是一个分钟重要的存储,后续的学习中,我们将要慢慢介绍一下Linux如何管理这些地址空间和数据的。(大家如果有对NUMA架构感兴趣的可以私聊,里面还是有很多好玩的东西的。)


浙公网安备 33010602011771号