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. Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能

    前言   前面实现了基础的跳转,那么动态交互中登录是常用功能.  本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术.   Demo    下载地址   链接:ht ...

  2. How to fix the problem that Raspberry Pi cannot use the root user for SSH login All In One

    How to fix the problem that Raspberry Pi cannot use the root user for SSH login All In One 如何修复树莓派无法 ...

  3. SCI 投稿中像素、DPI、图片分辨率的一些知识

    最近在学习 Linux 命令行下的 ImageMagick 图像处理,对图像本身的一些概念有点懵,搜集整理了一点资料,仅供自己和大家学习与参考. SCI 期刊对分辨率大多都有一定的要求,例如一段来自 ...

  4. 驱动开发:内核RIP劫持实现DLL注入

    本章将探索内核级DLL模块注入实现原理,DLL模块注入在应用层中通常会使用CreateRemoteThread直接开启远程线程执行即可,驱动级别的注入有多种实现原理,而其中最简单的一种实现方式则是通过 ...

  5. 【whale-starry-stl】01天 list学习笔记

    一.知识点 1. std::bidirectional_iterator_tag std::bidirectional_iterator_tag 是 C++ 标准库中定义的一个迭代器类型标签,用于标识 ...

  6. 自己动手实现rpc框架(一) 实现点对点的rpc通信

    自己动手实现rpc框架(一) 实现点对点的rpc通信 1. 什么是rpc? RPC是远过程调用(Remote Procedure Call)的缩写形式,其区别于一个程序内部基本的过程调用(或者叫函数/ ...

  7. Linux系统运维之Hadoop、Hive、Flume数据处理

    配置环境 主机名 IP 备注 Hadoop-Data01 192.168.0.194 Hadoop-Master/Hive/Mysql/Flume-Agent Hadoop-Data02 192.16 ...

  8. SketchUp Pro 2023 下载和安装教程

    SketchUp Pro 2023 下载和安装教程 下载链接 123云盘:https://www.123pan.com/s/JyAKVv-NTXB.html 安装教程 演示操作系统:Windows 1 ...

  9. nf_conntrack: table full, dropping packet

    参考:linux 路由跟踪表满错误 nf_conntrack: table full, dropping packet 原理解决方法 说明 ping,dmesg 或者 /var/log/message ...

  10. 层叠样式表(CSS)1

    一.css的简介 1.层叠样式表的含义 层叠样式表:css是不仅是表现HTML的语言.还是进行样式修饰的语言 层叠:是对一个元素多次设置同一个样式,层层叠加覆盖,如不同的样式对一html标签进行修饰, ...