我是看了Code一书之后才开始学习操作系统原理的,感觉Code像是一本介绍一个多世纪计算机科学起源和发展的文学著作,但却将计算机的硬件和软件原理淋漓尽致而又浅显易懂的展现出来,俺是 相当 的怀念这本书呵呵。
Code --Charles Petzold
一、作者对二元码的强调:
1.1835年发明的摩尔斯电码在作者看来是理解计算机硬件的非常好的系统:
(1)摩尔斯电码的基本元素,反映在印刷上是“点”和“划”,如果用手电筒的话是“短亮”和“长亮”,如果发电报的话是“滴”,“嗒”。这种被称为“二元码”的东西的组合可以表示任意的东西。
(2)“二叉树”,作者用它来说明摩尔斯译码的过程。
2. 19世纪上半叶,盲人布莱叶发明了“布莱叶盲文”。其实质是六位的“二元码”,用凸和平来表示基本的元素。这样方便盲人触摸和其他处理,是对之前将字母按笔划凸印在纸上的一种本质上的改进。
作者强调了两个以后用到的概念:“转换代码”和“转义码”,名字翻译的不怎样,意思是:
在“布莱叶盲文”系统中,大小写和数字使用同样的编码,而采用之前加标识法来区分:
默认为小写;
“转换代码”:“标识之后的为大写字母“
“转义码”:“标识之后的为数字”
二、原电池原理:
电是现代机器的灵魂,原电池原理(18世纪末)也是现代电池的基本原理:
两个活泼性不同的电极都接触电解质,分别发生氧化(失电子)和还原(得电子)反应,当它们另一端接触时,产生电子的流动。
当我们将两个电极接触起来,其实只是加快(注意是加快)它的反应速度,产生期望的电压和电流。这意味着,普通的电池放着不用,总会报废的。
原电池的发明:
说起原电池的发明,有一段有趣的故事。1786年,著名的意大利医师、生物学家伽伐尼,偶然发现挂在窗前铁栅栏的铜钩上的青蛙腿肌肉,每当碰到铁栅栏就猛烈地收缩一次。这偶然的现象并没有被伽伐尼放过,经不懈的探索和思考,第一个提出了“动物电”的见解。他认为:青蛙神经和肌肉是两种不同的组织,带有相反电荷,所以两者存在着电位差,一旦用导电材料将两者接通,就有电流通过,铁栅栏和铜钩在此接通了电路,于是有电流产生,由于有动物电流的刺激,蛙腿肌肉发生收缩。
“动物电”的发现引起了意大利物理学家伏打的极大兴趣,他在多次重复伽伐尼的“动物电”实验时,发现实验成败的关键在于其中的两种金属--铁和铜,若把钩着蛙腿的铜钩换成铁钩,肌肉就不会收缩。他认为"动物电"的实质是金属属性不同造成的,不同金属带有不同的电量,它们之间必然存在电位差,若有导线在中间连接,就会产生电流,蛙腿的收缩正是这种原因产生的电流刺激的结果。
伏打经过反复实验,深入钻研,1799年第一个人造电源--伏打电池(伏打曾叫它伽伐尼电池)问世。
三、长途电报的核心技术使得计算机得以构造:
“两个单独回路的双向电报系统”为了节省导线,采用“共用一根导线的双向电报系统”,之后,这根共用的导线可以采用“大地”来但任,于是接地符号产生,电池也变为电压符号,再之后,为了使得长途电报成为现实,人们采用电磁铁为核心的“继电器”做为中继。
正是“继电器”,这种依靠电流进行工作的开关,使得计算机得以构造。
四、从印度起源的阿拉伯数字系统:
本质是与“位置相关”的记数系统。
这样的系统有几大特点:
(1)0的发明:以前的记数系统,像罗马数字,都没有0。在阿拉伯记数体系中,0的发明是用作“占位符”的,如:“1”要放在一个不同的位置来表示已经记满“10个”,于是在1后放上一个“0”,表示这个“1”位置上的意义。
(2)基本思想是:基于一个特定的数来进行记数,如“十”,那么就会在记到十个时,把记好的放到一边,怎么放呢,就用一个“0”来表示“1”的特殊位置,记为“10”,表明我们已经记好“十”个了。通过1~9九个数,加上0这个占位符,使得人们可以方便的记无限大的数目。“(1~9)(n个0)”表示的意义实现已经定义好。如100表示10个10。
(3)它的魅力在于:任何加减乘除运算,只需要记住1~9这九个数字的加减乘除运算即可。
其中,二进制记数系统是最简单的“位置相关”记数系统。四则运算表最简单。
1948年,二进制数(binary digit)被美国数学家John Wilder Tukey取名为“bit”。
而“digit”表示某种进制的一个基本元素,所以“bit”表示1或0中任意一个。谈有多少个“bit”,就是说有多少个1和0。在信息时代,bit已经被看做组成信息块的基本单位。
而我们生活中使用10进制的根本原因是:我们有十根手指头。
五、计算机“逻辑”的基石:比特
1、逻辑:哲学和数学的奇怪混合物;
2、比特:当用比特表示信息时只要将可能情况的数目数清楚就可以了,这样就决定了需要多少个比特位,从而使得各种可能的情况都能分配到一个编号
六、布尔代数:数字逻辑电路的强大理论支柱
1、布尔代数:
布尔代数是布尔在19世纪上半叶,成功得使用数学来做逻辑分析,使得亚里士多德的三段论终于可以用数学来证明。
他的贡献在于:
遵循数学本质,从中发展了不同于常见的以记数发展起来的数学——布尔代数。
比较:
数学本质上是:对操作数按操作符表达的意义进行操作,得出的结果也是操作数。
布尔代数是对逻辑的数学表现(逻辑,就是由条件推出结果)
布尔代数中,操作数为逻辑值:1和0,分别代表“肯定”和“否定”,并规定了三个基本的操作符:与或非,用以描述
生活中的三种基本逻辑场景:
与表示:要得出结果(是或否),需要考查两个条件的成立情况
或表示:要得出结果(是或否),只要考查其中一个条件的成立情况
非表示:要得出结果(是或否),要看其相反的情况
然后用基本运算(与、或、非)表,来表现了现实生活中的基本逻辑,这就是1和0来运算的本质:
运算符描述实际逻辑情况,1和0被当做实际条件作为值代入,按运算表(根据1和0的意义以及逻辑实际情况定制的结果)
运算,结果为1或0,以描述结果“肯定”或“否定”。要注意的是,所有的逻辑都可以由这三个基本逻辑来表现。
而所谓布尔“代数”,指的就是用“符号”而非确定的值来描述基本逻辑,而将1或0代入,表现的是在这种基本逻辑
下的代入这样的实际条件,再得出推理结果。
布尔代数的另一种形式是关于集合的:
这种形式的操作数和运算符和前面表现逻辑的布尔代数是不同的。
操作数有无穷多个:各种集合,而基本操作符有三个:与或非,但它们是用以描述集合的操作:
与:两集合相交的部分(子集合)
或:两集合相加(除去公共部分的一份)
非:除此之外
这两种形式的布尔代数应用的常见情形是:
第一种:判断结果(是非)需要考虑一系列条件的成立情况(是非)
第二种:描述一些确定条件并证明一些结论,如证明亚里士多德的三段论
不管怎么样,布尔代数都用以描述逻辑,而逻辑是哲学和数学的奇怪混合物,所以布尔代数是哲学和数学的奇怪混合物。
2、数字逻辑电路:
香农在1938年的硕士论文《继电器和开关电路的分析》中,指出并分析:布尔代数可以由电路实现,并可以指导电路设计!
引起这样思考的原因是继电器的使用:不同于传统开关,继电器用电来控制开关的闭合,所以输出的电压是由输入的电压决定的,而通电为1,断电为0,就可以实现布尔代数的第一种形式。
于是,自然而然得产生了“与”门,“或”门和“非”电路,对应于布尔代数第一种形式的“与或非”三种场景。随之,不考虑进位的“半加器”(二进制位加)和考虑进位的“全加器”(二进制位加,考虑进位)由门电路(包括与非,或非)和非电路设计出来了,这样,完成了到位加的上层逻辑,之后,把“全加器”拼凑,于是8位二进制加法器设计出来了,这样,完成了更上层的逻辑(二进制数加法),而计算机所做的唯一运算,就是加法运算,其他运算可以由加法运算得出,所以,呵呵。。。计算机就是布尔代数的精确演义!从底层逻辑到上层逻辑,非常精密!
七、无须做减法的机器:
对于人来讲,可能不管怎样变换,减法都得头脑“减一次”。