从计组和操作系统详解IO控制方式

2023-11-13

IO控制方式

实际上IO在操作系统和计组里面都有讲到,这两个内容各有侧重,又有很大的重合,这里就整理一下。

操作系统里面就讲了一下基本的过程,计组还讲了各个接口电路。

1、直接程序控制方式

直接程序控制方式由用户进程直接控制主存或 CPU 和外围设备之间的信息传送。**直接程序控制方式又称为询问方式,或忙/等待方式。**通过 I/O 指令或询问指令测试 I/O 设备的忙/闲标志位,决定主存与外围设备之间是否交换一个字符或一个字。

直接程序控制方式的工作流程如下:

  • ① 当用户进程需要输入数据时,通过 CPU 向控制器发出一条 I/O 指令,启动设备输入数据,同时把状态寄存器中的忙/闲状态 busy 置为1
  • ② 用户进程进入测试等待状态,在等待过程中,CPU 不断地用一条测试指令检查外围设备状态寄存器中的 busy 位,而外围设备只有在数据传入控制器的数据寄存器之后,才将该 busy 位置为0,。
  • ③ 处理器将数据寄存器中的数据取出,送入主存指定单元,完成一个字符的I/O操作,接着进行下一个数据的 I/O 操作

总而言之:就是会有一个IO控制进程,CPU会一直陷入在询问的循环中,一直等待着IO设备准备号数据。

直接程序控制方式虽然简单,不需要多少硬件的支持,但由于高速的 CPU 和低速的 I/O 设备之间的速度上不匹配,因此,CPU 与外围设备只能串行工作,使 CPU 的绝大部分时间都处于等待是否完成 I/O 操作的循环测试中,造成 CPU 的极大浪费,外围设备也不能得到合理的使用,整个系统的效率很低。因此,这种I/O控制方式只适合于 CPU 执行速度较慢,且外围设备较少的系统。

2、中断驱动控制方式

IO设备的中断请求引发CPU的外中断。

为了减少程序直接控制方式下 CPU 的等待时间以及提高系统的并行程度,系统引入了中断机制。中断机制引入后,外围设备仅当操作正常结束或异常结束时才向 CPU 发出中断请求。

在 I/O 设备输入每个数据的过程中,由于无需 CPU 的干预,一定程度上实现了 CPU 与 I/O设备的并行工作。仅当输入或输出完一个数据时,才需 CPU 花费极短的时间做中断处理。

这里参照的文章没有写清楚,实际上IO中断时这样的,首先CPU先是要发生一个中断去启动我们的IO设备,之后我们就认为设备时一直开启的了。然后CPU就继续干自己的事情,同时设备也在干自己的事情。也就是说,IO设备准备数据是不关CPU的事情的,当IO设备数据准备完成以后,才会发出中断请求,要求CPU处理IO设备这边准备好的数据(进入中断处理程序,但是很多时候就是要求CPU访存把数据存进去)。

(中断的详细流程就不细讲了,留给中断那里吧)

存在的问题:由于I/O操作直接由 CPU 控制,每传送一个字符或一个字,都要发生一次中断,仍然占用了大量的 CPU 处理时间,因此可以通过为外围设备增加缓冲寄存器存放数据来减少中断次数。(数据准备过程的暂存是可以)

上述两种方法的特点都是以 CPU 为中心,数据传送通过一段程序来实现,软件的传送手段限制了数据传送的速度。

3.直接存储器访问控制方式

直接存储器访问控制方式又称 DMA(Direct Memory Access)方式。为了进一步减少 CPU 对 I/O 操作的干预,防止因并行操作设备过多使 CPU 来不及处理或因速度不匹配而造成的数据丢失现象,引入了 DMA 控制方式。在 DMA 控制器的控制下,采用窃取或挪用总线控制权,在设备和主存之间开辟直接数据交换通道,成批地交换数据,而不必让 CPU 干预。

最重要的就是开辟了DMA通路,IO设备不再借道CPU再存入内存了。

实际上我一直喜欢加上DMA通道,但是这里的DMA还没有通道,所以改口了。

DMA方式的特点:

  • 数据传送以数据块为基本单位,一开始CPU就规划好了存到内存哪个块
  • ② 所传送的数据从设备直接送入主存,或者从主存直接输出到设备上。
  • ③ 仅在传送一个或多个数据块的开始和结束时才需 CPU 的干预,而整块数据的传送则是在控制器的控制下完成。
    • 也就是DMA方式需要CPU给出我们数据是存到内存的哪里,只能是一段连续的空间,再最开始就要预测完成。

