计组笔记

学到第三章的时候发现计组的各个部分是联系紧密的,因此补全一下前面的笔记,顺便完成对体系的整理,方便后续的复习。

第一章 计算机系统概述

1.2 计算机层次结构

1、计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备5大部件组成。

1
2
3
4
5
6
7
8
9
10
输入设备包括键盘、鼠标、扫描仪、摄像机等。
输出设备包括显示器、打印机等。
存储器包括主存储器和辅助存储器,cpu可以直接访问主存。主存的工作方式是按地址存取方式。
mar和mdr在逻辑上属于存储器的组成部分,存储从存储器中读取或者写入的数据,但是实际上被集成在cpu中。cache也是在cpu内,但是实际上是属于存储器的部分。
mar的长度与pc的长度相等。
mdr的位数通常等于存储字长。
运算器用于进行算术计算和逻辑运算。运算器的核心是alu。运算器中还包括acc、mq、操作数寄存器(X)、变址寄存器(IX)、br、psw等寄存器。
控制器由pc,ir,cu组成。pc存放当前指令的地址,具有自动递增功能,在pc和mdr之间有直接通路。ir存放当前指令,内容来自mdr(而mdr来自于pc),指令中的操作码OP(IR)送至cu,而地址码Ad(IR)送往mar,用于取操作数。
一般将运算器和控制器集成到一起,也就是cpu,cpu包含alu、gprs、psw、cu、ir、pc、mar、mdr。cpu和主存共同构成主机,辅存和io设备称为外设。
cpu和主存通过总线相连,总线分为地址、控制和数据三组信号线。
1
2
3
4
5
6
7
8
9
10
11
12
13
pc: program counter
mar: memory address register
mdr: memory data register
alu: arithmetic and logic unit
acc: accumulator
mq: multiplier quotient
br: base register
psw: program status word
操作数寄存器x和变址寄存器ix找不到为什么是这么叫的,可能是某个远古指令集的遗留。
ir: instruction register
cu: control unit
cpu: central processing unit
gprs: general purpose register set

2、计算机软件分为系统软件和应用软件。系统软件如操作系统os,数据库管理系统dbms,语言处理程序、分布式软件系统等等,应用软件如工程设计类程序、数据统计与处理程序等。

1
2
os: operating system
dbms: database management system

3、计算机软件中的语言分为机器语言(二进制代码语言)、汇编语言和高级语言。

1
2
3
汇编程序(汇编器)可以将汇编语言转化为机器语言。
解释程序(解释器)可以将高级语言转化为机器语言。
编译程序(编译器)可以将高级语言转化为汇编语言或者机器语言。.

4、计算机系统的层次结构可以分为虚拟机器M4(高级语言层)、虚拟机器M3(汇编语言层)、虚拟机器M2(操作系统层)、传统机器M1(传统机器语言层)、微程序机器M0(微程序机器层)

1
M4通过编译器到达M3、M3通过汇编器到达M2、M2用机器语言解释操作系统,通过ISA到达M1层,M0和M1层为硬件层,是计组的主要内容。
1
isa: instruction set architecture

5、计算机每条指令的执行过程包括:根据pc从主存中取指令,对指令进行译码、计算下一条指令地址、取操作数并执行、将结果送回存储器。程序就是多条指令的执行。

6、翻译过程的四个阶段:hello.c -> hello.i -> hello.s -> hello.o -> hello(elf/exe)

1
2
3
4
5
以gcc编译器为例,将c语言转为可执行文件格式。
hello.c(源程序)通过cpp转为hello.i
hello.i(预处理文件)通过cc1转为hello.s
hello.s(汇编语言文件)通过as转为hello.o
hello.o(可重定位目标代码文件)通过ld转为hello
1
2
3
4
5
.c表示c语言程序文件;.i可能表示include,中间文件;.s可能是assemble,表示汇编语言文件;.o可能表示object file,目标文件。
cpp: c preprocessor
cc1: c compiler 1
as: assembler
ld: linker

1.3 计算机性能指标

1、机器字长指计算机一次整数运算能处理的二进制数据的位数;指令字长指一个指令字中所包含的二进制数据的位数;存储字长指一个存储单元所包含的二进制数据的位数。

2、数据通路带宽是指数据总线一次能并行传送信息的位数,指的是外部数据总线的宽度,跟cpu内部的数据总线宽度有可能不同。

3、mar的位数反映了存储单元的个数,因为mar要能够指向主存的所有存储单元;mdr的位数反映了存储单元的字长,也就是一次能够传输的数据长度。

4、吞吐量是指系统在单位时间内处理请求的数量,系统吞吐量主要取决于主存的存取周期。响应时间指从用户向计算机发送一个请求到系统对该请求作出响应并获得所需结果的等待时间。

1
响应时间包括运行一个程序花费的时间(cpu),磁盘访问时间、存储器访问时间、IO操作时间、操作系统开销时间等(等待时间)。

5、cpu时钟周期是cpu工作的最小时间单位。主频(cpu时钟频率)是时钟周期的倒数,是衡量机器速度的重要参数。

1
CPU时钟周期 = 1/主频,主频通常以Hz为单位,周期为时间单位,主频表示每秒的时钟周期数

6、cpi是指执行一条指令所需的时钟周期数。
主频是每秒的时钟周期数。
不同指令的时钟周期数不同,因此对于一个程序而言,其cpi指该程序中所有指令执行所需的平均时钟周期数,即平均cpi。即对于一个程序或者系统而言,单独的cpi是没有意义的,无法准确地衡量程序执行的速度。
ips是指每秒可以执行的指令的数量。

1
2
3
4
5
6
cpi: cycle per instruction
ips: instructions per second
ips = 主频/平均cpi
cpi(单位) = 时钟周期/指令
主频(单位) = 时钟周期/秒
ips(单位) = 指令/秒

7、cpu执行时间是cpu性能的体现,取决于主频、cpi和指令条数。主频、cpi和指令条数是相互限制的。

1
2
3
4
5
6
7
cpu执行时间 = cpu时钟周期数/主频
cpu时钟周期数(时钟周期),主频(时钟周期/秒)
cpu时钟周期数 = 指令条数 * cpi
指令条数(指令) cpi(时钟周期/指令)
cpu执行时间 = 指令条数 * cpi / 主频
由于上文可知主频 = cpi * ips
可得cpu执行时间 = 指令条数 / ips

8、mips表示每秒执行多少百万条指令,elops表示每秒执行多少次浮点运算

1
2
3
4
mips: million instructions per second
flops: floating-point operations per second
mips = 主频 / (cpi * 10^6)
除了flops,还有mflops,gflops,tflops,pflops,eflops,zflops等表示大量浮点运算的指标,m,g,t,p,e,z跟存储容量的大小是对应的数值

9、基准程序也可以用来测试机器的性能

1
基准程序: benchmarks

10、系列机指具有基本相同体系结构,使用相同基本指令系统的多个不同型号的计算机组成的产品系列。

11、兼容指软件或硬件的通用性

1
2
3
4
向后兼容(backward compatibility):指新版本的软件或硬件能够支持旧版本
backward在此处可以理解为落后的版本的意思
向前兼容(forward compatibility):指旧版本的软件或硬件能够对新版本进行兼容(比较难实现)
向上兼容和向前兼容对应,向后兼容和向下兼容对应。

12、固件,将程序固化在rom中,是一种具有软件特性的硬件,具有软件和硬件各自的优点。

第五章 中央处理器

5.1 cpu的功能和基本结构

1、cpu由运算器和控制器组成。

1
cpu: central processing unit

2、cpu的主要功能包括:

指令控制:完成取指、分析指令和执行指令的操作,即程序的顺序控制。

1
2
3
4
5
6
负责程序的顺序执行,包括:
取指:从内存中读取下一条指令。
译码:分析指令的操作类型和操作数。
执行:通过运算器或控制器完成指令操作。

执行 MOV AX, 5 时,CPU 从内存读取该指令,解析为“将值 5 存入 AX 寄存器”,并完成数据写入。

操作控制:产生完成一条指令所需的操作信号,将操作信号送到响应部件。

1
2
3
生成并分发控制信号,协调各硬件组件完成指令操作。

执行 ADD AX, BX 时,控制单元生成信号,激活 ALU(算术逻辑单元)进行加法运算,并将结果存入目标寄存器。

时间控制:严格控制各种操作信号的出现时间、持续时间和出现的时间顺序。

