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

计算机系统的指令层次如下图所示
操作系统可以管理软硬件的资源。
计算机系统结构定义了系统软硬件的交界面,定义了哪些功能由软件实现,哪些功能由硬件实现,定义为==程序员所见到的计算机系统的属性概念性的结构与功能特性==。(指令系统,数据类型,寻址技术,I/O机理),即程序员需要理解的东西。
计算机组成:实现计算机体系结构所体现的属性,即具体指令的实现。
1.2 计算机的基本组成
1.2.1 冯诺依曼结构
上图实线表示数据流动,虚线表示控制反馈。
- 计算机结构由五大部件组成:存储器、运算器、控制器、输入设备、输出设备。
- 以运算器为中心,==程序存储在存储器中==。
- 指令和数据以同等地位保存在存储器中,可以按照地址寻找。
- 指令和数据由二进制表示,指令由操作码和地址码组成,操作码指明指令要干什么,地址码指明操作数的地址。
冯诺依曼结构以运算器为中心,容易形成瓶颈。我们可以使用存储器作为中心来进行优化,但是还不够。
1.2.2 现代计算机硬件框图
指令和数据都是保存在存储器中的。
1.2.3 存储器的基本组成
MAR是存储器地址寄存器,保存了存储单元的地址和编号,长度反映存储单元的个数。
MDR是存储器数据寄存器,保存了要存入存储体的数据或刚从存储体拿出来的数据,长度反映存储字长。
利用MAR和MDR来将数据放入存储器。
1.2.4 运算器的结构
ALU(算术逻辑单元),通常是一个组合电路,输入撤销,输出也撤销,因此需要加上寄存器保存参与运算的计算。
数据寄存器X保存输入参数,ACC为累加寄存器,保存结果,乘法可能使得数据位数保存不下,使用MQ寄存器保存低位。
上表中存放了不同运算中,运算器的工作过程,以乘法为例,操作过程如下:
- 首先将被乘数取出来放到ACC中
- 从指令中的乘数地址M中取出乘数,送入MQ中
- 将被乘数送到X中
- 将ACC清零
- 完成乘法操作,结果由ACC和MQ保存
这些操作的过程顺序是由控制器来控制完成的。
1.2.5 控制器的基本结构
控制器的功能是解释指令(完成指令)、保证指令的按序执行。
- PC(程序计数器)寄存器保存了当前指令的地址,进行取指令,PC有计数功能。
- IR(指令寄存器)存放当前要执行的指令,将操作码送入CU进行分析。
- CU(控制单元)发出控制信号,控制相对应的部件来执行指令。
下面以取数指令为例分析指令执行过程(取数送到ACC中)
- PC保存指令的地址,送到MAR进行寻址
- MAR根据地址到存储体中找到保存的指令
- MDR从存储体中取出指令
- 送到IR中,IR存放要执行的指令
- IR将操作码送入CU中进行分析
- 同时将地址码送到MAR中找这个数的数据
- MAR根据地址到存储体中找到要取的数
- MDR保存从存储体中取出的数
- CU控制下,将要取的数送到ACC中。
CU分析控制这些步骤的过程。
1.3 计算机硬件的主要技术指标
- 机器字长:CPU一次能处理数据的位数,与CPU中寄存器位数有关。
- 运算速度:主频、核数以及每个核支持的线程数、CPI(执行一条指令所需的时钟周期数)、MIPS(每秒执行百万条指令)、FLOPS(每秒浮点运算次数)。
- 存储容量:主存容量(可使用存储单元个数×存储字长来表示存储体容量,MAR * MDR)(也可使用字节数来表示)、辅存容量(字节数表示)。
2. 计算机的发展以及应用
2.1 计算机的发展史
第一台计算机,1946年ENIAC,十进制运算。
电子技术的发展与计算机体系结构技术的发展对计算机的发展产生了决定性作用。
根据硬件技术来对计算机进行划分代
电子管→晶体管→中小规模集成电路→大规模集成电路→超大规模集成电路
软件技术的发展:机器语言(面向机器)、汇编语言(面向机器)、高级语言(面向问题)。
2.2 计算机的应用
- 科学计算和数据处理
- 工业控制和实时控制
- 网络技术
- 虚拟现实
- 办公自动化和管理信息系统
- CAD/CAM/CIMS
- 多媒体技术
- 人工智能
3. 系统总线
3.1 总线(bus)的基本概念
总线是连接各个部件的信息传输线,是各个部件共享的传输介质,是信号的公共传输线。
如果使用单总线结构(系统总线),那么同时只能有一对部件进行信号传输,效率较低,使用双总线结构效率会更高。
上面的结构,无法在I/O和主存之间进行直接的信息传输,必须要通过CPU。
3.2 总线的分类
片内总线:芯片内部的总线。
系统总线:计算机各部件之间的信息传输线。可分为:
- 数据总线,双向的,一般小于等于机器字长和存储字长。
- 地址总线,单向的,与存储地址、I/O地址有关。
- 控制总线,双向(CPU发出存储器读写指令,总线允许,中断确认等;CPU接收中断请求、总线请求)
通信总线:计算机之间或计算机和其它设备之间的通信,并行通信总线和串行通信总线。
3.3 总线的特性和性能指标
总线印刷到电路板上(主板),其他设备插板插到主板上。
总线的性能指标:
- 总线宽度:数据线根数,同时可以传输多少位。
- 标准传输率:每秒传输的最大字节数MBps
- 时钟同步/不同步
- 总线复用:地址线与数据线是否可以复用
- 信号线数:地址线、数据线和控制线的总和
- 总线控制方式
- 其他指标:负载能力等
3.4 总线结构
增加了DMA(直接存储器访问)总线,外部设备直接访问存储器内存。高速设备直接通过DMA访问主存。
CPU与cache通过局部总线进行相连,扩展总线将外部设备连接。
高速设备和低速设备分离,分别连接到高速总线和扩展总线上。
PCI高速总线来连接高速设备,PCI总线可以通过桥来进行扩展。
3.5 总线控制
3.5.1 总线判优控制
通过是否能对总线发出占用请求,我们将设备分为主设备(主模块)和从设备(从模块)。主设备可以对总线有控制权,从设备响应从主设备发来的总线命令。
总线判优控制可以分为两种:集中式和分布式。下面介绍几种集中式的总线判优控制结构。
主设备通过BR申请总线的控制权,有设备在使用总线,则设置BS。总线控制部件通过BG来链式查询这些接口是否提出了BR,遇到了BR则交出控制权。
因此,优先顺序则为BG的查询顺序。这种结构对电路故障特别敏感,尤其是BG,如果BG后面出了问题,会导致后面的设备一直不会响应。
数据线用于数据的传输,地址线用于从设备的查找。通过设备地址线来查找某个设备是否发出总线请求。计数器的值通过设备地址线进行传输,来查找某个设备是否发出请求。可以自定义计数器的计数方式,来改变从哪个设备先查询等。
为每个I/O接口增加了BR和BG,通过排队器来进行优先级排队。这种方式使用的线数较多。
3.5.2 总线通信控制
为了解决通信双方(主从设备)协调配合的问题。
总线的传输周期(完成一次主从设备完整可靠的传输所需要的时间):
- 申请分配阶段:主设备申请,总线决定
- 寻址阶段:主设备向向从设备给出地址和命令
- 传数阶段:主设备和从设备进行交换数据
- 结束阶段:主从设备撤销有关信息
- T1,主设备给出地址信号
- T2,给出从设备的读命令信号
- T3,从设备给出数据,输出到总线,完成数据交换
- T4,撤销地址信号,结束周期
强制同步,如果设备之间速度不同,快的设备需要等慢的设备。
不互锁:不管从设备是否接收到请求信号,过段时间主设备都会撤销请求。不管主设备是否接收到应答信号,从设备多段时间都会撤销应答。
半互锁和全互锁针对上面进行改进。
增加等待响应信号,当wait为低电平,则等待一个T。
使用分离式通信来将总线空闲的时间也充分利用起来。
4. 存储器
4.1 概述
按照存取方式对存储器进行分类:
- 存取时间与物理地址无关(随机访问):随机存储器、只读存储器。
- 存取时间与物理地址有关(串行访问):顺序存取存储器(磁带)、直接存取存储器(磁盘)。
按照在计算机中的作用分类:
存储器的层次结构:
- 寄存器包括体系结构寄存器和非体系结构寄存器。
- 一部分缓存放在了CPU之中。
- 缓存——主存层次,使用硬件方法连接到一个整体(对程序员透明,即不需要了解),速度较快,解决CPU和主存之间速度差距较大的问题,缓存即为cache,CPU可以直接从缓存调用数据,cache和主存也进行数据交换。使用主存储器的实地址和物理地址。
- 主存——辅存层次,使用软硬件结合方式连接,容量较大,解决容量不足问题。这个层次称为虚拟存储器,使用虚地址和逻辑地址。
4.2 主存储器
4.2.1 概述
主存的基本组成:
主存与CPU之间的联系:
主存中存储单元地址的分配:
- 每个字节(8位)一个地址,如果一个存储单元存储32位,即四个字节为一个字,可以将高位字节/低位字节,放在小的地址作为字地址。
主存的技术指标:
4.2.2 主存储器半导体芯片简介
基本结构:
- 地址线(单向)给出地址,经过译码驱动电路来选择指定的存储单元,完成数据的读写操作(数据线双向)。
- 片选线是芯片选择信号,给出这次选择的地址是不是这个芯片的地址。
- 读写控制线,控制操作允许读还是写。
- 根据地址线和数据线条数,可以计算出芯片容量。如果地址线10条,数据线4条,那么芯片容量则为1K×4位。即1K个地址,每个地址数据4位。
译码驱动方式:
第一种方法是线选法
- 使用地址译码器,给定输入,输出只有一根线(字线)是有效的,图中一根线中是8个芯片组合成一个字,那么只有一根线的这一组芯片有效。
- 这种方法,每个字的存储单元都需要一根线,当容量较大的时候,很麻烦。
第二种方法是重合法
- 将所有存储单元布置成二维的阵列,使用两个地址译码器XY,一组(X,Y)对应一个存储单元。
- 这样会大大降低所需要的线数量。
4.2.3 随机存取存储器(RAM)
4.2.3.1 静态RAM(SRAM)
SRAM的基本电路:
- 使用触发器T1-T4来存储0/1,T5、T6控制存储单元读写,实际中会有许多虚线框进行堆叠,T7、T8列开关,一列共用。同样,可以横向进行堆叠,那么行地址选择的这一行,所有存储单元的T5和T6都会导通,但是只有对应列也有效的那个存储单元才进行读写。
- 通过行选和列选,选中进行读写操作的存储单元。
SRAM芯片举例(Intel 2114):
- WE读写控制信号,CS片选信号,A0-A9为地址线,4个I/O数据线。
- 10根地址线,使用重合法,6线为行地址,4线为列地址,每个列信号控制四列,这样一次就可以选择4位,将这4位看做是一个存储单元。就完成了1K×4位的选择。
4.2.3.2 动态RAM(DRAM)
DRAM的基本电路:
- 利用电容,如果电容保存了电荷,则认为保存是1,没有电,则认为是0。
- 保存在Cg上,T1、T2、T3是控制管。
- 读出信息与原信息相反,需要加非门。
- 写入信息与输入信息相同。
还有一种结构是单管动态RAM:
- 读出数据时,数据线有电,则为1。
- 写入时,Cs充电为1,放电为0。
三管DRAM芯片举例(Intel 1103):
- 因为电容会漏电,刷新放大器会定时对存储的信息进行刷新。
单管DRAM芯片举例(Intel 4116 16k×1位):
- 只有7根地址线,通过两次,来接受行地址和列地址,存放到对应的缓存器中。
- 通过行时钟、列时钟、写时钟来控制读写。
动态RAM的刷新:
- 每一次刷新只与行地址有关,与列地址没有关系,每次刷新一行。
- 集中刷新(在某段时间集中刷新所有的电容),这段时间DRAM是不可用的,称为死区。
- 分散刷新(每次读写操作之后,将某一行刷新),相当于将原来的读写操作的时间变长,把刷新操作放在读写操作中,这样就不存在死区。分散刷新比较频繁,有点过度刷新了。
- 异步刷新(将上面两种结合),则每隔一段时间对某一行进行刷新,即多个读写操作加一个刷新操作。
4.2.3.3 两种RAM的比较
- DRAM的集成度较高,每个存储单元复杂度较低。
- SRAM的速度较快,一般用作缓存。
4.2.4 只读存储器(ROM)
ROM中一般保存系统信息或系统程序。早期是只读的,不可以写,经过多年的发展和改进,现在的ROM可以自己多次读写。
- 掩模ROM(MROM):只读,不能修改。行列选择线交叉处有MOS管则为1,没有则为0。
- PROM(一次性编程):熔丝断了,则为0,否则为1。可以一次性的破坏性编程。
- EPROM(可以多次编程):N型沟道浮动栅MOS电路。S与D导通为1,不导通为0。
- EEPROM(多次性编程):电可擦写、局部擦写、全部擦写。
- Flash Memory(闪存型存储器):比EEPROM快,具有RAM的一些功能。
4.2.5 CPU与存储器的连接
存储器容量扩展可以通过位扩展(增加存储字长)、字扩展(增加存储字的数量)、同时扩展。
CPU与存储器的连接:
- 地址线的连接:低位作为地址,高位作为片选信号。
- 数据线的连接
- 读写命令控制线的连接
- 片选线的连接:MREQ信号(表示该信号是连接存储器还是I/O接口)一定要连接到片选信号中,使得只有这个信号有效,才是CPU和内存连接工作。
- 合理选择存储芯片(ROM/RAM,芯片的性能参数)
- 其他:时序、负载
4.2.6 存储器的校验
校验,检测合法代码,对非法代码进行纠错。
编码的纠错、检错能力与编码的最小距离有关。最小距离为任意两组合法代码之间二进制位数的最小差异。 L为最小距离,D为检测错误的位数,C为纠正错误的位数。
汉明码是具有一位纠错能力的编码,汉明码都采用了奇偶校验和分组校验(分组的奇偶校验,分组之间是有重叠的,校验位放在2 ^ k处,k=0,1,2,3…)。
汉明码的分组,将代码中每一位进行分组(1,2,3,4,5,6,7序号),将每一位的序号进行分组,序号的二进制最右边一位为1的,第一组,右边第二位为1的,第二组……
==最后的校验结果,哪一位是1,那么这位对应的那组中的那个序号的代码位出错。如果出现了多个1,那么就是这几个组中公共的那位出错了。==
4.2.7 提高主存的访问以及存储速度
CPU速度提升很快,但是存储器的速度提升较慢。
我们可以采用高速器件,采用层次结构(Cache-主存),==调整主存结构。==
- 单体多字系统:使得存储器的存储字长大于CPU的字长(比如是CPU字长的4倍),这样一次读取就可以读取多个指令。但是这样会导致存储器结构复杂, 而且,如果需要执行的指令不是连续存放的,会更麻烦。
- 多体并行方式:
- 高位交叉:对各个存储体进行编号,存储体内部自行编号,每个存储体独立,有自己的控制编号。这样CPU给出的地址是体号+体内地址,各个存储体可以并行处理。(类似存储器容量的扩展)如果程序指令存方式顺序的,实际上还是在一个存储体中,并无法提升存储体速度。
- 低位交叉:体内地址+体号,使用横向的编码,比如存储体为M0-M3,那么第一个地址为M0的第一个位置,第二个地址为M1的第一个位置……这样M0中所有地址后两位都为00,M1都为01,M2都为10,M3都为11。后两位给出了存储体的选择地址。这样如果程序指令顺序存放的地址,实际上是不同存储体并行处理,这样就提升了效率,流水操作。
4.3 高速缓冲存储器(Cache)
4.3.1 概述
CPU与主存(DRAM)之间存在速度差异,为了避免CPU“空等”的现象,使用cache。
程序访问的局部性原理:
- 时间的局部性:当前正在使用的指令或数据,会在不久的将来还会使用到,那么应该把这种数据或指令放在缓存中。
- 空间的局部性:当前正在使用的指令或数据,不久的将来,相邻的指令或数据会使用到,那么应该把当前和相邻的指令和数据放到缓存中。
cache的工作原理:
把主存和cache分成大小相等的块,每个块大小相等,主存的块数量远远大于cache的块数量。==主存与cache之间的信息传送是按块传送,块内地址不变,cache的每个块的标记,标记了这个块是主存的哪个块。==
主存块调入了缓存(即cache标记了),称为命中,CPU可直接在缓存中取得数据;如果没有调入,称为未命中。
我们希望,每次执行程序,都尽可能的在cache中提取数据,这样速度会很快。CPU欲访问的信息在Cache中的比率称为命中率,命中率与Cache的容量和块长有关。一般每块取4-8个字,一般为一个存取周期内从主存调出的信息长度。
cache与主存的访问效率:
这里面平均访问时间为每次访问的平均时间(可能从cache,可能从主存)。
4.3.2 cache的基本结构与读写操作
cache的基本结构:
读写操作:
- 前者时刻保持了cache和主存的一致,后者只写cache中,当cache中退出时才写回主存。
cache的改进:
- 增加cache的级数:片内cache,片外cache。
- 分立缓存:指令cache,数据cache。
4.3.3 cache-主存的地址映射
即主存的任意一块加载到cache中的哪块。
直接映射:
即主存中任意一个块,只能映射到指定的一个cache块中,cache块可以是一对多的。相当于将主存分区,每个区内的这些块,对应于cache的所有块;这样在cache的标记中,有t位的标记,表示当前该cache块存放的是主存哪个区的对应位置信息。
这种方法cache块的利用率比较低,且可能会冲突。
全相联映射:
主存中任意一个块,可以被放入cache中的任意一个块中。
这样的话,虽然块的利用率高了,但是因为块可以映射到任意一个位置,如果查询某个主存块是否已经放入cache,需要比较所有的cache标记,速度较慢。
==组相联映射==:
与直接映射相似,==将cache分组,每个组可以有多个块;将主存分区,每个区的大小为cache的组数==。这样每个区的第0块,可以放入cache第0组的任何一个位置,因为每个组有多个块,解决了直接映射的冲突问题;想查询某个主存的块是否放入了cache,只需要在对应的组进行查询即可,解决了全相联映射的问题。
4.3.4 替换算法
如果内存块满了,如何替换,将谁弹出。
先进先出(FIFO)算法
近期最少使用(LRU)算法
4.4 辅助存储器
辅助存储器的主要作用是保存程序、文档和影音资料,不能直接与CPU交换信息,需要调入主存才能进行读写。
包括磁盘存储器和光盘存储器等。
5. 输入输出系统
5.1 概述
发展概况:
- 早期CPU与I/O设备串行工作,分散连接。使用程序查询方式连接。
- 后来使用总线连接(一条总线可以连接多个设备),出现了I/O接口和DMA控制器,并行工作。
- 具有通道结构的阶段。
- 具有I/O处理机的阶段(I/O的独立性更强,使用I/O处理器)。
I/O系统的组成:
I/O软件:
- CPU中的I/O指令,来控制外部设备与主机协调工作,格式为==操作码+命令码+设备码==。
- 通道指令,通道自身的指令。
I/O硬件:
- 设备以及I/O接口,或者设备以及设备控制器,通道。
I/O设备与主机的联系方式:
- 对I/O设备进行编址:统一编址(将I/O地址放在内存的地址空间中,可以直接使用指令对外部设备进行存取数),不统一编址(需要使用专门的I/O指令来调用设备)。
- 设备选址:使用设备选择电路识别某个设备是否被选中。
- 数据传送方式:串行(一位一位传输)/并行(多位同时传输)。
联络方式:
- 立即响应,接收到数据/指令,直接响应。
- 异步工作,使用应答信号,可以并行也可以串行(I/O设备与接口之间)
- 同步工作,使用同步时标。
I/O设备与主机的连接方式:分散连接(辐射式连接,每台设备都配有一套控制线路和信号线),总线连接。
I/O设备与主机信息传送的控制方式:
- 程序查询方式(CPU与I/O串行工作,CPU需要等待,效率很低,CPU连接I/O设备和内存)
- 程序中断方式(部分并行,CPU被一定程度解放,在IO设备自身准备的时候,CPU可以先进行自己的工作,当IO与主机进行信息交换的时候,CPU暂停自身程序,来参与信息交换)。
- DMA方式(使外部设备与内存建立连接,解放cpu,主存与IO之间有一条直接数据通道,通过DMA控制器可以直接进行数据交换,==采用周期窃取,借用一个存取周期,使得DMA控制总线,完成数据在IO和主存之间的传送==,在这个周期中,CPU不能控制总线,但可以继续执行不需要访存的指令)。
5.2 外部设备
- 输入设备:键盘、鼠标、触摸屏
- 输出设备:显示器、打印机
- 其他:A/D,D/A转换器,终端,汉字处理
- 多媒体技术:VR等
5.3 I/O接口
5.3.1 概述
为什么要设置接口:
- 实现设备的选择
- 实现数据缓冲,达到速度匹配
- 实现数据串/并格式转换
- 实现电平转换(主机和IO设备工作电平可能不一致)
- 传送控制命令
- 反映设备的状态(忙、就绪、中断请求)
5.3.2 接口的功能和组成
主机通过IO总线与IO设备相连接。
五大部分:数据缓冲寄存器、设备状态标记、控制逻辑电路、设备选择电路、命令寄存器和命令译码器。
5.3.3 接口类型
- 按照数据传送方式:串行/并行
- 按照功能选择的灵活性:可编程接口/不可编程接口
- 按通用性:通用接口/专用接口
- 按数据传送的控制方式:中断接口/DMA接口
5.4 程序查询方式
程序查询方式的接口电路:
- 当D等于1的时候,IO完成了送入数据到DBR,此时CPU通过数据线读入数据,在D等于1之前,CPU一直在原地踏步等待。
5.5 程序中断方式
5.5.1 中断的概念
CPU在执行程序的时候,遇到特殊事件或异常事件,暂停原来的程序,去处理这个事件(执行中断服务程序),之后再继续执行原来的程序。
5.5.2 I/O中断的产生
5.5.3 程序中断方式的接口电路
- 配置中断请求触发器和中断屏蔽触发器(如果目前执行的程序比请求的设备优先级高,则屏蔽该中断请求)
- 排队器(有多个中断的话,需要使用排队器,根据优先级进行排队)
- 中断向量地址形成部件(形成中断服务程序的入口地址)
配置中断请求触发器和中断屏蔽触发器:
排队器:
排队器可以使用硬件电路来实现(在CPU内或接口电路中),也可以在软件中实现。
链式排队器,输出只有一位是高电平,其他都是低电平,高电平表示此时最高优先级的中断。
中断向量地址形成部件:
找到中断服务程序的入口地址,同样可以使用软件或硬件方法(硬件向量法)。
硬件向量法由硬件产生向量地址,再由向量地址找到入口地址。
中断向量地址形成部件的输入为排队器的输出(只有一位是高电平,其他都是低电平),==输出为该种中断的向量地址,再通过向量地址,找到该种中断的中断服务程序的入口地址。==
5.5.4 I/O中断处理过程
5.5.5 中断服务程序流程
5.6 DMA(直接存储器访问)方式
5.6.1 DMA方式的特点
程序中断方式必须使用CPU来作为缓冲(即使是主存和IO之间进行信息交换)。
DMA方式,不需要CPU作为缓冲。
- 这种方法的实用性不强。
5.6.2 DMA接口的功能和组成
- AR:地址寄存器,WC:计数器,对传输数据量计数。
- BR:数据缓冲器,DAR:设备地址寄存器,供设备选择电路使用;对于硬盘等设备,可以保存扇区号等。
- DMA控制逻辑:完成与设备之间的请求回答,与总线的请求回答。
- 中断机构:传输结束之后的后续处理。
5.6.3 DMA的工作过程
DMA的传送过程:预处理、数据传送、后处理。
DMA接口与系统的连接方式:
- 多个DMA接口连在一起,共享一条请求线。各DMA同样有优先级顺序。
5.6.4 DMA接口的类型
- 一个接口连了多个设备,但是每次只能与一个设备使用。
- 每个通道有多个子通道,子通道可以并行使用。
6. 计算机的运算方法
6.1 无符号数和有符号数
6.1.1 无符号数
没有正负号的数据,寄存器的位数即为无符号数的表示范围。
6.1.2 有符号数
分为符号部分和数值部分。
机器数保存符号、小数点位置以及数值。计算机中没有专门的硬件保存小数点,都是以约定的形式给出。
原码表示法:
整数:==符号位+,+数值。符号位0为正,1为负。==逗号将符号位和数值分隔开,数值其实是数的绝对值。
小数:==符号位+.+小数部分,符号位0为正,1为负。==小数点将符号位和小数部分分隔开。
上面的逗号和小数点,都不需要在计算机中存储,这里是方便人来阅读。
使用原码进行加法的时候,结果的符号可正可负,希望找到一个与负数等价的正数来替代这个负数,这样就可以使得减法变成加法,即补码表示法。
补码表示法:
整数:正数的补码与原码一致,负数的补码为它的原码,除符号位以外,各位取反,最后加1。
小数:正数的补码与原码一致,负数的补码为它的原码,除符号位以外,各位取反,最后加1。
反码表示法:
正数的反码就是原码,负数的反码,将原码除符号位外,所有位取反。
移码表示法(只有整数形式定义):
补码很难直接判断其真值大小。
6.2 数的定点表示和浮点表示
6.2.1 定点表示
小数点按照约定方式标出,没有硬件完成小数点,根据设计人员的约定来进行表示。
小数点可放在数符和数值之间(小数定点机),或数值之后(整数定点机)。
6.2.2 浮点表示
定点表示的数,表示范围小,为了表示两个大小相差很大的数据,需要很长的机器字长。数据存储单元的利用率很低。
浮点数的一般形式 S为尾数,j为阶码,r为尾数的基值,计算机中r通常取2,4,8,16。在计算机中,S为小数,可正可负;j为整数,可正可负。
对浮点数进行规格化,是为了尽可能保证数据的精度,让有效的位数尽可能多。
6.3 定点运算
6.3.1 移位运算
数据相对于小数点进行左移/右移(小数点不动)。左移,绝对值扩大,右移,绝对值缩小。移位与加减法配合,能够实现乘除法运算。
- 注意,==符号位保持不变==。
算数移位的硬件实现:
即,左移,最高位扔掉,其他位左移,末尾补0/1。
右移,最低位扔掉,其他位右移,高位补0/1。
6.3.2 加减法运算
主要是使用补码进行加减法运算,因为可以将减法变为加法。
还需要判断处理溢出。
两个同符号的数,数值运算产生了进位,进位到了符号位,改变了符号位,则就出现了溢出。
核心是n+1位加法器,两个寄存器保存参与计算的数据。
6.3.3 乘法运算
模拟笔算乘法的过程,符号位进行单独处理(异或电路),可以将乘数放到移位寄存器中。
- n是参加运算的数的数值部分长度。
6.3.4 除法运算
二进制的除法比十进制简单得多,商只会上0/1。
- 小数除法,小数都是小于1的,因此默认被除数小于除数,这样结果还是小于1的。
恢复余数法:余数为正,上商1;余数为负,上商0,恢复余数。
不恢复余数法(加减交替法)
6.4 浮点四则运算
浮点数的加减运算:
6.5 算术逻辑单元(ALU)
6.5.1 ALU电路
Ai和Bi两个输入,进行计算的两个数值,F为输出结果,K控制进行什么计算。
6.5.2 快速进位链
- C为进位,需要等低位的计算完之后,才能进行这一位的计算,因此需要更快的进位。
- 进位链是影响加法速度的瓶颈
7. 指令系统
指令系统是计算机软硬件的交汇面。
7.1 机器指令
7.1.1 指令的一般格式
7.1.2 指令字长
指令的字长取决于:操作码的长度,操作数地址的长度,操作数地址的个数。
指令字长可以是固定的(指令字长=存储字长),也可以是可变的,按照字节的倍数进行变化。
7.2 操作数类型和操作种类
7.2.1 操作数类型
- 地址:无符号整数(绝对地址),有符号数(相对地址)
- 数字:定点数、浮点数、十进制数
- 字符:ASCII
- 逻辑数:逻辑运算
7.2.2 数据在存储器中的存放方式
字节编址:
7.2.3 操作类型
7.3 寻址方式
确定本条指令的操作数地址,或下一条指令的指令地址。
可分为指令的寻址和数据寻址
7.3.1 指令寻址
顺序寻址/跳跃寻址。
pc程序计数器。
7.3.2 数据寻址
- 操作数的有效地址保存在另一个位置,再去这个位置找到有效地址EA,访存两次。
- BR是基址,A相当于偏移量,形式地址。
- 相对于当前PC值。
7.4 指令格式举例
7.5 RISC(精简指令集计算机)技术
8. CPU的结构与功能
8.1 CPU的结构
8.1.1 CPU的功能
8.1.2 CPU结构框图
- IR指令寄存器,PC程序计数器
8.1.3 CPU的寄存器
8.1.4 其他
其他部分还包括CU(控制单元)、中断系统以及ALU。
CU产生全部指令执行的时候的微操作命令序列,可使用组合逻辑设计或微程序设计。
8.2 指令周期
8.2.1 基本概念
8.2.2 指令周期的数据流
8.3 指令流水
8.4 中断系统
8.4.1 概述
8.4.2 中断请求标记和中断判优逻辑
8.4.3 中断服务程序入口地址查询
8.4.4 中断响应
- 中断隐指令不是实际的指令,而是硬件直接实现的。
8.4.5 保护现场和恢复现场
8.4.6 多重中断
- 通过屏蔽触发器,设置中断屏蔽字,来调整中断的优先级(中断处理的优先级。不是响应的优先级)。
9. 控制单元的功能
9.1 微操作命令的分析
完成一条指令分为四个周期:取指周期、间址周期、执行周期、中断周期。
9.2 控制单元的功能
发出各种控制命令和微指令。
10. 控制单元的设计
10.1 组合逻辑设计
- 操作码译码只有一条有效,为高电平,对应操作为什么,CU给出对应的一个或几个操作控制信号。如果是几个都有效,说明这个节拍下,这几个可以并行处理。
- 蓝色的C为控制信号,都是由CU在时钟和IR操作码的控制下,在相应节拍给出的。
- 可以并行的微操作,尽可能安排在同一个节拍内。
- 1.累加器清零
- 2.ACC按位取反
- 3.算术右移操作
- 4.循环左移操作
- 5.停机指令
- 6.加法操作,T0,取操作数,将指令地址码送入MAR,同时读信号;T1,内存中的数据送入MDR;T2,累加器中内容和MDR中数据相加,放在累加器中。
- 7.将累加器中保存的数据,送到地址为X内存中。
- 8.load,把内存地址为x的内存中数据,取到累加器中。
- 9.跳转到给定的地址X
- 10.分支指令,条件转移,如果上条计算指令结果小于0,则跳到X处
组合逻辑设计步骤:
- 列出操作的时间表
- 写出微操作命令的最简表达式
- 画出逻辑图
10.2 微程序设计
采用微程序设计的方法来实现控制器。