本文是对王道计算机考研《计算机组成原理》课程的总结,主讲咸鱼学长讲的确实清晰。
王道考研《计算机组成原理》
由于我们学校已经开设过汇编和计算机体系结构,所以计组的笔记内容会比较精炼,不适合无基础人听。
如果有不理解的,可以回去看看我前面的CSAPP笔记和汇编语言笔记(不过我感觉还是没啥必要,我这篇文章更多的是总结性质,不适合入门学习)
CSAPP笔记:
第一卷:程序结构与执行——信息表示、指令、处理器、性能优化、储存层次
第二卷:在系统上运行程序——链接、异常控制流、虚拟内存
第三卷:程序间的交流与通信——系统级IO、网络编程、并发编程
汇编语言笔记:
汇编语言笔记——微机结构基础、汇编指令基础
汇编语言笔记——汇编程序开发、汇编大作业
汇编语言笔记——接口技术与编程
最开始计算机是没有内存的,程序员给条指令,计算机就执行一个行为。
冯诺依曼提出了储存程序
理论,程序记录了计算机要做的一系列流程,理应先放在储存器(内存)中,等计算机需要的时候按照规定顺序执行。
下图中,注意看实线,代表数据流。
输入设备把数据交给运算器,运算器和储存器进行交互,最后运算器再把结果输出给输出设备。控制器负责协调这4个部件,他只和储存器有数据交换,这是因为控制器需要从储存器中读取指令。虽然控制器负责协调,实际上还是以运算器为核心的。
现代计算器为了减轻运算器的压力,将储存器作为中心,整体运行没什么变化,只不过输入是先送到储存器中,储存器的数据也可以直接输出,都不需要经过运算器了。
这一节比较抽象,我学过5级流水线CPU了,所以就直接从宏观层面去总结。
首先是主存:
CPU和主存通过寄存器交换着三个数据:地址,数据,指令,看一下交互过程:
现在CPU已经把MAR和MDR集成进去了。
再说运算器:
运算器是一个计算核心ALU+三个辅助寄存器构成:
有时候要多执行一个周期,先去把内存的数放到辅助寄存器中,再进行一个周期的计算。
再论控制器:
控制器以CU为核心,IR和PC是两个辅助寄存器。IR存放指令内容,PC存放下一指令地址。
现在的CPU其实是把控制器和运算器集成在了一起,同时又集成了一大堆寄存器。指令的执行其实就是CPU和内存在反复打交道。
下图描述了一条指令被CPU执行的全过程。可以看到,无论是取指令,还是取数据,都要进行内存访问。
图灵机的神奇之处就在于,第一条指令存在IR之中,运行完毕后,会决定PC值是单纯+1还是做其他处理,也就是说一条指令可以决定下一条指令是什么,如此就可以自动执行,生生不息了,所以你的计算机只要开了机,指令就是在一直运行的。
计算机系统=软件+硬件/固件,实际上,在开发设计人员眼中,软硬件在逻辑上是等价的,乘法运算可以用软件去写(基于底层硬件),也可以直接用底层硬件实现,所以说软硬件只不过处在不同层次罢了。
从整体的角度来看,软硬件还可以继续细化成若干层,形成7(或者5)层结构,自下向上为:
程序员一般只能看到系统结构,再往下看不到了,也没必要看到。既然看不到,就可以说这就是透明的。(这个透明和生活中的透明正好是反过来的)
我们之前那本CSAPP,讲的其实是体系结构,而计组学的是组成,电子信息那帮人学的是实现。
CPU时间=通过CPU计算出来的时间=CPU消耗周期数/时钟频率。CPU时间仅仅是程序在CPU上消耗的时间,实际上消耗的还有其他部分,比如等待,调度啥的。
CPI即每条指令平均消耗周期,CPI=CPU时钟周期数/指令数
CPI还可以通过加权计算,CPI=不同类指令的CPI加权和。
通过加权公式可以看出,CPI受到权重影响,而不同程序会影响指令权重,所以CPI实际上受到程序影响。
CPU真正执行的时间=(指令数×CPI)/时钟频率,由此可得三个因素:
平时使用计算机,CPU时间太过理想,综合考虑各种因素,于是有了吞吐量这个衡量参数,更加实用。
吞吐量常用MIPS(Million IPS)衡量,即每秒百万条指令计算。为什么是百万呢。百万其实就是兆指令,对应6次方的MHz单位,通过CPU时间计算方便。
数据总线位宽
性能指标的评判要用到基准程序,其实就是我们说的跑分。但是这个东西只能参考,因为我们日常的使用场景是丰富的,基准程序只能测量某一个方面。
正如我们前面说的,CPU时间很复杂,受时钟频率,CPI,IC三者约束。
Amdahl定律用于衡量一个部分的性能对于整体性能的重要性,具体用加速比计算,加速比=改进后性能/改进前性能=改进前时间/改进后时间。原理很简单,改进的加速比取决于这一部分的占比(可向量化百分比)与提升空间(优化部分可以提升到什么程度)。