1
2
3
4
5
6
通过时钟信号和时序电路,确保操作信号的精确时序:
同步化:所有操作按时钟周期分步执行。
顺序化:严格遵循取指→译码→执行的顺序。

CPU 时钟频率(如 3.5 GHz)决定了每秒的操作周期数。
每个指令的执行被拆分为多个时钟周期(如取指周期、执行周期)。

数据加工:对数据进行算术和逻辑运算。

1
2
3
4
对数据进行算术运算(加减乘除)或逻辑运算(与、或、非、异或)。

计算 5 + 3 时,ALU 执行加法。
判断 A > B 时,ALU 通过比较器生成状态标志(如零标志、进位标志)。

中断处理:对运行过程中出现的中断请求和异常情况进行处理。

1
2
3
4
5
6
7
响应外部事件(如硬件中断)或内部异常(如除零错误):
暂停当前任务,保存上下文。
执行中断服务程序(ISR)。
恢复原任务继续执行。

用户按下键盘时触发硬件中断,CPU 保存当前程序状态,读取键盘输入,再恢复原程序。
发生“缺页异常”时,CPU 调用操作系统处理缺页。

3、cpu由运算器和控制器两大部分组成。

1
2
3
4
5
6
7
运算器包括算术逻辑单元alu,暂存器、累加寄存器acc、通用寄存器组gprs、程序状态字寄存器psw、移位寄存器、计数器ct组成。主要功能是根据控制器送来的命令,对数据执行算术运算(加减乘除)、逻辑运算(与、或、非、异或、移位、求补等)或条件测试(用于设置ZF、SF、OF和CF等标志位,用于条件转移的判断)。

控制器包括程序计数器pc、指令寄存器ir、指令译码器id、时序电路和微操作信号发生器等。主要功能是执行指令,每条指令执行都是由控制器发出的一组微操作实现的。

控制器的工作原理是根据指令操作码、指令执行步骤(微命令序列)和条件信号来形成计算机各部件的控制信号。通过控制信号控制各个部件得到预期的执行结果。

控制器是计算机系统的中枢,通过控制器的控制,运算器、存储器和输入输出设备构成一个有机整体,根据指令要求协调工作。

4、cpu寄存器,cpu中的寄存器按汇编语言是否可以访问分为两类:一类是用户可见寄存器,通过对这类寄存器进行编程可以减少对主存的访问次数。另一类是用户不可见寄存器,不可对这类寄存器编程,它们被控制部件使用。

1
2
3
用户可见寄存器包括通用寄存器组(含基址/变址寄存器)、程序状态字寄存器、程序计数器

用户不可见寄存器包括存储器地址寄存器、存储器数据寄存器、指令寄存器、暂存寄存器、累加寄存器、移位寄存器

5、运算器中的寄存器

通用寄存器组gprs,用于存放操作数和地址信息,如ax、bx、cx、dx、sp等。

累加寄存器acc,用于暂时存放alu的运算结果。

移位寄存器sr,存放操作数,对数据进行左移和右移。

暂存寄存器,暂存数据总线或通用寄存器的操作数,以便取出下个操作数时送入alu。

程序状态字寄存器,保留各种状态信息,如OF、SF、ZF、CF等,每个标志位通常为一位,组合在一起称为程序状态字寄存器。

6、控制器中的寄存器

程序计数器pc,指出将要执行的指令在主存中的地址,具有自动加一的功能。

指令寄存器ir,用于保存当前正在执行的指令,ir的位数等于指令字长。

7、题目小知识

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
控制器中的一般常考的只有指令寄存器ir和程序计数器pc,其他的基本都属于运算器。

条件转移指令执行时所依据的条件来自程序状态字寄存器。

在所谓的n位cpu中,n是指数据总线线数,即cpu一次能处理的数据的位数。

pc的自增是由cpu在执行指令过程中实现的,执行转移指令时,pc的值需要满足条件才会修改为转移指令的目标地址。

pc可以使用字节地址或字地址,使用字节地址时pc的位数取决于存储器的容量,使用字地址时pc的位数取决于指令字长和存储器容量。

指令顺序执行之后,pc值总是加上一个指令的长度,而不是pc值加一,这个说法是不严谨的。

cpu中通用寄存器的位数取决于机器字长。机器字长就是cpu一次能处理的数据的位数。

cpu中不包括地址译码器,注意不要和地址寄存器以及指令译码器混淆了,地址译码器是在存储器中用于对地址码进行解析的。

5.2 指令执行过程

1、cpu每次取指并执行所需的全部时间称为指令周期。

1
2
3
4
对于不访存指令,指令周期仅包含取指周期和执行周期。
对于需要间接寻址,即操作数存储在主存中的指令,指令周期包含取指周期,间址周期和执行周期。
对于使用中断方式处理IO输入输出的cpu,指令周期可能包含取指周期、间址周期、执行周期和中断周期。
在指令执行结束时对中断进行查询,检查是否有未处理的中断,在第七章中有详细解释。

2、cpu执行指令时,首先进入取指周期,从PC指向的主存地址中取出指令,将PC加上一个指令的长度。然后判断是否存在间接寻址,存在则在主存中获取操作数的直接地址,不存在则进入执行周期。执行周期包括取操作数、执行运算和存操作数。执行完成后检测是否有中断信号,有则关中断、保存断点,进入中断服务程序。

3、指令周期的数据流。数据流是指根据指令要求依次访问的数据序列,指令执行不同阶段的数据流不同,不同指令的数据流也不同。

4、取指周期,任务是根据PC的地址取指并存到IR中。

1
2
3
4
5
6
7
8
9
10
pc存放了下一条指令的地址。
pc -> mar -> 地址总线 -> 存储器
(pc将地址发送到mar,mar通过地址总线指定指令存放的地址)
cu发出读命令 -> 控制总线 -> 主存
(cu发出读命令,通过控制总线发送给主存)
主存 -> 数据总线 -> mdr -> ir
(主存根据地址总线和控制总线的信息,取出对应的指令,通过数据总线发给mdr,mdr再存储到ir)
cu发出控制信号 -> pc+1
(cu发出控制信号,让pc指向下一条指令的地址)
注意在cpu内部使用的不是系统总线,cu和pc是使用片内总线连接的,不需要经过控制总线。

5、间址周期,取出使用间接寻址的操作数的直接地址。

1
2
3
4
5
6
7
8
9
10
操作数地址码是包含在指令中的,所以要从ir开始,或者从mdr开始。
ad(ir)/mdr -> mar -> 地址总线 -> 主存
(将指令中的操作数间接地址发给mar,mar通过地址总线确定直接地址存放的位置)
cu发出读命令 -> 控制总线 -> 主存
(cu发出读命令,通过控制总线发送给主存)
主存 -> 数据总线 -> mdr
(主存根据地址总线和控制总线的信息,取出对应的数据,通过数据总线发给mdr)
操作数的直接地址存储在mdr中。

可以看到每次访存都需要地址总线、控制总线和数据总线的配合。

6、执行周期,根据地址取操作数,根据指令中的操作码通过alu操作产生执行结果,由于不同的指令执行周期操作不同,因此没有统一的数据流。

7、中断周期,用于指令执行完成后检测是否存在未处理的中断。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
处理中断时首先要关中断,保存断点,寻找中断服务程序地址,然后执行中断服务程序。
在保存断点时将程序断点压入堆栈中,用sp寄存器指示栈顶指针。

cu发出控制命令 -> sp-1
(指向新的栈顶地址)
sp -> mar -> 地址总线 -> 主存
(由于要将断点压入栈中,指向的存储地址就是栈顶指针)
cu发出写命令 -> 控制总线 -> 主存
(cu发出写命令,通过控制总线发送给主存)
pc -> mdr -> 数据总线 -> 主存
(将pc中的内容,也就是下一条指令的地址压入栈中)

cu将中断服务程序地址发送pc
(这里是简略了,实际上根据不同的中断方式,得到中断服务程序地址之后才能发给pc)

8、指令执行方案

不同的处理器使用不同的方案来安排指令的执行步骤。

1
2
3
4
5
单周期处理器:对所有指令都使用相同的执行时间完成,每条指令都在一个时钟周期内完成,即cpi = 1。所以指令周期取决于执行时间最长的指令,因此对于执行时间较短的指令来说效率较低,降低了整个系统的运行速度。单周期处理器中指令串行执行。

多周期处理器:对于不同类型指令安排不同的指令步骤。指令需要多少周期就给予多少周期,即cpi>1。可选用不同个数的时钟周期。多周期处理器中指令串行执行。