DMA方式和中断驱动控制方式相比,减少了 CPU 对 I/O 操作的干预,进一步提高了 CPU 与 I/O 设备的并行操作程度。

DMA方式的线路简单、价格低廉,适合高速设备与主存之间的成批数据传送,小型、微型机中的快速设备均采用这种方式,但其功能较差,不能满足复杂的 I/O 要求。

DMA通路使用的三种方式

首先为什么要考虑这个,这个的问题就是主存一次只能有一个设备进行访问,DMA跟CPU都要直接跟主存交互,那么我们要怎么分配。

  1. 停止CPU访问主存
    1. 这个很暴力了,DMA会跟CPU发一个信号,叫CPU停下来。
  2. 周期窃取
    1. 实际上是总线占用权以及主存周期
    2. 当IO发出DMA请求,就停下几个主存周期CPU占用主存(没有中断)
  3. 交替访问
    1. 这个一般要CPU指令(书上是工作,但是我觉得是指令)周期比主存存储周期长,一个工作周期里面会有不访存的,不访存的那部分就固定给DMA了。

DMA接口组成

只能说计组这个地方是真的比操作系统细很多了。

name
AR(MAR) 老熟人了,内存地址寄存器 CPU激活DMA方式的时候必须先指定存放的内存首地址
WC 字计数器 用来记录一共存了多少字,CPU激活时设置,一直递减(是指数值上的,因为可能是补码),到0的时候触发中断。
BR 数据缓冲寄存器 这个就不用多说了
DMA控制逻辑 一个是负责向CPU申请初始化,一个是后面的所有过程都由它负责,接口的寄存器修改、取址、设备信号识别与发出。
中断机构 负责中断信号的发出
DAR设备地址寄存器 针对IO设备信息的寄存器,因为我们也要对IO设备做选择。 设备号、设备存储器的信息。(特别注意外存也是IO设备,所以磁盘数据地址可能会存这里)

4、通道控制方式

总结一句话:通道也是一个处理器,CPU把IO设备与内存交互的管理工作(管理程序首地址+IO设备号)下发给通道,这个管理工作在内存中由通道程序进行描述。

虽然DMA方式比起中断方式来已经显著地减少了CPU的干预,即已由以字(节)为单位的干预减少到以数据块为单位的干预。**但CPU每发出一条I/O指令,也只能去读/写一个连续的数据块。**而当我们需要一次去读多个数据块且将它们分别传送到不同的内存区域,或者相反时,则需由CPU分别发出多条I/O指令及进行多次中断处理才能完成。

通道控制方式,实现了CPU、通道和I/O设备三者的并行操作,从而更加有效地提高整个系统的资源利用率。例如,当 CPU 要完成一组相关的读(或写)操作时,只需要向 I/O 通道发出一条 I/O 指令,指出其所要执行的通道程序的首址和要访问的I/O设备,通道接收到该指令后,通过执行通道程序便可完成 CPU 指定的 I/O 任务。可见,通道只是在 I/O 操作的起始和结束时向 CPU 发出 I/O 中断申请,相对于之前的控制方式进一步减少了 CPU 的干预程度。

1、通道控制方式的引入

通道控制方式与DMA控制方式类似,也是一种以内存为中心,实现设备与内存直接交换数据的控制方式。

与DMA控制方式相比,通道方式所需要的CPU干预更少,而且可以做到一个通道控制多台设备,从而进一步减轻了CPU负担。

通道本质上是一个简单的处理器,专门负责输入、输出控制,具有执行I/O指令的能力,并通过执行通道I/O程序来控制I/O操作。

  • 通道,独立于 CPU 的专门负责输入输出控制的处理机,它控制设备与内存直接进行数据交换。有自己的通道指令,这些指令由 CPU 启动,并在操作结束时向 CPU 发出中断信号。

通道的指令系统比较简单,一般只有数据传送指令、设备控制指令等。

I/O通道控制方式是对DMA控制方式的发展,它进一步使CPU参与到数据传输的控制减少,即把对一个数据块的读/写为单位的干预,减少为对一组数据块的读/写及有关的控制和管理为单位的干预。同时,又可实现CPU、通道和I/O设备的并行操作,从而更有效地提高整个系统的资源利用率。在通道控制方式中,CPU只需发出启动指令,指出要求通道执行的操作和使用的I/O设备,该指令就可以启动通道并使该通道从内存中调出相应的通道程序执行。

