从0和1到代码
现在可以开始一个问题了:一个代码到底是怎么执行起来的?CPU内部到底是怎么工作的?
我们先来看看计算机内部的基本元素“0”和“1”。电影片段里黑客出场时一般都少不了如下图所示的“数字雨”特效:
0和1
那么,计算机中的“0”和“1”到底是什么?
简单,就是低电平和高电平的意思。
啥意思?
0其实就代表低电平,1代表高电平。这里所说的电平,意指电压的大小(单位,福特,用符号V表示),而高低其实是一种对比。
比如0.2V是低电平的话,那么5V可能就是高电平了。注意,我说的是“可能”,难道单凭电压大小还不能确定是不是高电平了?
是的,没错。高低电平的数值是由具体的电路来确定的,一般两者都有一个阈值,当电压大于某个阈值时,即是高电平;当电平小于某个阈值时,即是低电平。
计算机中的0和1是人类为了理解方便,给低/高电平取的别名。其实两种称呼分别代表了数字电路和模拟电路。
数字电路是电路是以“0”和“1”即相应的逻辑符号来表示的,如下图:
模拟电路是电路中以电压高低和电流等参数来表示的,如下图所示:
那么数字电路和模拟电路有啥联系?
唔···其实可以看做建筑施工图和建筑实物图的关系:数字电路主要是表现其逻辑和功能,模拟电路是搞定采用什么材料什么方式来实现数字电路想要达到的结果!
现在可以开始考虑:高低电平如何实现的?
二极管
二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件,具有单向导电性。
什么是单向导电性?先看下图,左图是一个二极管的实物图,右图是逻辑电路图(即抽象的):
注:二极管还可以分为整流二极管、稳压二极管、发光二极管等等,这里只介绍普通二极管。
电流可以从正(+)极流向负(-)极,此时处于导通状态;但反过来却不行,此时处于截止状态。这就是所谓的单向导电性!
附一张二极管的伏安特性图,看不懂也没关系,眼熟就好:
由于单向导电性,二极管就像是一个开关:
当处于导通状态时,开关打开,两边的电压大小一致。
如正极(+)电压为5.2V,那么负极(-)也为5.2V。
注:这里并不准确,因为还涉及正负极的电压大小、阈值电压等等,只考虑理想情况下,其他的可自行百度探索。
如果我们进一步把5.2V定义为高电平,那么此时正负极都是“1”!
当处于截止状态时,开关关闭,两边电压大小不一致。
如果正极只有0.2V,那么此时正负极可能都是低电平,也就是“0”!
逻辑运算与门电路
我们通过二极管可以获得“0”和“1”,但是光有“0”和“1”还不够,计算机怎么进行亿万级别的运算的?
这得慢慢来,要进行运算离不开逻辑运算,也就是门电路,常见的逻辑运算有与、或、非、异或、同或。它们的真值表与逻辑符号如下。
不用管逻辑符号,重点是真值表。
先以“与”来讲解:
“与”,即当且仅当所有的输入都为“1”时,输出才为“1”,否则输出为“0”。现在看真值表,是不是这个意思?
等等,好像我们是从二极管过渡到这的吧?这个与门可以用二极管实现?
当然啦!下图就是一个利用二极管和电阻(不用管)实现的简单与门!
其中,A、B为输入,Y为输出。
我们来分析一下:
若A为高电平“1”,B为低电平“0”,此时,D1截止状态,D2处于导通状态,Y就和B电压一致,也为低电平“0”,所以输出为“0”;
若A为低电平“0”,B为高电平“1”,此时,D1处于导通状态,D2截止状态,Y就和A电压一致,也为低电平“0”,所以输出为“0”;
若A为高电平“1”,B为高电平“1”,此时,D1和D2都处于截止状态,Y就和VCC电压基本一致,即是高电平“1”,所以输出为“1”;
注:判断电压的大小涉及电路中电流和电压的关系,简单来说,在一个电路中,电阻越大,那么该电阻所占据的电压也就越大,当二极管处于截止状态时,电阻可以看做超级大,所以R1分的电压就很小,输出Y和电源VCC基本一致。若想进一步了解请百度探索或留言,我继续更新。
与门在数字电路中还可以表示为“&”:
再来分析一个或门:当输入中至少有一个“1”时,输出为“1”,若全为“0”,则输出“0”。
刚刚的与门展示的是两个输入,现在来看看四个输入!
简单分析一下,当ABCD四个都是输入低电平“0”时,四个二极管都处于截止状态,此时输出即为低电平“0”。
只有当其中任意一个不为低电平时,若A为高电平“1”,此时D1二极管导通,输出即为A的电平,即高电平“1”。
或门在数字电路中还可以表示为:
后面的非门之类的,单靠二极管就不太行了,就需要请出它的老哥——“三极管”,这里暂时不介绍,我们只需要知道:我们可以利用这些元器件构成如上表所展示的那些门电路,现在我们要做的就是思考如何利用这些门电路来进行代码的执行!
手写操作系统(2)——代码是怎么运行的?(中):https://developer.aliyun.com/article/1508452