前言
本文主要用于顽固(复习)计算机组成原理知识,不具备原创性。
计算机组成原理概论
计算机:数字电子计算机
组成:计算机硬件系统的逻辑实现
原理:不以具体机型为依托的,基本实现原理
计算机组成原理:掌握如何实现的具体细节
计算机系统简介
计算机系统主要是由两大部分组成的:硬件和软件。其中软件又包括系统软件和应用软件
系统软件可以管理整个计算机系统:
- 语言处理程序(将高级语言转换为机器可以懂的指令)
- 操作系统
- 服务性程序(比如数学库、MPI服务程序进行并行之间的通信)
- 数据库管理系统
- 网络软件
应用软件是按照任务需要编制成的程序
可以简单的将软硬件看作一个层次结构,硬件为软件提供接口,系统软件又为应用软件形成接口,来完成不同的程序。
对于计算机的物理结构层次,我们这门课主要研究逻辑层和微电路层的具体实现方式

计算机系统结构定义了系统软硬件的交界面,定义了哪些功能由软件实现,哪些功能由硬件实现
定义:程序员所见到的计算机系统的属性概念性的结构与功能特性(指令系统,数据类型,寻址技术,I/O机理),即程序员需要理解的东西。
计算机组成:实现计算机体系结构所体现的属性,即具体指令的实现。
计算机的基本组成
冯诺依曼结构

- 计算机结构由五大部件组成:存储器、运算器、控制器、输入设备、输出设备。
- 以运算器为中心,程序存储在存储器中。
- 指令和数据以同等地位保存在存储器中,可以按照地址寻找。
- 指令和数据由二进制表示,指令由操作码和地址码组成,操作码指明指令要干什么,地址码指明操作数的地址。
冯诺依曼结构以运算器为中心,容易形成瓶颈(CPU和存储速率之间的问题无法调和)。我们可以使用存储器作为中心来进行优化,但还是不够。
现代计算机硬件框图
即还是在冯诺依曼体系结构基础上进行修改,主要是为了解决CPU与存储设备之间的性能差异问题,防止资源浪费

- ALU:Arithmetic Logic Unit,算术逻辑单元
- CU:Control Unit,控制单元
- CPU:中央处理器
在这里指令和数据都是保存在存储器中的。
所以我们现在的CPU=运算器+控制器+存储器
我们这里的存储器一般是由磁带或者硬盘组成的更高速的设备
同时现代计算机的结构可以理解成是以存储器为核心的结构。
存储器的基本组成

MAR是存储器地址寄存器,保存了存储单元的地址和编号,长度反映存储单元的个数。
MDR是存储器数据寄存器,保存了要存入存储体的数据或刚从存储体拿出来的数据,长度反映存储字长。
利用MAR和MDR来将数据放入存储器。
运算器的结构

ALU(算术逻辑单元),通常是一个组合电路,输入撤销,输出也撤销,因此需要加上寄存器保存参与运算的计算。
数据寄存器X保存输入参数,ACC为累加寄存器,保存结果,乘法可能使得数据位数保存不下,使用MQ寄存器保存低位。
上表中存放了不同运算中,运算器的工作过程,以乘法为例,操作过程如下:
- 首先将被乘数取出来放到ACC中
- 从指令中的乘数地址M中取出乘数,送入MQ中
- 将被乘数送到X中
- 将ACC清零
- 完成乘法操作,结果由ACC和MQ保存
这些操作的过程顺序是由控制器来控制完成的。
控制器的基本结构
控制器的功能是解释指令(完成指令)、保证指令的按序执行。