以数据输入为例:当用户进程需要数据时,**CPU发出启动指令指明要执行的I/O操作、所使用的设备和通道。**当对应通道接收到CPU发来的启动指令后,把存放在内存中的通道程序读出,并执行通道程序,控制设备将数据传送到内存中指定的区域。在设备进行输入的同时,CPU可以去做其他工作。**当数据传送结束时,设备控制器向CPU发送一个中断请求。**CPU收到中断请求后转中断处理程序执行,中断结束后返回被中断程序。

  • 优点:通道控制方式解决了I/O操作的独立性和各部件工作的并行性。把CPU从繁琐的输入/输出操作中解放出来。采用通道技术后,不仅能实现CPU和通道的并行操作,而且通道与通道之间也能实现并行操作,各通道上的外设也能实现并行操作,从而可提高整个系统的效率。
  • 缺点:由于需要更多硬件(通道处理器),因此其成本较高。通道控制方式通常应用于大型数据交互的场合。

直接程序控制方式和中断程序控制方式适合于低速设备的数据传送,而 DMA 方式虽然适合于高速设备的数据传送,但一个 DMA 控制器只能控制少量的同类设备,这远远不能满足大型计算机系统的需要。通常,一个大型计算机需要连接大量的高速和低速设备,通道控制方式可以满足这个要求。(DMA和通道控制方式的主要区别——能否满足大型计算机系统的既能处理高速设备又能处理低速设备的需要)

2、通道程序

通道是通过执行通道程序,并与设备控制器共同实现对I/O设备的控制的。通道程序是由一系列通道指令所构成的。通道指令和一般的机器

指令不同,在它的每条指令中都包含下列诸信息:

  • 1)操作码。操作码规定了指令所执行的操作,如读、写、控制等操作。
  • 2)内存地址。内存地址标明字符送入内存(读操作)和从内存取出(写操作)时的内存首址。
  • 3)计数。该信息表示本条指令所要读/写数据的字节数。
  • 4)通道程序结束位P。该位用于表示通道程序是否结束。P=1表示本条指令是通道程序的最后一条指令。
  • 5)记录结束标志R。R=0表示本通道指令与下一条指令所处理的数据是同属于一个记录;R=1表示这是处理某记录的最后一条指令。

通道控制方式与DMA控制方式的区别:

  • 1)DMA控制方式中需要CPU来控制所传输数据块的大小,传输的内存地址;通道控制方式中这些信息都是由通道来控制管理的。
  • 2)一个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换。

I/O通道与一般处理器的区别:I/O通道的指令类型单一,其所能执行的命令主要局限于与I/O操作有关的指令;通道没有自己的内存,通道所执行的通道程序放在主机的内存中,也就是说通道是与CPU共享内存的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从计组和操作系统详解IO控制方式 的相关文章

