计算机组成原理-5-输入输出系统

news2024/12/24 7:46:57

5. 输入输出系统

文章目录

  • 5. 输入输出系统
    • 5.1 概述
      • 5.1.1 I/O系统的发展概况
      • 5.1.2 I/O系统的组成
      • 5.1.3 I/O设备与主机的连接
      • 5.1.4 I/O设备与主机传送信息的控制方式
    • 5.2 I/O设备
    • 5.3 I/O接口
    • 5.4 控制方式
      • 5.4.1 程序查询方式
      • 5.4.2 程序中断方式
      • 5.4.3 DMA方式
      • 5.4.4 程序中断方式与DMA方式的比较

  • 本笔记参考哈工大刘宏伟老师的MOOC《计算机组成原理(上)_哈尔滨工业大学》、《计算机组成原理(下)_哈尔滨工业大学》。
  • 或者是B站《计算机组成原理(哈工大刘宏伟)135讲(全)高清》,大家一起听比较热闹。
  • 中文教材:《计算机组成原理(第二版)-唐朔飞.pdf》、《学习指导与习题解答(第2版)-唐朔飞.pdf》
  • 本篇笔记对应课程第五章(下图加粗)。

5.1 概述

图5-1 I/O设备在计算机系统的位置

  I/O设备主要包括两部分:设备控制器、机/电/磁/光部分。上图给出了“I/O设备(外部设备)”在计算机系统中的位置,“I/O设备”通过“I/O接口”与“主机”进行数据交换、“主机”通过“I/O接口”控制或读取“I/O设备”的状态。后续:

  • “5.1节-概述”:简要介绍“I/O设备”的基本问题。
  • “5.2节-I/O设备”:简要介绍“I/O设备”的分类。
  • “5.3节-I/O接口”:具体介绍“I/O接口”电路的结构和功能。
  • “5.4节-控制方式”:具体介绍“主机”控制“I/O设备”的三种控制方式。

5.1.1 I/O系统的发展概况

  输入输出系统(I/O系统)是计算机系统中种类最多、功能最多、结构最复杂、构成最多样的系统。现代计算机系统中,外部设备的成本可以占到计算机总成本的80%甚至以上。可以说,正是这些丰富多彩的外部设备,才促成了计算机系统在各个领域的大规模应用。下面是I/O系统的发展概况:

  1. 早期阶段:分散连接,每个外设都有专门的控制电路,甚至和CPU控制电路设置在一起。CPU和I/O设备串行工作,控制方式采用“程序查询方式”。缺点是难以增、删外设。
  2. 接口模块和DMA阶段:总线连接,外设和CPU都挂载在总线上。CPU和I/O设备并行工作,控制方式有“中断方式”、“DMA方式”。
  3. 具有通道结构的阶段:为了将 外设的管理/控制 尽可能从主机中独立出来,便设置“通道”,其结构如下图所示。“通道”可以认为是小型的增强的DMA控制器,有自己的指令系统,通过执行通道程序,可以使通道上的I/O设备和主机直接进行信息传输。
  4. 具有I/O处理机的阶段:设置“专用处理器”负责管理I/O设备,甚至当没有外设工作时,也可以承担主机的部分计算任务,常见于大型服务器。

趋势:数据的输入输出逐渐从CPU中分离出来,外部设备的独立性越来越强。

若干个
若干个
若干个
CPU
主存
通道
子通道
设备控制器
I/O设备
图5-2 “通道”的硬件连接层级图(由大到小)

5.1.2 I/O系统的组成

  1. I/O软件
  • I/O指令:CPU指令的一部分。格式为 |操作码|命令码|设备码|,操作码只是I/O指令的标志;命令码相当于CPU指令中的操作码,指出要对I/O设备执行什么操作,如查询/输入/输出/控制等;设备码是I/O设备的地址,也可以是“I/O端口”的寄存器地址。
  • 通道指令:通常在编写应用程序时,为了调用外设需要增加“广义I/O指令”,指出要传输数据的首地址、传送字数、操作命令等。操作系统会根据这些信息使用通道指令生成“通道程序”,执行该通道程序就可以控制相应I/O设备完成输入输出。通道指令一般较长,如IBM/370通道指令为64位。
  1. I/O硬件
  • 采用总线连接:设备通过“接口”连接到总线上。
  • 采用通道结构:设备通过“设备控制器”连接“通道”。