流水线处理器:流水线处理器中指令并行执行。目标是在每个时钟周期完成一条执行,即理想情况cpi=1。这种方案通过在每个时钟周期启动一条指令,让多条指令并行执行,但每个指令在不同的执行步骤中,以达到目标。

9、题目小知识

1
2
3
4
5
6
7
取指操作是控制器自动进行的。控制器采用时序逻辑电路(硬布线控制)或微程序控制,每个时钟周期都会自动执行相应的微操作,无需额外指令控制。

指令长度相同的指令,取指操作是相同的。但是指令长度不同的指令,取指操作可能不同。

控制器可以分辨存储单元中存储的是数据还是指令,根据指令周期的不同阶段。

不采用cache和指令预取技术时,每个指令周期中cpu应该至少访存一次。

5.3 数据通路的功能和基本结构

1、不论cpu的内部结构有多复杂,都可以视为是数据通路和控制部件两大部分组成。

1
2
3
4
5
6
data path: 数据通路
control unit: 控制部件

数据通路是指数据在指令执行过程中所经过的路径,包括路径上的部件,如alu、通用寄存器、状态寄存器、异常和中断处理逻辑等。
数据通路描述了信息的起始、途径和终点。
数据通路由控制部件控制,控制部件根据指令的不同功能,生成对数据通路的控制信号。

2、组成数据通路的元件主要分为组合逻辑元件和时序逻辑元件。

3、组合逻辑元件(操作元件):任何时刻的输出只取决于当前的输入,不含记忆存储单元,不受时钟信号控制,输出与输入之间无反馈通路。

1
2
3
4
5
6
7
8
数据通路中常见的组合逻辑元件有加法器、alu、译码器、多路选择器mux、三态门等。

译码器用于对操作码或地址码进行译码,n位输入对应2^n种不同组合。
多路选择器mux用于选择哪个输入被输出。
三态门可视为一种控制开关,有高阻态、0和1三种输出状态。当控制信号EN=1时,多态门打开,输出等于输入,为0或1;当EN=0时,多态门隔断,所连接的寄存器与总线断开,输出为高阻态。
三态门通常在寄存器和总线之间连接,用于对寄存器的输入或输出进行筛选。

EN: enable使能信号

4、时序逻辑元件(状态元件):任何时刻的输出不仅与当前输入相关,还与之前的输入相关。在时序逻辑元件中包含存储信号的记忆单元,必须在时钟节拍下工作。

1
2
各类寄存器和存储器,如通用寄存器组、程序计数器、状态/移位/暂存/锁存寄存器等都是时序逻辑元件。
有存储功能的都是时序逻辑元件。

5、数据通路的基本结构有三种,cpu内部单总线结构、cpu内部多总线结构、专用数据通路方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cpu的数据通路是逻辑架构,片内总线是物理实现。

cpu内部单总线结构:将alu和所有寄存器连接到一条内部总线上。
优点是结构比较简单,缺点是数据传输存在较多冲突,性能较低。
注意该总线为片内总线,不要与系统总线混淆。
能输出到总线的部件均通过三态门与内部总线相连,用于控制该部件与内部总线之间数据通路的连接与断开。

单周期处理器不能使用cpu内部单总线结构,这是因为单周期处理器需要在一个时钟周期内完成一条指令的执行。
但是单总线结构一个时钟周期内只能进行一次操作,无法满足单周期处理器的需求。

cpu内部多总线结构:cpu内部有两条或多条总线时,构成双总线结构或多总线结构。
采用多总线结构可以一个时钟周期进行多次操作,传输不同的数据,效率高。

专用数据通路方式:根据指令执行过程中的数据和地址的流动方向连接电路,避免使用共享总线。
其实就是单独物理布线,优点是性能高,但是硬件量大。

在现代的cpu中一般只在关键数据通路中使用专用数据通路方式,非关键数据通路使用共享总线。

6、数据通路的操作举例

总线不能存储信息,任一时刻只能有一个部件把信息送到总线上。

在单总线数据通路中,常见操作的流程及控制信号。

通用寄存器之间传送数据

1
2
3
4
5
寄存器和总线之间存在Rin和Rout信号。
Rin有效时,总线->寄存器R;Rout有效时,寄存器R->总线

PC送至MAR:
(PC) -> MAR PCout和MARin有效。

从主存读取数据

1
2
3
4
5
6
7
8
9
从主存中读取的可能是数据或指令。

cpu从主存取指:
(PC) -> MAR PCout和MARin有效
MEM(MAR) -> MDR MDRin有效,cu发出读命令
(PC) + 1 -> PC PC + 1
(MDR) -> IR MDRout和IRin有效

pc到mar需要一个时钟周期(片内总线),从主存中取指令到mdr和pc+1需要一个主存周期,mdr到ir需要一个时钟周期。

数据写入主存

1
2
3
4
将寄存器r1的内容写入寄存器r2所指的主存单元
(r1) -> MDR R1out和MDRin有效
(r2) -> MAR R2out和MARin有效
MDR -> MEM(MAR) MDRout有效,cu发出写命令

执行算术或逻辑运算

1
2
3
4
5
6
7
8
9
10
alu没有存储功能,在运算时需要两个输入端同时有效,所以需要一个暂存器辅助。
运算时先将一个操作数送入暂存器Y保存,Y与左输入端相连,再将另一个操作数送入右操作端。
而且alu的输出端也不能直接与总线相连,避免对输入产生干扰,需要将运算结果暂存在寄存器Z中。

ADD ACC,R1:
(R1) -> Y R1out和Yin有效
(ACC) + (Y) -> Z ACCout和ALUin有效,cu向alu发出加命令
(Z) -> ACC Zout和ACCin有效

以上步骤不能同时执行,需要三个时钟周期

修改程序计数器的值

1
2
3
4
JMP addr:
Ad(IR) -> PC PCin和IRout有效

将指令寄存器中的操作数接入PC

7、题目小知识

1
2
3
在一条指令执行过程中,单周期cpu中的每个控制信号取值一直不变,多周期cpu中的控制信号可能会改变。单周期数据通路中的每个部件只能使用一次,多周期数据通路中的每个部件可以使用多次。

在单周期cpu中,所有的控制信号在周期的开始阶段就完成计算,整个周期都是串行执行,每个部件只使用一次。

5.4 控制器的功能和工作原理

image-20250408104437759

1、控制器的主要功能

1
2
3
从主存取指,指出下一条指令的位置(PC)
对指令进行译码,产生相应的控制信号(ID)
指挥并控制cpu、主存、IO之间的数据流动方向(读/写)

2、根据控制器产生微操作控制信号的方式,可以分为硬布线控制器和微程序控制器。

1
两类控制器中的IR和PC相同,但是确定和表示指令执行步骤的方法及给出控制信号的方案不同。

3、硬布线控制器,由复杂的组合逻辑门电路和触发器构成,也称组合逻辑控制器。原理是根据指令的要求、当前的时序和内外部的状态,按时间的顺序发送一系列微操作控制信号。

1
2
3
4
5
6
7
8
指令的操作码是决定cu发出不同控制信号的关键。
cu接收的输入信号有指令操作码opcode、时钟信号clk、cpu当前状态sign。
其中指令操作码从ir取出,n位操作码经过译码之后转为2^n种情况中的一种,输入cu。
三种信号共同作用下cu输出控制信号。

硬布线控制器的速度主要取决于电路延迟。一般用于risc(简单指令集),速度快但可拓展性较低。

risc: Reduced Instruction Set Computer

4、微程序控制器,使用存储逻辑实现,将微操作信号代码化,使每条机器指令转化成一段微程序并存入控制存储器中,微操作信号由微指令产生。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
微程序的设计思想是将每条机器指令编写为一个微程序,一个微程序对应多个微指令,一个微指令对应一个或多个微操作,一个微操作对应一组协同工作的微操作信号。

控制部件向执行部件发出的各种控制命令称为微命令,是构成控制序列的最小单位。执行部件收到微命令之后执行的操作叫微操作,微命令和微操作一一对应。
微命令分为相容性和互斥性两种,根据是否可以在机器中同时出现、共同完成区分。

微指令是若干微命令的集合,微指令结构通常包括微操作码字段和微地址码字段。
微操作码也称操作控制字段,用于产生某一步操作所需的各种操作控制信号。
微地址码也称顺序控制字段,用于控制产生下一条要执行的微指令地址。

主存和控制存储器的区别在于,主存用于存放程序和数据,在cpu的外部,使用ram实现;控制存储器(cm)用于存放微程序,在cpu内部,使用rom实现。存放微指令的控制存储器的单元地址称为微地址。

