"好记性不如烂笔头",读书笔记系列是为了记录自己的读书心得,文章内容一部分是摘抄原文,一部分是自己的理解和总结
本篇文章记录的是,来自李忠老师的《穿越计算机的迷雾》第二版
一、写在前面
上周末终于看完了李忠老师的《穿越计算机的迷雾》,从十一假期到现在,算算日子,读完这本书用了将近一个月时间
读这本书的目的是想补计算机组成原理的基础。早在读《穿越计算机的迷雾》之前,计组方面我已经学过了:
北京大学陆俊林老师的《计算机组成》视频公开课,和徐文浩老师在极客时间发布的《深入浅出计算机组成原理》专栏
读完《穿越计算机的迷雾》以后,给我最大的感受是:这是一本非常棒的科普书籍!
和之前的两个课程相比,它不会上来就讲原理,什么是冯·诺依曼结构、运算器、控制器、南桥北桥是什么、指令体系等等
而是从初中电学开始讲起,从电生磁到继电器的发明,从磁生电到电话的发明,一直讲到逻辑电路、触发器、布尔代数、寄存器、运算器等等
这本书让我明白,人类并不是一开始就知道:应该怎么去制造一台计算机的? 计算机的发明,是由无数前人智慧的结晶一步步演变而来
接下来我们跟随李忠老师的脚步,一起来探究计算机内部的世界
ps:限于篇幅,本篇文章在内容上有删减,建议阅读原著
二、穿越计算机的迷雾(1~4)
书本的第一章,作者花了一整章的篇幅来温习初中的电学课程,这里我们简单过一遍:
能够导电的被称为 “导体”,金属、电解液、电离的气体、大地等都是导体
不能导电的被称为 “绝缘体”,干燥的木头、智障、塑料、陶瓷等都是绝缘体
导体能够导电的原因,是它具有大量可以自由移动的带电粒子。电压推动电子往一个方向流动,则被称为电流
在第一章的结尾,作者介绍了电路图的起源,并教我们画了一个基础的电路图
图 1.8 文中图片均来自于《穿越计算机的迷雾》,后续不再重复声明
这些符号我们应该都还认识,从左到右分别是电源、开关和两个灯泡💡
用电来表示数
有了电路图的基础,接下来我们来想象一下,凭空出现了一个能计算加法的 “加法运算部件”
这个加法运算部件提供了a、b两个输入端,好让它知道要算的数是什么。当这个加法运算部件完成计算后,它把结果从 o 端送出来,如 2.1
图所示
图 2.1
现在,我要利用它来计算加法,假设我们要计算 1 + 2 等于几?
我们可以在 a 端加上 1V 的电压,在 b 端加上 2V 的电压,当运算完成后,用电压表测量 o 端就会得到 3V 的电压,这就表示 1 + 2 的结果等于 3。
如果我们计算的数值比较小,或者都是整数,上面的方案也未尝不可。但是,如果只是这样,那这个加法部件也没什么意义,我们必须想办法解决数值过大或者小数的情况
这时候,人们想起了德国佬,莱布尼茨。
莱布尼茨是伟大的哲学家和数学家,大约在1672—1676年的时间,他创建了二进制。二进制在创建之初,并非是为了电学服务的,只是无意间被创造了出来
在随后的历史进程中,人们发现可以用开关来表示二进制,就把二进制拿过来作为计算机的一部分
图 2.16
如上图 2.16
,当开关断开时,电流被切断,这代表 0;当开关接通时,电路中有电流通过,这代表 1
有了二进制以后,之前的加法部件数值过大的问题就迎刃而解了
图 2.19
如图 2.19
所示,图中的灰色方框通常代表一个具有加法功能的电路,由于我们现在还不知道它的内部构造,所以这里用一个方框来表示
这个运算部件的左边和下面各有 5 个开关,分别用于输入两个参与运算的二进制数
右边输出的5根线各自连接一个灯泡,当灯泡亮时,表明这一比特是1,否则为0,通过观察亮灯的情况,再转为十进制,我们就能知道结果是几了
好了,第二章到这里就结束了,接下来的第三章,我们将开始探究学会二进制怎么做加法?并设计出一个全加器电路,它可是图 2.19
中的灰色方框中的重要组成部分
二进制怎么做加法?
一个能够计算 5 bit 以内的的电路图在上一章节结束时已经画出来了
严格来说,因为结果端只有 5 个灯泡,所以上面的电路图最大只能得到的结果是 11111 ,也就是只能计算结果在 31 以内的加法
为了设计出能计算更大的数的电路,我们有必要来学习:二进制的加法
图 3.2
如图 3.2
,和十进制的加法一样,二进制做加法时,也是要先把两个相加的数右对齐,然后从最右边的列开始计算
根据下面的口诀得到一个计算结果:
- 0加0等于0
- 0加1等于1
- 1加0等于1
- 1加1等于0,进1
比如图 3.2
演示的,110 + 11 = 1001 ,翻译成十进制就是,6 + 3 = 9
1、什么是全加器
在计算几个二进制加法以后,我们发现了一个规律:既然加法都是按列进行的,而且每一列的计算过程都一样
那么完全可以设计一个电路来完成每一列的相加过程,如图 3.7
所示
图 3.7
接下来,我们要开始上一点难度了,注意听讲!
在图中, A 和 B 分别是来自‘被加数’和‘加数’的一个比特,它们正好在同一列上;
Ci 是来自右边一列的进位;
Co 是本列产生的进位;
S 是本列的“和”;
为了表明这个电路的用途,我们在图的中间加了一个符号 “∑” 。在数学中,这个符号用来表示 “加”
既然是一个电路,它肯定有一个名字。是的,它叫全加器。这不是一个很容易理解的名字,特别是这个 “全” 字
2、什么是半加器
既然有全加器,是不是还应该有“半加器”?
你别说,还真有半加器这东西。
但是,半加器仅仅是把来自被加数和加数的两个比特加起来,产生一个 “和” 以及一个进位,并不考虑从其他列来的进位
换句话说,它只是用电路来实现二进制加法口诀。全加器则不然,它真正实现了二进制加法中每一列的加法过程,所以它才叫做“全加器”
3、全加器的组合
有了全加器,解决了二进制加法过程中每一列的计算问题,那么,我们可以搞一大堆全加器,根据被加数和加数的比特数,把它们串联起来组成一个完整的加法电路,图 3.8
显示了这一过程
图 3.8
图中,参与相加的两个二进制数分别是 a2
/a1
/a0
(左上三个开关) 和 b2
/b1
/b0
(底部三个开关),组成它们的每一个比特都可以用开关的闭合与断开来得到
随着开关的闭合与断开,我们会得到一些二进制数,比如我们可以让 a2
/a1
/a0
= 110
因为被加数和加数各自用了3个开关,所以我们只能计算3比特的二进制数,比如110 + 101
如果我们仔细观察的话,会发现它很容易进行扩充,以计算更大的数,只需要串联更多的全加器即可
全新的开始,电与磁
全加器的事情到这里先告一段落,从第四章开始,作者将带领我们一起来回顾电与磁的历史
前几章介绍的二进制啊、全加器电路啊这些都先放一边,开始全新的旅程
1、电能生磁
老实说,尽管从表面上看计算机是神奇的、智慧的,但掩盖不了它实质上只是一种普通电器的事实
这也意味着,要想搞清楚它内部到底是怎么运作的,仅仅靠掌握一些简单的电学知识还不够,还必须了解另外一部叫做电磁学的历史。
没有它所提供的理论知识和电子零件,计算机的发展也就失去了最原始的基础
我们开始吧
1820年的一天,一个偶然的机会,奥斯特发现当电路接通时,离电线很近的磁针会发生偏转
奥斯特的偶然发现说明了一个事实,那就是,电流可以产生磁场
如果我们在一颗钉子上缠绕电线,通电以后这根钉子就会具有磁性,绕的圈数越多,磁力也就会越大,这被称为电磁铁,如图 4.1
所示
图 4.1
2、摩尔斯电码
电学发展的历史还在继续
电磁铁被发明出来以后,在1836年左右,美国发明家摩尔斯在此基础上发明了一种叫做电报的东西
它由不在一个地方的两个装置组成,用很长的电线连接起来
图 4.2
如图 4.2
所示,一旦开关闭合,电磁铁生效,衔铁臂(右上部分)就会被磁性吸引靠近电磁铁;当开关松开,电磁铁失去磁性,衔铁臂又在弹簧的牵引下回到原来的位置
摩尔斯在衔铁臂绑上了一支笔,并在笔的下面放一卷匀速前进的纸,当我们闭合开关时,在纸上打印出一个点 “· ”,闭合的时间稍微长一些,纸上留下一条线 “—” ,这称为“划”
我们可以不停的开合开关,在纸上打印出 "·—··—·——·—···——··—·—" 各种组合图案,再配上解析规则,比如,字母 “A” 是 ·—,字母 “V” 是 ···—,我们就可以通过这样的组合图案来发送信息了
这,就是摩尔斯电码的原理
3、继电器的发明
历史上第一份长途电报是在1844年5月24日发出的,这表明莫尔斯的发明已经具备了实用性
不过,如果线路太长,电阻就会变大。这样,在电报线路的那一头,微弱的电流将不能使电磁铁正常吸合,电报接收机也就不能正常工作
好在我们有继电器,继电器的发明其实比摩尔斯电码要更早一些
1831年,美国科学家约瑟夫·亨利用电磁铁发明了电动门铃,特别适合使用电线来进行长距离敲响门铃
然后于1835年发明电子继电器,它利用电磁铁在通电和断电下磁力产生和消失的现象,来控制高电压高电流的另一电路的开合
我们可以在发送电报的电线加装 N 台继电器,这样可以解决长距离输送,电流会变小的问题,如图 4.3
所示。继电器的数量,取决于电报的输送距离
图 4.3 继电器的本质是“续”电
4、磁也能生电
在奥斯特发现电流能产生磁场之后,人们想到,既然电流能够产生磁场,那么反过来,磁场能不能变成电流呢?
1831年的一天,英国的物理学家法拉第做了一个实验
图 4.6 法拉第用来将磁变成电的装置
如图 4.6
所示,左边的电线接开关和电源,这实际上是把整个大铁圈变成了一个电磁铁。
当闭合开关的时候,线圈中有电流通过,大铁圈就产生了磁场,变成了一个磁铁。右边的那个线圈接电流计,当他在给左边的线圈通电时,在电源接通的一瞬间,电流计摆动了一下
就这样,法拉第发现了,当导体在磁场中运动的时候,就能产生电流,磁生电就此诞生
三、结语
电与磁的历史终于结束了,但其实,为了不让文章看起来太长,我故意漏掉了原著中4.4、4.5、4.6 这三个小节的内容,它们分别讲的是:电话的发明、爱迪生大战交流电以及无线电通信的开端
感兴趣的同学可以寄几购买原著翻一翻
从第五章开始,作者将带领我们正式学习和计算机有关的知识,我们下篇文章见
最后,引用作者李忠的一句话作为结尾
"学习计算机就像是考古,我们学习知识不应该和游戏规则一样死记硬背,我更关心每个知识点背后的故事,知识怎么一步步来的"