5.1.3 I/O设备与主机的连接

  上一章讲解了“CPU和主存”的信息交换方式,但CPU和主存通常不会改变,而I/O设备则会随时增加、删除,所以“主机和I/O设备”的信息交换方式和前者有很多不同。具体来说,主机如何选中对应的I/O设备?主机和I/O设备如何知道彼此状态?主机和I/O设备如何物理连接?下面就来回答这一系列问题:

  1. I/O设备编址方式:为I/O设备的存储空间分配地址。
  • 统一编址:将I/O设备地址看成是内存地址的一部分,CPU可以直接用取数、存数等指令对I/O设备进行访问。优点是CPU指令集相对简单,适合内存地址较大的情况,如64位操作系统。
  • 单独编址:在内存地址之外额外开辟一块地址空间作为外设空间。为了区分对内存、外设的操作,需要设置专门的I/O指令来操作外设。
  1. 设备选中:使用上述编址选中相应的I/O设备,本过程会使用“设备选择电路”(比较器)。

  2. 传送方式:分为串行、并行。通常并行传输位数是8的倍数。

  3. 联络方式:I/O设备和主机需要确定彼此的状态。

  • 立即响应:适用于结构简单、状态少的设备,如LED灯。
  • 异步工作:“异步”主要指I/O设备与主机工作速度不匹配。此时采用应答信号向对方指明自己的状态,比如下面并行传输的状态信号、串行传输的起始位/终止位。
  • 同步工作:主机和I/O设别采用“同步时标”(时钟信号)驱动工作。
  1. 连接方式:
  • 辐射式连接:每个I/O设备都需要专用的控制电路,不利于I/O设备的增删。目前弃用。
  • 总线连接:所有I/O设备挂载在总线上,节省资源、方便I/O设备管理。

5.1.4 I/O设备与主机传送信息的控制方式

  下图给出了三种主机控制I/O设备工作的方式。在“程序查询方式”、“程序中断方式”中,主存和I/O设备之间没有直接相连的总线,所以CPU需要亲自进行数据的搬运,而“DMA方式”中主存和I/O设备之间的设立总线,CPU只需释放总线控制权一段时间,具体的数据搬运则让DMA完成即可,显然DMA方式的CPU工作效率最高。下面是这些控制方式的具体介绍,以数据输入(CPU读取数据)为例:

图5-3 程序查询方式、程序中断方式、DMA方式的CPU效率对比
  1. 程序查询方式:CPU和I/O串行工作。CPU发送读指令后,需要原地等待I/O设备准备好,如下图红框所示。并且,主存要想与I/O设备进行数据交换,也需要CPU作为中间媒介,CPU全程参与数据交换工作,CPU工作效率非常低!

  2. 程序中断方式:CPU和I/O部分的并行工作。CPU发送读指令后,直接去执行其他程序;I/O设备准备好后,向CPU提出中断请求,CPU再暂停现行程序读取数据。CPU无需原地等待,但仍然亲自进行数据搬运。并且,中断需要几十条指令完成,若主存和I/O设备进行小批量、频繁读写,CPU的效率还是很低。

  3. DMA方式:CPU和I/O完全并行工作。CPU发送读指令后,直接去执行其他程序,只需让出在数据搬运期间让出总线使用权(周期挪用/周期窃取),CPU还可以继续运行程序,主存和I/O设备之间通过“DMA控制器”使用总线进行数据交换。CPU被解放的程度更大,CPU工作效率很高。

  4. 通道方式:参考“计算机体系结构”课程。

  5. I/O处理机方式:参考“计算机体系结构”课程。

总结:上述方式从上到下,I/O系统的自治能力越来越强

在“5.4节-控制方式”中会详细介绍上述前三种控制方式的电路结构和功能,本小节先铺垫概念。

5.2 I/O设备

按照通信对象的不同,I/O设备大致分为以下三类:

  1. 人机交互设备:包括输入输出,如键盘、鼠标、打印机、显示器等。
  2. 计算机信息存储设备:也就是“计算机组成原理-4-存储器”介绍的内容,如磁盘、光盘、磁带。
  3. 机—机通信设备:协助计算机与其他设备之间进行通信的设备,如调制解调器、网卡等。

当然也可以如下表所示,分为输入设备、输出设备、其他设备:

表5-1 I/O设备的分类

注:本小节具体内容可以参考中文教材“5.2 I/O设备”,有很多篇幅介绍,但由于非重点MOOC就不多讲解了。

5.3 I/O接口

  “接口”的概念非常广泛,可以是“软件-软件”、“软件-硬件”、“硬件-硬件”。本节主要介绍主机和I/O设备之间的“I/O接口”,既包括电路硬件,也包括控制软件。单个“I/O接口”控制多个I/O设备。“I/O接口”的功能主要有:

  1. 实现设备的选择。
  2. 实现数据缓冲达到速度匹配。
  3. 实现数据串-并格式转换。
  4. 实现电平转换。
  5. 传送控制命令。
  6. 反映设备的状态(“忙”、“就绪”、“中断请求”)。

为了实现上述功能,下面介绍“I/O总线”与“I/O设备”进行连接的电路结构,以及I/O接口内部的基本组成:

图5-4 “I/O总线”与“I/O接口”的连接、“I/O接口”的基本组成

