计算机组成结构—IO方式

news/2024/7/7 0:56:28

        目录

一、程序查询方式

1. 程序查询基本流程

2. 接口电路

3. 接口工作过程

二、程序中断方式

1. 程序中断基本流程

2. 接口电路

3. I/O 中断处理过程

三、DMA 方式

1. DMA 的概念和特点

2. DMA 与 CPU 的访存冲突

3. DMA 接口的功能

4. DMA 接口的组成

5. DMA 的工作过程

6. DMA 方式和程序中断方式的对比


        I/O 设备与主机交换信息时,对信息传送的控制方式一共有五种:程序查询方式程序中断方式直接存储器存取方式(DMA)、I/O 通道方式、I/O 处理机方式。

        其中,前两种方式都是通过 CPU 中程序指令的执行来控制的。

一、程序查询方式

        程序查询方式是由 CPU 通过程序不断查询 I/O 设备是否已做好准备,从而控制 I/O 设备与主机交换信息。

1. 程序查询基本流程

        采用这种方式实现主机和 I/O 设备交换信息,要求 I/O 接口内设置一个 状态标记,用来反映 I/O 设备是否准备就绪。CPU 通过检测这个标记,就可以了解 I/O 设备的准备情况。

        当 I/O 设备较多时,CPU 就需要按 I/O 设备在系统中的 优先级 进行逐级查询。

        为了完成这个查询的流程,CPU 通常需要执行以下 3 条指令:

  • 测试指令:用来查询 I/O 设备是否准备就绪;

  • 传送指令:当 I/O 设备准备就绪时,执行数据的传送指令;

  • 转移指令:如果 I/O 设备未准备就绪,应执行转移指令;转至测试指令,继续测试 I/O 设备的状态。

        当执行一段程序,需要启动某个 I/O 设备进行数据交互时,就把查询流程插入到运行的程序中。具体的查询流程如下:

① 这种方式传送数据时要占用 CPU 中的寄存器,所以首先要将寄存器原内容保护起来;

② 传送的往往是一批数据,所以需要设置 I/O 设备与主机交换数据的计数值,用来控制数据量;

③ 设置要传送的数据在主存缓冲区的首地址;

④ CPU 启动 I/O 设备;

⑤ 将 I/O 接口中的设备状态标志取至 CPU 并测试 I/O 设备是否准备就绪。如果未准备就绪,则等待,直到准备就绪为止;当准备就绪时,接着可实现传送。

        对输入而言,准备就绪意味着接口电路中的数据缓冲寄存器已装满欲传送的数据,称为 输入缓冲满,CPU 可以取走数据;对输出而言,准备就绪意味着接口电路中的数据已被设备取走,称为 输出缓冲空,这样 CPU 可以再次将数据送到接口,设备则可以再次从接口接收数据。

⑥ CPU 执行 I/O 指令,从 I/O 接口的数据缓冲寄存器中读出一个数据(输入),或者把一个数据写入 I/O 接口中的数据缓冲寄存器内(输出),同时将接口中的状态标志复位;

⑦ 修改主存地址;

⑧ 修改计数值,若原设置计数值为原码,则依次减 1;若原设置计数值为负数的补码,则依次加 1;

⑨ 判断计数值。若计数值不为 0,表示一批数据尚未传送完,重新启动外设继续传送;若计数值为 0,则表示一批数据已传送完毕;

⑩ 结束 I/O 传送,继续执行原程序。


        只要一启动 I/O 设备,CPU 就不断地查询 I/O 设备的准备情况,这就会暂停原程序的执行。当 I/O 设备准备就绪后,就将数据逐个传送;直到数据全部传送结束,CPU 才重新回到原程序继续执行。

        所以在程序查询方式下,CPU 和 I/O 设备是串行工作的,效率不高。

2. 接口电路

        程序查询方式对应的接口电路基本组成如下:

        图中的数据缓冲寄存器用来存放要传送的数据;D 是完成触发器,B 是工作触发器。

3. 接口工作过程

        以输入设备为例,数据应该从 I/O 设备传送至主机。I/O 接口的具体工作过程为:

① CPU 执行 I/O 指令启动输入设备;指令中的设备码字段,通过地址线(设备选择线)送至设备选择电路;

