本课程是来自极客时间徐文浩老师的《深入浅出计算机组成原理》,这里是我的个人总结和理解,技术有限,还望海涵;
学习应用层的各种语言、框架,好比在练拳法招式,可以短期给予你回报,而深入学习"底层知识",就是在练扎马步、核心肌肉力量,是在提升你自己的"根骨"和"资质"。就好比张无忌学会九阳神功,其他武学皆一应俱通。
一、计算机组成原理概述
从肉眼来看,计算机是由 CPU、内存、显示器这些设备组成,但是日常开发我们见到的都是应用层面的东西,对于硬件和软件之间需要一座桥梁,计算机组成原理就是这样一个角色,它既隔离了软件和硬件,也提供了让软件无需关心硬件,就能直接操作硬件的接口。
从计算机组成原理出发,往上我们可以学习操作系统、编译原理等,往下可以学习数字电路等;
二、计算机的基本硬件组成
CPU(Central Processing Unit):全名叫中央处理器,是计算机最核心的配件,因为计算机所有"计算"都是由CPU来进行的,同时也是整台计算机造价最昂贵的部分之一,CPU是一个超级精细的印刷电路板;内存(Memory):Memory,编写的程序、应用、打开的浏览器、游戏等,都需要加载到内存才能运行,内存通常可以直接插在主板上,因为主板对其留了外设接口;主板:是一个有着多达数百个插槽的配件,我们的CPU、内存等都要插在主板上。主板的芯片组(Chipset)和总线(Bus)解决了CPU和内存之间如何通信的问题。芯片组控制了数据传输的流转,总线则是实际数据传输的高速公路,因此总线速度决定了数据能传输得多快;IO设备:输入/输出设备显卡(Graphics Card):主要用于图形界面操作系统的计算机(Windows\Mac),现在的主板都带了内置的显卡,如果用计算机做游戏或者跑深度学习应用,都需要显卡。显卡之所以特殊,是因为在显卡里有除了CPU之外的另一个处理器,就是GPU(Graphics Processing Unit,图形处理器),GPU一样可以做各种计算工作;
三、冯·诺伊曼体系结构
上面说的计算机硬件组成是我们平时用的个人电脑或服务器,与我们平时用的智能手机的硬件组成是不同的,因为手机尺寸的原因,手机厂商将CPU、内存、通信等封装到一个芯片,再嵌入手机主板,这种方式叫Soc(System on a Chip,系统芯片)。
虽然它们的硬件组成方式不同,但是它们都遵循着同一个"计算机"的抽象概念,那就是冯·诺伊曼体系结构,也叫存储程序计算机。
存储型计算机:包含两个概念,可编程和存储;可编程:可通过编程来实现不同的功能,而不需要改变底层的电路;存储:可通过加载不同的程序来解决不同的问题;
运算器:包含算数逻辑单元(Arithmetic Logic Unit ALU)和处理器寄存器(Processor Register)的处理单元,用来完成各种算数逻辑运算;控制器:包含指令寄存器(Instruction Register)和程序计数器(Program Counter)的控制器单元(Control Unit/CU),用来控制程序的流程(分支和跳转);存储器:存储数据和指令的内存,以及更大容量的外部存储;输入设备输出设备
任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备、输出设备中,而所有现代计算机也都是基于这个基础架构来设计开发;
四、计算机组成原理知识结构图
五、计算机的计时单位:CPU时钟
我们一般把性能定义为这样:
响应时间越短,性能数值就越大
如果我们现在要去比较某两个程序的性能,我们肯定会通过类似掐秒表的方式来进行对比,虽然时间是一个很好的用来衡量性能的指标,但是用时间来衡量时,有两个问题,第一个是时间不准,因为计算机上同时运行很多的程序,CPU是在不同程序间切换的,Linux有个命令 time ,返回三个值,real time就是运行整个程序过程中流逝的时间,第二个是user time就是CPU在运行你的程序,在用户态运行指令的时间,第三个sys time就是CPU在运行你的程序,在操作系统内核里运行指令的时间,程序实际花费的CPU执行时间(CPU Time),就是 user time + sys time
其次,即使我们已经拿到了 CPU 时间,我们也不一定可以直接“比较”出两个程序的性能差异。即使在同一台计算机上,CPU 可能满载运行也可能降频运行,降频运行的时候自然花的时间会多一些。
除了 CPU 之外,时间这个性能指标还会受到主板、内存这些其他相关硬件的影响。所以,我们需要对“时间”这个我们可以感知的指标进行拆解,把程序的 CPU 执行时间变成 CPU 时钟周期数(CPU Cycles)和 时钟周期时间(Clock Cycle)的乘积。
程序的 CPU 执行时间 =CPU 时钟周期数×时钟周期时间