免责声明:
- 笔记来源:本系列所有笔记均整理自 B站·王道考研·计算机组成原理 视频教程
- 参考书籍:《2021年计算机组成原理考研复习指导》,王道论坛所著,电子工业出版社出版,ISBN :9787121379826。
1 计算机发展历程
计算机系统由硬件和软件两部分组成。
- 硬件:看得见摸得着的物理设备
- 软件:各类在硬件上运行的具有特殊功能的程序
- 系统软件:操作系统、数据库管理系统、标准程序库、网络软件、语言处理程序(如编译器)、服务程序(如代码调试程序)等
- 应用软件
计算机的性能需要根据软、硬件功能综合判定。
计算机组成原理课程主要探讨的是计算机硬件部分的内容。
1.1 计算机硬件的发展
计算机发展历程上的四个时代
① 1946年,第一台电子数字计算机问世(ENIAC,美国国防部用它来进行弹道计算),开启计算机历程上的第一个时代——电子管时代:
- 使用电子管作为逻辑元件
- 使用机器语言、汇编语言进行编程
- 内存使用延迟线、磁鼓,外存使用穿孔卡片、纸带
- 体积大、速度慢、耗电量高
② 1947年,贝尔实验室发明晶体管,被列在IEEE里程碑列表中;1955年,贝尔实验室研制出世界上第一台全晶体管计算机(TRADIC);1958年,IBM公司制成了第一台全部使用晶体管的计算机RCA501型,计算机发展逐步进入第二个时代——晶体管时代:
- 使用晶体管替代电子管作为计算机的逻辑元件使其体积大幅缩小、功耗降低、提升计算速度
- 内存使用磁芯存储器、外存使用磁盘
- 操作系统开始雏形
- 出现了高级语言如 Fortran、COBOL
③ 1958年Jack Kilby发明了集成电路,1964年,计算机发展步入第三个时代——小规模集成电路时代:
- 逻辑元件采用小规模集成电路
- 内存储器使用半导体,外存使用磁带、磁盘
- 计算机语言也进入第三个时代,面向人类的语言阶段
- 出现分时操作系统
④ 1972年,计算机发展进入第四个时代——大规模、超大规模集成电路时代:
- 逻辑元件采用大规模集成电路和超大规模集成电路
- 产生微处理器(CPU)、微型计算机
- 出现并行、流水线、高速缓存、虚拟存储等概念
摩尔定律
当价格不变时,集成电路上可容纳的晶体管数目,大约每隔18个月便会增加一倍,性能也将提升一倍。大体意思就是,大约18个月后,能够以相同的价格买到性能比现在高一倍的CPU。
微处理器位数概念
微处理器的8位(如Intel 8008)、16位(Intel 8086)、32位(如Intel80486)、64位(如Pentium4),其中的位数是指机器字长,计算机进行一次整数运算所能处理的二进制位数。
1.2 计算机软件的发展
编程语言的发展
- 机器语言、汇编语言
- 高级语言
- FORTRAN 应用于科学计算、工程计算
- PASCAL 结构化程序设计语言
- C++ 面向对象程序设计语言
- Java 适用网络环境的面向对象程序设计语言
操作系统的发展
- UNIX
- Linux
- Windows
1.3 计算机的分类
计算机的分类
- 电子模拟计算机
- 电子数字计算机
- 专用计算机
- 通用计算机
- 巨型机
- 大型机
- 中型机
- 小型机
- 微型机
- 单片机
计算机按机器指令与数据流分类
- 单指令、单数据流(SISD):传统的冯·诺依曼体系结构
- 单指令、多数据流(SIMD):阵列处理器、向量处理系统
- 多指令、单数据流(MISD):实际上不存在
- 多指令、多数据流(MIMD):多处理器、多计算机系统
2 计算机系统层次结构
2.1 计算机系统的组成
计算机系统由硬件系统和软件系统组成。对于某一个功能,如果既可以使用软件实现,也可以使用硬件实现,那么称之为软硬件在逻辑上是等效的。
2.2 计算机硬件的基本组成
世界上第一台计算机 ENIAC,是通过程序员手动连接线路来控制计算机执行指令,计算机的效率因此受到很大的影响。
早期 冯·诺依曼体系结构
首次提出“存储程序”的概念:将指令以二进制代码的形式实现输入计算机的主存储器,然后按其在主存中的首地址执行程序第一条指令,之后就按程序指定的顺序执行其他指令直到程序结束。
现代计算机组织结构
随着微电子信息技术的发展,IO设备的速度与CPU的速度差距越来越大,早期的以运算器为中心的结构无法满足计算机发展需求,现代计算机逐步发展为以存储器器为中心的结构,使得IO操作尽可能避开CPU,以提高整体运行效率。
计算机硬件基本组成总览
2.3 计算机硬件部件
虽然传统的冯诺依曼体系结构与现代计算机的组织结构有所不同,但是五大功能部件基本一致。
一般将运算器和控制器集成到同一个芯片上,称为中央处理器CPU,CPU与主存共同构成主机,其他的硬件设备称为外设。
主存储器
主存储器按照存储单元的地址进行存取。
- 存储体:存放二进制信息
- 地址寄存器MAR:存放地址,经过地址译码后找到目标存储单元
- 数据寄存器MDR:暂存从存储器中读写的信息
运算器
运算器用于进行算术运算和逻辑运算,其核心是算术逻辑单元 ALU。其中包含了多个通用寄存器,用于暂存操作数和中间结果。
控制器
控制器是计算机的指挥中心,协调各部件工作。
2.4 计算机的工作过程
计算机的工作过程大概分为三步:
- 把程序数据装入主存
- 将源程序转为可执行文件
- 从可执行文件的首地址开始逐条执行指令
一段C代码如下:
int a = 2
int b = 3;
int c = 1;
int y = 0;
void main(){
y = a * b + c;
return 0;
}
程序编译装入主存:
计算机内部运行工作大体如下:
① 初始,控制器中的程序计数器PC指向第一条指令的地址 0,即(PC)= 0
- 取指
- 控制器会据此告诉主存接下来要读取 0 号地址对应的数据→(MAR)= 0
- 主存根据MAR记录的地址到存储体中找出0号地址对应的二进制数据,放在数据寄存器 MDR中→(MDR)= 000001 0000000101
- CPU 通过数据总线将 MDR 中的数据取出放在指令寄存器 IR 中→(IR)= 000001 0000000101
- PC 自动加一,指向下一条将要执行的指令→ (PC) = 1
- 分析
- 操作码 000001 会送到控制单元CU中,CU分析得出指令执行的操作是取数
- 执行
- 将地址码 0000000101(十进制的5)送到主存的MAR中→(MAR) = 5 ,指向原始数据a的地址 0000000000000010
- 主存根据MAR中的地址去存储体中取出对应的数据放到 MDR 中→(MDR) = 0000000000000010 = 2
- 在控制单元CU的控制下,MDR中的数据会传送到累加寄存器 ACC中→ (ACC) = 0000000000000010 = 2
② 执行完第一条指令,执行第二条指令(此时PC为1)
- 取指(与上面同样的步骤)
- (PC)= 1 → (MAR) = 1
- M(MAR)→(MDR) = 000100 0000000110
- (MDR)→ (IR) = 000100 0000000110
- PC 加一→(PC) = 3
- 分析
- OP(IR)→CU,操作码 000100 会送到控制单元CU中,CU分析得出指令执行的操作是乘法计算
- 执行
- 将地址码 0000000110(十进制的6)送到主存的MAR中→(MAR) = 6 ,指向原始数据b的地址 0000000000000011
- 主存根据MAR中的地址去存储体中取出对应的数据放到 MDR 中→(MDR) = 0000000000000011 = 3
- MDR 中的数据 通过数据总线传送到 乘商寄存器MQ中→(MQ) = 0000000000000011 = 3
- 把a的值放入通用寄存器X中→(X) = 2
- CU控制算术逻辑单元进行乘法运算,计算结果放入累加寄存器ACC中→(ACC) = 6,此时如果乘积太大,ACC无法完成存储,就需要 MQ辅助存储(存储乘法运算结果的低位)
③ 执行完第二条指令,指行第三条指令(此时PC为2)
- 取指(与上面同样的步骤)
- (PC)= 2 → (MAR) = 2
- M(MAR)→(MDR) = 000011 0000000111
- (MDR)→ (IR) = 000011 0000000111
- PC 加一→(PC) = 2
- 分析
- 操作码 000011 会送到控制单元CU中,CU分析得出指令执行的操作是加法运算
- 执行
- 将地址码 0000000111(十进制的7)送到主存的MAR中→(MAR) = 7 ,指向原始数据c的地址 0000000000000001
- 主存根据MAR中的地址去存储体中取出对应的数据放到 MDR 中→(MDR) = 0000000000000001 = 1
- 把a的值放入通用寄存器X中→(X) = 1
- CU控制算术逻辑单元进行加法运算,将ACC中的6与X中的1进行加法运算,将结构放入累加寄存器ACC中→(ACC) = 7
④ 执行完第三条指令,指行第四条指令(此时PC为3)
- 取指(与上面同样的步骤)
- (PC)= 3 → (MAR) = 3
- M(MAR)→(MDR) = 000010 0000001000
- (MDR)→ (IR) = 000010 0000001000
- PC 加一→(PC) = 4
- 分析
- 操作码 000010 会送到控制单元CU中,CU分析得出指令执行的操作是存数
- 执行
- 将地址码 0000001000(十进制的8)送到主存的MAR中→(MAR) = 8 ,指向原始数据y的地址 0000000000000000
- 通过数据总线,将ACC中暂存的计算结果传送到MDR中箭头(MDR)= 7
- CU控制单元通过控制总线告诉主存进行存数操作,将 MDR 中的数据存到 MAR中地址对应的存储单元→ 内存地址 0000000000000000 的8号存储单元 存储的值为 7,即 y = 7
⑤ 执行完第四条指令,执行第五条指令(此时PC为4)
- 取出指令,分析出要执行的是停机操作,程序运行结束(通过操作系统相关指令完成)
主要硬件部件总结
2.5 计算机系统的多级层次结构
计算机系统五层结构
三种级别的语言
知识点总结
3 计算机性能指标
3.1 存储器的性能指标
主存容量
是指主存储器所能存储信息的最大容量,通常以字节来衡量。
为什么MAR为32位最只能表示 2^32 个不同的状态?
3.2 CPU 的性能指标
主频
机器内部主时钟的频率(CPU的时钟脉冲频率),是衡量机器速度的重要参数。单位通常使用 HZ(赫兹,1HZ表示每秒一次),常见的主频有 1.8GHZ,2.4GHZ,3.2GHZ等。
时钟周期
CPU中最小的时间单位,完成一个动作至少需要一个时钟周期。与主频互为倒数。
CPI
执行一条指令所需要的时钟周期数。
CPU 执行时间
运行一个程序所花费的时间。
CPU执行时间 = CPU时钟周期数 / 主频 = (指令条数 * CPI) / 主频
IPS
每秒执行多少条指令。
IPS = 主频 / 平均CPI
MIPS
每秒执行多少百万条指令。
MIPS = 指令条数 / (执行时间 * 10^6)= 主频 / CPI
k , K , M , G , T 不同应用场景的区别
- 当用于描述文件大小、存储容量等时,(K , M , G , T )通常使用2的幂次表示(注意K 是大写的),比如 1Kb = 2^10 b
- 当用于表示速率、频率等时,(k , M , G , T)通常使用10的幂次表示(注意,k 是小写的),如 1k b/s = 10^3 b/s
3.3 系统整体性能指标
3.4 知识点总结
4 常见问题及易混淆概念
软硬件在逻辑功能上是等效的,并不是等价的
在计算机中,许多功能既可以使用软件实现,也可以使用硬件实现。
翻译程序、汇编程序、编译程序、解释程序
- 翻译程序:将高级语言程序翻译成机器语言程序(目标代码)的软件:
- 编译程序:将高级语言源程序一次性全部翻译成目标程序(汇编语言程序或者机器语言程序)
- 解释程序:将高级语言源程序,逐条语句翻译成目标机器代码并执行(翻译一条,执行一条),不会生成目标程序。
- 汇编程序:把汇编语言源程序翻译成机器语言程序。
计算机中的透明性
平常我们所说的透明性是指“看得见”,而计算机中的透明性是指,某个东西实际上存在,但是看上去好像不存在,就像是透明的一样。例如,指令寄存器IR,主存中的存储地址寄存器 MAR、存储数据寄存器MDR等,对于程序员来说就是透明的。
机器字长、指令字长、存储字长
- 机器字长:处理器的位数,计算机能直接处理的二进制数据位数,一般等于内部寄存器的大小,决定计算机的运算精度
- 指令字长:一条指令中,包含的二进制代码位数
- 存储字长:一个存储单元存储的二进制代码长度
- 三者都必须是字节的整数倍