I/O总线可以分为四种类型的连接线

  1. 设备选择线:单向,传输I/O设备的设备码或端口号,用于指定设备。
  2. 数据线:双向,传输数据。
  3. 命令线:单向,输入来自主机的命令,控制I/O设备完成相应操作。
  4. 状态线:单向,向主机输出本设备的状态。

I/O接口的基本组成

  1. 设备选择电路:本质是一个比较器,实现I/O设备的选址功能。
  2. 命令寄存器和命令译码器:实现传送命令的功能。使用“命令寄存器”锁存命令,再通过“命令译码器”和节拍发出控制信号,控制接口或I/O设备完成相应功能。
  3. 数据缓冲寄存器:实现传送数据的功能【核心功能】。稍加改变即可成为“串-并转换电路”。
  4. 设备状态标记:使用一系列触发器,来反映设备的状态。
  • 完成触发器 D \text{D} D:用于标记I/O设备是否准备好、数据是否准备好。
  • 工作触发器 B \text{B} B:用于标记I/O设备是否忙。
  • 中断请求触发器 INTR \text{INTR} INTR:I/O设备准备好后,向主机发送中断请求。
  • 屏蔽触发器 MASK \text{MASK} MASK:设置有效时,即使I/O设备完成准备工作,也不能向主机提出中断请求。用于屏蔽不重要的中断请求,比如主机正在和其他I/O设备进行重要交互。
  1. 控制逻辑电路:保障上述I/O接口的四大部分协调的按时序工作。

注:上述基本结构未给出“并串转换”、“电平转换”功能,可自行思考添加。

  最后是接口的分类。简单给出下面四种分类方式,其中按照“控制方式”分类时,“程序查询方式”无需“I/O接口”,所以分类中没有给出。如下图:

图5-5 I/O接口的分类

5.4 控制方式

  在“5.1.4节-I/O设备与主机传送信息的控制方式”已经简单介绍了这三种控制方式,下面来看看具体的内部结构和工作原理。注意到,早期个人计算机主板的“南桥芯片”也具有“I/O接口”的功能。“南桥芯片”现已淘汰,集成到“北桥芯片”、“CPU”之中。

5.4.1 程序查询方式

  “程序查询方式”的流程简单来说就是,CPU和I/O设备串行工作,CPU会原地踏步等待I/O设备准备完成,进而导致CPU的工作效率极低。下面左两图分为“单I/O设备”、“多I/O设备”的查询流程图,右图给出整个“程序查询方式”的完整流程:

图5-6 “程序查询方式”的流程图:单设备查询流程、多设备查询流程、完整程序流程

单设备查询流程:本过程涉及三条指令。

  1. 测试指令:检查状态标记,
  2. 转移指令:也称为分支指令。检查设备使用准备好,
  3. 传送指令:也称为输入输出指令、访存指令。来进行交换数据。

多设备查询流程:首先根据优先级进行排序,然后依次进行读写。

完整程序流程

  1. 保护寄存器内容:数据交互过程中需要CPU寄存器进行暂存数据,于是首先将该CPU寄存器的值存储到其他地方,等数据读/写完毕后再取回来。
  2. 设置计数值:控制传输的数据量。假设待传输数据总量为 n n n,可以将计数器初值设置为 n n n,递减到零;也可以将初值设置为 − n -n n (补码),递增到0。
  3. 设置主存缓冲区地址:标记主存读/写数据的起始地址。
  4. 启动I/O设备:让外部设备准备好数据传输。
  5. “准备好?”:通过原地踏步的方式,不断查询I/O设备是否准备好。
  6. 传输数据:按照流程图所示的不断地、一个一个地传输数据。最后结束I/O传送。

  上一小节的最后进行“I/O接口分类”时,提到“程序查询方式”没有“I/O接口”,但其实也会有一些简单的控制电路。我们对照图5-4所示的5个部分,来分析“程序查询方式”的接口电路的工作流程。以数据输入(CPU读数据)为例:

图5-7 “程序查询方式”的接口电路
  1. CPU发出读命令(①):CPU发送设备地址到“设备选择电路”,确认本次数据传输的I/O设备。该电路输出的设备选择信号 SEL \text{SEL} SEL,和CPU发送的“启动指令”一起,控制设备开始工作。
  2. 设置状态信号(②):控制设备开始工作时,会设置 D = 0 \text{D}=0 D=0 表示数据还没有准备好, B = 1 \text{B}=1 B=1 表示设备开始工作。
  3. I/O设备传数据(③④):I/O设备将数据传输到数据寄存器 DBR \text{DBR} DBR 中,然后设置 D = 1 \text{D}=1 D=1 B = 0 \text{B}=0 B=0 告知CPU目前自己的状态。
  4. CPU读数据(⑤⑥): D = 0 \text{D}=0 D=0 时,CPU会一直原地等待。直到CPU检测到 D = 1 \text{D}=1 D=1,读取 DBR \text{DBR} DBR 中的数据,并存放到主存中,完成本次数据传输。