随机推荐

  • JAVA的类加载机制

    类加载机制 参考 https blog csdn net zhangliangzi article details 51319033 https www jianshu com p 3556a6cca7e5 https blog csdn
  • 以promise方式调用微信小程序的api

    仅仅适用于部分API需要用到promise方式调用 封装一个方法如下 export const promisify method options gt return new Promise resolve reject gt 将option
  • 用c语言编写lr(1)文法,C语言编写源程序建立LR(1)分析器.pdf

    目 录 前 言2 用C语言编写源程序建立LR 1 分析器3 一 设计目的 要求 算法与设计思想3 1 设计内容3 2 设计要求3 3 设计的基本原理3 1 CLOSURE I 的构造3 2 GO I X 的构造3 3 FIRST集合的构造4
  • Android屏幕适配全攻略(最权威的官方适配指导)

    转载请注明出处 http blog csdn net zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者 本篇文章以Google的官方文档为基础 全面而深入的讲解了Android屏幕适配的原因 重要概
  • Java for Web学习笔记(五九):Controller替代Servlet(1)请求匹配

    URL匹配 书写方式 是对DispatcherServlet所匹配的URL进行二次匹配 本例DispatcherServelt的servlet mapping中
  • Echarts隐藏坐标轴

    xAxis show false 不显示坐标轴线 坐标轴刻度线和坐标轴上的文字 axisTick show false 不显示坐标轴刻度线 axisLine show false 不显示坐标轴线 axisLabel show false 不
  • GNU许可证常见问题

    最新在学习开源软件 开源软件的组成最重要的一个就是license 及许可证 开源License在法律上赋予用户相关权利和义务 任何开源应用行为都必须围绕此 游戏规则 进行 其中重点学习了GUN GPL的许可证 本地记录下一个重要的网站 方便
  • 数据库出错提示Duplicate entry * for key *的解决方法

    错误编号 1062 错误提示 查询语句错误 1062 ERR Duplicate entry 16777215 for key PRIMARY SQL INSERT INTO forum attachment SET tid 0 pid 0
  • 揭秘Kaggle神器xgboost

    在 Kaggle 的很多比赛中 我们可以看到很多 winner 喜欢用 xgboost 而且获得非常好的表现 今天就来看看 xgboost 到底是什么以及如何应用 本文结构 什么是 xgboost 为什么要用它 怎么应用 学习资源 什么是
  • CROSS使用说明书 发行和拍卖NFT完整攻略

    鉴于目前去中心化NFT发行和拍卖平台CROSS是英文版本 对部分中国区用户存在操作困难 为了方便投资者和NFT爱好者能及时了解CROSS的相关信息和使用流程 现在CyberVein推出了更加详细的CROSS完整版教程 若还存有疑问 可添加中
  • windows7虚拟拔号服务器,ADSL采用虚拟拨号上网,使用Windows 7如何设置PPPoE宽带连接...

    今天介绍ADSL采用虚拟拨号上网 使用Windows 7操作系统如何设置PPPoE宽带连接 连接网络的方式有很多 现在小伙伴们上网使用的连接方式主要有以下几种 ADSL宽带上网 小区宽带上网 无线局域上网和无线移动上网 其中ADSL宽带上网
  • 使用Python实现二分查找算法及其应用场景详解

    引言 二分查找是一种常用的搜索算法 它可以在有序数组中高效地查找指定元素 本文将详细介绍二分查找算法的原理 实现方法 并探讨其在实际应用场景中的使用 通过深入了解二分查找算法 你将能够更好地理解它的工作原理并灵活应用于各种问题中 目录 引言
  • 像打王者荣耀一样的学习/工作?(转)

    https blog csdn net dataiyangu article details 97544551 depth 1 utm source distribute pc feed none task blog alirecmd 2
  • GET和POST的区别,java模拟postman发post

    题解 空心正方形图案 include
  • MFC对话框中屏蔽Enter键与ESC键

    文章内容无意义 存档用 MFC对话框应用程序中 按下回车键或者ESC键 对话框会自动关闭 原因在于 当用户按下Enter键时 Windows就会自动去查找 输入焦点 落在了哪一个按钮上 获得焦点的按钮的四周将被点线矩形框所包围 如果所有按钮
  • 关于hexo的笔记 以及 常见问题

    在 Hexo 中有两份主要的配置文件 其名称都是 config yml 其中 一份位于站点根目录下 blog config yml 主要包含 Hexo 本身的配置 另一份位于主题目录下 blog themes next config yml
  • 程序员的算法课(15)-分治法获取文件中出现频次最高100词

    一 问题描述 这个问题在大数据面试中容易出现 问题如下 有一个1G大小的一个文件 里面每一行是一个词 词的大小不超过16字节 内存限制大小是1M 要求返回频数最高的100个词 二 思路 此处1G文件远远大于1M内存 分治法 先hash映射把
  • sp3585调试

    最近在调试sp3485目前已调试成功 后续把调试过程补全
  • 用Python获取链家二手房房源数据,做可视化图分析数据

    前言 数据采集的步骤是固定 发送请求 模拟浏览器对于url地址发送请求 获取数据 获取网页数据内容 gt 请求那个链接地址 返回服务器响应数据 解析数据 提取我们需要的数据内容 保存数据 保存本地文件 所需模块 win R 输入cmd 输入
  • 从计组和操作系统详解IO控制方式

    IO控制方式 实际上IO在操作系统和计组里面都有讲到 这两个内容各有侧重 又有很大的重合 这里就整理一下 操作系统里面就讲了一下基本的过程 计组还讲了各个接口电路 1 直接程序控制方式 直接程序控制方式由用户进程直接控制主存或 CPU 和外