计算机基础

简单易懂的底层知识 —— 计算机的0和1是怎么产生的?

1.背景


在提到计算机时,我们常常会听到“二进制”这个词,或者看到有很多相关的图片,上面布满了密密麻麻的“0”和“1”,又或者有些视频在演绎高科技时快速闪过的这两个数字串成的一堆编码。那么我们的计算机是如何得到这些“0”和“1”的呢?

想象一下,我们有一个灯泡和一个开关,很自然地我们会想到有两种状态:打开或关闭。如果我们把灯打开,这个状态可以用“1”来表示;如果灯泡熄灭,我们可以表示其状态为“0”。那再想象一下有八个灯泡和开关,它们代表八位,状态为“0”或“1”,这就相当于计算机中一个字节(bite)有8个比特位(bit)。

让我们回到提花织机上使用的穿孔卡片。请记住,这种织机使用带有孔的卡片。当织机到达一个孔时,它会钩住下面的线,这意味着织机是开着的,而如果到达没有孔的位置,它就不会钩住线,所以它就处于断开的状态了。这是一个基本的二元概念,通过利用开或关这两种状态,Jacquard能够用他的织机织出复杂的织物图案。之后,这个行业开始进一步完善穿孔卡片。以此类推,如果有一个孔,计算机就会读出“1”来;如果没有孔的话,读数应该是“0”。然后,我们只需不断地转换“0”和“1”的组合,计算机就可以计算出任意数量的数字。

当今计算机中的二进制不是通过读取孔来完成的,而是通过晶体管进行电子信号的传输。如果有电压,我们把它表示为“1”;如果没有,我们就用“0”来表示。但仅仅拥有晶体管还不足以让我们的计算机完成复杂的任务。再想象一下这样的场景,如果你在房间的两端有两个电灯开关,每个开关都控制着房间里的一盏灯。当你用一个开关打开灯时,另一个开关却没办法关灯呢?这意味着房间的设计的确是不怎样的。两个开关都应根据灯的状态可以打开或关闭灯。幸运的是,我们有一种叫做逻辑门(logic gates)的东西。逻辑门允许我们的晶体管执行更复杂的任务,比如根据逻辑条件决定向何处发送电子信号,这里的逻辑条件为“真”或“假”,分别用“1”和“0”来表示。

2.晶体管的由来


我们知道,在计算机的世界里,只有1和0。从简单的数学运算,到画面美爆的3D游戏,都是由数不清的0和1构成的。颇有点道家的 “ 一生二,二生三,三生万物” 的感觉。我们也大概知道,用高电位(如+5V)去表示1,用低电位(如+0V)去表示0。那么如何控制高低电位的输出呢?

相信很多人还记得小学时学的计算机基础课,第一台计算机ENIAC(埃尼阿克)于1946年在美国宾夕法尼亚诞生,它由将近18万个真空管(电子管)组成,重大30吨,耗电量惊人。

ENIAC使用真空管来完成高低电位的输出。真空管是二极管的前身。在一个真空玻璃管中放置两个电极,就构成了真空管。通过给阴极施加电压,使其温度上升来释放电子。

此时若阳极处于一个稍微高一点的电位,真空管内的自由电子就会被吸引过去,将电路联通。

可以通过对阴极施加不同大小的电压,来控制阴极释放的电子的数量,从而控制电路的联通与否。以此来产生01信号。

真空管的改进版,是在真空玻璃管中间添加一个栅极(Grid)。通过对栅极施加不同的电压,使得它阻断或加强电子的流动,从而得以实现对电流的快速控制。

然而,真空管体型比较笨重,并且它是通过对阴极加热,来使得阴极释放电子,所以它比较不稳定,容易出现故障,并且耗电还高(想象一下计算机里的每个01信号都是通过对一个电灯泡进行加热来控制,而ENIAC就由将近18万个这样的灯泡组成)。不禁想起了三体里所描绘的人形计算机阵列,吓死宝宝了。

后来,聪明的科学家就发现了晶体管。

它使用了半导体来代替电极。4价硅,掺杂一些5价磷,来制造一个电子发射极NMOS(Negative Metal Oxide Semiconductor);4价硅,掺杂一些3价硼,构成了电子接收极PMOS(Positive Metal Oxide Semiconductor)。将P和N排列在三个交替层,构成了NPN型晶体管。每一层都带有一个Terminal。构成电子发射极(Emitter),基极(Base),电子接收极(Collector)。

电子从Emitter流到Base,产生的电流,称为基极电流(Base Current)

电子从Emitter流到Collector,产生的电流,称为集电极电流(Collector Current)

