本文为学习计组时所写笔记,将陆续更新。参考:王道计算机考研 计算机组成原理 ;《计算机组成原理》唐朔飞 编著
文章目录
一、计算机的发展
计算机系统 = 硬件系统 + 软件系统
- 硬件:有形的物理设备,是计算机系统中实际物理装置的总称
- 软件:在硬件上运行的程序和相关的数据及文档
软件又细分为两类
- 系统软件:用来管理整个计算机系统
如:操作系统、数据库管理系统(DBMS)、标准程序库、网络软件、语言处理程序、服务程序 - 应用软件:按任务需要编制成的各种程序
如:微信、抖音、王者荣耀
> 硬件的发展
- 第一代:电子管时代
- 第二代:晶体管时代
- 第三代:中小规模集成电路时代
- 第四代:大规模、超大规模集成电路时代
> 软件的发展
- 机器语言,汇编语言 => FORTRAN(科学计算、工程计算),PASCAL(结构化程序设计) => C++,JAVA
- DOS => Windows、Android、IOS
> 目前的发展趋势
计算机的发展趋势正向着 “ 两极 ” 分化
- 微型计算机向 更微化、网络化、高性能、多用途 发展
- 巨型机向 巨型化、超高速、并行处理、智能化 发展
二、计算机硬件的基本组成
1. 早期冯诺依曼机的结构
第一台通用计算机 ENIAC 极大地提高了计算速度,但是它有一个缺点:需要手动接线来控制计算,人工耗时严重。
为对其进行改进,冯·诺依曼提出了 “ 存储程序 ” 的概念:
将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。
以此概念为基础的各类计算机通称为冯·诺依曼机,其硬件结构如下图:
> 冯·诺依曼机有以下特点
- 计算机由五大部件组成
- 指令和数据以同等地位存于存储器,可按地址寻访
- 指令和数据都用二进制表示
- 指令由操作码和地址码组成
- 存储程序,指令在存储器内按顺序存放
- 以 运算器 为中心。输入/输出设备与存储器之间的数据传送通过运算器完成
2. 现代计算机的结构
早期的冯·诺依曼机是以运算器为中心的,但是随着技术进步,需要加工的信息量增大,运算器既要运算同时又要传递信息,显然是低效的。
为了满足需求,现代计算机发展成为 以存储器为中心 ,输入和输出设备直接和存储器打交道,解放了运算器,使其可能进行更多运算。如下图:
由于 运算器和控制器 之间关系十分紧密,因此它们通常被集成在一个芯片中,整合成为 CPU :
> 其中各种硬件部件关系如下:
❗❗ 注意主存和辅存的区别:
-
主存(内存)
直接给 CPU 提供存储,高速,低容量,价格贵,不能永久保存数据,断电消失,需要从辅存中重新调入数据。
如:CPU 的高速缓存,电脑的内存条 -
辅存(外存)
给主存提供数据,低速,大容量,价格低,能永久保存数据。
如:硬盘、光盘、U盘、磁盘、移动硬盘
三、计算机的硬件部件
1. 主存储器
存储器是计算机的存储部件,用来存放程序和数据。
存储器分为主存储器和辅存储器,前文已经介绍。CPU 能够直接访问的存储器是主存储器,辅存储器用与帮助主存储器记忆更多的信息,辅存储器中的信息必须调用主存后,才能为 CPU 所访问。
主存储器的工作方式是 按存储单元的地址进行存取 。
> 主存储器的组成如下图
- 存储体:用来存放数据,由一些列存储元件构成,存放二进制信息
- 地址寄存器(MAR):存放访存地址,经过地址译码后找到所选存储单元
- 数据寄存器(MDR):用于暂存要从存储器中读或写的信息
> 下面来看存储体
存储体由若干 存储单元 组成,每个存储单元包含若干 存储元 ,每个存储元都存储一位二进制代码 0/1 。因此,每个存储单元可以存储一串二进制代码,我们称这段代码为 存储字,称代码的位数为 存储字长 。
> 下面来看 MAR 和 MDR
例如,MAR 有 4 位(0000 => 1111),MDR 有 16 位
那么,该存储体共有 2 4 = 16 2^4 = 16 24=16 个存储单元;每个存储单元可以存放 16 bit 二进制代码,也就是存储字长为 16 。
❗❗ 说明:现在的计算机通常把 MAR、MDR 集成在 CPU 中
2. 运算器
运算器是计算机的执行部件,用于进行 算术运算(加减乘除等)和 逻辑运算(与或非等)。
运算器最少包括 3 个寄存器和一个算术逻辑单元(ALU)。
> 运算器的组成如下图
- ACC:累加器。用于存放操作数,或运算结果
- MQ:乘商寄存器。在乘、除运算时,用于存放操作数或运算结果
- X:通用的操作数寄存器。用于存放操作数
- ALU:算术逻辑单元。是 运算器的核心,通过内部复杂的电路实现算数运算、逻辑运算
在进行加减乘除运算时,各种操作数的存放在不同寄存器中,如下:
3. 控制器
控制器是计算机的指挥中心,由它指挥各部件自动协调地工作。
> 控制器的组成如下图
- 控制单元 CU:分析当前指令所需完成的操作,给出控制信号
- 指令寄存器 IR:存放当前执行的指令,IR 的内容来自主存 MDR
- 程序计数器 PC:存放下一条指令地址,有自动加 1 的功能,与主存 MAR 有直接通路
> 具体而言,完成一条指令操作需要三个阶段
- 取指阶段:首先控制器要命令存储器读取出一条指令
- 分析阶段:对所取的指令进行分析,指出该指令要完成什么样的操作,并按寻址特征指明操作数
- 执行阶段:根据操作数所在的地址以及指令的操作码完成某种操作
> 来看下面这个例子帮助理解上述三阶段
下面这个例子只是简单涉及,目的是对计算机运行原理有个大概全局观,具体会在 CPU 章节时详解。
int a = 2, b = 3, c = 1, y = 0;
int main() {
y = a * b + c;
}
上面这段高级语言代码在主存中被编译为下图右侧部分(共 8 个存储单元,存储字长为 16 bit)。
下面只做部分分析:从主存中读取 a = 2 这条信息存放到 ACC 中,需要进行如下步骤(下图左侧):
注释:(PC)
表示 PC 的内容;M(MAR)
表示存储体中地址 MAR 所对应指令;OP
指操作码;Ad
指地址码
总的来说,取数 a = 2 三阶段如下:
1. 取指阶段
(PC) -> MAR
M(MAR) -> MDR
(MDR) -> IR
(PC)+1 -> PC // 取指结束
2. 分析阶段
OP(IR) -> CU
3. 执行阶段
Ad(IR) -> MAR
M(MAR) -> MDR
(MDR) -> ACC
其实分析完这个过程,你就能很容易理解,冯·诺依曼机的以下特点:
- 指令和数据以同等地位存于存储器,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 存储程序
四、计算机系统的层次结构
> 五层结构
计算机系统的多层次结构(如下图)从各种不同角度所看到的机器之间的有机联系,来区分彼此之间的界面,明确各自功能,以便构成合理高效的计算机系统。
层次之间的关系紧密,下层是上层的基础,上层是下层的扩展 。随着超大规模集成电路技术的不断发展,部分软件功能由硬件来实现,因而软/硬件交界面的划分也不是绝对的。
而计算机组成原理这门课主要讨论的即是 传统机器 M1 和 微程序机器 M0 的组成原理及涉及思想。
> 三个级别的语言
三个级别的语言:① 机器语言 ② 汇编语言 ③ 高级语言
对于高级语言来说,要翻译成机器语言可以经过两种方式:
-
编译程序
将高级语言编写的源程序一次全部翻译成汇编语言程序或者是二进制代码程序,最终生成 .exe 文件,之后每次运行只需加载 .exe 文件即可,而无需重复编译(只需翻译一次)
-
解释程序
将源程序的一条语句翻译成对应的机器语言,并立即执行,之后再依次翻译和执行下一条语句(每次执行都要翻译)
可参考此文:编译程序和解释程序的区别是什么?
五、计算机的性能指标
1. 存储器的性能指标
存储器的容量应该包括主存容量和辅存容量。
主存容量是指主存中存放二进制代码的总位数,如下图:
常见数量单位 K : 2 10 K:2^{10} K:210 、 M : 2 20 M:2^{20} M:220、 G : 2 30 G:2^{30} G:230、 T : 2 40 T:2^{40} T:240
2. CPU 的性能指标
> CPU 主频、CPI
CPU 主频是 CPU 内数字脉冲信号振荡的频率,即 CPU 的时钟频率。计算机的操作在时钟信号的控制下分步执行,每个时钟信号周期完成一步操作。(可以类比广播体操根据口号 1234 来完成动作)
时钟频率的高低在很大程度上反映了 CPU 速度的快慢,但其性能还受其他因素影响,如 CPI 。
执行整个程序所需的时间(CPU 执行时间)即为:
> IPS、FLOPS
3. 系统整体的性能指标
> 数据通路带宽
指数据总线一次所能传送信息的位数(各硬件部件通过数据总线传输数据)。
> 吞吐量
指系统在单位时间内处理请求的数量。
> 响应时间
指从用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需结果的等待时间。
> 动态测试
上述性能指标都是静态的衡量指标,很难反映出计算机综合能力。很多时候我们采用 基准程序 来测量计算机的时间处理速度。
如鲁大师等跑分软件。