控制器的功能
- 解释指令
- 保证指令的按序执行
- PC(程序计数器)寄存器保存了当前指令的地址,进行取指令,PC有计数功能。
- IR(指令寄存器)存放当前要执行的指令,将操作码送入CU进行分析。
- CU(控制单元)发出控制信号,控制相对应的部件来执行指令。
下面以取数指令为例分析指令执行过程(取数送到ACC中)
- PC保存指令的地址,送到MAR进行寻址
- MAR根据地址到存储体中找到保存的指令
- MDR从存储体中取出指令
- 送到IR中,IR存放要执行的指令
- IR将操作码送入CU中进行分析
- 同时将地址码送到MAR中找这个数的数据
- MAR根据地址到存储体中找到要取的数
- MDR保存从存储体中取出的数
- CU控制下,将要取的数送到ACC中。
CU分析控制这些步骤的过程
计算机硬件的主要技术指标
- 机器字长:CPU一次能处理数据的位数,与CPU中寄存器位数有关。
- 运算速度:主频、核数以及每个核支持的线程数、CPI(执行一条指令所需的时钟周期数)、MIPS(每秒执行百万条指令)、FLOPS(每秒浮点运算次数)。
- 存储容量:主存容量(可使用存储单元个数×存储字长来表示存储体容量,MAR * MDR)(也可使用字节数来表示)、辅存容量(字节数表示)。
计算机的发展以及应用
计算机的发展史
第一台计算机,1946年ENIAC,十进制运算
电子技术的发展与计算机体系结构技术的发展对计算机的发展产生了决定性作用
根据硬件技术来对计算机进行划分
电子管→晶体管→中小规模集成电路→大规模集成电路→超大规模集成电路
软件技术的发展:机器语言(面向机器)、汇编语言(面向机器)、高级语言(面向问题)
计算机的分类
超级计算机
特点:
功能最强,运算速度最快,存储容量最大的计算机
用途:
多用于国家高科技和尖端技术研究,比如模拟核裂变,天气预报的推算…
用来他们运算速度的单位是TFlop/s
1TFlop/s=每秒一万亿次浮点计算
1TFlop/s=1000GFlop/s
Q:为什么我国比他们多那么多处理器却还是没有他国快呢
A:因为我国的这台超级计算机使用的芯片全部都是我国自主产权的,然后我国的芯片产业还不是很发达
大型计算机
又称为大型机,大型主机,主机等
特点:
具有高性能,可处理大量数据与复杂的运算
多用于人口普查,银行交易处理…
在大型计算机里面,IBM占据着很大的份额,常用COBOL编程语言
迷你计算机
也称为普通服务器,小型机
特点:
不需要特殊的空调场所
具备不错的算力,可以完成较复杂的运算
因为大型机造价高昂,所以普通计算机已经代替了传统的大型机,成为大规模企业计算的中枢
工作站
特点:
高端的通用微型计算机,提供比个人计算机更强大的性能
类似于普通台式电脑,体积较大,但性能强劲
微型计算机
又称为个人计算机,是最普通的一类计算机
但是他从构成的本质上来讲,个人计算机与前面的分类无异
计算机的应用
- 科学计算和数据处理
- 工业控制和实时控制
- 网络技术
- 虚拟现实
- 办公自动化和管理信息系统
- CAD/CAM/CIMS
- 多媒体技术
- 人工智能
系统总线
总线(bus)的基本概念
总线是连接各个部件的信息传输线,是各个部件共享的传输介质,是信号的公共传输线。
如果使用单总线结构(系统总线),那么同时只能有一对部件进行信号传输,效率较低,使用双总线结构效率会更高。

通过这个结构可以看出不通过CPU无法在I/O和主存之间进行直接的信息传输。但因为需要经过CPU,因此也会让占用CPU的资源,增加CPU的负载

一句话概括:总线就是类似USB线那样的传输数据的线
总线的分类
片内总线:芯片内部的总线。(连接设备之间,让设备互相通信的线)
系统总线:计算机各部件之间的信息传输线。可分为:
- 数据总线,双向的,一般小于等于机器字长和存储字长。
简单地说就是传输各个部件的数据信息,数据总线的位数(总线宽度)是总线的重要参数,一般跟CPU位数相同。 - 地址总线,单向的,与存储地址、I/O地址有关。
用于数据的寻址
如果地址总线位数=n,则寻址范围是0~$2^n$
地址总线的位数跟存储单元有关 - 控制总线,双向(CPU发出存储器读写指令,总线允许,中断确认等;CPU接收中断请求、总线请求)
简单地说就是用来控制各个设备的总线,当设备之间需要控制交流的话也需要经过数据总线,同时他还可以监视不同组件之间的状态
- 数据总线,双向的,一般小于等于机器字长和存储字长。
通信总线:计算机之间或计算机和其它设备之间的通信,并行通信总线和串行通信总线。
总线的特性和性能指标
总线印刷到电路板上(即主板),其他设备插板插到主板上。
总线有以下四个特性:
- 机械特性:尺寸、形状、管脚数及排序顺序
- 电气特性:传输方向和有效的电平范围
- 功能特性:每根传输线的功能(地址、数据、控制)
- 时间特性:信号的时序关系
总线的性能指标:
- 总线宽度:数据线根数,同时可以传输多少位。
- 标准传输率:每秒传输的最大字节数MBps
- 时钟同步/不同步
- 总线复用:地址线与数据线是否可以复用
- 信号线数:地址线、数据线和控制线的总和
- 总线控制方式
- 其他指标:负载能力等
总线结构
主要分为单总线结构、双总线结构、三总线结构、四总线结构、PCI总线结构、PCI多层总线结构
单总线结构
最初的单总线结构只有一条总线叫做系统总线,把各个部分连接起来,所有设备间的通信都要经过系统总线,单总线结构就会显得负载比较重,同时只能有两个设备进行通信,其他设备间想要通信就必须等待

双总线结构
由于单总线结构中,CPU和内存的通信比较频繁,且数据量传输相对来说比较大,所以就把内存和CPU之前的通信用单独的总线连接起来叫做M(Memory)总线,也就是内存总线,CPU和其他设备间的通信通过I/O总线连接起来

三总线结构
三总线结构中,新增了一条DMA(直接存储访问)总线,可以让高速IO设备和主存进行通信,但是在这种总线结构下,那些低速的IO设备要想和主存进行通信还是要经过CPU,占用CPU资源

除了上面这种结构外,还有另一种结构