当我们施加一个微弱的电压在Emitter和Base之间,让它们之间形成电流,就会导通这个晶体管,在Emitter和Collector之间产生一个很大的电流。通常来说,在Emitter和Base之间施加一个>0.7V的电压,即可导通晶体管,产生高电位,再通过模数转换,变为信号1;

施加一个<0.7V的电压,晶体管不导通,产生低电位,即为信号0。

通过这种微弱的电压变化,来控制输出1或0。

相比于真空管,晶体管的优点在于它体积非常小,并且效率高(真空管需要通过加热阴极释放电子,而晶体管不需要加热,只需要控制微弱的电压变化,因为不需要加热,晶体管也更耐用,能耗也更低)。现代计算机的CPU芯片只有指甲盖大小,上面却布满了几十亿个晶体管,每秒可以进行上万亿次计算。一个主频为2.4GHz的CPU,简单地来讲,理论上每秒可以进行2,400,000,000次运算。

通过不断地断电,通电,来推动CPU一步一步地执行计算。一次通电断电,可以简单地认为是一个时钟周期,这个是通过时钟发生器来控制的,一个时钟发生器,每秒能振动多少次,就是他振动的频率,即时钟频率。时钟发生器也叫晶振,全称晶体振荡器,是从一块石英晶体上切下的薄片,再进行加工制成的。晶振为CPU提供了基本的时钟频率,它一下一下的振动,就像一颗搏动的心脏。

3.问题:是不是计算机存在的所有数据本质都是0和1 ,那么数据是如何记录在固态/机械硬盘里面的?


机械硬盘是磁记录。是靠磁头读取盘片上的磁场方向来区分0和1。你可以简单理解为磁盘上有很多很多非常非常小的磁铁,这些磁铁的N极或者S极的朝向决定了是0还是1。

硬盘上有无数小的单元称为磁畴,每个磁畴相当于一个小的条形磁铁。假如N级在上S级在下则为1, N级在下S级在上则为0. 硬盘的读取过程就是用一个小磁头去读取磁畴的方向, 写入过程就是用另一个相当于通电螺线管的磁头来产生磁场改变磁畴的方向。

固态硬盘的原理是通过存储电荷的有无来代表0和1:固态硬盘的每一个单元里有一个部分可以存储电荷,当存储电荷时为1,无电荷时为0. 这个电荷存储单元跟其他部分不是完全导通的,但是可以通过加电压使得电子从导线跳跃(隧穿)到电荷存储单元上,之后去掉电压电荷也不会被中和,从而达到存储的目的。存储单元有电荷与没电荷的时候电压特性是不同的,因此可以通过读取电压特性来读取0/1状态。

固态硬盘当中并没有“盘”,它的原理与U盘一样,是记录在一块集成电路(芯片)里面。这个集成电路称为NAND/NOR,也叫Flash ROM,属于EEPROM的一种

4.内存条内的数据:临时的、不可永久保存的


在计算机科学领域,内存条是一个非常重要的组件,它在计算机系统中起着至关重要的作用。内存条是计算机中用于临时存储数据和指令的设备,它允许计算机在执行任务时快速访问和处理数据。

我们需要了解内存条的基本工作原理。内存条是一个半导体设备,它由许多微小的晶体管组成,这些晶体管可以根据电压的高低来开关,从而实现数据的存储和传输。内存条的主要功能是临时存储数据,以便计算机能够快速访问和处理。当计算机从硬盘等外部存储设备读取数据时,这些数据会被暂时存储在内存条中,以便在执行任务时迅速访问。

那么,内存条是否真的存储数据呢?答案是肯定的。虽然内存条的主要功能是临时存储数据,但它确实存储了一些数据。这些数据通常包括计算机正在执行的任务所需的指令和数据,以及操作系统和应用程序的运行环境。当计算机执行任务时,内存条中的数据会被不断更新和修改,以便计算机能够根据当前的需求进行操作。

然而,内存条中的数据并非永久保存。当计算机关闭或断电时,内存条中的所有数据都会丢失。这是因为内存条中的数据是以电信号的形式存储的,而电信号在失去电源后会立即消失。因此,内存条中的数据本质上是临时的,它们会在计算机断电或关机后消失。

5.U盘里的数据不能存过10年


一般我们把数据存储在U盘里都是短时间、暂时性的,因此我们很少考虑到U盘里的数据保存时间能有多长,甚至小编一度也以为U盘里的数据只要U盘不坏,应该能存永久。但是仔细想想,无论什么东西都是有它的寿命的,U盘也一样,U盘的数据保存时间也是有限的。