程序是指令的有序集合,微程序是微指令的有序集合。微程序实际上是机器指令的实时解释器,对于程序员来说是透明的。

MAR: 地址寄存器
μPC 或 CMAR: 微指令地址寄存器,存放待执行的微指令的微地址
IR: 指令寄存器,存放主存读取的指令
μIR 或 CMDR: 微指令寄存器,存放cm读取的微指令

5、微程序控制器的组成和工作过程

微程序控制器的主要部件包括起始和转移地址形成部件(微地址形成部件)、微指令地址寄存器、控制存储器、微指令寄存器。

1
2
3
4
起始和转移地址形成部件用于产生初始和后续微地址,以保证微指令的连续执行。
微指令地址寄存器用于接收微地址形成部件送来的微地址。
控制存储器用于存放各指令对应的微程序。
微指令寄存器的位数等于微指令字长,用于存储微指令。

微程序控制器的工作流程

1
2
3
4
从主存中取机器指令。在机器开始运行时,初始化微程序控制器,自动将取指微程序的入口地址送入μPC,并从CM中读取对应的微指令送入μIR,取指微程序执行之后,主存中取出的指令进入IR中。
由机器指令的操作码通过微地址形成部件生成微程序入口地址,送入μPC。
从CM中取出对应的微指令并执行。
执行完一个微程序之后,回到取指微程序,继续执行下一条机器指令。

微程序与机器指令

1
2
3
一个机器指令对应一个微程序。任何机器指令的取指操作都是相同的,因此可将取指操作的微命令统一为一个微程序,这个微指令只负责将指令从主存取到IR。
此外,还可以得到对应间址周期的微程序和中断周期的微程序(除了执行周期)。
控制存储器中的微程序个数应为机器指令数加公共操作指令数(如取指、间址、中断等)

6、微指令的编码方式,也称为微指令的控制方式,指对微指令的控制字段进行编码,形成控制信号。目标是保证速度同时缩短微指令字长。

直接编码(直接控制)方式

1
2
3
4
无需译码,微指令的控制字段中的每一位都代表一个微命令,0表示不选用该微命令,1表示选用该微命令。
每个微命令对应一个微操作。

优点是简单、直接、速度快;缺点是微指令字长过长,如果有n个微命令就要求微指令的操作字段为n位。

字段直接编码方式

1
2
3
4
5
将操作控制字段分为若干小字段,将互斥性微命令放在同一字段中,相容性微命令放在不同字段中。
每个字段独立编码,每种编码代表一个微命令且各字段编码与其他字段无关。
每个小段中包含的信息位不能太多,否则将增加译码电路的复杂性和译码时间,还要留出一个状态表示不发出微命令。

优点是可以缩短指令字长;缺点是要通过译码电路再发出微命令,速度会比较低。

字段间接编码方式

1
2
一个字段的某些微命令由另一个字段中的某些微命令来解释,也称为隐式编码。
可以进一步缩减微指令字长,但是削弱了微指令的并行能力,通常作为字段直接编码方式的一种辅助手段。

7、微地址的地址形成方式

1
2
3
4
5
6
7
8
9
10
由微指令的后续地址字段指出,也称断定方式。
在微指令中设置一个后继地址字段,直接指出后续微指令的地址。

根据机器指令的操作码形成。由操作码经地址形成部件形成,输出对应机器指令微程序的首地址。

增量计数法。即μ(PC) + 1 -> μPC,适用于后续地址连续的情况。

由各种标志决定下一条微指令分支转移的地址。

由硬件直接产生微程序入口地址。电源通电后,第一条微指令的地址可由专门的硬件电路产生,送至μPC,这个地址即为取指周期微程序的入口地址。

8、微指令的格式,与编码方式相关,通常分为水平型微指令和垂直型微指令两种。

水平型微指令。直接编码、字段直接编码、字段间接编码都属于水平型指令。

1
2
3
水平型微指令的基本格式包括操作控制和顺序控制两个字段,操作控制字段中对应的是操作信号,顺序控制字段包括判断测试字段和后继地址字段。在一条水平型微指令中通常定义并执行多个并行操作的微命令。

优点是微程序短,并行能力强,执行速度快;缺点是微指令长,编写微程序比较麻烦。

垂直型微指令,使用类似机器指令操作码的方式,在微指令字中设置微操作码字段。

1
2
3
4
垂直型微指令的基本格式包括微操作码,目的地址和源地址。
通常只能定义并执行一种微命令。

优点是微指令短、简单,便于编写微程序;缺点是微程序长,执行速度慢。

9、硬布线控制器的执行速度更快,由电路直接产生,适用于RISC型的cpu,但是不易修改和拓展。
微程序控制器每次执行要从cm中读取指令,速度慢,但是容易编辑和扩展,适用于CISC型的cpu。

1
cisc: Complex Instruction Set Computer

10、题目小知识

1
2
3
4
5
6
7
8
9
10
11
12
13
控制存储器中存储的是微指令。

微指令计数器决定微指令的执行顺序。

在微程序控制器中,控制部件向执行部件发出的控制信号是微命令,也就是cu的输出。

微处理器指的是微机的处理器,跟控制器的种类无关。

处理器在流水线的理想情况下,每一个时钟信号就开始执行新的指令。

微程序入口地址被写入μPC之后,通过微程序地址从控制存储器中取出一条微指令,再存入μIR执行,执行完成之后更新μPC,继续执行微指令,直到微程序执行完毕。

在执行机器指令的取数和执行的过程中,可能不会用到IR。

5.5 异常和中断机制

1、由cpu内部产生的意外事件是异常,也称内中断。由cpu外部设备发出的中断请求称为中断,用于信息输入和输出,也称外中断。

1
2
异常是cpu在内部检测到的,与正在执行的指令相关的同步事件。
中断是由外部设备触发的,与当前正在执行的指令无关的异步事件。

2、异常和中断的处理过程

1
2
3
4
5
cpu在执行指令时检测到异常,或者在执行指令后检测到中断请求信号。
则cpu打断当前程序,执行异常处理或者中断处理程序。
处理成功,则返回异常时的指令继续执行,或者返回中断时的下一条指令继续执行。
若处理失败,不可恢复则终止用户程序。
具体处理过程由操作系统(和驱动程序)完成。

3、异常是由cpu内部产生的意外事件,分为硬故障中断和程序性异常。

1
2
硬故障中断是由硬连线出现异常引起的,如存储器校验错误、总线错误等。
程序性异常也称软件中断,指因为执行指令而引起的异常事件,如整除0、溢出、断点、单步追踪、非法指令、栈溢出、地址越界、缺页等。

按异常发生原因和返回方式的不同,可以将异常分为故障、自陷和终止。

1
2
3
4
5
6
7
8
故障指在引起故障的指令启动后、执行前被检测到的异常事件。
也就是在取指、间址阶段被发现的异常。
指令译码时,出现“非法操作码”;
取数据时,出现“缺段”或者“缺页”;
执行除法指令时,出现“除数为0”。

对于缺段和缺页,进行异常处理之后将页和段从磁盘调入主存,就可以回到发生故障的指令继续执行,断点为当前发生故障时的指令。
对于“非法操作码”和“除数为0”,无法通过异常处理恢复故障,就会终止程序运行。
1
2
3
4
5
自陷是也称陷阱或陷入,是预先安排的一种异常事件。
通过特殊指令或特殊控制标志人为设置一个自陷指令,cpu执行完自陷指令之后,自动根据不同的陷阱类型进行相应的处理,然后返回到自陷指令的下一条指令执行。

程序调试断点设置和单步跟踪就是通过陷阱机制实现的。
系统调用指令、条件自陷指令(如MIPS中的teq、teqi、tne、tnei等)都属于陷阱指令。

故障异常和自陷异常都属于程序性中断,也就是软件中断。

1
2
3
终止是指在执行指令的过程中发生了使计算机无法继续执行的硬件故障,如控制器出错、存储器校验错、总线错误等。
此时调用异常服务程序重启系统。
这种异常是随机发生的。

终止异常和外中断属于硬件中断。

4、中断的分类

中断是指来自cpu外部的中断,包括IO事件(如键盘输入、打印机缺纸)或其他特殊事件(如定时器计数时间到、用户按esc键等)。
cpu每次执行完一条指令就检查中断请求信号线,若检测到中断请求,则进入中断响应周期。

中断可分为可屏蔽中断和不可屏蔽中断。

