计算机的硬件组成
这些硬件,怎么对应到经典的冯·诺依曼体系结构的
除此之外,还需要了解计算机的两个核心指标
性能
功耗
性能和功耗也是大家在应用和设计五大基本组件中需要重点考虑的因素。
0.2计算机的指令和计算
需要搞明白,大家每天撰写的一行行C、Java、PHP程序,是怎么在计算机里面跑起来的。
了解大家的程序是怎么通过编译器和汇编器,变成一条条机器指令这样的编译过程(编译过程展开,就是编译原理)
知道大家的操作系统是怎么链接、装载、执行这些程序的(深入学习,就是操作系统)。而这一条条指令执行的控制过程,就是由计算机五大组件之一的控制器来控制的。
计算部分,要从二进制和编码开始,理解大家的数据在计算机里的表示,以及大家是怎么从数字电路层面,实现加法、乘法这些基本的运算功能的。
实现这些运算功能的ALU(ArithmeticLogicUnit/ALU),算术逻辑单元,计算机五大组件之一的运算器。
特别重要的就是浮点数(FloatingPoint)。
浮点数是大家在日常运用中非常容易用错的一种数据表示形式。掌握浮点数能让你对数据的编码、存储和计算能够有一个从表到里的深入理解。尤其在AI火热的今天,浮点数是机器学习中重度使用的数据表示形式,掌握它更是非常有必要。
0.3CPU的设计
CPU时钟可以用来构造寄存器和内存的锁存器和触发器,因此,CPU时钟应该是大家学习CPU的前导知识。搞明白大家为什么需要CPU时钟(CPUClock),以及寄存器和内存是用什么样的硬件组成的之后,大家可以再来看看,整个计算机的数据通路是如何构造出来的。
数据通路,其实就是连接了整个运算器和控制器,并最终组成了CPU。而出于对于性能和功耗的考虑,你要进一步理解和掌握面向流水线设计的CPU、数据和控制冒险,以及分支预测的相关技术。
既然CPU作为控制器要和输入输出设备通信,那么大家就要知道异常和中断发生的机制。在CPU设计部分的最后,偶会讲一讲指令的并行执行,看看如何直接在CPU层面,通过SIMD来支持并行计算。
0.4存储器的原理
通过存储器的层次结构作为基础的框架引导,需要掌握从上到下的CPU高速缓存、内存、SSD硬盘和机械硬盘的工作原理,它们之间的性能差异,以及实际应用中利用这些设备会遇到的挑战。存储器其实很多时候又扮演了输入输出设备的角色,所以你需要进一步了解,CPU和这些存储器之间是如何进行通信的,以及大家最重视的性能问题是怎么一回事;理解什么是IO_WAIT,如何通过DMA来提升程序性能。
对于存储器,大家不仅需要它们能够正常工作,还要确保里面的数据不能丢失。于是你要掌握大家是如何通过RAID、ErasureCode、ECC以及分布式HDFS,这些不同的技术,来确保数据的完整性和访问性能。
计算机组成原理的学习办法
相较于整个计算机科学中的其他科目,计算机组成原理更像是整个计算机学科里的“纲要”。这门课里任何一个知识点深入挖下去,都可以变成计算机科学里的一门核心课程。
程序怎样从高级代码变成指令在计算机里面运行,对应着“编译原理”和“操作系统”这两门课程
计算实现背后则是“数字电路”
如果要深入CPU和存储器系统的优化,必然要深入了解“计算机体系结构”
操作系统原理就是讲操作系统的,比如怎么管理内存,怎么管理文件,怎么管理进程。
计算机组成原理讲的是计算机硬件各部分的组成与协作,比如怎么取址,内存怎么构成,磁盘的磁臂磁道之类的。
编译原理,讲的是怎么将高级语言(比如c,java)翻译成机器语言的过程与技术。