U盘是用NAND Flash制作的,而NAND的问题在于时间长了被困住的电子会逃逸,也就是数据没掉了的意思,所以要定期插上给里面电荷充电,一般不能10年不通电,简单地说,U盘不能长期放着不插,更不能长期存放在潮湿的环境!

排在首位的是U盘、固态硬盘等使用非易失性存储器存储数据的设备。所有这类存储器,包括FlashROM、EEPROM、EPROM等,都依赖于内部的电路设计保持电荷来存储数据,但长期不通电的话,电荷会慢慢释放直到数据丢失。

接下来是常见的染料类型的刻录光盘,这类光盘无论从结构还是材料来说都不太稳定,染料层剥离、分解是很常见的问题。尤其是世面上充斥着的假冒伪劣盘片,可靠性极度可疑。

再接下来就是机械硬盘。虽然实际上如果能保持合适的温度湿度,在不受强磁场干扰的情况下,磁记录比半导体可靠不少,但是现代的机械硬盘也普遍使用可擦写的存储芯片来保存固件之类的控制程序和参数等信息,随着这些数据丢失,硬盘是大概率不能正常工作的。当然,在这个时候盘片上的数据可能还没丢,花点工夫能倒腾出来。

比硬盘好些的就是(软)磁盘和磁带了。它们一般使用介质和驱动器分离的设计,只要盘片和磁带本身不损坏,磁记录可以保持比较长时间,几十年前的磁带现在还能听是很常见的事情。但是麻烦的点在于后面要找到能读取它们的驱动器。

目前来说,最可靠的应该是压制光盘和千年盘,这两种只要反射层不坏,基本上数据就不会丢失。当然,问题依然是在几十年后找驱动器上。蓝光刻录光盘因为使用的是无机材料,据说能有20年甚至更长的寿命;还有一种名为“千年盘”的刻录盘,宣称可以由数百年的保存寿命,可惜没人能证明,不过我还是买了5张回来试试,不求真能保存几百上千年,只要能保存50年我就满足了。就是不知道50年后的光驱多少钱一台,是否还兼容蓝光。

就算存放了50年的硬盘,磁带等设备仍能完整的保存数据,但很可能与它们兼容的数据接口早已经成为历史了。

试想一下50年后,为了读取一块古老的SATA接口硬盘,可能需要能找到一台四五十年前的古董电脑,操作着熟悉又陌生的windows系统。就像2018年的我们,从仓库里翻出一块七十年代的8英寸软盘一样激动又无力。

网盘也不靠谱,互联网诞生半个世纪,中国加入互联网也不过三十年。网盘2000年后开始起步,国内网盘火热也是近十年的事。短短的几年时间多少曾经风光一时的网盘都已停止服务。这么重要的数据放在网盘,合适吗?

以我看来,以实体的方式保存数据应该是最稳妥的。

照片比较简单,激光冲印的照片过塑,存放在避光干燥处,50年肯定没有问题。

音频可以用Audition之类的软件转化为频谱图图片文件,同样激光冲印成照片过塑。记得备注一下音频采样率原始图片的分辨率,以便50年后将照片数字化后还能精准地转回音频文件。

U盘和TF卡等闪存中的数据是随着时间的流逝而逐渐丢失,所以几十年后肯定是用不了的。

而且你也不能保证几十年后的电脑还能读取这个U盘,毕竟30年前的硬盘软盘已经与现在的普通电脑不兼容了——即使它们完全没有损坏。

普通刻录光盘的寿命也就几年,所以很不安全,档案级的刻录光盘寿命长一些,但也很难达到50年的寿命,所以档案馆保存数字档案的做法是刻录光盘,一次刻录多份,并且定期翻刻(比如每年翻刻一次),虽然麻烦,但能保证数据的长期存储。(工厂直接压制的不可刻录光盘因为不需要修改内容,可以采用较为稳定的材料,所以寿命长一些,妥善保存的话,10年20年都不成问题,但个人要去工厂压制光盘好像不太方便)

对个人来说,最妥当的办法还是打印到纸上然后塑封,将塑封后的纸防潮避光保存,只要墨水不是太次,保存50年甚至100年都是没有问题的——现存的很多老照片在没有塑封的情况下已经保存超过50年了。这种方法也可以保存一些音频数据,比如1分钟长度的电话音质的音频,编码为文字符号以后打印到纸上并塑封,但是要记得把解码算法也打印保存,以便在未来的计算机上重新编程实现解码程序。视频数据因为数据量实在太大,所以这种保存办法并不适用。