② 如果接口的设备码与地址线上信号相同,设备被选中,输出 SEL 有效;

③ I/O 指令中的启动命令输入,通过与非门将完成触发器 D 置 0(复位),将工作触发器 B 置1(置 位);

④ 工作触发器 B 输出启动信号,启动设备开始工作;

⑤ 输入设备将数据送至数据缓冲寄存器;

⑥ 输入缓冲满,由设备发出工作结束信号,将完成触发器 D 置 1,工作触发器 B 置 0;

⑦ 完成触发器 D 输出 1,通知 CPU “准备就绪”;

⑧ CPU 执行输入指令,将数据缓冲寄存器中的数据取出,送至通用寄存器,再存入主存。

二、程序中断方式

        程序查询方式效率较低,主要原因就是 I/O 设备工作速度较慢,CPU 启动设备后,需要等待一段时间 I/O 设备才能准备就绪、开始信息交换;而 CPU 则耗费了大量时间进行状态查询。

        如果 CPU 在启动 I/O 设备后,继续执行自身的原程序;等到 I/O 设备准备就绪后,主动向 CPU 发出请求再予以响应,就可以大大提升工作效率。这个请求就可以以 I/O 中断 的形式出现。

1. 程序中断基本流程

        上图中,CPU 在执行 I/O 指令启动 I/O 设备之后,继续执行原程序;在执行第 M 条指令时,I/O 设备准备就绪,发来了中断请求,于是 CPU 在第 M 条指令执行结束后进入中断周期,转而执行中断服务程序;等到中断服务程序执行完毕,再返回到程序断点处,继续执行第 M + 1 条指令。

        这种利用 I/O 中断,暂时中断 CPU 现行程序、转入 I/O 服务程序的方式,就称为 程序中断方式

        采用程序中断方式,CPU 就可以不必等待 I/O 设备的准备过程,工作效率得到了明显的提升。不过 CPU 和 I/O 接口需要增加响应的硬件电路,还要编制对应的中断服务程序。

2. 接口电路

        很明显,采用程序中断方式,必须在接口电路中增加中断处理相应的硬件,比如中断请求触发器 INTR、中断屏蔽触发器 MASK、排队器、中断向量地址形成部件等。

        上图中,完成触发器 D 和 屏蔽触发器 MASK 的输出通过与非门连接,产生中断请求信号;并通过排队器判优,交给设备编码器(中断向量地址形成部件)产生向量地址。

3. I/O 中断处理过程

        同样,CPU 响应 I/O 设备提出中断请求的条件,是允许中断触发器 EINT = 1;CPU 响应 I/O 中断请求的时间,是在某条指令执行阶段的结束时刻。

        以输入设备为例,I/O 中断处理的过程为:

① CPU 发出 I/O 设备启动命令,将完成触发器 D 置 0,将完成触发器 B 置 1;

② 工作触发器 B 启动设备,开始工作;

③ 输入设备将数据送至数据缓冲寄存器;

④ 输入缓冲满,设备发出工作结束信号,将完成触发器 D 置 1,完成触发器 B 置 0;

⑤ 指令执行阶段的结束时刻,CPU 发出中断查询信号;

⑥ 当设备准备就绪(D = 1),且未被屏蔽(MASK = 0)时,中断请求触发器 INTR 被置 1,向 CPU 发出 中断请求;同时 INTR 信号送至排队器,进行 中断判优

⑦ 当 EINT = 1(允许中断),而设备又被排队器选中时,进入 中断响应 阶段;CPU 发来的中断响应信号 INTA 将排队器的输出送至编码器,形成向量地址;

⑧ 向量地址送至 PC,作为下一条指令的地址;随后跳转至中断服务程序入口地址,进入 中断服务 阶段;

⑨ 执行中断服务程序,通过输入指令将数据缓冲寄存器的数据取出,送至通用寄存器,再存入主存。

⑩ 中断服务程序最后一条指令是 中断返回 指令,执行结束后返回原程序的断点处。

        这里也可以看出,一次中断处理的过程可以简单分为 中断请求中断判优中断响应中断服务中断返回 5 个阶段。

三、DMA 方式