这种结构新增了一条扩展总线和局部总线,局部总线把CPU和Cache相连,Cache又通过系统总线和主存连接到一起,这样CPU只和速度比较高的Cache进行通信,当Cache中的数据没有时,Cache和主存进行通信,把数据从主存中取出来放入Cache中。所有的IO设备通过扩展总线和系统总线与主存进行通信,但是扩展总线上也没法区分高速的IO设备和低速的IO设备
四总线结构
在四总线结构中,新增了一条高速总线,负责连接一些高速的IO设备,距离CPU和主存都比较近,通信比较块,扩展总线上连接一些低速的IO设备

PCI总线结构
PCI总线结构是现代计算机上使用的总线结构,CPU通过系统总线和存储器连接,同时系统总线上连接了一个PCI桥,通过PCI桥可以连接PCI总线,PCI总线下也可以连接符合PCI接口的IO设备,同时PCI总线下又可以连接PCI桥,PCI桥下再连接PCI总线,就可以一直向下扩展,不过也是有一些数量限制的
PCI多层总线结构

总线控制
总线判优控制
通过是否能对总线发出占用请求,我们将设备分为主设备(主模块)和从设备(从模块)。主设备可以对总线有控制权,从设备响应从主设备发来的总线命令
总线判优控制主要分两种:
- 集中式
- 分布式
集中式
链式查询方式
主设备通过BR申请总线的控制权,有设备在使用总线,则设置BS(总线忙)。总线控制部件通过BG来链式查询这些接口是否提出了BR(总线请求),遇到了BR则交出控制权
因此,优先顺序则为BG(总线同意)的查询顺序。这种结构对电路故障特别敏感,尤其是BG,如果BG后面出了问题,会导致后面的设备一直不会响应
好处:电路复杂度低、仲裁方式简单
坏处:优先级低的设备难以获得总线使用权、对电路故障敏感
计数器定时查询方式
数据线用于数据的传输,地址线用于从设备的查找。通过设备地址线来查找某个设备是否发出总线请求。计数器的值通过设备地址线进行传输,来查找某个设备是否发出请求。可以自定义计数器的计数方式,来改变从哪个设备先查询等
独立请求方式
为每个I/O接口增加了BR和BG,通过排队器来进行优先级排队。这种方式使用的线数较多
好处:响应速度快、优先顺序可动态改变
坏处:设备连线多、总线控制复杂
总线通信控制
为了解决通信双方(主从设备)协调配合的问题。
总线的传输周期(完成一次主从设备完整可靠的传输所需要的时间):
- 申请分配阶段:主设备申请,总线决定
- 寻址阶段:主设备向向从设备给出地址和命令
- 传数阶段:主设备和从设备进行交换数据
- 结束阶段:主从设备撤销有关信息
主线通信一般有四种方式:
- 同步通信:由统一时标控制数据传输
- 异步通信:采用应答方式,没有公共时钟标准
- 半同步通信:同步、异步结合
- 分离式通信:充分挖掘系统总线每个瞬间的潜力
存储器
存储器的分类
按照存储介质分类:
- 半导体存储器
- 计算机的内存
- U盘
- 固态硬盘
- 磁存储器
- 磁带
- 磁盘
按照存储方式分类:
- 随机存储器(RAM):随机读取、与位置无关
- 单行存储器:与位置有关、按顺序查找
- 只读存储器(ROM):只读不写
存储器的层次结构
这里的层次结构按照读写书读、存储容量和价格这三方面综合考虑
容量+价格=>位价:每比特位价格
我们可以把存储器划分为三个层次:
- 缓存:速度快、位格高
- 主存:速度适中、位格适中
- 辅存:速度慢、位格低
缓存就是CPU里面的寄存器以及高速的缓存
主存就是计算机里面的内存,比如运行内存
辅存就是计算机中的外部辅存设备,比如磁盘,U盘,移动硬盘
这三个有这么一个关系

CPU可以直接和高速缓存以及主存联系,同时高速缓存和主存也可以互相通信
实现缓存-主存层次的原理
因为缓存速度快,主存速度慢,速度不匹配,所以这就是一个问题,为了解决这个问题,所以我们需要一些方法,即局部性原理
实现方法:
在CPU与主存之间增加一层速度快(容量小)的Cache(高速缓存)
即我们应该使CPU尽可能的去访问高速缓存区域,而不是主存。这里我们就要用到局部性原理
局部性原理:
CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中
主存储器——内存
即运行内存
他是一种随机存取存储器(RAM),即存取的方式是随机存取的,而且存取的的时间是和存取的位置是没有关系的
而且内存里面的数据会因为断电而丢失
原因
RAM通过电容存储数据,必须每隔一段时间刷新一次,如果一段时间不刷新的话里面的数据就会丢失
内存也有着位数之分,有32位、64位
32位最大存储内存
$2^{32} =4\times20^{30} =4GB$
64位最大存储内存
$2^{64} =2^{34} \times20^{30} =2^{34}GB$
辅助存储器——磁盘
即电脑中的CDE…盘
磁头位置+磁头方向
磁头位置:即磁头位于哪个磁道
磁头方向:即此时磁头是向里还是外哪个方向
读取数据的方法
- 先来先服务算法
- 最短寻道时间优先
- 扫描算法
- 循环扫描算法