注:实际电路更加复杂,比如需要对CPU指令进行锁存、译码,然后按顺序产生一系列控制信号。上述为简单示意。

5.4.2 程序中断方式

1. 中断的概念
  首先介绍一下什么是中断。“中断”指CPU在执行程序的过程中,若发生意外情况,CPU会“保护现场”转而执行中断程序,执行完中断程序后“恢复现场”继续执行原有程序,如下左图所示。下右图则将打印机作为“中断源”,给出了中断程序占用CPU的示意图。可以看到,“程序中断方式”实现在宏观上CPU和I/O设备并行工作,也就是I/O设备在准备过程中,CPU依然在执行主程序。但微观上CPU中断主程序为I/O设备服务。如下图:

图5-8 中断示意图、“打印机”中断程序占用CPU示意图

中断程序占用CPU的步骤:

  1. CPU启动I/O设备:CPU执行主程序“启动打印机”后,直接继续执行主程序,不会等待。
  2. CPU进入中断:“打印机”准备好后,向CPU发起I/O中断请求,CPU“响应中断”后进入中断程序,接收数据。
  3. CPU退出中断:CPU执行完中断程序后(接收完数据),退出中断,然后继续执行中断之前的主程序。

2. I/O中断的接口电路
  那实现“程序中断方式”的“I/O接口”电路长什么样子呢?首先来介绍一些组件。在“5.3节-I/O接口”中,已经介绍“I/O接口”最基础的五大部件,但“程序中断方式”还需要四个新的部件。如下,首先介绍这四个新部件的结构和功能:

图5-9 中断请求触发器和中断屏蔽触发器、排队器、中断向量地址形成部件
  1. 中断请求触发器 INTR \text{INTR} INTR:高电平表示有请求,通过中断请求线向CPU发送中断请求。
  2. 中断屏蔽触发器 MASK \text{MASK} MASK:高电平表示中断会被屏蔽掉,注意屏蔽的是本“I/O接口”的中断。
  3. 排队器:按照优先级顺序,对不同的中断请求排序。不同I/O设备的优先级不同,比如高速设备的优先级更高,因为若不及时处理,可能会导致数据丢失。有下面两种实现方式。
  • 硬件:可以集成在CPU内部;或者设置在每个I/O设备的接口电路中,然后连接在一起组成一个“链”,称为“菊花链方式”或者“链式排队器”。上左二图给出示意图,输入的 INTR i ‾ \overline{\text{INTR}_i} INTRi 是“中断请求触发器”发送过来的信号,每个接口的排队器都由“非门”、“与非门”组成,执行最后一个 INTP i ′ = 1 \text{INTP}'_i=1 INTPi=1 的中断请求。若没有中断请求 INTR i ‾ = 0 \overline{\text{INTR}_i}=0 INTRi=0 INTP i ′ \text{INTP}'_i INTPi 均为1,最后一个的横向输出为0;若有中断请求,最后一个的横向输出必为1,假设 INTR 1 ‾ = 1 \overline{\text{INTR}_1}=1 INTR1=1 INTR 2 ‾ = 0 \overline{\text{INTR}_2}=0 INTR2=0,那么 INTP 2 ′ \text{INTP}'_2 INTP2 是最后一个1,通过上面的“与门”就可以选择出唯一为1的中断请求。
  • 软件:事先规定好中断优先级,然后从高到低依次查询,详见第八章。
  1. 中断向量地址形成部件:如上右二图所示,输入为上述“排队器”(只有一位高电平),输出中断向量地址。这个“中断地址向量”是在内存中预留好的,比如 Intel 8086 最多支持256个中断。CPU根据这些固定好的中断向量地址,就能找到之前存放在此的中断程序入口地址(上右一图)。有如下两种方法。
  • 软件查表法:详见第八章。
  • 硬件向量法:也就是“设备编码器”,如下图直接使用一系列三态门产生中断向量地址。

注:“中断向量地址”对应于“中断向量”,而“中断向量”对应于“中断程序服务入口”。两者不一样,注意区分。

然后将上述四个新部件添加进来,便可以给出下图 “程序中断方式”的接口电路

图5-10 “程序中断方式”的接口电路基本组成

上侧的四个部件是新介绍的:

  • 中断请求触发器 INTR \text{INTR} INTR
  • 中断屏蔽触发器 MASK \text{MASK} MASK
  • 排队器
  • 设备编码器(中断向量地址形成部件)

下侧的五大部件是“5.3节-I/O接口”介绍的:

  • 设备选择电路
  • 命令译码(命令寄存器和命令译码器)
  • 数据缓冲寄存器 DBR \text{DBR} DBR
  • 设备状态标记 D \text{D} D/ B \text{B} B
  • 控制逻辑电路(本图未展示的电路)

3. I/O中断处理过程