1. DMA 的概念和特点

        如果 I/O 设备能直接与主存交换信息而不占用 CPU,那么 CPU 的资源利用率就可以进一步提高,这种方式就被称为 直接存储器存取(Direct Memory Access,DMA)。

        DMA 方式的特点是,I/O 设备与主存之间有一条直接数据通路。因此,I/O 设备可以与主存直接交换信息,而不需要调用中断服务程序。这样 ,CPU 就不必暂停现行程序、专门去为设备服务,省去了保护现场和恢复线程的过程;所以工作效率比程序中断方式更高。

        对于 高速 I/O 设备 或者 辅存,如果采用程序中断方式,那么每次与主机进行数据交互时都要等待 CPU 做出中断响应,很可能会造成数据丢失;因此更适合采用 DMA 方式

2. DMA 与 CPU 的访存冲突

        在 DMA 方式中,由于 DMA 接口与 CPU 都可以访问主存,这就有可能出现两者争用主存的冲突。

        I/O 设备请求进行 DMA 传送时,会遇到三种情况:

  • CPU 此时不需要访问主存:这时 I/O 设备与 CPU 不发生冲突;

  • CPU 正在访问主存:这时必须等存取周期结束,CPU 才会将总线占有权让出;

  • CPU 也同时要求访问主存:这就出现了访存冲突。

        发生访存冲突时,I/O 访存要优先于 CPU 的访存,因为 I/O 设备不立即访问主存的话就可能丢失数据。所以一般这时需要 CPU 进行 “让步”。

        为了有效地分时使用主存,通常采用以下三种方法来解决访存冲突:

(1)停止 CPU 访问主存

        这种方法就是 CPU 彻底停止访存、等 I/O 访存结束之后再继续进行。

        当外设要求传送一批数据时,由 DMA 接口向 CPU 发一个停止信号,要求 CPU 放弃地址线、数据线和有关控制线的使用权。DMA 接口获得总线控制权后,开始进行数据传送;数据传送结束后,DMA 接口通知 CPU 可以使用主存,并把总线控制权交回给 CPU。

        这种方式的优缺点如下:

  • 优点:控制简单,适用于数据传输率很高的 I/O 设备,进行成组数据的传送。

  • 缺点:DMA 接口在访问主存时,CPU 基本上处于不工作状态或保持原状态。

        所以这种方式下,CPU 对主存的利用率不高。

(2)周期挪用(或周期窃取)

        如果 I/O设备 发出 DMA 请求时,CPU 并不是完全放弃总线的使用权,而是允许 I/O 设备 “挪用” 或 “窃取” 总线使用权一个或几个主存周期;这种方式就被称为 周期挪用,或 周期窃取。当 DMA 不请求时,CPU 仍可以继续访问主存。

        这就意味着,CPU 在执行访问主存指令过程中,插入了 DMA 请求,那么就会被窃取了若干个存取周期,使CPU 延缓若干存取周期后再访问主存。

        与 CPU 暂停访存的方式相比,这种方式既实现了 I/O 传送,又较好地发挥了主存与 CPU 的效率,是一种广泛采用的方法。

(3)DMA 与 CPU 交替访问

        这种方法就是 DMA 与 CPU 轮流进行访存,平均分配主存的使用时间。

        交替访问的方法适合于 CPU 的工作周期比主存存取周期长的情况。

        例如,CPU 的工作周期是主存存取周期的 2 倍以上,那么可以将一个 CPU 周期分为 C~1~ 和 C~2~ 两个子周期,

        其中 C~1~ 专门进行 CPU 访存,而 C~2~ 专门进行 DMA 访存。

        这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过 C~1~ 和 C~2~ 分别控制的。CPU 与 DMA 接口各自有独立的访存地址寄存器、数据寄存器和读/写信号。

        在这种工作方式下,CPU 既不停止主程序的运行,也不会进入等待状态。当然,其相应的硬件逻辑也会变得更为复杂。

