计算机组成原理——第一章
第一章 计算机系统概论
计算机组成原理第一章随堂笔记
采用自顶向下的方式,层层细化。
课程内容组织分为四篇:
- 第一:概论;
- 第二:计算机系统的硬件结构
- 第三篇:CPU
- 第四篇:CU
1.1 计算机系统简介
计算机系统由软件和硬件两部分组成。软件可以划分为系统软件和应用软件两种。
计算机系统结构是指 程序员所见到的计算机系统的属性,概念性的结构与功能特性。(指令系统、数据类型、寻址技术、I/O机理)。比如 有无乘法指令
计算机组成主要是 实现计算机体系结构所体现的属性。(具体指令的实现)。比如 如何实现乘法指令
1.2 计算机的基本组成
一、冯诺依曼计算机特点
- 有5大组成部分:运算器(ALU)、控制器(CU)、存储器、输入设备、输出设备。
- 指令和数据以同等的地位存于存储器,可以按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成(操作码指明指令具体要做什么操作,地址码指明要操作的数在内存中的地址。)
- 存储程序,程序存储在存储器中(核心特征)
以运算器为中心
冯诺依曼计算机硬件框图
存在的问题:以运算器为中心,运算器的性能成为这个系统的瓶颈;其次层次化结构不够清晰。
二、计算机硬件框图
现代计算机硬件框图
层次化结构:
系统复杂性管理的方法:(3Y)
层次化:Hierachy,将被设计的系统划分为多个模块或子模块。
- 模块化:Modularity,有明确定义的功能和接口
规则性:Regularity,模块更容易被复用
三、计算机的工作步骤
上机前的准备
- 建立数学模型
- 确定计算方法
- 编制解题程序
计算机的解题过程
2.1. 存储器的基本组成:
存储器的核心结构是存储体,存储体由若干个存储单元组成,存储单元由对个存储元件组成。
存储单元存放了一串二进制代码,指令和数据都是存储在存储单元中。
存储单元中二进制代码的组合称为存储字。存储单元中二进制代码的位数称为存储字长。
每个存储单元都会有一个地址。通过这个地址实现对存储单元的访问。一个存储单元中存放了一个存储字。
MAR:存储器地址寄存器,反映存储单元的个数。
MDR:存储器数据寄存器,反映了存储字长。
举个例子:
假如MAR=4位,MDR=8位。那么存储单元个数为16(0000到1111)个,存储字长为8位。
2.2 远算器的基本结构
远算器最基本的功能就是完成运算,因此其核心为算术逻辑单元(ALU)。
ACC:累加器,专门用来存放操作数或运算结果;X:操作数寄存器;MQ:乘商寄存器
2.2.1 加法操作过程
指令: 操作码(加) + 内存地址(M)
初态: ACC中存入被加数
其次: 在内存地址中取出加数存入X寄存器。[M] → X
然后: 在运算器(ALU)中执行加法操作,并将结果存入累加器ACC中。[ACC] + [X] → ACC
2.2.2 减法操作过程(基本同上)
2.2.3 乘法操作过程
指令: 操作码(乘) + 内存地址(M)
初态: ACC中存入被乘数
其次: 在内存地址中取出乘数存入MQ寄存器。[M] → MQ
然后: 将ACC中的内容存入X寄存器。 [ACC] → X
然后: 由于乘法运算是通过累加和移位的方式实现的。因此需要一个寄存器来保存累加的内容。并且在累加之前,把这个寄存器清零。这个寄存器就是ACC。因此:0 → ACC。
然后: 在ALU中进行乘法操作,并且结果保存在两个寄存器里面。[x] * [MQ] → ACC // MQ
2.2.4 除法操作过程
指令: 操作码(除) + 内存地址(M)
初态: ACC中存入被除数
其次: 在内存地址中取出除数并存入X寄存器。[M] → X
然后: 在运算器中进行除法操作。商保存在MQ寄存器中,余数保存在ACC寄存器中。[ACC] ÷ [x] → MQ
2.3 控制器的基本结构
控制器的功能:解释指令、保证指令的按序执行。
完成一条指令过程:首先是取指令(把内存单元中的指令取出来送到控制器中),然后是分析指令(把操作码部分送到控制单元进行分析),然后是执行指令(由控制单元控制相应的执行部件完成这条执行所需要的操作)。
功能决定结构,完成这些功能需要什么样的硬件结构:
首先是取指令:PC(程序计数器)中存放了当前欲执行指令的地址,具有计数功能。
然后是分析指令:IR(指令寄存器)存放当前欲执行的指令。控制单元可以从IR寄存器中把指令的操作码取出来进行分析。
然后是执行指令:CU(控制单元),控制指令的执行顺序。
因此控制器由3大部分组成:PC、IR、CU。核心是控制单元CU。
由前面知道存储器、运算器、控制器共同组成了主机。那么主机完成一条指令的过程是什么呢?
2.4主机完成一条指令的过程
以取数指令为例
取数指令的功能是将保存在存储体中的数据取到ACC中。
由前面知道指令和数据存放在存储体中,当前欲执行的指令地址存放在PC中。因此:
- 第一步:PC要把指令的地址送给MAR,
- 第二步:再由MAR(存储器地址寄存器)送给存储体,
- 第三步:在控制器的控制下,存储体把指定存储单元中保存的那条取数指令取出来送入到MDR(存储器数据寄存器),
- 第四步:将取出来的指令送到IR中。
第五步:将指令寄存器中保存的指令的操作码部分送给CU。经过译码以后CU就会有相应的信号控制执行部件去执行指令要求的操作。
我们这条指令是取数指令,取数指令的功能是把保存在内存单元M当中的数据取到ACC寄存器。为了完成这个操作,在控制器的控制下要把指令当中的地址部分送给存储器,以便我们把存储的数据取出来。这个应该还是从IR出发。因为IR中保存了指令,包括操作码和内存地址。
第六步:在IR(指令寄存器)中取出地址部分送到MAR
- 第七步:再由MAR将地址送入到存储体
- 第八步:在控制单元的控制下将指定存储单元中保存的数据取出来送入到MDR
第九步:然后将MDR中保存的数据送入到ACC。
第一步到第四步:取指令
第五步:分析指令
第六步到第九步:执行指令
以存数指令为例
存数指令是将ACC中的数据保存到存储体中。
首先还是取指令:
第一步:PC要把指令的地址送给MAR,
- 第二步:再由MAR(存储器地址寄存器)送给存储体,
- 第三步:在控制器的控制下,存储体把指定存储单元中保存的那条取数指令取出来送入到MDR(存储器数据寄存器),
第四步:将取出来的指令送到IR中。
然后是分析指令:
第五步:将指令寄存器中保存的指令的操作码部分送给CU。经过译码以后CU就会有相应的信号控制执行部件去执行指令要求的操作。
然后是执行指令:
第六步:在控制单元的控制下将IR中保存的指令的地址部分取出来送到MAR
- 第七步:再由MAR将地址送入到存储体(告诉存储体要有一条数据存进来,地址是多少)
- 第八步:将ACC中的内容送入到MDR
第九步:在控制器的控制下把MDR中的数据保存到存储体中。
这样就知道了一个程序在计算机上的运行过程:
将程序通过输入设备送至计算机
- 程序首地址送入到PC
- 启动程序运行
- 取指令:PC=>MAR=>M=>MDR=>IR, (PC) + 1 → PC
- 分析指令:OP(IR) => CU
- 执行指令:AR(IR)=>MAR=>M=>MDR=>ACC
- …
- 打印结果
- 停机
1.3 计算机硬件的主要技术指标
- 机器字长
- 运算速度:主频、核数、吉普森法、CPI(执行一条指令所需要的时钟周期数)、MIPS(每秒执行百万条指令)、FLOPS(每秒浮点运算次数)
- 存储容量