下面是使用上述“程序中断方式”的接口电路,根据I/O中断请求 进入中断程序 的基本步骤:

  1. CPU发送指令(①):CPU执行到某输入指令,该指令要求将指定的I/O设备的数据输入到主机中,于是CPU将该设备的I/O地址发送到“地址线”,同时发送“启动命令”。
  2. 设置状态信号(②):所有“I/O接口”都会接收到“地址线”上的地址,但只有“地址线”指定的I/O接口会响应,并执行“启动命令”,将数据状态设置未准备好 D = 0 \text{D}=0 D=0、I/O设备设置为忙 B = 1 \text{B}=1 B=1
  3. I/O设备传数据(③④):I/O设备准备好后会传输数据到 DBR \text{DBR} DBR,然后设置 D = 1 \text{D}=1 D=1 (设置中断)、 B = 0 \text{B}=0 B=0
  4. 发送中断请求(⑤⑥⑦⑧):CPU发送“中断查询”,于是 INTR \text{INTR} INTR 输出“中断请求”,CPU于是返回“中断响应”表示准备好中断,并读取中断“向量地址”。
  5. CPU读数据:CPU根据中断向量地址跳转到中断程序的入口地址,执行中断程序。

注:CPU只有在 “中断允许触发器 EINT \text{EINT} EINT” 为高电平时才会进行“中断查询”。

4. 中断服务程序的流程
  上述便介绍完了CPU如何通过“I/O接口”电路进入中断,那么后续 CPU如何执行中断程序 呢?下面给出“中断服务程序的流程”,主要分为4个步骤:

  1. 保护现场:硬件来完成。
  • 程序断点的保护:保存中断程序结束后要执行的指令,是下图“中断周期”的一部分。
  • 寄存器内容的保护:不能由指令读取的状态也需要保护,比如通用寄存器或者体系结构寄存器。利用“进栈指令”完成,或者保存在内存的指定区域、空闲寄存器。
  1. 中断服务:对不同的I/O设备,执行不同内容的中断程序。
  2. 恢复现场:主要指“体系结构寄存器”的内容,使用“出栈指令”读出,或者从保存的内存、寄存器读出。
  3. 中断返回:使用“中断返回指令”返回到中断之前的断点。

上面的流程其实是“单重中断”的执行流程,也就是不允许中断现行的中断服务程序。而“多重中断/中断嵌套”允许级别更高的中断源,中断现行的中断服务程序。此时“多重中断”和“单重中断”的关键区别就在于“开中断指令”的执行时机,如下:

图5-11 单重中断程序流程、多重中断程序流程

单重中断

  1. CPU正常执行指令:也就是不断的“取指令”、“执行指令”。若 EINT = 1 \text{EINT}=1 EINT=1,则在每条指令执行阶段的结束前,CPU发送“中断查询”信号,此信号可以使能“I/O接口”的 中断请求触发器 INTR \text{INTR} INTR。若接收到“中断请求”,那么就执行下一步;否则就不断循环。
  2. CPU进入中断周期:主要是“保护断点”、“形成中断服务程序的入口地址”、“关中断”。这三步操作都是由硬件按时序完成,合称为“中断隐指令/中断周期”。但注意,此时属于前面所执行指令的最后阶段,所以“中断隐指令”不是一个完整的CPU指令,第九章详细介绍。
  3. 进入中断服务程序:如上图,将中断服务程序的核心“设备服务”执行完毕后,才“开中断

多重中断

  1. CPU正常执行指令。和上述“单重中断”相同。
  2. CPU进入中断周期。和上述“单重中断”相同。
  3. 进入中断服务程序:和上述“单重中断”不同的是,在“保护现场”完成后,立即“开中断。那么有可能会在“设备服务”的执行过程中,再次触发中断,形成“多重中断”。

注:CPU只有在 “中断允许触发器 EINT \text{EINT} EINT” 为高电平时才会进行“中断查询”。
注:“开中断”就是软件设置 EINT = 1 \text{EINT}=1 EINT=1
注:“关中断”就是软件设置 EINT = 0 \text{EINT}=0 EINT=0,当然也可以硬件自动复位。
注:8086的介绍见“微机原理与接口技术”课程。

5.4.3 DMA方式

1. DMA方式的特点

  DMA是“直接存储器访问”(Direct Memory Access)的缩写。实际上,“程序中断方式”和“程序查询方式”的数据通路相同,都需要CPU的参与,如下图的棕色通路;“DMA方式”则无需CPU参与,主存和DMA接口可以直接交换数据,如下图的棕色通路:

图5-12 三种控制方式的数据通路

下图给出了DMA与主存交换数据的三种方式:

