Counting is the regligion of this generation, it’s hope and salvation —- Gertrude Stein(1874-1946)
1 为什么采用2-补码(2’s complement)作为计算机的编码?
稍微有一点计算机基础的同学都知道负数可以用正数的补码+1表示,事实上这是非常重要的,下面总结用补码表示n-位二进制系统具有以下属性:
- 系统能对所有2的n次方个有符号数进行编码,最大的数和最小的数分别为2的n-1次方减1和负2的n-1次方
- 所有正整数的编码首位都是0
- 所有负整数的编码首位都是1
- 为了通过x的编码获得-x的编码,所有最右边的0和 从左边起的第一个1保持不变,然后将剩余的位取反。等价的捷径就是,对x的所有位取反,然后再加1,这个方案更容易在硬件中实现。
这种表示法使得任何两个用补码表示的有符号数的加法与正数的加法完全相同,比如(1110)+(1101)=1011(丢掉溢出位),刚好等于-5,而减法被等价为x - y = x + (-y)
2 ALU的原理以及实现
通过2’s complement我们可以发现现在已经可以执行几乎任何算术(加减)和逻辑(与或非多路转换等)操作了,那么这时候就需要通过封装来使用他们,实际上这又是一种通过抽象简化设计的体现,ALU从此应运而生了。
事实上在《计算的要素艺术中》已经对ALU的原理与实现有充分的说明,究其本质组合逻辑是对真值表的一个物理映射。
3 计算机系统结构的8个伟大思想
事实上,在任何计算机中,软硬件平台的整体功能都是由ALU和运行在其上的操作系统共同决定的。因此,当设计新的系统时,ALU应该实现多少功能,本质上是个性价比的问题。一般的原则是算术和逻辑操作的硬件实现成本较高,但是性能较好。(《计算的要素》中对ALU并没有实现乘除和浮点运算是对复杂度的一个权衡,对乘除和浮点运算会在软件层面给予实现),那么让我来谈谈计算机系统结构中的8个伟大思想:
- 面向摩尔定律的设计
- 使用抽象简化设计
- 加速大概率事件
- 通过并行提高性能
- 通过流水线提高性能
- 通过预测提高性能
- 建立存储器层次
- 通过冗余提高可靠性(在数据库中经常出没的冗余备份等等)
Reference
《计算的要素》
《计算机组成与设计-软件/硬件接口》