1
2
3
4
5
可屏蔽中断由可屏蔽中断请求线INTR向cpu发出中断请求。
通过设置中断屏蔽字可以对其进行屏蔽。

不可屏蔽中断由不可屏蔽中断请求线NMI向cpu发出中断请求。
通常是非常紧急的硬件故障,如电源掉电等。

根据识别中断服务程序地址的方式可以分为向量中断和非向量中断。根据中断处理过程是否可以被打断可以分为单级中断和多重中断。

5、中断和异常的区别

中断由外部产生,不和任何指令相关联,也不阻止任何指令的完成,检测时由中断请求线告知cpu中断源。
异常由指令在cpu中运行时产生,检测时由cpu自身完成。

1
所有的异常和中断都是由硬件检测发现。

6、异常和中断响应的处理过程

从cpu检测到异常或中断事件,到调用响应处理程序的过程称为异常和中断响应。
过程可以分为关中断、保存断点和程序状态、识别异常和中断并转到响应的处理程序。

1
2
3
4
5
6
7
8
9
10
11
关中断
在保存断点和程序状态时防止被新的中断打断,需要禁止响应新的中断,即关中断。
中断允许触发器(IF)为1,则开中断,为0,则关中断。

保存断点和程序状态
将程序的断点保存在栈或寄存器中,为了执行中断或异常的嵌套。
程序状态PSW也需要保存。

识别异常和识别中断并转到响应的处理程序
识别方式有软件识别和硬件识别两种方式。
异常大多采用软件识别方式,中断可以采用软件识别方式或硬件识别方式。

软件识别方式是指cpu通过异常状态寄存器,记录异常原因。操作系统使用统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,以检测异常和中断类型,先查询到的先处理,然后转到内核中相应的处理程序。

硬件识别方式也称向量中断,异常或中断处理程序的首地址称为中断向量,所有中断向量存储在中断向量表中。每个异常或中断对应一个中断类型号。根据类型号可以迅速找到中断向量。

中断处理过程是由软硬件协同完成的。

7、题目小知识

1
2
3
4
5
6
7
cache缺失不属于异常,是由cpu硬件逻辑控制的。

异常/中断响应处理由硬件实现,不是执行内核程序实现。
但是异常中断服务程序是软件实现的,是内核程序。

正常控制流是指通过顺序执行指令和条件转移指令。
异常控制流是指遇到异常或中断打断了正常的程序执行。

5.6 指令流水线

第六章 总线系统

6.1 总线概述

1、早期计算机各部件通过单独的连线互连,称为分散连接。随着IO种类和数量越来越多,发展为总线连接。

2、总线的两个特点是分时和共享。

1
2
3
4
总线是一组能为多个部件分时和共享的公共信息传送线路。
分时指同一时刻只有一个部件向总线发送信息。
共享指总线上的多个部件可以同时从总线上接收相同的信息。
即总线在同一时刻只能一个发送,但是能多个接收。

3、总线特性包括机械特性、电气特性、功能特性和时间特性。

1
2
3
4
机械:尺寸、形状
电气:传输方向、有效电平范围
功能:不同传输线的不同功能
时间:信号和时序的关系。

4、总线的分类

按功能层次分类可以分为片内总线、系统总线、IO总线和通信总线。

1
2
3
4
5
6
7
8
9
片内总线是芯片内部的总线,用于cpu芯片内部各寄存器之间及寄存器与alu的连接。
系统总线是计算机系统内各功能部件,如cpu、主存、IO接口之间互相连接的总线,可以分为三类:数据总线、地址总线和控制总线。
数据总线用于传输数据、指令和中断类型号,双向传输,数据总线的位数反映了一次能传送的数据的位数。
地址总线用于指出数据总线上源数据或目的数据所在的主存单元或IO端口地址,单向传输,地址总线的位数反映了最大的寻址空间。
控制总线用于传输命令、反馈和定时信号,典型的控制信号包括时钟、复位、总线请求/允许、中断请求/回答、存储器读/写,IO读/写、传输确认等。
IO总线主要用于连接中低速的IO设备,将高速设备和低速设备分离,提高总线的系统性能,常见的有usb、pci总线。
通信总线用于计算机之间或计算机系统与远程通信设备之间传送信息,通信总线也称外部总线。
ps:根据网上资料显示,一般被称为是外部总线的是系统总线,但是外部总线又和通信总线的概念存在交叉,姑且认为外部总线在408中是指通信总线。
数据通路是数据流经的路径,而数据总线是数据传输的媒介。

按照时序控制方式可以分为同步总线和异步总线。

1
2
同步总线通过统一的时钟信号进行同步,在规定的时钟节拍内进行规定的总线操作。
异步总线通过信号握手的方式协调各个部件和设备之间的信息传输,是不固定的操作时序。

按照数据传输方式可以分为串行总线和并行总线。

1
2
3
串行总线只有一条双向传输或者两条对向单向传输的数据线,每次只能传输一位数据,单次传输效率低于并行总线,对数据线要求低,适合长距离通信。
并行总线有多条双向传输的数据线,同时可以传输多位数据,但是多位数据同时传输时可能对彼此造成干扰,适合近距离通信。
尽管串行总线每次传输的数据比并行总线要少,但是通过不断提高工作频率,串行总线的传输速度可能比一般的并行总线速度更高。

5、系统总线的结构

单总线结构,将主存、IO接口、CPU都挂载在一组总线上。

1
2
3
允许IO设备之间、IO设备和主存之间、CPU和主存之间、CPU和IO设备之间直接交换信息。
优点:结构简单、成本低,便于修改。
缺点:效率低,多个设备只能争用一组总线。

双总线结构有两条总线,一条是主存总线,另一条是IO总线。

1
2
3
4
5
主存总线连接CPU、主存、通道。
IO总线连接通道和外设。
通道连接IO总线和主存总线。
优点:将低速设备和高速设备分离,实现了存储器总线和IO总线分离。
缺点:需要增加通道等硬件设备。

三总线结构采用三条总线来购车给信息通路,分别是主存总线、IO总线和DMA总线。

1
2
3
4
5
6
7
主存总线连接CPU和主存,在两者之间传送地址、数据和控制信息。
IO总线连接CPU和各类外设。
DMA连接主存和高速外设。
优点:提高了IO设备的性能,提高了系统的吞吐量。
缺点:任意时刻只能使用一种总线,系统工作效率降低。
ps:此处任意时刻只能使用一种总线的原因可能是最后都需要对主存进行操作,所以只能由一个设备进行操作。
主存总线与DMA总线不能同时对主存进行存取,IO总线只有在CPU执行IO指令时才用得到。

6、总线的性能指标

总线时钟周期,即机器的时钟周期。

总线时钟频率,即机器的时钟频率,为时钟周期的倒数。

总线传输周期,指一次总线操作所需的时间,包括申请阶段、寻址阶段、传输阶段和结束阶段。一个总线传输周期通常为若干个总线时钟周期。

1
2
3
4
申请阶段:设备请求控制总线的使用权(若当前总线空闲,则可直接进入下一阶段)
寻址阶段:发送数据的目标地址,通知接收设备准备数据传输
传输阶段:进行实际的数据传输(可能是读或写操作)
结束阶段:释放总线,使其他设备可以使用

总线工作频率,总线上各种操作的频率,为总线周期的倒数,实际上指一秒内传送的数据次数。

1
若总线周期 = N个时钟周期,则总线的工作频率 = 时钟频率/N。

总线宽度,也称总线位宽,指总线上能够同时传输的数据位数,通常指数据总线的根数。

总线带宽,单位时间内总线上最多可传输数据的位数,单位可用B/s

1
总线位宽 = 总线工作频率 * 总线宽度 / 8

总线复用,指一种信号线在不同时间传输不同的信息,如地址/数据线复用。

1
只在没有单独线时采用,可用使用较少的线实现传输更多的信息

信号线数,指地址总线、数据总线和控制总线的总线数的和。

最重要的性能指标是总线宽度、总线工作频率和总线带宽。

7、题目小知识

1
2
3
4
5
计算机使用总线结构是为了方便增减外设,但是实际上的传输效率是不如分散连接的(专线连接更快)。
在数据总线上不可能传输的是握手(应答)信号,这是属于信号总线传输的内容。
3通道存储器的意思是采用了3条数据总线传输数据。
总线带宽(最大数据传输率)是理想情况,不用考虑总线事务。
设备和设备控制器之间互连的接口标准是USB,USB是通用串行总线。

6.2 总线事务和定时

