I/O控制方式

在前面我们已经了解到,每个设备都配备了一个设备控制器。当CPU向设备控制器发送命令并将其存储在寄存器中时,设备控制器会执行相应的操作。然而,尽管设备控制器会更新状态寄存器的状态,但是如何将这些信息传达给CPU呢?

在设备控制器的寄存器中,通常会有一个状态标志位,用于指示输入或输出操作是否完成。因此,我们可以考虑第一种简单的方法,即轮询等待的方式,让CPU一直检查寄存器的状态,直到状态标志位被设置为完成。然而,显然这种方式非常低效,它会占用CPU的全部时间。

除了轮询等待的方式,还有一种更高效的方法是采用异步通知。这种方式需要一个中间人来进行通知,即中断控制器,它负责向CPU发送中断信号。当设备控制器完成操作后,会触发中断信号发送到中断控制器,然后中断控制器通过通知CPU来暂停当前的处理逻辑,以处理中断。这种方式能够有效地利用CPU的时间,提高系统的响应速度和效率。

中断可以分为软中断和硬中断两种形式。软中断可以由程序或操作系统主动触发,而硬中断则是由硬件通过中断控制器触发的,例如鼠标等外部设备。是由硬件设备发出的信号,通知系统进行相应的处理。中断的使用可以大大提高系统的并发性和响应能力,使得CPU能够更加高效地处理多个任务。

中断虽然是一种优化方法,但它也存在一个不足之处,就是会打断CPU当前的工作。特别是在需要进行耗时的操作,例如从磁盘读取数据到内存的IO操作,CPU会被占用大量的时间,导致无法同时处理其他任务。对于这种情况,我们可以借助DMA(直接内存访问)控制器来解决这个问题。

DMA控制器是在学习Java零拷贝技术时经常提到的一个概念。它的作用是让设备在没有CPU参与的情况下,能够自行将设备的输入/输出数据传输到内存中。要实现DMA功能,需要有硬件上的支持,即DMA控制器。那么我们来看看DMA是如何帮CPU解决问题的。

DMA 的工作方式如下:

首先,CPU向DMA控制器发送指令,告知需要读取的内容以及存储数据的内存地址。

接着,DMA控制器代替CPU与磁盘控制器通信,向磁盘控制器发送读取数据的命令。当磁盘控制器将数据缓冲区填满后,它会将数据传输到指定的内存地址。

一旦磁盘控制器完成将数据传输到内存的操作,它会通过总线向DMA控制器发送一个确认成功的信号。

当DMA控制器接收到确认信号后,它会发送中断通知给CPU,告知数据传输已经完成。

此时,CPU可以直接从内存中读取数据,而无需额外的操作。可以看出,在CPU需要读取磁盘数据时,只需向DMA控制器发送指令,然后CPU可以继续执行其他任务。当磁盘数据被拷贝到内存后,DMA控制器通过中断的方式通知CPU数据已经准备就绪,可以直接从内存中读取。因此,除了在传输开始和结束时需要CPU的干预外,CPU的参与度较低。这样可以极大地提高系统的并发性和响应能力。

有人可能会质疑:为什么DMA的效率比中断高呢?磁盘控制器完成读取后只需向CPU发送一个中断,DMA完成后也需要发送一个中断,所以它们不是一样的吗?只是DMA直接将数据读取到内存中了?

其实中断方式的控制模式是这样的:硬件每准备好一段数据(存放在自己的内部缓冲区中),就向CPU发送一个中断信号;CPU接收到中断信号后,会停止当前的工作,并将硬件缓冲区的每个字符逐个读取到自己的寄存器中,然后将每个字符逐个写入内存。之后,其他应用可以通过系统调用将内存中的数据取出进行进一步处理。

而DMA方式是这样的:硬件先准备好若干数据,并将其存放在自己的缓冲区(比如网卡板载的内存芯片)。然后,硬件向CPU发送一个中断信号,表示有一定量的数据要提交。CPU发现硬件支持DMA,就向硬件发送通知——将数据存放在内存的特定地址范围内,然后让硬件自行处理。

之后,CPU不再理会这个硬件,而是让硬件通过自己线路板上的简单处理器,逐个字节地将缓冲区中的数据写入指定的内存位置。需要注意的是,在DMA方式下,内存的内容是由硬件自己维护的,CPU不再参与。这样,当硬件自行搬运缓冲区数据时,CPU可以继续处理自己的任务,提高了系统的并发性和响应能力。

设备驱动程序

尽管设备控制器屏蔽了设备的诸多细节,但每种设备控制器都具有独特的寄存器、缓冲区等使用模式。因此,为了有效屏蔽设备控制器之间的差异,操作系统引入了设备驱动程序。通过设备驱动程序,操作系统能够统一管理不同设备控制器的操作,使其在各种设备上都能正常工作。

设备控制器作为硬件的一部分,并不属于操作系统的范畴。然而,设备驱动程序则是操作系统的一部分,它提供了一个接口,使得操作系统的内核代码可以像本地调用代码一样使用设备驱动程序。设备驱动程序是专门针对设备控制器编写的代码,它发出指令来操作设备控制器,从而实现对设备的操控。通过设备驱动程序,操作系统能够与设备控制器进行有效的通信,并实现对设备的控制和管理。

尽管不同的设备控制器具有不同的功能,但设备驱动程序会提供一个统一的接口给操作系统,这样不同的设备驱动程序就可以以相同的方式接入操作系统。下图展示:

在前面的讨论中,我们提到了中断的重要性。当设备完成了任务时,它会发送一个中断信号来通知操作系统。操作系统需要有一个地方来处理这个中断,而这个地方就是设备驱动程序。设备驱动程序会及时响应控制器发来的中断请求,并根据中断的类型调用相应的中断处理程序来进行处理。

