OK,这篇文章就是从数字逻辑的角度看内存的。众所周知,我们知道硬件是软件的底层,而数字电路是硬件的底层。我们经常站在系统级(操作系统)去看待内存,去学习他在操作系统中和CPU,进程线程,磁盘等的关系,这些都是逻辑层面的,或者说是计算机系统中的“内存之上”,而今天我想说的恰恰是“内存之下”。
从0到1
假设现在我们知识的顶端是数字电路,往上我们一无所知,如何设计出内存?
首先要解决的就是信息存储问题吧。内存能存储许多数据,我们先来个简单的任务:如何存储一位0/1bit数据?
你一定知道我想说什么,那就是:触发器。(当然,还有其他元件比如锁存器,他们各有特点,这里我们就主要介绍触发器了)
触发器是能存一位0或1的一个电路,触发器由很多类型,比如JK除法器。
好吧,你看出来它是个电路了,那他为什么能存储信息呢?
我们尝试画一下这个电路的真值表。
我们发现,JK=00时,每个CLK来时,我们输出端的值不改变,也就可以理解为保存了这个状态。同理,当JK=01和1=时,可以改变状态。当JK=11时,状态交替。
其他的触发器有其他的逻辑,但是本质都是不变的:我们可以控制除法器的参数,使得这个电路达到我们想要的目的:保存信息,或者改变信息。
从1到N
我们解决了数据存储从0到1的问题,这是最困难的问题,是跨时代的进步。接下来从1到N,就非常简单了。能存1个我还不会存100个嘛?找100个相同结构的触发器“并”起来不就行了?因此,寄存器就诞生了。
寄存器是由N个触发器并行方式输入并且并行方式输出的数字电路。
从N到无穷
有了寄存器,我们能不能存储更多的数据?可以。我们需要将维度扩展,将一维变成二维,三维…
存储器就诞生了。
存储器按照堆栈/队列的方式排起来,就可以存储更多的数据。后来还设计出了更加复杂的存储元件,比如RAM
每个数据都有自己的地址,因此我们可以精准的存/读数据。
我们对于存储的设计,会使得我们的存储愈发大规模and高效。
比如SRAM
比如DRAM
比如ROM
人类对于“机器存储信息”这件事情的追求永远在路上,未来量子计算机等科技的发展,可能会打破目前的既有模式,我们会找到新的存储信息的方法。但我们的使命不变,“0-无穷”,存储信息,永远在路上。