1、总线事务是从请求总线到完成总线使用的操作序列。

1
2
3
4
5
6
7
典型的总线事务包括请求操作、仲裁操作、地址传输、数据传输和总线释放。
请求操作:主设备发出总线传输请求,通常是CPU或者DMA。
仲裁阶段:如果有多个设备请求总线,总线仲裁机构会根据优先级将总线的使用权给予设备,如果没有冲突,则直接获得总线使用权。(例如当DMA和CPU同时请求系统总线时,仲裁机构会先将总线使用权给DMA)
寻址阶段:主设备通过总线给出从设备地址和有关命令,启动从模块。
传输阶段:主模块和从模块进行数据交换,可单向或者双向。
释放阶段:主模块的信息从系统总线上撤除,让出总线使用权。
ps:主设备可能跟主模块是一个概念,也可能主模块是主设备的一部分。

2、总线的传输阶段有不同的数据传送方式。

1
2
非突发方式:在每个传送周期内先传送地址,再传送数据,每次通常只能传送一个字长的数据。
突发方式:能够进行连续成组数据的传送,在寻址阶段发送的是连续数据单元的首地址,发送数据时发送的是连续的数据,每个时钟周期可以传送一个字长的信息,但是直到一组数据全部传送完才释放总线。

3、总线定时是指总线在双方交换数据时的时序控制,实质上一种协议或规则,主要有四种方式,分别为同步、异步、半同步、分离式。

同步定时方式由系统采用一个统一的时钟周期对主从设备进行协调,每次传送数据都在固定的总线时钟周期内。

1
2
3
优点:同步率高,传输速率高,总线控制逻辑简单。
缺点:强行同步,不能及时进行数据通信的有效性检验,可靠性较差。
适用于总线长度较短以及总线所接部件的存取时间比较接近的系统。

异步定时方式没有统一时钟和固定间隔,通过“握手”实现定时控制,通过“请求”和“回答”实现控制。

1
2
3
4
5
根据“请求”和“回答”信号的撤销是否互锁,分为三种类型
不互锁方式:主设备发出请求之后,不必等待从设备的回答信号,一段时间后可以自动撤销请求。从设备接收到请求之后,发出回答信号,一段时候后可以自动撤销回答信号。
半互锁方式:主设备发出请求之后,必须收到从设备的回答后才能撤销,存在互锁。但是从设备接收到请求之后,发出回答信号,不必等待主设备的请求信号撤销就可以自动撤销。
全互锁方式:主设备发出请求之后,必须收到从设备的回答后才能撤销。从设备接收到请求之后,发出回答信号,必须等待主设备的请求撤销之后才能撤销回答信号。
在异步串行通信方式中,首位为开始位,末尾为奇偶校验位和停止位,中间为数据位。

半同步定时方式,所有地址、命令、数据信号的发出时间都按照统一的时钟周期进行判断识别。但是为了允许不同速度设备的协调,增加了wait响应信号线,在每个时钟周期中检测wait响应信号线,直到wait响应信号线有效才去数据线上取数据,无效则说明数据尚未准备好。

1
2
优点:控制方式比异步简单,而且各个模块同步工作,可靠性较高。
缺点:系统的时钟频率不能太高,系统的速度比较低。

分离式定时方式,由于在从设备准备数据的过程中,总线是空闲的,而前三种方式都浪费了这个时间,所以出现了分离式定时方式。分离式定时方式将总线事务分离为请求和应答两个过程。

1
2
3
4
5
6
在请求过程中,主设备A获得总线使用权,向从设备发送命令、地址、数据信号,由从设备B接收。
主设备发送完成,让出总线控制权,给其他设备使用(此处的其他设备非从设备B)。
从设备B完成数据的准备之后,申请总线使用权,在应答过程中,将数据通过总线发送给主设备A。
请求和应答的过程中都只有单向的数据传输,相当于两个主设备。
优点:效率高,不存在多余的空闲时间。
缺点:控制复杂,开销大。

4、题目小知识

1
2
3
4
5
6
7
8
在不同速度的设备之间传送数据,可以使用同步也可以使用异步,只是传送的效率不一样。
在IO接口和打印机之间应该使用异步传输。
在异步通信方式中,不互锁方式速度最快,全互锁方式速度最慢。
在计算总线传输所需的时间时,不要忘记计算传输地址所用的时间,突发传送只需计算一次地址时间,非突发传送每次都需要计算。
在同步通信方式中,所有设备使用统一的时钟信号,不可由各个设备提供。
通常来说,越是高速的设备,连接的总线速度也会更高。
采用地址/数据线复用无法提升同步通信的速度。
在异步通信中,一次可以传输很多位数据。

第七章 输入/输出系统

7.1 IO系统

1、IO系统一般由IO软件和IO硬件两部分构成。

1
2
3
4
IO软件包括驱动程序、用户程序、管理程序、升级补丁等。
cpu的IO设备的交换通常采用IO指令和通道指令实现。
IO硬件包括外部设备(外设)、设备控制器和接口、IO总线等。
设备控制器通过IO接口与总线相连。

2、输入设备主要是键盘和鼠标,输出设备主要是显示器、打印机,外设还包括磁盘存储器和光盘存储器等。

1
按照第一章的内容,cpu和主存构成主机,其他的都是外设。

3、显示器是用点阵方式运行的设备,主要参数有屏幕大小、分辨率、灰度级、刷新频率等。

1
2
3
4
5
6
关于显示器中的显示存储器vram,用于存储显示在显示屏上的信息。
点阵显示每个像素点是一bit。
vram容量 = 分辨率 * 灰度级位数
vram带宽 = varm容量 * 帧频
灰度级位数就是类似rgba之类的东西,位数越高能表示的颜色就越多。
vram: video random access memory

4、IO的控制方式有四种:程序查询方式、程序中断方式、DMA方式、通道方式。

1
2
方式1和2适用于传输速率较低的外设,方式3和4适用于传输速率较高的外设。
通道方式:通过系统中的通道控制部件,在需要传输数据时主机启动有关通道,就可以自动执行通道程序对挂载在通道上的外设进行数据传输,实现IO操作。

5、IO设备与cpu的连接情况

1
IO外设 <-> 设备控制器 <-> IO接口 <-> 总线 <-> cpu/主存

6、IO端口、IO接口、设备控制器的不同

1
2
3
IO端口是软件上的概念,例如usb串行端口的端口号为0x3f8,跟网络端口是类似的概念。
IO接口是硬件上的概念,提供了物理上的连接点,连接了设备控制器和系统总线,例如use接口,sata接口,m.2插槽,pcle插槽等。
设备控制器则是用于管理IO模块的硬件设备,如磁盘控制器、网卡控制器、显卡gpu核心,nvme ssd的主控芯片等,为外设的数据提供格式转换和兼容服务。

7.2 IO接口

1、IO接口是用于主机和外设之间的信息交换部件,能够处理外设和主机之间的工作方式、数据格式和工作速度的差异。

1
IO接口的主要功能有:地址译码和设备选择、实现主机和外设的通信联络控制。实现数据缓冲,信号格式的转换,传送控制命令和状态信息。

2、IO接口的基本结构包括数据缓冲寄存器、状态寄存器、控制寄存器、地址译码和IO控制逻辑、外设界面控制逻辑。

1
2
3
4
5
6
7
8
9
数据缓冲寄存器用于接收或者发送从主机或者外设传输的数据,数据缓冲寄存器存在的意义在于主机和外设的工作频率的不同,无法实时的传输,因此需要对数据进行缓冲,以达到外设和主机的数据的同步。

状态寄存器用于存储接口或外设的当前状态信息,如就绪、完成和错误等状态。
控制寄存器用于配置IO接口的工作模式及参数,如传输方向、中断使能、通信参数(波特率、数据位宽、校验方式)。
由于状态寄存器和控制寄存器在传送方向上的不同,在访问时间上的不同,因此可以将其合二为一,称为状态/控制寄存器。

地址译码和IO控制逻辑用于识别cpu发送的地址信号,对其进行译码,以及生成读写信号,控制数据的传送方向。

外设界面控制逻辑用于管理IO接口和外设的物理层通信,包括信号传输、时序控制、协议处理等。

3、IO接口跟总线相连,分为地址总线、数据总线和控制总线。

1
2
3
数据总线跟数据缓冲寄存器、状态/控制寄存器连通,用于传输读写数据、状态信息、控制信息和中断类型号。
地址总线和控制总线都与地址译码和IO控制逻辑连通,用于传输IO接口中的寄存器的地址,读写控制信号、中断请求和响应信号、仲裁信号和握手信号等。
仲裁信号用于解决多个外设同时访存时的冲突。