当设备驱动程序初始化时,通常会注册一个与该设备相关的中断处理函数。中断处理程序的处理流程如下:当设备控制器触发中断并通知中断控制器后,中断控制器会向CPU发出中断请求,CPU会停止当前进程的执行并保存当前进程的上下文。接着,CPU会调用相应的中断处理函数来处理该中断。中断处理函数完成后,CPU会恢复之前保存的进程上下文,并继续执行被中断的进程。

总结

在本文中,我们总结了关于I/O控制方式的内容。首先,我们介绍了轮询等待和异步通知两种基本的I/O控制方式。轮询等待方式效率低下,会占用CPU的全部时间,而异步通知方式通过中断控制器来通知CPU,能够有效提高系统的响应速度和效率。

接着,我们介绍了中断的使用和分类。中断可以分为软中断和硬中断两种形式,它们能够大大提高系统的并发性和响应能力。然而,中断也存在一个问题,即会打断CPU当前的工作,导致无法同时处理其他任务。

为了解决这个问题,我们引入了DMA(直接内存访问)控制器。DMA控制器能够让设备在没有CPU参与的情况下,自行将设备的输入/输出数据传输到内存中,从而减少CPU的参与度,提高系统的并发性和响应能力。

最后,我们介绍了设备驱动程序的作用和重要性。设备驱动程序是操作系统的一部分,它提供了一个接口,使得操作系统能够统一管理不同设备控制器的操作。设备驱动程序还负责处理设备触发的中断请求,并调用相应的中断处理程序来进行处理。

探索计算机的I/O控制方式:了解DMA控制器的作用与优势的更多相关文章

  1. I/O控制方式

    I/O控制方式 在计算机系统中,CPU管理外围设备也有几种类似的方式: 1 程序查询方式 程序查询方式是早期计算机中使用的一种方式.数据在CPU和外围设备之间的传送完全靠计算机程序控制,查询方式的优点 ...

  2. 操作系统-I/O(4)I/O控制方式

    I/O控制的方式分为: 程序直接控制方式(最简单的I/O方式)                   •    无条件传送:对简单外设定时(同步)进行数据传送                   •   ...

  3. ZeroMQ接口函数之 :zmq_proxy_steerable – 以STOP/RESUME/TERMINATE控制方式开启内置的ZMQ代理

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...

  4. JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作

    1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...

  5. JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理

    1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ...

  6. RobotFrameWork接口项目分层及通用控制方式

    1. 前言 上一篇文章介绍了在设计接口用例之前应遵守的设计规范,详见<RobotFramework接口设计规范>,当然读者公司的内部规范也不一定非得完全遵循笔者所提到的,适合自己公司内部的 ...

  7. Android——UI和View——控制方式

    控制方式 只用xml实现 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...

  8. I/O的控制方式——查询,中断,dma(转)

    早期,I/O串行,查询方式.发展,I/O并行,两种方式其一是中断方式,其二是dma方式,使得外部设备能直接与主存储器信息交换,减轻了cpu的工作量.技术继续发展,出现通道结构,实质上为高性能的dma控 ...

  9. 1、 Shiro框架:认证,授权(验权 2. Shiro框架实现权限控制方式:

    1. Shiro框架:认证,授权(验权) a) 认证逻辑:applicationCode—>通过工具类获取subject对象,调用login方法参数令牌信息->安全管理器------> ...

  10. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

随机推荐

  1. 柏林噪声&幻想大陆地图生成

    序言 之前介绍过perlin噪声的实现,现在应用实践一下--程序化生成幻想大陆 这里使用的是perlin噪声倍频技术(也称分形噪声),详情传送门:柏林噪声算法 代码示例使用的是shadertoy的语法 ...

  2. vscode使用chatGPT

    vscode使用chatGPT 一.下载chatPGT 在拓展中找到chatGPT,我这里下载的是中文版 二.使用 1.使用快捷键 ctrl+shift+p进行查找 chatGPT 2.点击请输入问题 ...

  3. mysql和neo4j集成多数据源和事务

    在微服务大行其道的今天,按理说不应该有多数据源这种问题(嗯,主从库算是一个多数据源的很常见的场景.),但是也没人规定不能这样做. 就算有人规定的,曾经被奉为圭臬的数据库三大范式现在被宽表冲得七零八落, ...

  4. 生成CSV文件的方法*(LIST集合为数据和生成的文件名)

    /** * 生成csv文件 * @param pointsList 组织实体 * filename 生成的文件名 * list 要生成的数据 * @return */ public void Poin ...

  5. 利用python的PyPDF2和PyMuPDF库玩转PDF的提取、合并、旋转、缩放、加密

    一.安装PyPDF2和PyMuPDF库 pip install PyPDF2 pip install pymupdf # fitz是pymupdf的子模块 二.工具类代码 from PyPDF2 im ...

  6. iostream,iostream.h,stdio.h的纠葛

    include <iostream.h>非标准输入输出流 include 标准输入输出流 C++中为了避免名字定义冲突,特别引入了"名字空间的定义",即namespac ...

  7. 关于"覆盖问题”的反思

    [HAOI2007]覆盖问题 题目描述 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定 用3个L*L的 ...

  8. jQuery事件冒泡和默行为

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Django日志输出

    # 自定义日志输出信息 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'standard': ...

  10. mac一键获取最新datagrid 2017.3注册码到剪贴板

    mac一键获取最新datagrid 2017.3注册码到剪贴板 近期datagrid 校验激活码合法性的频率提高,导致需要频繁输入激活码 遂整理一脚本,自动获取最新注册码,并拷贝到剪贴板. 打开dat ...