计算机组成原理 - 笔记
一. 什么是计算机系统
1. 计算机系统 = 硬件+软件
2. 软件
- 系统软件
用来管理整个计算机 - 应用软件
按任务需要编制成的各种程序
二 . 硬件的发展
1. 第一台电子数字计算机:
- ENIAC(1946) 逻辑元件 电子管
2. 发展阶段
发展阶段 | 时间 | 逻辑元件 | 内存 | 外存 |
---|---|---|---|---|
第一代 | 1946-1957 | 电子管 | 汞延迟线、磁鼓 | 穿孔卡片、纸袋 |
第二代 | 1958-1964 | 晶体管 | 磁芯存储器 | 磁带 |
第三代 | 1964-1971 | 中小规模集成电路 | 半导体存储器 | 磁带、磁盘 |
第思代 | 1972-现在 | 大规模、超大规模集成电路 | 半导体存储器 | 磁盘、磁带、光盘、半导体存储器 |
- 1947年,贝尔实验室,发明了晶体管
- 1955年,肖克利在硅谷创建 肖克利实验室股份有限公司
- 1957年,八叛徒创立 仙童半导体公司
- 1959年,仙童半导体公司发明集成电路
- 1968年,摩尔。等人离开仙童,创立Intel
- 1969年,仙童销售部负责人桑德斯离开仙童,创立AMD
3. 摩尔定律
提示了信息技术进步速度,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,整体性能也将提升一倍
摩尔定律也适用于半导体
三. 软件的发展
1. 编程语言的发展
2. 发展趋势
两极分化
- 一种是微型计算机向更微型化、网络化、高性能、多用途方向发展
- 另一种是巨型机向更,巨型化、超高速、并行处理、智能化发展
四. 计算机硬件的基本组成
1. 早期冯洛伊曼机
采用存储程序
存储程序的概念是指将指令以二进制代码形式事先输入计算机的主存储器然后按照其在存储器的首地址执行程序的第一条指令,以后就按照该程序的规定顺序执行其他指令,直至执行结束,首次提出"存储程序"概念
- 五大部件:运算器、控制器、主存储器、输入、输出(I/O)
- 指令和数据以二进制存放在存储器,同等地位,按地址寻访
- 以 运算器 为核心,现代计算机以存储器为核心
- 指令由操作码和地址码组成
- cpu=运算器+控制器
- cpu和寄存器在一起叫做主机
- 按地址顺访问并按顺序执行
- 运算器的功能是算数运算和逻辑运算
- 存储程序:提前将指令和数据存储到存储器当中
- 存储器:主存 辅存
2. 硬件部分
主存储器
-
存储体(划分为矩阵形式)
- 一系列存储元件,存储二进制信息
- 按地址存储
- 存储单元:每个存储单元存放一串二进制代码,有n个存储元组成
- 存储字:存储单元中二进制代码组合
- 存储字长:存储单元中二进制代码位数
- 存储元:存储二进制电子元件,每个存储元可存1bit
- 通过译码器来访问不同存储单元,译码器输入针脚为 n 那么存储容量为 2n × 存储字长,表示有2n个存储单元
-
寄存器
- MAR(Memory Address Register)
- 名称:存储地址寄存器
- 作用 :位数反应存储单元个数
例:当MAR = 4位 --> 存储2^4
- MDR(Memory Data Register)
- 存储数据寄存器
- MDR位数 = 存储字长
例:当MDR = 16位 --> 每个存储单元可以存放16bit,即1个字(word) = 16bits
- 一个字节是8bit,但是字是不定长的,需要看计算机结构
- 字节: B
- bit: b
- 机器字长:表示一位数所需的二进制位数
运算器
- 实现算数运算、逻辑运算
- ACC(Accumulator)
累加器,用于存放操作数,或者运算结果 - MQ(Multiple-Quotient Register)
乘商寄存器,存放乘除的操作数或者运算结果(有时会辅助存储,例如ACC装不下) - X (Arithmetic and Logic Unit)
通用的操作数寄存器,用于存放操作数 - ALU
算数逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算
- ACC(Accumulator)
- 相互关系
- MAR(Memory Address Register)
加 | 减 | 乘 | 除 | |
---|---|---|---|---|
ACC | 被加数、和 | 被减数、差 | 乘积高位 | 被除数、余数 |
MQ | 乘数、乘积低位 | 商 | ||
X | 加数 | 减数 | 被乘数 | 除数 |
控制器
- CU
控制器中的核心器件
控制单元,分析指令,给出控制信号 - IR
指令寄存器,存放当前执行的指令 - PC
程序计数器,存放下一条指令地址,有自动 + 1 功能 - 如何完成一条指令
取指令(PC)-> 分析指令(IR)-> 执行指令(CU)–>调度其他组件
PC – PR(取指)
主存地址 | 指令 | 注释 | |
操作码 | 地址码 | ||
0 | 000001 | 0000000101 | 操作码代表着需要执行的操作 不同指令,指令集的操作码不同 地址码表示操作数存放的位置 地址码指向主存地址相应位置 地址以字节为单位 |
1 | 000100 | 0000000110 | |
2 | 000011 | 0000000111 | |
3 | 000010 | 0000001000 | |
4 | 000110 | 0000000000 | 停止 |
5 | 0000000000000010 | 表示数据 2 | |
6 | 0000000000000011 | 表示数据3 | |
7 | 0000000000000001 | 表示数据 1 | |
8 | 0000000000000000 | 表示数据 0 |
- 执行过程
- (PC) = 0,指向第一条指令的存储地址
- (PC)通过地址总线将地址传给(MAR),(MAR)值为(PC)所指地址存放的值=0
- M(MDR)读取并保存(MAR)地址所指向的值,(MDR)=000001 0000000101
- (MDR)将数据通过数据总线放到(IR)指令寄存器当中
(IR) = 000001 0000000101 - OP(IR) 将操作码送到CU,CU分析操作码,得出指令,即取指,与将要进行操作的寄存器,PC+1
- 然后CU将 地址码 给MAR
- MDR根据MAR取数存取,然后将值给到对应的寄存器进行操作
- PC在第五步之后自行加一,执行完取指后的操作,然后跳转到第一步执行一直往下,直至结束
五. 计算机系系统的层次结构
1. 多层次结构
五层结构
- M0
微程序机器 执行微指令 - M1
传统机器 执行机器语言指令 - M2
操作系统机器 向上提供广义指令 - M3
汇编语言机器 执行汇编语言 - M4
- M0,M1属于硬件,
- M2,M3,M4属于软件
三个级别的语言
- 高级语言:
- 编译型语言:通过编译程序执行,全部语句一起翻译,然后执行,C/C++\、Java等,
- 解释型语言:解释程序执行,翻译一句执行一句,例如Python、JavaScript、shell
- 汇编语言:助记符
- 机器语言:二进制代码
六. 计算机的性能指标
1. 存储器的性能指标
-
1.总容量
-
MAR位数反应存储单元的个数(最多支持多少个)
-
MDR位数 = 存储字长 = 每个存储单元的大小
-
计算方式
总容量 = 存储单元个数 × 存储字长 bit
1Byte = 8bit (一个字节 = 八个字节)
总容量 = 存储单元个数 × 存储字长 ÷ 8 B
例子:MAR为32位,MDR为8位 总容量 = 232 * 8 bit = 4GB -
机器字长:表示一位数所需的二进制位数
-
总容量 = 2地址线 * 数据线 = 存储单元个数 × 存储字长 ÷ 8 B
2.转换
-
二进制位权对应的十进制
21 22 23 24 25 26 27 28 29 210 2 4 8 16 32 64 128 256 512 1024 -
单位转换
范围 210 220 230 240 单位 K M G T
3.单位成本
-
- 每位价格 = 总成本/总容量
4.存储速度:
-
- 数据传输 = 数据的宽度/存储周期
- 存储周期 = 存储时间 + 恢复时间 = 这次开始到下次开始
- 存取时间(Ta):存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间
- 存储周期(Tm):存取周期又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需要的全部时间,即连续两次独立地访问存储器操作(读或写操作)之间所需要的最小时间间隔
- 主存带宽(Bm): 主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒、字节/秒(B/s)、或位/秒(b/s)
2. CPU的性能指标
-
1.CPU主频
- 1.CPU内数字 脉冲信号(CLK)震荡的频率,也叫 时钟频率
- 1.单位:HZ( 10HZ = 每秒钟10个脉冲信号) 2.CPU时钟周期
- 1.单位:微秒、纳秒 3.主频与时钟周期的关系
- == 1.CPU主频(时钟频率)= 1 / CPU时钟周期== 4.CPI
- 1.执行一条指令所需的时钟周期数
- 2.不同指令CPI不同。甚至相同的指令CPI也有可能不同 5.IPS
- 1.MIPS:每秒执行多少百万条指令 = 指令条数 / (执行时间 乘 ×10 6) = 主频/CPI
- 2.MFLOPS: 每秒执行多少百万次浮点运算 = 浮点操作数 / (执行时间 乘 ×10 6)
- 3.GFLOPS: 每秒执行多少十亿次浮点运算 = 浮点操作数 / (执行时间 乘 ×10 9)
- 4.TFLOPS: 每秒执行多少万亿次浮点运算 = 浮点操作数 / (执行时间 乘 ×10 12)
- 5. IPS = 1/ (CPI × CPU时钟周期) = 主频 / CPI 6.机器字长
- 1. 计算机进行一次运算所能处理的二进制数据位数 7.耗时
-
1.整个程序耗时
- SUM(所有指令CPI) × CPU时钟周期 = 平均CPI × 指令条数 × CPU时钟周期
-
2.指令耗时
- 该指令耗时 = CPI × CPU时钟周期
3.速度
1.数据通路带宽
- 数据总线一次所能并行传送信息的位数
2.吞吐量
- 指系统在单位时间内处理请求的数量
- 它取决于信息能多快地输入内存,CPU多快地取指令,数据能多快的内存读写,所以系统吞吐量主要取决于主存的存储周期
3.响应时间
- 指用户向计算机发送一个请求,到系统对该请求作出相应并获取他所需要的结果的等待时间
- 通常包括CPU时间(运行一个程序所花的时间)与等待时间(用于磁盘访问、存储器访问、I/O操作、操作系统开销等时间)
4.系统的效率E
- E = 访问Cache的时间 / 系统的平均时间