图5-13 DMA与主存交换数据的三种方式
  • 停止CPU访问主存DMA完全占用主存,CPU停止对主存的访问,控制简单。缺点是若CPU的预存指令执行完毕,那么CPU就只能处于不工作状态或保持状态,未充分发挥CPU对主存的利用率。
  • 周期挪用(或周期窃取)【常用】:“周期”指“访问主存的周期”。也就是在数据传输阶段,DMA一次只占用(窃取)一个访存周期,而不是一直占用,这样CPU也可以访问主存。于是当DMA想要访问主存时,便有三种可能,CPU没有访存、DMA可以直接占用;CPU正在访存、DMA只能等待;DMA和CPU同时请求访存,DMA优先访存防止数据丢失。
  • DMA与CPU交替访问:数据传输时,将CPU工作周期中分成固定的两份,DMA、CPU固定的轮流访存,不需要申请建立和归还总线的使用权。适合CPU工作速度比主存慢的情况(一般不可能),实用性不强。

2. DMA接口的功能和组成

  在搬运数据的过程中,DMA接口应具备以下功能:

  1. 向CPU申请DMA传送。
  2. 处理总线控制权的转交
  3. 管理系统总线、控制数据传送。
  4. 确定数据传送的首地址和长度,修正传送过程中的数据地址长度
  5. DMA传送结束时,给出操作完成信号,方便CPU后续处理。

根据DMA接口的功能便可以确定DMA接口的结构组成,如下图:

图5-14 DMA接口的结构示意图

假设是“单总线结构”:CPU、主存、DMA挂载在同一根总线上。

  • 地址寄存器 AR \text{AR} AR:数据传送的首地址。
  • 计数器 WC \text{WC} WC:记录已经传输的数据长度。假设采用递增方式且总数据量为 n n n,则 WC \text{WC} WC 初始值为 − n -n n
  • 数据缓冲器 BR \text{BR} BR:暂存数据。
  • 设备地址寄存器 DAR \text{DAR} DAR:一个作用是供内部的“设备选择电路”使用,用于选择相应的设备。另一个作用保存“机械硬盘”要读取的柱面号、磁道号、扇区号等信息,方便确认数据传输地址。
  • DMA控制逻辑:控制DMA接口内部协调工作,控制在相应时序发送相应信号,如向CPU发出DMA请求 HRQ \text{HRQ} HRQ、向主存发送读写控制信号。CPU回复应答信号 HLDA \text{HLDA} HLDA
  • 中断机构:数据传输完成后,进行后续处理。也就是 WC \text{WC} WC 发生溢出时,会向此发信号。然后向CPU发送中断请求,完成后续处理。
  • 设备:和 BR \text{BR} BR 直接相连。要想传输数据,需要首先向 “DMA控制器” 发送请求信号 DREQ \text{DREQ} DREQ (Device REQuest),然后“DMA控制器”发送应答信号 DACK \text{DACK} DACK (Device ACK) 表示同意。

3. DMA的工作过程

  那根据上述结构,“DMA接口”如何完成数据传输的工作呢?DMA传送过程如下左图所示,分成四个步骤。下面介绍这四个步骤,并以数据输出(主存输出数据到I/O设备)为例,给出DMA接口各部件的工作流程:

DMA传送过程(下左图):

  1. 预处理:通过几条输入输出指令设置DMA传输的配置信息,比通知“DMA控制逻辑”数据传送方向,将设备地址写入 DAR \text{DAR} DAR,将主存地址写入 AR \text{AR} AR,使用传送总字数初始化 WC \text{WC} WC
  2. 数据传送:一个一个的传送数据,也就是不断地从CPU那里占用总线并释放。
  3. 后处理:本质上也是一个“中断服务程序”,具体功能如下。
  • 校验送入主存的数是否正确。
  • 是否继续用DMA。
  • 测试传送过程是否正确,错则转诊断程序。
  1. 继续执行主程序。
图5-15 DMA传送流程图、DMA数据输出步骤

以数据输出(主存输出数据到I/O设备)为例(上右图):

  1. I/O设备读取数据(①②):“设备”从 BR \text{BR} BR 中读取信号,并发送 DREQ \text{DREQ} DREQ 给“DMA控制逻辑”,表示单个数据已经读取完毕。
  2. DMA控制总线(③④):“DMA控制逻辑”向CPU发送总线接管请求 HRQ \text{HRQ} HRQ,CPU给出应答 HLDA \text{HLDA} HLDA,DMA接口控制总线。
  3. DMA访存(⑤⑥⑦):DMA接口通过“地址线”发送 AR \text{AR} AR 访问主存,主存通过“数据线”将数据发送到 BR \text{BR} BR 中,同时“DMA控制器”发送应答信号 DACK \text{DACK} DACK 通知“设备”新的数据准备好了。注意传输数据的过程中,也会一并更新 AR \text{AR} AR WC \text{WC} WC 方便下次传输。
  4. CPU处理数据: WC \text{WC} WC 自增后溢出,表示数据传输完成,便直接向“中断请求”发送信号,“中断请求”再向CPU发送“中断请求”,表示数据处理完成,CPU可以执行“后处理”。

4. DMA接口与系统的连接方式