4、对IO接口中的寄存器的访问是通过IO指令实现的。

1
IO指令只能在操作系统内核的底层IO软件中使用,是一种特权指令。

5、IO接口的类型

1
2
3
数据传送方式(外设->主机):并行接口、串行接口
主机访问IO方式:程序查询接口、中断接口、DMA接口
功能选择灵活性:可编程接口、不可编程接口

6、IO端口是指IO接口中可以被cpu直接访问的寄存器,有数据端口、状态端口和控制端口。

1
2
cpu通常可以对数据端口进行读写,对状态端口进行读,对控制端口进行写。
可以注意到,此处的数据端口,状态端口和控制端口与数据缓冲寄存器,状态寄存器和控制寄存器是大致对应的。但是实际上IO端口并不是指这些寄存器,而是指这些寄存器对应的地址。通过IO端口(也就是地址)就能访问到寄存器中的内容。

7、IO端口需要编址才能被cpu访问,每个端口对应一个端口地址,编址方式有独立编址和统一编址两种。

1
2
3
4
5
6
7
独立编址和统一编址都是针对存储器而言的。
独立编址也叫做IO映射方式,对所有的IO端口单独进行了编址,与主存中的地址独立开来。
采用独立编址时,相同的地址在IO地址空间和主存空间中是不同的地址空间。因此需要专门的IO指令来表明访问的是IO地址空间还是主存空间。
优点是寻址速度快,方便理解,缺点是增大了控制的复杂性,降低了程序设计的灵活性,增加了cpu的负担。

统一编址也叫做存储器映射方式,将主存的一部分分给IO,作为IO的地址空间。使用统一指令即可访问IO端口。
优点是不需要额外指令,缺点是缩小了主存空间,且寻址的速度降低。

8、课后习题小知识

1
2
3
1、独立编址的IO指令主要是用IN/OUT指令(输入/输出类指令)进行数据的传输,而统一编址则是使用通用的访存指令进行数据传输。
2、在IO接口和外设之间存在数据、控制、状态的信息交换,但是不会有中断信号的信息,中断信息是cpu和IO接口之间的信息交换。
3、磁盘驱动器是由磁头、磁盘和读写电路组成的,也就是磁盘本身,不是IO接口。打印机适配器、网络控制器和可编程中断控制器是IO接口,也就是IO控制器。

7.3 IO方式

1、常用的IO方式有程序查询方式、程序中断方式、DMA等。

1
除了这三种还有通道方式,通道方式是DMA的高级形态,常见于大型系统,比较少见。

2、程序查询方式一般由cpu执行程序实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
程序查询的流程
1、cpu执行初始化程序,并预置传送参数。
(cpu和IO接口之间通过IO总线连接,在执行程序查询之前,cpu要先确定要数据长度、IO端口地址、数据地址等传送参数)
2、向IO接口发出命令,启动IO设备。
(cpu通过IO总线中的控制总线向IO接口发出命令,向控制寄存器中写入数据,期间也需要地址总线和数据总线的辅助。
控制寄存器接收到控制信号之后启动IO设备,并设置状态寄存器为busy)
3、从外设接口读取其状态信息。
(cpu从状态寄存器中读取状态信息,如果为busy则继续等待)
4、cpu周期或者持续地查询设备状态,直到外设准备就绪。
(cpu从状态寄存器中读取状态信息,直到状态寄存器中的状态为ready)
5、传送一次数据。
(无论是cpu发送数据给外设,还是外设发送数据给cpu,在这个过程中都是cpu进行主导。
在cpu检测到ready状态之后,cpu会从数据寄存器中取出数据或者发送数据到数据寄存器,以完成一次数据的传送)
6、修改地址和计数器参数。
(修改cpu中的存储地址和计数器的参数。
cpu不管是从外设中读取数据还是发送数据给外设,肯定是要发送不同位置的数据的,需要对地址进行修改。
计数器则是在预置传送参数时可能已经固定好的数据长度)
7、判断传送是否结束。
(通过计数器判断)
注意点:在修改地址和计数器参数之后是否需要再次发送命令到外设进行操作,这取决于外设的工作模式是单次触发还是连续传输。如果对数据精度要求比较高的可能会采用单次触发的方式,每次传输数据都发送命令单独读取。

3、程序查询中的分类

1
2
3
程序查询可以分为独占查询和定时查询。
独占查询就是cpu持续读取IO接口的状态寄存器状态,此时cpu一直与外设交互,完全串行工作,所有时间都用于外设。
定时查询就是周期查询,cpu周期性地查询接口状态,也就是cpu每隔一段时间查询接口状态,如果状态为ready就读取或发送数据,间隔时间的长短取决于外设的工作频率,一般是与工作频率相近,以达到最高的工作效率。

4、程序查询的优点是设计简单、硬件量少。缺点是拉低了cpu的工作效率,在一段时间内只能和一个外设交互。

5、程序中断方式中也是由cpu执行程序,在接收到中断信号之后,cpu暂时中止现行程序,转而对中断源进行处理,处理完成之后再返回到原程序断点处继续执行原程序。

1
2
在IO形式中,程序中断可以实现IO外设和cpu的并行运行,因为在cpu接收到IO的中断信号,执行取数据或者发送数据时,IO外设也可以运行而不必停止。而在外设未准备就绪,未发送中断信号时,cpu也运行原程序,对cpu没有干扰。
在实现程序中断方式传送IO数据时,中断响应和处理所需的时间应当比IO准备的时间更快,否则IO数据没有及时被cpu操作就被下一个IO数据覆盖了,导致错误。

