1. 简单介绍
三月份的一个主要任务是学一门计算机科班的基础课程————《计算机组成原理》,在学之前对这部分的知识似懂非懂,没系统学过所以也不清楚它到底包含哪些知识点,但学完之后又能和本科时期学过的一些课程有了联系,比如最基础的模电和数电,想起之前课设的时候大家熬夜在宿舍做LED时钟显示器的情形,那个时候真的是平时不学习、期末抱佛脚,稀里糊涂四年时间就过去了,算是过的最舒服的几年时光了。但出来混,迟早要还的,现在开始学这些基础课程了。
计算机是一个复杂的结构,深挖计算机的第一性,从最基础的物理知识开始:
- 电路:I=U/R,涉及的硬件有电阻、电感、电容,也有电磁学相关的内容,是信息时代快速发展的基石。
- 模电: 用连续电信号作为信息载体,处理的是连续变化的模拟量电信号(即其幅值可以是任何值),如无线电、收音机等。不做深入了解。但基础元器件还是三极管。
- 数电:主要是针对数字信号处理的模块。数字集成电路的运行以开关状态进行运算,它的精度高,适合复杂的计算。数字电路只要能区分高电平和低电平即可,数字电路不仅能完成数值运算,还可以进行逻辑运算和判断,因此数字电路又称为数字逻辑电路。基础元器件还是三极管,也即晶体管,现在芯片中的基本单位就是这个玩意儿,其尺寸已经达到纳米尺度了。数电中我们需要理解的是与或非门电路,这是构建复杂计算逻辑组合电路的基础。
- 计算机组成原理:在数电原理基础上,构建的复杂电路。主要包含的硬件模块有:总线、CPU、主存、I/O设备。下面分别进行简要总结
2. 简单分模块总结
- 总线。可以理解为分布在计算机中用于各模块之间通讯、数据传输的线。各模块发出或者可以接受从总线上传输的数据,数据传输的速度和总线的频率和宽度相关。一般我们说的总线是系统总线,这里面又分为控制总线、地址总线和数据总线。此外,CPU内部也可能有用于在cpu内部进行数据和命令传输的总线,可称为内部总线。此外,I/O设备也可以拥有独立的io总线。总之,这些总线都是为传输信号工作的,为了使传输信号更快,总线的连接通路会更多,导致系统看起来非常复杂。
- 主存:在计算机运行期间存储数据和代码,CPU在运行期间直接从主存中存取指令和数据。将其理解为一个非常大的数组即可,且可以根据地址高速随机访问。
- CPU:这是整个计算机的控制计算中心,所有的任务都是在这里执行的。逻辑上主要包含四个组件:寄存器、ALU、CU和中断系统。
- 寄存器是用来临时存储一些从内存中拿来或者ALU计算结果的存储单元,如通用寄存器,还有一些是专用寄存器,如PC用于存储下一条指令在内存中的地址,还有状态寄存器。各种cpu其寄存器配置不尽相同,功能都是用来存储的,是计算机中最快的存储器;
- ALU用做算数逻辑运算,包括浮点、定点的加减乘除和逻辑与或非等能力,这个模块只要理解为按照既定的电路做算数逻辑计算即可,内部设计的组合逻辑电路各个芯片大同小异,有的还复用电路即可用做浮点计算也可以做整形计算,至于对输入的数据做何种运算,是由CU给出的信号(+-*/ &|!)决定的。
- CU是核心部件,用于将PC中的指令进行解析,讲指令由操作码+操作数组成,CU会将操作码解析为硬件命令信号,将操作数从内存中加载到约定好的寄存器并按照命令运算。这个过程细分为取指+间址(option)+执行+中断(option)。其中执行过程最复杂也最耗时。这些步骤细分还会分为微指令等更细微的操作,涉及到时钟、流水化,微程序控制器等较细的模块,简单了解有这个东西就行。简言之,最简单的计算机就是一直在循环做取指+执行。汇编指令和机器指令是一一对应的,如果有需要做指令级优化的话,掌握相应CPU架构的指令集,写汇编代码即可。
- 中断系统:中断系统是为相应系统的中断信号设计的,一般由硬件实现和软件实现两种,是速度和灵活性之间权衡的结果。在系统运行过程中,运行的程序本身或者IO设备都有可能发出中断请求,中断程序根据请求的种类不同,在保护现场后,去调用对应的中断程序来处理请求,结束后再返回到之前的程序断点继续执行,类似于函数调用。
3. 杂项
- 数的表示和计算。
计算机顾名思义是用来计算的,那就涉及到数据的存储和计算,数据是如何编码为2进制并存储到内存或硬盘上的,大端法小端法等。ALU里面的加法器是如何实现的,乘法是如何利用加法器工作的等等。其实这些都是组合逻辑电路实现的,和电子时钟原理差不多。当实现了最基本的加减乘除逻辑电路后,复杂的超越函数可以通过泰勒展开等近似方法简化为加减乘除运算,只不过不能一次性在ALU中完成计算,需要通过软件的方式,运行很多个指令才能求解出一个近似值。对于那些专用的计算芯片,可能会将常用的非线性函数如sin/cos/log/e^x等以硬件实现模拟,计算速度会大大提高。当然需要有配套的编译器和指令支持才可以。 - 微程序控制单元。取到一条指令后,会被解析为很多粒度更细的指令按照严格顺序执行,是在cpu内部硬件实现的,相当于一个指令解码部件。
- 流水线。多个指令并行执行且不干扰执行结果,基本原则是下一条指令使用上一条指令使用过的内部运算或存储体,该存储体或运算单元是当前指令使用完并在指令结束前不会再使用。跳转指令和耗时不均匀的指令会打乱流水、影响效率。流水逻辑是严格保证逻辑和串行执行一致的,在写汇编代码的时候按照串行写即可。
4. 结语
这门课是在计算机组成原理-刘宏伟-B站跟着视频学的,中间太深太细的没有深究,毕竟工作中用不到,只把组成原理的整体结构和知识点看完了,也做了这篇总结,主要是为了建立计算机组成原理的基本知识点范畴,并把硬件知识和上层代码联系起来,也把计算机硬件和之前学的数电建立了链接。接下来,还有一门操作系统,是重中之重。下个月主攻CS,道阻且长行则将至。