3. DMA 接口的功能

        采用 DMA 方式进行数据传送时,数据的传输过程完全由 DMA 接口电路控制;因此 DMA 接口也被称为 DMA 控制器

        DMA 接口应该具有以下功能:

  • 向 CPU 申请 DMA 传送;

  • 在 CPU 允许 DMA 工作时,处理总线控制权的转交;

  • 在 DMA 期间管理系统总线,控制数据传输;

  • 确定数据传送的起始地址和数据长度,并在传送过程中进行修正;

  • 数据块传送结束时,向 CPU 提交 DMA 操作完成的信号。

4. DMA 接口的组成

        最简单的 DMA 接口组成如下图所示:

        接口中的主要部件有:

  • 主存地址寄存器(AR):用于存放主存中需要交换的数据的地址。DMA 传送数据前,应该将数据在主存中的首地址送至 AR;DMA 传送过程中,每交换一次数据,就将 AR 的内容加 1,直到一批数据传送完毕。

  • 字计数器(WC):用来记录传送数据的总字数。DMA 传送过程中,每传送一个数据字,WC 就减 1(若是补码则 加 1),直到计数器为 0(溢出),就表示这批数据传送完毕;DMA 接口就可以向 CPU 发出中断请求信号了。

  • 设备地址寄存器(DAR):存放 I/O 设备的设备码,或者辅存中的寻址信息。

  • 数据缓冲寄存器(BR):用来暂存每次要传送的数据。

  • DMA 控制逻辑:由控制电路、时序电路、命令状态控制寄存器等组成,负责管理 DMA 的传送过程。每当设备准备好一个数据字,就向 DMA 接口提出请求(DREQ),DMA 控制逻辑就向 CPU 请求 DMA 服务,发出总线使用权的请求信号 HRQ;CPU 发出响应信号 HLDA 后,DMA 控制逻辑就开始负责管理 DMA 传送的全过程,并通知设备已经被授权了一个 DMA 周期(DACK)。

  • 中断机构:用来提出中断请求。当字计数器 WC 溢出(全 0)时,一批数据传送完毕,这个 “溢出信号” 就通过中断机构向 CPU 提出中断请求,由 CPU 做 DMA 操作的后处理。

        需要注意的是,这里和程序中断方式中的中断,都属于 I/O 中断;但中断的目的不同:程序中断方式的中断是为了传送数据,而 DMA 中的中断只是为了报告一批数据传送结束。

5. DMA 的工作过程

        DMA 的数据传送过程可以分为 预处理数据传送后处理 三个阶段。

(1)预处理

        在 DMA 接口开始工作之前,需要先做一些准备工作,由 CPU 给它预置一些信息;这就是 “预处理” 阶段。

  • 告诉 DMA 控制逻辑数据传送的方向,是输入(写主存)还是输出(读主存);

  • 将设备码写入 DMA 设备地址寄存器 DAR,并启动设备;

  • 将交换数据的主存起始地址,写入 DMA 主存地址寄存器 AR;

  • 将交换数据的个数,写入字计数器 WC

        这些准备工作由 CPU 执行几条 I/O 指令完成,也就是程序的初始化阶段。这些工作完成后,CPU 可以继续执行原来的程序。

        当 I/O 设备准备就绪时,就通过 DMA 接口向 CPU 提出占用总线的请求;若有多个 DMA 接口同时申请,就按优先级由 硬件排队判优逻辑 决定响应顺序。

        I/O 设备得到主存总线的控制权后,数据的传送就全部由 DMA 接口进行管理。

(2)数据传送

        DMA 方式是以 数据块 为单位进行数据传送的。

        这里以周期挪用的 DMA 方式为例,对于数据输入的场景,数据传送的流程如下:

① 当设备准备好一个数据字时,发出选通信号,将该字读到数据缓冲寄存器(BR)中,表示数据缓冲寄存器 “满”;

② 与此同时,设备向 DMA 接口发出请求(DREQ);

③ DMA 接口向 CPU 申请总线控制权(HRQ);

④ CPU 发回应答信号 HLDA,表示允许将总线控制权交给 DMA 接口;

⑤ 将主存地址寄存器 AR 中的主存地址,送至地址总线,并向主存发出写命令;

⑥ 通知设备已被授予一个 DMA 周期(DACK),并为交换下一个字做准备;

⑦ 将数据缓冲寄存器 DAR 的内容,送至数据总线;