若干个
若干个
CPU/主存
DMA接口
I/O设备
图5-16 DMA接口与系统的连接方式

  如上图所示,一条总线上可以挂载多个“DMA接口”、而一个“DMA接口”又可以连接多个“I/O设备”。它们之间的连接方式如下。首先是多个DMA接口的挂载方式:

图5-17 具有公共请求线的DMA请求、独立的DMA请求
  1. 具有公共请求线的DMA请求:DAM接口按照优先级从左到右排序,所有DMA接口共享一条“DMA请求线”。CPU收到DMA请求时,按位置顺序逐个查询需要将总线释放给哪个“DMA接口”。
  2. 独立的DMA请求:每一个DMA接口都有独立的“DMA请求线”、“DMA响应线”与CPU相连,判优逻辑由CPU内部完成。
  3. 计数器定时查询的DMA请求:教材上没写。本质就是将“链式查询”的“DMA响应”换成CPU内部的计数器。

注:可以参考“3.5.1节-总线判优控制”中的“链式查询”、“独立请求查询”、“计数器定时查询”。

而多个“I/O设备”连接到一个“DMA接口”的类型较为简单,如下两种:

图5-18 选择型、多路型(通道)
  1. 选择型:在物理上连接多个设备,在逻辑上只允许连接一个设备。如上左图,多个“I/O设备”共用一个DMA接口,适合“I/O设备”数量少且传输速率高的场景
  2. 多路型:在物理上连接多个设备,在逻辑上允许连接多个设备“同时工作”。这里的“同时工作”指的是多个“I/O设备”可以同时进行数据准备,但实际传输数据时仍然只有一个“I/O设备”与主存交换数据。如上右图所示“通道”,此类型适合“I/O设备”数量多且传输速率较低的场景。下面给出具体实例。
  • 下图所示“磁盘”、“磁带”、“打印机”同时采用“多路型”连接到一个“DMA接口”上。“打印机”先请求,服务打印机一个访存周期;“磁盘”、“磁带”同时请求,优先响应速度更高的设备。可以看到,尽管多个设备同时连接到一个“通道”上,但“通道”依然有很多空闲时间。

注:“通道”可以参考“计算机体系结构”课程中的“通道处理机”。

5.4.4 程序中断方式与DMA方式的比较

表5-2 DMA方式与程序中断方式的比较
比较方面中断方式DMA方式
数据传送程序,需要CPU参与硬件,无需CPU
响应时间指令执行结束主存的存取周期结束
能否用于处理异常不能
中断请求的作用传送数据后处理
优先级高,通常连接高速设备

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1541356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字乡村发展策略:科技引领农村实现跨越式发展

随着信息技术的迅猛发展和数字经济的崛起,数字乡村发展策略已经成为引领农村实现跨越式发展的重要手段。科技的力量正在深刻改变着传统农业的生产方式、农村的社会结构以及农民的生活方式,为农村经济发展注入了新的活力和动力。本文将从数字乡村的内涵、…

MySQL数据库 - 事务

1. 事务的概念 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中, 要删除一个人员,即需要删除人员的基本资料,又需要删除和该人员相关的信息,如信箱, 文章等等。这样&#x…

Docker 之 数据卷

目录 1. 数据卷是什么 1.1 运行一个带有容器卷存储功能的容器实例 2.能干什么 3. 容器卷案例 3.1 宿主机vs容器之间映射添加容器卷 3.1.1 命令添加: 3.1.2 查看数据卷是否挂载成功 3.1.3 容器和宿主机之间数据共享 3.2 读写规则映射添加说明 3.2.1 读写&…

chatgpt和 github copilot chat哪个更强

chatgpt大家应该都不陌生 ChatGPT 是由 OpenAI 开发的一种基于 GPT(生成式预训练模型)的聊天机器人。它可以生成语言上下文相关的响应,从而进行自然语言对话。ChatGPT 利用大规模的语言数据进行预训练,并通过微调或在线学习来适应…

10基于访问权限控制和细粒度控制的方式访问资源

访问权限控制 RBAC 基于角色的访问控制(Role-Based Access Control)是按角色进行授权,如主体的角色为总经理时才可以查询企业运营报表和员工工资信息等 缺点:查询工资所需要的角色变化为总经理和部门经理,此时就需要修改判断逻辑为判断用户角色是否为…

02课程发布模块之部署Nginx

部署Nginx 部署网关 通过Nginx访问后台网关,然后由网关再将请求转发到具体的微服务,网关会把请求转发到具体的服务 upstream gatewayserver{server 127.0.0.1:63010 weight10; } # 网站首页对应的虚拟机 server {listen 80;server_name www.51xuecheng.cn…

AtCoder ABC346 A-E题解

比赛链接:ABC346 Problem A: 签到题。 #include <bits/stdc.h> using namespace std; const int maxn105; int A[105],B[105]; int main(){int N;cin>>N;for(int i1;i<N;i)cin>>A[i];for(int i1;i<N;i){B[i]A[i1]*A[i];cout<<B[i]<<end…

