一、概述
计算机系统的组成
硬件系统和软件系统共同构成了一个完整的计算机系统。
冯诺依曼机的特点
1)计算机由运算器、存储器、控制器、输入设备和输出设备五大部分组成;
2)指令和数据存储在存储器中,并可以按地址访问;
3)指令和数据均以二进制表示;
4)指令由操作码和地址码构成,操作码指明操作的性质,地址码表示操作数在存储器中的位置;
5)指令在存储器内按顺序存放,通常按自动的顺序取出执行;
6)机器以运算器为中心,I/O设备与存储器交换数据也要通过运算器。(因此,后来有了以存储器为中心的计算机结构)
现代计算机的组成框图
由于运算器和控制器在逻辑关系和电路结构上联系十分紧密,通常将它们合起来统称为中央处理器,简称CPU,把输入输出设备简称为I/O设备,这样现代计算机可以认为由三大部分组成:CPU与主存储器可以称为主机,I/O设备称为外部设备,结构图如下
关于存储器相关概念
存储器的功能:
存储器是计算机系统中的记忆设备,用来存放程序(指令)和数据(二进制代码形式存放)。
存储器中最小单位就是存储元,可以存储一个二进制代码(0或1),即1个 bit
什么是存储单元、存储字、存储字长、存储体?
存储单元:存储一个存储字并具有特定存储地址的存储单位;
存储字:一个存储单元中存放的所有的二进制数据,按照某个地址访问某个存储单元获取的二进制数据。
存储字长:存储字中二进制数据的位数,即按照某个地址访问某个存储单元获取的二进制数据的位数;
存储体:由多个存储单元构成的存储器件。
什么是机器字长,指令字长和存储字长?
机器字长:CPU一次能够处理的二进制数据的位数。
存储字长:一个存储单元存储二进制代码的长度。
指令字长:一个指令字中包含二进制代码的位数。
主存储器中,什么是MAR,什么是MDR,存储器的最大容量由什么决定?
1)MAR:存储地址寄存器,保存需要访问的存储单元地址。反映存储单元的个数。
2)MDR:存储数据寄存器,缓存读出/写入存储单元的数据。反映存储字长。
3)存储器的最大容量由MAR寄存器的位数和MDR寄存器的位数决定。
CPU如何区分当前读取的是指令还是数据?
根据时间判断,当前工作时间是在取指阶段,从内存中读取出来的一定是指令,当前工作时间是在执行阶段,从内存中读取出来的一定是数据。
一条指令在CPU的执行过程
几乎所有的冯·诺伊曼型计算机的CPU,其工作都可以分为5个阶段:
取指令 --> 指令译码 --> 执行指令 --> 访存取数 --> 结果写回
1.取指令阶段
取指令(Instruction Fetch,IF)阶段是将一条指令从主存中取到指令寄存器的过程。
程序计数器PC中的数值,用来指示当前指令在主存中的位置。当一条指令被取出后,PC中的数值将根据指令字长度而自动递增。
//PC -> AR -> Memory
//Memory -> IR
2.指令译码阶段
取出指令后,计算机立即进入指令译码(Instruction Decode,ID)阶段。
在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。
// { 1.Ad
//Memory -> IR -> ID -> { 2.PC变化
// { 3.CU(Control Unit)
3.访存取数阶段
根据指令需要,有可能要访问主存,读取操作数,这样就进入了访存取数(Memory,MEM)阶段。
此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。
//Ad -> AR -> AD -> Memory
4.执行指令阶段
执行指令(Execute,EX)阶段,此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。为此,CPU的不同部分被连接起来,以执行所需的操作。
//Memory -> DR -> ALU
5.结果写回阶段
结果写回(Writeback,WB)阶段把执行指令阶段的运行结果数据“写回”到内存中。
//DR -> Memory
6.循环阶段
在指令执行完毕、结果数据写回之后,若无意外事件(如结果溢出等)发生,计算机就接着从程序计数器PC中取得下一条指令地址,开始新一轮的循环,下一个指令周期将顺序取出下一条指令。
//重复 1~5
//遇hlt(holt on)停止
性能指标
主频 CPU工作主时钟的频率,机器主频Rc
CPI 执行一条指令所需时钟周期数
MIPS 每秒执行多少百万条指令
FLOPS 每秒执行多少次浮点运算
时钟周期 节拍脉冲,CPU中最小的时间单位
二、数据的表示和运算
数制与编码
数值
BCD码
8421码:本质就是十六进制
加法修正:
大于(1010)_2的时候需要加6修正
(1010)_2到(1111)_2为无效码
字符和字符串
-
ASCII码:
有7位,用一个字节可以表示(最高位不用,为0)
-
字符串的存放(大端,小端)
大端模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;(符合人的正常思维)
一个字节一个字节的倒着放。(注:一个字节=2位16进制=8位2进制)
小端模式:是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
常用校验码
-
奇偶校验码
奇校验码:整个校验码(有效位和信息位)中“1”的个数为奇数 偶校验码:整个校验码(有效位和信息位)中“1”的个数为偶数 优缺点:只能检错,不能纠错
-
海明(汉明)校验码
分组多个校验位 优缺点:能发现2位错误,纠正一位错误
-
循环冗余校验(CRC)码
K位信息位后再拼接R位的校验码,整个编码长度为N位 优缺点:可以纠正一位或多位错误(与多项式的选取有关
定点数
定点数:小数点固定在某个位置上的数据。 就好像 0.0000001 ,0.0001111;
二进制的原码,反码及补码
原码
例如:
X=+101011 , [X]原= 0010_1011
X=-101011 , [X]原= 1010_1011
位数不够的用0补全。
PS:正数的原、反、补码都一样,0的原码跟反码都有两个,因为这里0被分为+0和-0。
反码
例如:
X=-101011 , [X]原= 1010_1011 ,[X]反=1101_0100
补码
例如:
X=-101011 , [X]原= 1010_1011 ,[X]反=1101_0100,[X]补=1101_0101
PS:0的补码是唯一的,如果机器字长为8那么[0]补=0000_0000。
除此之外,还可以用 [1000_0000]补 表示-128:
(-1) + (-127) = [1000_0001]原 + [1111_1111]原 = [1111_1111]补 + [1000_0001]补 = [1000_0000]补
-1-127的结果应该是-128,在用补码运算的结果中, [1000_0000]补 就代表-128。
注意,-128并没有原码和反码表示。
使用补码不仅仅修复了0的符号以及存在两个编码的问题,而且还能够多表示一个最低数,这就是为什么8位二进制使用原码或反码表示的范围为 [-127, +127],而使用补码表示的范围为 [-128, 127] 的原因。
移码
移码最简单了,不管正负数,只要将其补码的符号位取反即可。
例如:
X=-101011 , [X]原= 1010_1011 ,[X]反=1101_0100,[X]补=1101_0101,[X]移=0101_0101
浮点数
小数点位置可以浮动的数据。就像数学中的 1222.2103也可以表示为1.2222106;
IEEE754表示浮点数
EEE754标准包含一组实数的二进制表示法。它有三部分组成:
- 符号位
- 指数位
- 尾数位
三种精度的浮点数各个部分位数如下:
IEEE 754标准中定义浮点数的表示范围为:
单精度浮点数
± (2-2-23) × 2127
双精度浮点数
± (2-2-52) × 21023
三、存储系统
存储器分类
按在计算机中的作用分类
(1)主存
(a)RAM:操作系统被加载到RAM
SRAM:(Static Random Access Memory)静态随机存储器。常用制作二级缓存。不必刷新电路就能保存数据。但体积大,集成度低
DRAM:(Dynamic Random Access Memory)动态随机存取存储器。常用语制作系统内存。DRAM用电容存储数据,需要定时充电,刷新电路,否则出处的数据丢失。集成度高
(b)ROM:存储机器自检和引导程序,BIOS等程序
MROM:(Mask Read-Only Memory)掩模式只读存储器。MROM的内容在出厂前一次写入,之后不能更改
PROM:(Programmable Read-Only Memory)-可编程只读存储器。只能写入一次数据的只读存储器,写入错误只能更换存储芯片
EPROM:(Erasable Programmable Read Only Memory)可擦除可编程只读寄存器
EEPROM: (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器。SSD
(2)辅存
磁盘,磁带,光盘
存储器的存储结构
主存中存储单元地址的分配
(1)寻址的个数有2个因素:
(a)地址线的个数:这是内存中总的可寻址字节数
(b)一个地址所占用的字节数:表明了一个内存单元,占用多少个字节
(2)内存可寻址的总字节数 ÷ 多少字节形成一个内存单元=可寻址数
(3)eg:地址线24根,按字节寻址,可寻址224=16M224=16M个
若字长为16位,按字寻址,可寻址8M个
若字长为32位,按字寻址,可寻址4M个
主存的指标
(1)存储容量:存放二进制代码的总位数。存储字数\times字长
(2)存取速度:数据的宽度/存取周期
存取时间:存储器的访问时间(读出时间,写入时间)
存取周期:连续两次独立的读写存储器操作之间,最小的时间间隔。用于读电路,写电路,地址电路清空一次
(3)存储器带宽 (位/秒)
半导体随机存储器
SRAM
(1)SRAM:静态随机存储器,不用刷新电路,使用双稳态管存储数据,不掉电情况下数据存在。
(2)SRAM基本电路
DRAM
(1)DRAM:动态随机存储器,定时刷新电路,使用电容存储数据,不掉电情况下也需要定时对电容充电。
(2)DRAM的存储矩阵是二维的,有行有列。所以要对行和列进行片选。行列片选的片选片进行复用,即同一个针脚,先选择行,后选择列。
(3)动态RAM刷新 (刷新与行地址有关:默认数据能保持2ms)
(a)集中刷新(存取周期0.5μs)
集中刷新是一次刷新存储矩阵中所有的存储单元。即,在数据能保持的这2ms内,分为能读写的周期时间,和不能读写的电路刷新时间。这个刷新时间,也称为"死区“。
(b)分散刷新(存取周期为1μs)
分散刷新是,在每次读写数据后,立刻刷新该行存储矩阵。即一个存取周期=读写时间+电路刷新时间。而读写时间等于电路刷新时间,所以,1个存取周期等于2个读写时间,为2*0.5=1μsμs。
分散刷新不存在死区,但是使得一次存取时间变成原来的2倍
(c)异步刷新
异步刷新不在一次刷新所有行,也不再每次读写后立刻刷新,而是保证在2ms内,每一行得到刷新即可。所以其死区时间为0.5μs。如果将刷新安排在指令译码阶段,则不会有死区时间(指令译码阶段,不产生cpu去内存的io)
主存与CPU的连接
存储容量的扩展
(1)位扩展
(2)字扩展(增加存储字的数量)
(3)字位扩展
连线
数据总线(连着CPU MDR)
读/写控制线(CPU控制主存)
地址总线(连着CPU MAR,CPU提供主存地址)
存取速度的提升
双端口RAM
存储器有两个独立的端口,两组线,可以异步的被使用。
访问冲突:
同时 同一地址 写入 会发生写入错误
同时 同一地址 一写一读 会发生读出错误
解决访问冲突:
BUSY#信号
多模块存储器
单体多字
一个存取周期取出连续的多个字
优缺点:连续存取速度快,但是必须是连续的。
多体并行
多个存储体独立工作
优缺点:不同的请求源可以请求不同的存储体。
- 高位交叉编址(顺序存储)
高位作为选择存储体的信号,低位是体内地址。
优缺点:有利于存储器的扩充。 - 低位交叉编址(交叉存储)
低位作为选择存储体的信号,高位是体内地址。
优缺点:连续读取速度快,大大增加了储存器的带宽。
可能的访存冲突 如果相邻的访问序列中(体数个相邻),储存体体号相同。
Cache
引入目的:解决主机与CPU在速度上的矛盾。
利用局部性原理
- 空间局部
- 时间局部
工作原理
(1)主存单位称为块,cache称为行,实质是一个东西
(2)CPU读主存时,把地址同时送给cache和主存,cache通过地址查看此字是否在cache中,若在则立即传送给cpu。若不在,则用主存读周期把此字从主存中读出送到cpu,与此同时,把含有此字的整个数据块从主存读出送到cache的行中。
Cache层次结构
(1)cache是分层次的:L1 cache,L2 cache,L3 cache。
(2)寄存器取值时,先从L1取,去不到则向下层的L2 cache取,L2再取不到,去内存取。
(3)每个核心享有独自的L1 cache和L2 cache,所有核心共享L3 cache。 L1,L2cache是片内cache
(4)L1 cache分为L1P和L1D,分开存储指令和数据。使指令和数据可以同时读取
现代CPU多级Cache的策略
按离CPU远近命名为 L1 Cache,L2 Cache,L3 Cache
L1最近
L1对L2使用全写法,L2对主存使用写回法
cache与内存的映射关系(读方式)
(1)全关联:full associative cache
主存中的字块可以被映射到任意Cache块
(2)直接映射:Direct Associated Cache
一个Cache快对应多个主存块
(3)组相联:Set Associated Cache
将Cache块分组,组件是直接映射,组内是全相联映射。
Cache中主存块的替换算法
- 随机算法
实现简单,没有依据局部性原理,可能命中率较低。
- 先进先出算法
比较容易实现,也没有依据局部性原理,可能会吧需要经常使用的快替换掉。(比如循环程序)
- 近期最少用算法
依据了局部性原理,平均命中率比FIFO高,是堆栈类算法。
- 最不经常使用算法
采用计数器,每次替换计数最小的。
虚拟存储器
虚地址 (逻辑地址) 实地址 (物理地址)
主存地址空间 (实地址空间) 虚拟空间 (程序空间)
页式虚拟存储器
虚拟地址结构
虚页号+页内地址
页表
页表基址寄存器:存放页表的起始地址
页表行:虚页号,装入位,实页号
地址映射过程
- 取出页表基址寄存器里的页表起始地址。
- 根据页表起始地址加上虚页号在页表里面找到对应的实页号。
- 页表里装入位表示该页是否已装入,未装入则需装入。
- 实页号拼接上页内地址就是物理地址。
优缺点
要查表,增加了访问主存次数。
长度固定,页表简单,调入方便。
页面不可能完全被利用,空间浪费。
段式虚拟存储器
虚拟地址结构
段号+段内地址
段表
段表基址寄存器:存放段表起始地址
段表行:段号、装入位、段起点、段长
地址映射过程
- 根据段号与段表起始地址得到对应的段表行。
- 根据装入位判断是否已装入。
- 段起点+段内地址=物理地址
段页式虚拟存储器
程序分段,段的基本单位是页
虚拟地址结构
段号+段内页号+页内地址
地址映射过程
根据段号得到段表行,段表行取出页表起始地址,与段内页号一起得到页表行,从页表行中取出实页号,与页内地址拼接为物理地址。
置换算法
- OPT:选择以后不用的页面
- FIFO:选择最先装入的页面
- LRU:选择最近最久未用的页面
- CLOCK:选择最近未用的页面
- 改进型CLOCK:考虑页面修改问题
快表TLB
虚拟存储器中总是要查表,使用高速的缓冲区存储经常访问的页对应的页表项,就是快表。以前的表(在内存中)叫做慢表(Page)。
快表根据内容指定地址,使用相联存储器。
查找时,快表慢表一起工作,快表找到慢表的工作就作废。
命中的关系
Cache命中,Page必然命中
Cache命中,说明有主存地址了,必然被调入主存了
TLB命中,Page必然命中
TLB是Page的子集
Page不命中,Cache和TLB不会命中
Page不命中则没有调入主存,没有主存地址Cache不会命中
地址翻译:TLB --> 页表 --> Cache --> 主存 --> 外存
四、指令系统
指令格式
基本格式
操作码+地址码
操作码
- 指出指令执行什么操作
- 提供区分地址码组成信息
地址码
被操作的数的地址
指令寻址方式
采用不同寻址方式的目的
缩短指令字长,扩大寻址空间,提高编程灵活性。
指令寻址
- 顺序寻址
- 跳跃寻址
数据寻址
与数据有关的寻址方式划分为三类:立即寻址方式,寄存器寻址方式,存储器寻址方式。
可以划分为下列与数据有关的寻址方式:
- 隐含寻址
- 立即寻址(Immediate addressing)
- 间接寻址
- 直接寻址(Direct addressing)
- 寄存器寻址
- 寄存器间接寻址
- 相对寻址
- 基址寻址
- 变址寻址
CISC与RISC
CISC和RISC的比较
CISC
设置更复杂的新指令来实现软件功能的硬化。
主要特点
- 指令复杂,数目多
- 指令长度不固定,指令格式多,寻址方式多
- 可以访存的指令不受限制
- 各种指令使用频率相差大(2-8定律)
- 各种指令执行时间相差大,大多数指令需要多个时钟周期
- 控制器大多采用微程序控制
- 难以优化为高效的程序
RISC
减少指令种类,简化指令功能,从而提高指令的执行速度。
主要特点
- 选取使用频率最高的简单指令,复杂指令功能由简单指令组合来实现
- 指令长度固定,指令格式种类少,寻址方式少
- 只有Load/Store 指令访存,其余指令的操作都在寄存器之间进行
- CPU中寄存器数量多
- 一定使用指令流水线技术,大部分指令在一个时钟周期内完成
- 以硬布线控制为主,不用或少用微程序控制
- 特别重视编译优化,以减少程序执行时间
五、中央处理器
基本结构
运算器:对数据进行加工和处理
控制器:发出每条指令对应的操作序列对计算机进行控制
指令的执行
指令周期
- 取址周期
- 间址周期
- 执行周期
- 中断周期
三种周期
- 指令周期:
(1)指令从取指,分析指令,到执行完成的全过程所需的全部时间。
(2)有时指令周期还包括间指周期(间接寻址访问主存)和中断周期(响应中断)
(3)执行完指令后才能进入中断周期,响应中断 - 机器周期:
(1)通常把一个指令周期划分为若干个机器周期,每个机器周期完成一个基本操作
(2)不同的指令包含不同个数的机器周期
(3)因为指令的而全部过程有多个步骤,取耗时最长的那个步骤作为机器周期 - 时钟周期(节拍)
(1)一个机器周期内,要完成若干个微操作,每个微操作要耗费1个节拍,一个节拍就是一个时钟周期
机器速度与机器主频的关系
(1)机器主频高,使得节拍耗时短,此时相同指令在执行过程中每个阶段虽然节拍数一样,但是每个节拍的耗时变短了。
(2)但是机器速度不只与机器主频有关,还与指令集有关。指令集每个阶段的微操作数越少,机器速度越快
指令执行方案
管理多个需要执行的指令的执行步骤顺序和时间。
- 单指令周期
- 多指令周期
- 流水线方案
控制器
控制器的结构
程序计数器、控制信号产生电路、指令寄存器
硬布线控制器
输入:节拍发生器、操作码译码器
处理:硬布线控制器
输出:控制信号
优缺点:
- 控制器的速度取决于电路延迟,所以速度快。
- 不能修改添加新功能
微程序控制器
指令作为微程序存储,然后被执行。
一条机器指令对应一个微程序(微程序可以由更小的微程序组成,如取址),微程序存储在控制存储器(ROM)中。
一个微程序里面包含多个微指令
一个微指令对应一个或多个微操作(M(MAR)\toMDR)
一个微操作对应一个微命令
一个微命令就是发出一个控制信号
一条机器指令执行过程
- 执行取指微程序,获得一条机器指令
- 取指微程序的地址送入CMAR
- CM(CMAR)\toCMDR
- 执行取指微程序,主存中的一条机器指令就送入了指令寄存器(IR)
- 得到机器指令对应的微程序
机器指令的操作码字段 通过 微地址形成部件 产生对应的微程序的入口地址 送入 CMAR - 执行微程序中的微指令序列
- 执行完继续第1步
微程序与硬布线的区别
- 微指令执行控制方式
硬布线什么时候执行什么,有时序逻辑控制。
微程序每次执行完一条微指令需要给出下一条微指令的地址。特别地,写在ROM中的微程序(取指微程序)它的每一条指令的下一个指令地址写在每个指令的下地址字段中(写在ROM中)。
取指微程序执行完之后,其后继微指令的地址是由微地址形成部件形成的。
是由取指微程序放在CMAR中
- 取指阶段
硬布线在取指阶段把指令操作码送至译码器,再由译码器译码之后作为CU的输入生成下个控制信号。
微程序在取指阶段(取指微程序运行时)把指令的操作码送到微地址形成部件,生成执行周期微程序的首地址。
指令流水线
把指令分成更小的过程(段),多条指令的某些过程可以并行运行,达到提高计算机运行速度的目的。
指令分段:
- IF:取指周期
- ID:译码/读寄存器堆
- EX:执行/访存有效地址计算
- MEM:存储器访问
- WB:写回寄存器
影响流水线的因素和解决办法
-
结构相关(资源冲突)
两个指令都要用一个资源
解决:
1.排队,后面的等
2.增加资源
-
数据相关(数据冲突)
后面的指令依赖前面指令的执行结果,不能并行运行。
WAR 读后写相关
WAW 写后写相关
解决:
1.后面等
2.数据旁路技术,两个指令直接私下交流
3.编译器优化,调整指令顺序
-
控制相关(控制冲突)
碰见转移指令,流水线后面的指令都作废了
解决:
1.分支预测
静态预测:总是预测条件不满足
动态预测:根据历史情况
2.两个分支的指令都先存着
3.加快形成条件码
4.提高分支预测的猜中率
流水线的性能指标
- 吞吐率(TP) 单位时间流水线完成的任务数量
- 加速比(S) 不使用流水线和使用流水线所用时间之比
- 效率(E) 流水线中各功能段的利用率
流水线中的多发技术
超标量技术、超流水线技术、超长指令字
六、总线
总线概念
定义
(1)总线是连接各个部件的信息传输线
(2)总线是各个部件共享的传输介质
(3)总线上信息的传送分为串行和并行。(eg:usb串行,数据总线,地址总线并行传输)
(4)总线上的多个部件只能分时的向总线发送数据,但可以同时从总线上传输数据
引入总线结构的好处:
- 简化系统结构
- 减少连线数目,提高系统可靠性
- 便于接口设计
- 便于系统扩充,易于实现系统地模块化
- 便于故障的诊断和维修
总线分类
(1)片内总线:芯片内部的总线
(2)系统总线:计算机各部件之间的信息传输总线
(a)数据总线:双向,与机器字长,存储字长有关
(b)地址总线:单向,与存储地址,IO地址有关
(c)控制总线:有出有入。(入的为中断响应)
(3)通信总线:用于计算机系统之间的通信(控制仪表盘,移动通信等)
总线的特性和性能指标
(1)总线宽度:数据线的根数
(2)总线带宽:每秒传输的最大字节数(Mbps)
总线带宽 = 总线宽度 * 总线频率
总线仲裁 (总线的控制)
总线的判优控制 (由哪个部件发数据)
主设备(模块):该模块对总线有控制权
从设备(模块):响应从主设备发送来的总线命令
仲裁方式:
集中式 :
- 链式查询:
- 计数器定时查询
- 独立请求方式
分布式
总线周期
- 申请分配阶段
- 寻址阶段
- 传输阶段
- 结束阶段
一个总线设备在某一时刻可以有多对主从设备进行同行吗?
不可以,在某一时刻,总线上只有一个主设备控制总线,选择一个从设备与之进行通信(即一对一关系),或对所有设备进行广播通信(即一对多关系)。所以不能有多对主从设备同时进行通信。
七、I/O系统
IO设备与主机信息传送的控制方式
程序查询
CPU不断查询IO设备是否ready,CPU工作效率不高,是串行工作方式。
程序中断
IO设备发出中断请求,予以响应,大大提高了工作效率,是并行工作方式。
工作流程
- CPU响应中断
- 中断隐指令(硬件实现的)
- 转去执行中断服务程序
大部分中断处理的大致流程
中断隐指令:
- 关中断
保存现场之前要关中断,CPU不能响应更高级中断源的请求。 - 保存断点
将原来程序的指令地址保存下来 - 引出中断服务程序
中断服务程序的入口地址叫做中断向量
所有的中断向量存在中断向量表
中断服务程序:
- 进入中断服务程序时保存现场和屏蔽字
- 开中断(可以实现多重中断)
- 中断事件处理
- 关中断
- 恢复现场和屏蔽字
- 开中断,中断返回
多重中断和中断屏蔽
中断源与屏蔽字与优先级
例如有四个中断源A、B、C、D
优先级 D>A>C>B
D的中断屏蔽字为:1 1 1 1 屏蔽所有
A的中断屏蔽字为:1 1 1 0 屏蔽ABC
DMA方式
主存与IO设备之间有一条数据通路,如果CPU和DMA同时访问主存,让给DMA。
DMA方式只用于传数据,鼠标和键盘不能用DMA,他们要处理事件
传送方式
-
停止CPU访问主存
-
DMA与CPU交替访问访存
-
周期挪用
CPU不在访存时
CPU正在访存
CPU和IO同时发出请求
传送过程
- 预处理
CPU执行IO指令设置DMA控制器的寄存器初值和传送方向,启动DMA控制器。等到IO设备准备好要发送的数据,接收的数据,IO设备向DMA控制器发出DMA请求,DMA向CPU发出总线请求。 - 数据传送
完全由DMA控制器实现 - 后处理
DMA向CPU发出中断请求,DMA执行中断服务程序做DMA结束处理(数据校验…)。