内存是什么?一文搞懂内存是怎么实现的
内存最小单位是一些类似于二极管这样的东西,它能存储一个电状态,高或低,可表示 1 或 0;
这些单元经过组织起来保存数据,组织的方法是 8 个编成一个字节,4 个字节一个字,每组数据都可以读写;
这些单元按照顺序排放后用地址编号,按照地址可访问其中的任一个字、字节;
这些电路访问时由两组数据连线:地址线和数据线,比如都是 32 位的,地址线描述要访问的具体单元,数据线存放要给这个单元赋值的数据(写访问)或读出的数据(读访问);
这些单元上电时才能保持状态,所以内存你一掉电(关机),其中的数据就丢失了。
【纯干货】耗时数月吐血大整理十万字《深入理解Linux内核》要点笔记总结(高级程序员必备)
【纯干货】耗时数月吐血大整理五十万字《Linux内核网络内幕》要点笔记总结(高级程序员必备)
【纯干货】耗时数月吐血大整理二十万字《Linux内核设备驱动开发》要点笔记总结(高级程序员必备)
硬盘存储器中,所存储二进制信息的两种状态是用什么表示的?
用两个不同方向的磁化,来表示数码 0 和 1。将磁性材料均匀地涂覆在圆形的铝合金载体上就成为硬磁盘盘体,当磁头上的写线圈中通过一定方向的脉冲电流时,磁头铁芯内就产生一定方向的磁通。在磁头缝隙处则会产生很强的磁场并形成一个闭合回路,磁头下方硬磁盘盘体上一个很小区域被磁化形成一个磁化元(即记录单元)。若在磁头的写线圈中通过相反方向的脉冲电流,该磁化元则向相反方向磁化。如果某一个方向的脉冲电流将磁头下方硬磁盘的极小区域磁化为信息"1"的话(写入"1"),那么相反方向的脉冲电流就会将磁头下方硬磁盘的极小区域磁化为信息"0"(写入"0")。也就是说,硬盘中的"0"和"1",是用盘体上磁化元的不同磁化方向来表示的。
本文讲内存的实现,从底层的二极管到内存的电路结构,本章逻辑线路为:电路-->二极管-->逻辑门-->组合逻辑单元 j 和存储单元-->内存
我们知道计算机本质是在做 0 和 1 的二进制运算,那么内存从抽象意义上看也是保存着 0 和 1,那么问题是怎么保存这些 0 和 1 呢?下面就说说内存的硬件实现哈。
学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈
内核资料直通车:Linux内核源码技术学习路线+视频教程内核源码
电路
先从一个简单电路看起:
二极管
然而我们要控制二进制,在计算机里我们用两种互补的二极管(CMOS 即 n-MOS 管和 p-MOS 管)实现这个开关,这两种原理如下:
MOS 管,栅极端(Gate)通电后,则电路联通,栅极断电则电路断开
p-MOS 管反过来,栅极端(Gate)通电后,则电路断开,栅极断电则电路联通(提示:小圆圈表示“非”,即取反的意思,若输入为 1,流经小圆圈后则变为 0)
逻辑门
通过这些二极管的组合,我们可以实现计算机里的“与”、“或”、“非”逻辑电路。
非门(NOT):
或门(OR):
与门(AND):
既然知道逻辑门的二极管实现后则可以用符号替代这复杂的底层实现。
看完了逻辑门,紧接着看计算机内的逻辑单元。逻辑单元可以分为两类:
一类不可存储信息的(组合逻辑单元)
另一类可存储信息(存储单元)。我们分别介绍和内存相关的几个结构。
组合逻辑单元:
不可储存信息的结构:用于计算或控制二进制
译码器:依据输入端的二进制,在输出端选中某一条电路
如图,如果 A=0,B=0,则选中最上面的那条线
多路复用器:根据控制信号,只选择输入端的某根电路,把这根线输出到输出端
如图,若 S1=0,S2=0,则 A 线路被选中,A 的值即是输出值。
存储单元
可存储信息的结构:可用于保存二进制
门控 D 锁存器
WE=0 时(不可读写),S 和 R 必为 1,则电路稳定,out 端可保持原来的值
WE=1 时(可读写),则根据 D 的值,out 端变为对应的值。然后恢复 WE=0 则保存起来
寄存器:
一个门控 D 锁存器只能保存一个 bit,则组合起来就能保存 n 个 bit,这就是寄存器
介绍完这些组成结构后,我们终于可以讲解内存啦!
内存
先介绍两个概念:
寻址空间:即能保存多少个内存地址,我们通常意义上的 4G 内存,就表示计算机能保存 2 的 32 次方个地址!能保存这么多地址,也就能找到这些地址上的二进制信息
寻址能力:每个地址里具体存多少个 bit,由于历史原因,绝大部分计算机都是 8bit 的寻址能力。
那么我们来看一个超简单的内存哈。这个内存是 2 的 2 次方的寻址空间,即只能查找 4 个地址。寻址能力是 3 个 bit,即每个地址只能存 3 个 bit。
如图
内存的寻址由一个 2 个输入的译码器实现。译码器根据 A1 和 A2 的输入,选中对应的一条线,即找到地址对应的存储空间。
内存存储信息的能力具体实现是由门控 D 锁存器保存 bit 信息。
读取内存的输出由多路复用器实现。根据寻址时译码器选中的某一个线路,每一列的多路复用器只能输出那个线路的对应的那个门控 D 锁存器保存的 bit。则最终的三个 bit 都是由同一个线路对应的三个门控 D 锁存器的输出。
这就是内存的实现原理了哈。
评论