6、程序中断的工作流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
在外设使用程序中断模式之前,需要cpu先对外设进行设置,启动其中断模式。
外设<->设备控制器<->IO接口<->中断控制器<->
1、IO接口发出中断请求
(IO接口准备好数据,将数据存入数据缓冲寄存器中,将状态寄存器设置为ready,将IO接口中的中断请求标记触发器设置为1。
然后发送中断信号到中断控制器,中断控制器通过仲裁之后按照优先级发给cpu)
2、中断响应判优
(中断响应优先级是指cpu响应中断请求的先后顺序,也就是中断控制器通过仲裁之后发送给cpu中断信号的顺序。
中断响应优先级存在是因为在同一时间可能有多个中断信号发送给cpu,但是cpu在同一时间内只能处理一个中断信号,此时就需要对响应进行排序。
一般来说,不可屏蔽中断>可屏蔽中断,高速设备>低速设备,输入设备>输出设备,实时设备>普通设备,也就是说对cpu的及时处理要求程度越高的设备会被越先处理)
3、cpu响应中断的条件
(cpu在满足一定的条件下才会对中断进行响应,首先中断源有中断请求,其次cpu允许中断及开中断,最后cpu要将当前指令执行完毕。
中断源有中断请求很好理解,但是要注意中断源是先经过cpu初始化之后才能启动中断功能的,也就是cpu允许中断。
开中断就是cpu当前没有在执行其他的中断响应,在执行中断响应时cpu会关中断,类似于一个标志寄存器,但是异常和不可屏蔽中断可以不受这些第二点限制。
cpu在执行中断前要先保存当前正在执行的程序的状态,因此要将当前指令先执行完毕,但是异常可以不受该限制)
4、中断响应过程
(cpu响应中断之后,需要先对当前程序进行处理,然后再去执行中断服务程序。
这些操作由硬件实现,称为中断隐指令。
首先要关中断,cpu响应中断之后,要保护当前程序的断点,这个过程不能被其他中断打断,因此要关闭中断,否则中断服务程序结束后就无法正确地继续执行程序。
第二步要保存断点,将程序断点保存到栈或寄存器中,注意异常和中断的差异,异常存储的断点是当前指令地址,中断存储的断点是当前指令地址的下一个地址,这是因为中断需要cpu在当前指令完成之后才响应)
第三步要引出中断服务程序,也就是找到中断源。
(找到中断源,也就是发送中断信号的IO外设之后,将对应的服务程序入口地址送入PC,让cpu执行中断服务程序)
5、中断向量
(中断识别分为向量中断和非向量中断两种。
非向量中断通过软件进行查询,对所有外设的状态寄存器进行轮询,找出发送了中断信号的外设,适合嵌入式设备或者低速设备。
向量中断通过硬件进行查询,通过中断控制器发送给cpu的中断信号(控制总线),读取中断源的中断类型号(数据总线),查询中断向量表可以得到中断向量,中断向量就是中断服务程序的入口地址。)
6、中断处理过程
(对于可嵌套中断,中断处理分为九步,对于单重中断或者单级中断,中断处理分为七步。
首先通过中断隐指令,关中断、保存断点、对中断服务程序进行寻址。
然后保存cpu正在运行的程序的现场和中断屏蔽字,现场通常是指寄存器中的值,可以直接访问,将其存储到栈中,中断屏蔽字则是用于对处理优先级进行比较。
开中断,允许更高响应优先级的中断请求得到处理,实现可嵌套中断。
执行中断服务程序,这里应该是指中断服务程序的核心逻辑。
关中断,保证在恢复现场和中断屏蔽字的时候不被中断。
恢复现场和中断屏蔽字。
开中断,返回原程序,中断服务程序的最后一条指令通常是中断返回指令,用于返回原程序的断点处继续执行。
其中123步由中断隐指令完成,456789步由中断服务程序完成。
如果是单重中断的话,不需要保存中断屏蔽字,也不需要在进入中断服务程序之后开中断和关中断,不需要恢复中断屏蔽字。

7、多重中断和中断屏蔽技术

1
在cpu执行中断服务程序的过程中,如果有优先级更高的中断请求出现,在此时cpu忽略该中断请求,则该中断为单重中断,若cpu暂停当前中断服务程序,执行新的中断请求,则该中断为多重中断。

8、中断处理优先级

1
2
3
4
5
6
中断处理优先级是指多重中断的实际优先级处理次序,可以通过中断屏蔽字动态调整。
若不使用中断屏蔽字,则中断的处理优先级和响应优先级相同。
中断屏蔽字寄存器中的对应中断源的所在位的值为1时表示屏蔽该中断源请求,否则表示正常请求。
中断屏蔽字只在进入中断执行程序的时候才能起作用,在程序执行原程序时还是按照响应优先级进行响应。
例如,如果cpu此时在执行a中断程序,此时有b和c两个中断,响应优先级b>c,处理优先级c>b,那么cpu会先响应b中断,然后在b中断的处理流程中的处理中断屏蔽字的环节对c中断进行响应,这是以为c的处理优先级比b的要高。
需要注意的是,cpu不会直接去处理c中断,这里体现了中断屏蔽字的作用环节。

9、程序中断方式相较于程序查询方式的优点是提高了cpu的利用率,但是仍然需要cpu的参与,如果外设频繁交换数据的话,cpu就会频繁被打断,不利用cpu的运行,所以需要一种不需要cpu参与的外设与内存之间的数据交换。

10、DMA方式

1
2
3
4
5
6
7
DMA: Direct Memory Access
完全由硬件进行成组信息传送的控制方式。
在初始化时还是需要cpu的配置。
主要用于磁盘、显卡、声卡、网卡等高速设备进行大批量数据的传输。
在DMA方式中也有中断,但是只用于故障以及传送结束时。
数据的计数和地址计算都由硬件完成,硬件开销很大,与cpu是并行关系。
需要在主存中开辟专用缓冲区,用于提供和接收外设的数据。

11、DMA控制器的组成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DMAC: DMA controller
DMAC中主要包括中断机构、控制/状态逻辑、DMA请求触发器、数据缓冲寄存器、主存地址计数器、传送长度计数器、设备选择器。
控制/状态逻辑用于对DMA请求信号、cpu响应信号进行同步。
数据缓冲寄存器用于外设和DMA的数据传送。
DMA的作用流程如下:
1、cpu对IO接口进行初始化,使用DMA方式接收和发送数据。
2、cpu对DMA进行初始化,确定缓冲区的起始地址。
2、外设准备好数据之后,向DMA发送DMA请求。
3、DMA接收IO接口的DMA请求,向cpu发送总线请求。
(由于cpu跟主存之间通过系统总线连接,而DMA要绕过cpu跟主存相连,也就意味着DMA要有接管系统总线的功能)
4、cpu返回总线响应信号之后,DMA接管总线,进入DMA操作周期。
5、DMA确定传送数据的目的地址和传送长度,通过硬件电路对主存地址计数器和传送长度计数器进行修改。
6、修改DMA中的控制/状态逻辑,对传送数据的方向进行确定,发出读/写信号,开始执行数据传送操作。
7、数据传送完成,通过中断机构对cpu发送中断信号,通过cpu进行后处理。

12、DMA的传送方式。由于DMA和主存直连,需要对系统总线进行接管,因此如果和cpu同时访问系统总线的话,就存在总线冲突,为了避免冲突,通常规定三种传送方式。

1
2
3
4
5
6
7
8
9
10
1、停止cpu访存。
当IO设备有DMA请求时,DMA接口向cpu发送总线请求信号,cpu就返回响应信号,将系统总线控制权交给DMA,在DMA使用的时间内,cpu无法访问主存。
优点:控制简单,速率很高;缺点:降低了cpu的效率,在DMA接管总线时,cpu基本不工作。
2、周期挪用。
由于IO生成的数据如果不立即读取就可能丢失数据,所以IO访存的优先级要高于cpu,因此可以挪取一个存取周期用于IO访存,传送完一个数据字之后再将控制权交换给cpu。
(当IO设备有DMA请求,可能有三种情况,第一种是cpu不在访存,那么可以直接接管系统总线;第二种是cpu正在访存,此时需要等待周期结束之后,cpu将总线让给DMA;第三种是二者同时访存,此时cpu放弃请求,让DMA先访存。)
优点:实现了IO传送,又发挥了主存和cpu的效率;缺点:每次挪用主存周期,DMA都要进行申请、建立和归还。
3、DMA和CPU交替访存。
将cpu时间周期分为两个时间片,一个用于cpu访存,一个用于DMA,实现分时复用,适用于cpu的时间周期大于DMA访存周期的情况,这样才能将cpu的时间周期分一部分给DMA用。
优点:不需要对总线控制进行频繁的申请、建立和归还;缺点:硬件逻辑比较复杂。

13、DMA的预处理、数据传送和后处理。

1
2
3
DMA的预处理过程中由cpu对DMA进行初始化配置,包括主存起始地址、IO设备地址、传送数据长度等。
DMA的数据传送以数据块为基本传送单位,地址和计数器由DMAC进行维护。
DMA的后处理包括校验数据等工作,由中断机构触发。

14、DMA和程序中断方式的区别。

1
2
3
4
程序中断需要保护和恢复现场,而DMA除了预处理和后处理都不需要CPU。
中断只能发生在指令执行结束后,而DMA可以发生在任意一个机器周期结束时(取指、间址、执行周期后均可)。
中断数据传送需要CPU干预,而DMA不需要。
但是中断方式具有处理异常的能力,而DMA需要发送中断信号请求CPUch

15、题目小知识

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
外部事件会提出外中断;cache是由硬件实现的,cache缺失不会引发中断;虚拟存储器失效如缺页时会引发中断;浮点数运算下溢会被当作零,不会引发中断;浮点数运算上溢会引发中断。

DMA的优先级比程序中断要高,因为DMA占用cpu的时间更少,可以加快处理的速率。

在配有通道的计算机中,用户程序需要输入/输出时会引起访管中断,调用操作系统的接口,使系统由用户态变为内核态。

在中断响应周期中,中断隐指令将cpu关中断,在恢复现场和中断屏蔽字时还需要关中断,那个关中断是关中断指令完成的。

设置中断屏蔽字可以改变多个中断处理服务程序执行完成的次序,但是无法改变中断处理服务程序开始执行的次序。

通常可认为总线周期、存取周期、机器周期和流水段长度是等价的。

非屏蔽中断的请求优先级比可屏蔽中断的请求优先级要高,但是中断的优先级比DMA要低。

采用周期挪用策略管理CPU和DMA的冲突时,每传送一个数据要占用一个存取周期的时间。

单级中断的中断响应周期为关中断,保存断点,识别中断源,保存环境,中断处理程序,恢复环境,开中断,返回原程序。

属于外部中断的有定时器到时和网络数据包到达。

采用周期挪用传送方式时,DMA挪用存取周期用于传送数据,每次只能传送一个数据字,然后释放总线。在整个数据的传送中,CPU是可以访存的。

开中断时cpu检测到中断请求后就进行中断响应,这是正确的,因为cpu在指令执行完毕之后才检测中断请求。

中断结束后不需要向cpu发送中断结束信号,中断响应周期的最后会自动回到原程序。

DMA控制器控制的数据传输通路位于主存和IO接口之间。