计算机组成结构—IO方式

        目录

一、程序查询方式

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://www.rhkb.cn/news/344261.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

先求生存,再谋发展:俞敏洪的创业哲学与产品创新之路

引言: 在创业的道路上,每一个创业者都面临着无数的挑战和选择。俞敏洪,新东方教育科技集团的创始人,以其独特的创业哲学和坚韧不拔的精神,带领新东方从一个小小的培训机构成长为全球知名的教育品牌。他的成功经验告诉…

AndroidStudio无法识别连接夜神模拟器

方法一(无法从根本上解决) ①进入夜神模拟器安装路径下的bin路径(安装路径可以带有中文路径) ②打开cmd窗口,输入以下代码(一定要打开模拟器) nox_adb.exe connect 127.0.0.1:62001 方法二(根本上解决) 原因:Android Studio的adb版本与夜神模拟器的adb版本不一致 ①打开And…

突发!凌晨4点某制造业大厂国产数据库集群故障...

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

【C/C++】IO流

目录 前言: 一,C语言的I/O流 二,C的I/O流 2-1,C标准IO流 2-2,IO流的连续输入 前言: “流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据…

新品发布 | 飞凌嵌入式RK3576核心板,为AIoT应用赋能

为了充分满足AIoT市场对高性能、高算力和低功耗主控日益增长的需求,飞凌嵌入式全新推出基于Rockchip RK3576处理器开发设计的FET3576-C核心板! 集成4个ARM Cortex-A72和4个ARM Cortex-A53高性能核,内置6TOPS超强算力NPU,为您的AI…

【RK3568】制作Android11开机动画

Android 开机 logo 分为两种:静态显示和动态显示。静态显示就是循环显示一张图片;动态显示就是以特定帧率顺序显示多张图片 1.准备 android logo 图片 Android logo最好是png格式的,因为同一张图片的情况下,png 格式的比 jpg和b…

海思SS928(SD3403)部署YOLOv5-YOLOv7步骤详解

1. YOLO模型资料 本文档内容以yolov5-7.0工程、yolov5s模型为例。 a. 模型结构 详细的模型结构可以利用netron工具打开.pt或.onnx模型查看。 b. 模型参数即验证结果 其中,YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x为五种类型的预训练模型,其包含的检测类别相…

呆滞物料规范管理了,问题就好办了

对于制造企业来说,库存是生存和发展的重要保障,过高的库存会占用企业大量的资金和管理成本,影响企业的正常生产,然而多数中小制造企业还在用人工干预管理,如何控制呆滞物料成为仓储管理的一大难题。 什么是呆滞料&…

Django 创建项目及应用

1,安装 Django pip install Django3.1.5 2,创建 Django项目 django-admin startproject myshop 3,创建 Django应用 python manage.py startapp app1 4,启动 Django项目 python .\manage.py runserver 到这里项目及应用创建…

Redis中的主从复制

分布式系统中的几种Redis部署方式 为了解决一个程序只部署在一个服务器上的单点问题: 可用性问题,如果这个机器挂了,就意味着服务就中断了 一个程序只部署在一台机器上,它的性能/支持的并发量也是有限的 所以,就引…

型号FM152A,FM148R和利时

型号FM152A,FM148R和利时。控制系统的仿真,综合考虑多方面的因素,本文将用MCGS组态软件设计一个仿真实验监控平台来对其进行实时控制.,完成仿真实验监控平台的设计,型号FM152A,FM148R和利时。最终达到对水箱液位实时监控,实验数据采集,报表的输出和数据的同步显示MC…

PDF分页处理:技术与实践

引言 在数字化办公和学习中,PDF文件因其便携性和格式稳定性而广受欢迎。然而,处理大型PDF文件时,我们经常需要将其拆分成单独的页面,以便于管理和分享。本文将探讨如何使用Python编程语言和一些流行的库来实现PDF文件的分页处理。…

设置电脑定时关机

1.使用快捷键winR 打开运行界面 2.输入cmd ,点击确认,打开命令行窗口,输入 shutdown -s -t 100,回车执行命令,自动关机设置成功 shutdown: 这是主命令,用于执行关闭或重启操作。-s: 这个参数用于指定执行关…

C++ DFS

子集 78. 子集 法一:思路对每个元素进行选与不选的 选择,这样正好到最后一层 就是2的size()次方个,叶子就是节点,通过pos来控制深度 法二:通过for循环实现,且下一个栈帧的i是上一个栈帧当前元素的下一个位…

【上篇】从 YOLOv1 到 YOLOv8 的 YOLO 物体检测模型历史

YOLO 型号之所以闻名遐迩,主要有两个原因:其速度和准确性令人印象深刻,而且能够快速、可靠地检测图像中的物体。 在本文中,我将与大家分享我在阅读一篇长达 30 页的综合性论文时获得的见解,该论文深入探讨了 YOLO 模型的进步。 这篇评论全面概述了 YOLO 框架的演变过程,…

PDF转图片工具

背景: 今天有个朋友找我:“我有个文件需要更改,但是文档是PDF的,需要你帮我改下内容,你是搞软件的,这个对你应该是轻车熟路了吧,帮我弄弄吧”,听到这话我本想反驳,我是开…

PVE管理虚拟机节点

今天使用PVE命令安装虚拟机。 ‍ 查看所有虚拟机 qm list 查看所有虚拟机 ​​ 创建虚拟机 qm create 创建虚拟机 qm create 106 --name vm-test --memory 2048 --net0 virtio,bridgevmbr0基础配置 这条命令会创建一个 VM,ID 为 106​,名称为 myvm​…

Huawei 大型 WLAN 组网 AC 间漫游

AC1配置命令 <AC6005>display current-configuration # vlan batch 100 # interface Vlanif100description to_S3_CAPWAPip address 10.0.100.254 255.255.255.0 # interface GigabitEthernet0/0/1port link-type trunkport trunk allow-pass vlan 100# ip route-stati…

前端开发高频面试题

好的&#xff0c;以下是对您提出的问题的详细回答&#xff1a; 说说vue动态权限绑定渲染列表&#xff08;权限列表渲染&#xff09; Vue中动态权限绑定渲染列表通常涉及以下步骤&#xff1a; 首先&#xff0c;通过API请求从服务器获取当前用户的权限数据。在Vue组件中&#xff…

UR机器人通信汇总

文章目录 一、概述二、UR机器人通信2.1UR通信协议2.2 UR通信端口 三、UR机器人通信端口类型3.1 Modbus TCP端口&#xff08;502端口&#xff09;3.2 Dashboard端口&#xff08;29999端口&#xff09;3.3 上位机编程端口&#xff08;30001/30002/30003端口&#xff09;3.3.1 URS…