【Godot4.2】像素直线画法及点求取函数

概述 基于CanvasItem提供的绘图函数进行线段绘制只需要直接调用draw_line函数就可以了。 但是对于可以保存和赋值节点直接使用的纹理图片&#xff0c;却需要依靠Image类。而Image类没有直接提供基于像素的绘图函数。只能依靠set_pixel或set_pixelv进行逐个像素的填色。 所以…

Linux 的 app :一般到哪里下载 ?(**)

利用 appimagetool 工具对开发好的项目进行打包 &#xff08;***带笔记*&#xff09; https://blog.csdn.net/ken2232/article/details/131313613 1. 首选&#xff0c;直接通过 OS发行版的官网仓库&#xff1a;简单、方便&#xff1b;可能相对最可靠。 如&#xff1a; sudo a…

matlab基于Simulink的模糊逻辑控制应用

一、原理 模糊逻辑指模仿人脑的不确定性概念判断、推理思维方式&#xff0c;对于模型未知或不能确定的描述系统&#xff0c;以及强非线性、大滞后的控制对象&#xff0c;应用模糊集合和模糊规则进行推理&#xff0c;表达过渡性界限或定性知识经验&#xff0c;模拟人脑方式&…

基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

算法:bfs(深度优先搜索)

// dfs习题&#xff1a; // 输入9行&#xff0c;0代表未知 // 输出9行即最终结果 #include <stdio.h> #include <stdlib.h> int main() {int table[9][9];//输入数据for (int i 0; i < 9; i) {for (int j 0; j < 9; j) {scanf("%d", &table[…

js工具方法记录

校验数字是否有效的11位手机号 function isValidPhoneNum(value: string) {return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(value) }手机号中间4位掩码 function maskPhoneNum(phone: string, space false) {if (!phone) {return }const reg /(\d{3})\d{4}(\d{4})/return pho…

【测试开发学习历程】MySQL分组查询与子查询 + MySQL表的联结操作

目录 1 MySQL分组查询与子查询 1.1 数据分组查询 1.2 过滤分组 1.3 分组结果排序 1.4 select语句中子句的执行顺序 1.5 子查询 2 MySQL表的联结操作 2.1 关系表 2.2 表联结 2.3 笛卡尔积 2.4 内部联结 2.5 外联结 2.6 自联结 2.7 组合查询 1 MySQL分组查询与子查询…

LangChain-Chatchat知识库对话

前言 上次我们完成了Chatchat的本地部署&#xff0c;使用了LLM对话的功能。这次我们尝试一下其他的功能&#xff0c;之前总是有报错没有跑通&#xff0c;这次处理了几个问题之后才跑通了知识库对话和文件对话。 知识库对话 原理: 首先我们看这个图可以明白&#xff0c;知识库…

Redis学习二--常见问题及处理

基本概念 Redis基本概念数据结构 机制 持久化机制&#xff1a; RDB(内存快照)&#xff1a;某一时刻的内存快照以二进制的方式写入磁盘&#xff0c;可以手动触发和自动触发。 优点&#xff1a;生成文件小&#xff0c;恢复速度快&#xff0c;适用于灾难恢复。 缺点&#xff1a…

03-SparkSQL入门

0 Shark Spark 的一个组件&#xff0c;用于大规模数据分析的 SQL 查询引擎。Shark 提供了一种基于 SQL 的交互式查询方式&#xff0c;可以让用户轻松地对大规模数据集进行查询和分析。Shark 基于 Hive 项目&#xff0c;使用 Hive 的元数据存储和查询语法&#xff0c;并基于Hiv…

MySQL5.6.11安装步骤(Windows7 64位)

MySQL5.6.11安装步骤&#xff08;Windows7 64位&#xff09; 1. 下载MySQL Community Server 5.6.21&#xff0c;注意选择系统类型&#xff08;32位/64位&#xff09; 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下。 3. 添加环境变量 变量名&#xff1a;MYS…

【项目设计】基于MVC的负载均衡式的在线OJ

项目代码&#xff08;可直接下载运行&#xff09; 一、项目的相关背景 学习编程的小伙伴&#xff0c;大家对力扣、牛客或其他在线编程的网站一定都不陌生&#xff0c;这些编程网站除了提供了在线编程&#xff0c;还有其他的一些功能。我们这个项目只是做出能够在线编程的功能。…

“低代码+平台”:驱动企业数字化转型与创新的新引擎

“低代码平台”作为一种新兴的软件开发范式&#xff0c;正逐渐成为企业快速响应市场变化、优化业务流程、提升数字化水平的重要手段。它的价值在于&#xff0c;将传统软件开发的复杂性大大降低&#xff0c;赋予了非技术人员或轻量级开发者快速构建应用的能力&#xff0c;并能灵…