⑧ 主存将数据总线上的信息,写至地址总线指定的存储单元中;

⑨ 修改 AR 中的主存地址和字计数值 WC。

⑩ 判断数据块是否传送结束,如果没有结束则继续传送;如果已结束(字计数器溢出),则向 CPU 发出程序中断请求,标志数据块传送结束。

        若为输出数据,整体步骤类似,主要的不同就是:

  • 第 ① 步需要将 BR 中的数据送至 I/O 设备,表示 BR 已 “空”;

  • 第 ⑤ 步需要向主存发出读命令;

  • 第 ⑦ ⑧ 步,是将主存相应存储单元的内容,通过数据总线写入 BR,并送至输出设备;

(3)后处理

        当 DMA 的中断请求得到响应后,CPU 停止原程序的执行,转而去执行中断服务程序,做一些 DMA 的结束工作,这就是 “后处理” 阶段。

        DMA 的结束阶段工作主要包括:

  • 校验送入主存的数据是否正确;

  • 决定是否继续用 DMA 传送其他数据块。若继续传送,则又要对 DMA 接口进行初始化;若不需要传送,则停止外设;

  • 测试在传送过程中是否发生错误;如果出错,则转错误诊断及处理程序。

6. DMA 方式和程序中断方式的对比

        DMA 方式和程序中断方式是 I/O 设备最为常见的信息传送控制方式。两者都用到了中断,但中断的目的不同:程序中断方式的中断是为了传送数据,而 DMA 中的中断只是为了报告一批数据传送结束;而且中断的优先级上,DMA 中断的优先级更高。


http://lihuaxi.xjx100.cn/news/2196320.html

相关文章

Docker基础篇之Docker常规软件安装

文章目录 1. 总体步骤2. 安装tomcat3. 安装Mysql4. 安装Redis 1. 总体步骤 安装软件的总体步骤如下所示: 搜索镜像拉取镜像查看镜像启动镜像停止容器移除容器 2. 安装tomcat docker hub上查找tomcat镜像 或者使用一下命令查找: docker search tomca…

加密经济浪潮:探索Web3对金融体系的颠覆

随着区块链技术的快速发展,加密经济正在成为全球金融领域的一股新的浪潮。而Web3作为下一代互联网的代表,以其去中心化、可编程的特性,正深刻影响着传统金融体系的格局和运作方式。本文将深入探讨加密经济对金融体系的颠覆,探索We…

JavaScript的核心语法

JavaScript JavaScript:JavaScript的组成:核心语法:Hello:变量:JS的基本数据类型:特殊点: 数组:流程控制语句:函数:函数的重载:函数的递归:预定义…

C++ AVL树 详细讲解

目录 一、AVL树的概念 二、AVL树的实现 1.AVL树节点的定义 2.AVL树的插入 3.AVL树的旋转 4.AVL树的验证 三、AVL树的性能 四、完结撒❀ 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率,但 如果数据有序或接近有序二叉搜索树将退化为单支树,查 …

Alsa UCM

Alsa Use Case Manager(用例管理器)描述如何为某些用例(如 “播放音频”、“通话”)设置 mixer 混频器。它还描述如何修改 mixer 混频器状态以将音频路由到某些输出和输入,以及如何控制这些设备。 这基本上涵盖了 Pul…

Python | 开房门(map)

常把map称之为映射,就是将一个元素(通常称之为key键)与一个相对应的值(通常称之为value)关联起来 通常用**字典dict**实现了映射这种数据结构 字典也是使用{}来包裹(set也是{}),每…

5 分钟内构建一个简单的基于 Python 的 GAN

文章目录 一、说明二、代码三、训练四、后记 一、说明 生成对抗网络(GAN)因其能力而在学术界引起轩然大波。机器能够创作出新颖、富有灵感的作品,这让每个人都感到敬畏和恐惧。因此,人们开始好奇,如何构建一个这样的网…

YOLOv8---seg实例分割(制作数据集,训练模型,预测结果)

YOLOv8----seg实例分割(制作数据集,训练模型,预测结果) 内容如下:【需要软件及工具:pycharm、labelme、anaconda、云主机(跑训练)】 1.制作自己的数据集 2.在yolo的预训练模型的基础…