1.内存简介

很多给给电脑加过内存条的朋友,并不陌生,下图就是一根16G的内存条
电脑增加了内存条之后,感觉电脑变快了,不卡了,这是什么原因呢?我们今天就来挖一下内存的工作原理。
首先简单介绍一下内存的基础概念,很多小伙伴误以为CPU就是内存,其实不是,CPU的组成元件里有寄存器,但是没有内存,内存是CPU之外的元件,
可以说是介于硬盘和CPU之间。内存用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存CPU进行沟通的桥梁,计算机中所有程序的运行
都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。

内存的运行决定计算机整体运行快慢。

总体而言,硬盘的的读写速度在毫秒级,内存的读写速度在微秒级,寄存器的读写速度在纳秒级;硬盘在断电后,数据是永久存储的,而内存和寄存器,断电后,数据就灰飞烟灭了。

那么,内存的速度为什么比硬盘快一个数量级?断电后,数据为什么就没了?它的内部结构到底是长什么样子呢?

2.内存构成最基本单元——电容

看过我们之前半导体芯片原理介绍的朋友,都知道数据在计算机中都是二进制的01,当然,内存中也不例外。

如上图所示,取两块金属板,金属板中间放一块绝缘体,金属板两边分别接入正电和负电,由于金属板的中间是绝缘体,

不会导通,因此两块金属板分别聚集大量的正负电荷,断开电源,两块金属板一边带正电荷,一边带负电荷,这就是电容,电容是一种储能装置,相当于一种电源。

将电容在电路中导通,它会将存储的电能快速释放为0,利用电容这种快速的充电和放电,就可以表示我们二进制中的0和1。

1个电容可以表示0和1,那么聪明的你,一定会想到,搞一排这样的电路不就表示了更多的0和1,恭喜你,科学家也是这么想的。这就是内存条存储数据最根本的原理。

但在实际制造过程中,为了更节省空间,我们会把电容造成圆形

3.内存的组成

每一个电容的充电和放电,都需要一个开关来控制,这个时候,聪敏的你又想到了我们之前讲的PN结造的晶体管,是不是正好用在这里,不错,科学家就是这么设计的。

如上图所示,电容接入一个晶体管,正常是不导通的,给栅极加压,晶体管导通(如果不清楚导通原理,请看晶体管那篇博文),电容充电,

一般把这种一个电容一个晶体管的结构称为1T1C结构,T是晶体管英文首字母C是电容英文首字母。

我们取多个电容排成一排,把导线给它延长,在晶体管导通的情况下,一个电容控制一位0或1,通过这跟导线就能读取到电容的的值,把这跟线称为位线。

接下来,我们给栅极这里也连接一根导线,一次就能控制这一行电容,提高效率,这条控制晶体管开闭的线,

中文叫做字线,英文叫做wordline,也就是一个电容控制1位,4个电容就是4位word,那么就是wordline,至于中文翻译的合不合适,大家自己品。

那么为什么要引出这么多线呢?只有一个原因,就是为了大量集中控制,看一个两排的电容,你就明白了

我们给第1排字线施加电压,第一排的电容导通,而第2排的字线不施加电压,它是不导通的,但是我们都可以通过这一根位线获取到信息,

反之依然。那么更多行更多列组合呢,如下图,就是我们实际的内存条。

一般底,纵向有65536行,横向有8192列,也就是说有65536根字线和8192根位线,哪一行字线被激活,那这一整行8192个电容,

就被接入到相应的位线上边去了,这样一个65536*8192的阵列,被称为一个bank,中文一般翻译为库,32个这样的bank就可以组成一个内存颗粒。

把这个内存颗粒包装一下,焊到一个电路板上,就是一根内存条了,然后就可以卖给需要给电脑加内存的你了。

那这个内存条是多大呢?我们不妨计算一下:

3.1. 单个bank容量
65536行×8192列=536,870,912 bit
转换为字节:536,870,912 ÷ 8 = ‌67,108,864 Bytes ≈ 64MB

‌3.2. 单个内存颗粒容量
32个bank:64MB × 32 = ‌2048MB = 2GB

‌所以说内存金贵,这样1个2GB的内存条,一共需要5.3亿个晶体管和5.3亿个电容,但是内存并不贵,也不大,那是因为晶体管和内存,已经被做的足够小,并且价格低廉。

4.内存读写原理

电容由于其物理特性,只能短期存储电荷,因此,即使在晶体管开关断开的情况下,它也会缓慢漏电。为了解决电容的漏电问题,科学家们想出了一个办法,那就是补电,

就是我们熟知的刷新操作,就是在电容漏电的时间周期内,我们给它把电补上,让它达到一个动态平衡,所以说,平常手机不用的时候,就应该把后台运行的进程都给杀掉,省电。

对于DDR 5的内存来说,电容充满电的电压是1.10v,表示的信息就是1,没电的时候就是0.00v,表示的信息就是0;

4.1内存刷新

每一次刷新操作前,先把所有的位线电压给拉到0.55v,然后将要刷新的那条字线激活,电压加到1.1v,电容导通变成1.1v,这个时候,电容的电压高,位线的电压低,

电容的电荷就会流动到位线上去,平衡后变成0.82v,在每个位线的末端,都有一个感应放大电路,它会检测到位线的电压升高了,它的作用就是将这个升高给放大,

放大到多大呢?放大到1.1v,此时位线的电压高于电容电压,位线反过来给电容充电,把电容给它充到1.1v,此时电容漏掉的电,就给他补上了。

再看另一个电容,电容为0v,而位线为0.55v,那么位线会给电容充电,位线电压降低,同样被感应放大电路检测到位线电压降低,那么把这个降低放大,放到多大呢?

放大到,把位线电路变为0v,那么电容的电荷也会全部溜走,变为0v。一次刷线操作就完成了,1.1v的电容电压被补到1.1v,0v的电容电压被降到0v,动态解决了晶体管的漏电问题。

4.2读操作

刷新完之后,你可能已经发现了,位线上的电压和电容上的电压是相等的,那么读操作只需要把位线上的电压数据读走就好了,1.1v表示1,0.0v表示0

4.3写操作

写操作就是将要写入的信号,用底下的这感应放大电路,通过位线传递进去,用位线反向给电容充电或者放电,达到覆写数据的目的。

只得注意的是,在写数据之前,也是要对该行进行一次刷新操作,因为一根字线控制的是一行,这一整行电容都导通了,如果不进行一次刷新,

我们要覆写的电容通过位线给电容充放电,而其他电容的电,通过位线就都跑光了。

整体总结一下,内存的基本元器件就是晶体管+电容,通过电容的充放电实现01的存储,又因为电容的漏电,内存不得不定期刷新,

这也就是我们买手机的时候,常说的内存的刷新频率,刷新频率也不是越高越好,毕竟耗费性能。