IO设备与主机(CPU、内存)之间的通信不是直接的,而是通过设备控制器,设备控制器是IO设备和主机之间的中介。IO设备和进程之间的数据传送方式主要有4种:

1.程序控制方式:又被称为“忙等”模式,即当要在内存和IO设备之间进行信息传输时,由CPU向相应的设备发出命令,由设备控制器控制IO设备进行实际操作。在IO设备工作时,CPU执行一段循环测试程序,不断测试IO设备的完成状况,根据完成状况决定下一步操作。在此期间,CPU只能等待IO设备完成所有的数据传输,CPU和设备只能串行工作,并不能进行其他操作。
缺点:CPU计算和IO设备搬运数据二者任何时刻只能有一个活动,显然导致大量的资源被浪费掉,系统的性能可想而知。

2.中断控制方式:当前很多IO操作的主流设计思想,配合分时多任务系统的很自然的设计思想,CPU向相应的IO设备发出读写命令后,不必等待而转向执行其他进程,由设备控制器控制IO设备完成所有的实际操作,然后当前进程放弃对CPU的占用,进入休眠等待状态。

IO设备完成单次数据传输并会主动出发一次中断信号(单次传输数据量是设备控制器的数据缓冲寄存器的容量,如磁盘单次读取容量便是一个扇区,如果一次要读入一个磁盘块的大小数据,则需要中断2次…),通知CPU本次IO完成,然后CPU会将控制权转向中断处理程序,让其对此情况作出相应反应,以硬盘中断处理程序为例:

缺点:很明显,中断控制方式受限于设备的单次运输量,如果对于一次有较大数据需求的IO请求,则会在IO运行过程中被划分成若干的小块进行传输,中断次数很多,每次中断CPU都要运行中断处理程序,上下文环境的保存和恢复显然会让CPU耗费不少精力。

3.DMA方式:针对中断控制方式面对大量数据请求出现的中断次数过多的问题,可以增加硬盘配备的数据缓冲寄存器数量以增加单次搬运的数据量(但是这种做法仔细一想并非最优,一方面增加寄存器数量成本上升,另一方面若是对于小量数据请求,比如100KB,若增加硬盘的单次传输量为4MB,显然也是会造成时间浪费的,并且磁盘扇区、磁盘单次传输量、内存页帧这些参数是彼此对应的,牵一发动全身,不能乱改)。

故而DMA(direct memory access)设计思想就是配置一个DMA控制器,当存在单次大批量数据请求时,在内存和IO设备之间搭建直接沟通的桥梁,绕过操作系统为设备提供的缓冲池,省的在内存中二次搬运,由DMA控制器控制数据传输。

DMA工作方式:当某一进程提出一次单次大批量数据请求,则首先CPU规划好这批数据在进程的虚拟空间的位置,并事先完成虚拟内存到实际内存的映射关系(虚拟内存那端肯定是连续的堆空间,而实际内存这段操作系统一般也会尽可能在DMA区中划分出连续的实际内存空间以匹配),然后CPU将规划好的内存起始地址和size发送给DMA控制器中的内存地址寄存器和size计数器,然后由DMA控制器驱动硬盘驱动程序完成本次全部的IO请求,直到输入完成后,DMA控制器才发出中断信号告知CPU激活中断程序完成中断处理。

可以看到DMA的功能类似于包工头,指挥一群搬运工(单次磁盘驱动)向一个仓库(DMA连续内存段)批量完成搬运工作。但是DMA依旧不太智能,比如内存起始地址和搬运size等都需要CPU经过事先的规划,而且需要CPU自己去仓库提选合适数据。

缺点:DMA的运行过程可以看到对于内存的划分存在极强的连续性要求,虽然x86将0~16M的物理页面专门划分出来用于IO设备的DMA处理,但是显然这种方式对内存使用方式较为僵硬,整体的协调逻辑较为复杂)

4.通道控制方式:DMA控制方式虽然解决了批数据传输问题,但是CPU还是要费心对DMA进行指导和中断处理。为了提高计算系统的运行效率,CPU应该专职计算而非这些简单但是繁琐的IO事务,通道控制方式便是引入一个功能较为简单的协处理机,它可以接受CPU发来的IO命令,通道作为处理机也有自己的一套指令集,可以独立执行通道程序,对IO设备进行控制。

IO通道的指令集较为单一,因为通道的目的单一即为IO操作,故而硬件设计也简单(降低成本),所以能执行的命令主要局限于IO操作相关,此外通道并没有自己的内存,通道要执行的通道程序是放在主机内存中的,通道要和CPU共享内存。取自《操作系统原理及应用》教材的图用以演示通道的工作原理。


Fig.1 CPU和通道间的通信协同关系
可以看到通道相当于包工头+账房先生的合体,不仅负责搬而且负责简单的算,这种情况下,对于内存的连续性要求并没有DMA那么强了,“通道”先生可以知道在指定的内存位置存放指定的数据。

通道的引入使CPU可以专心计算,而把IO任务完全交给通道完成,二者各负其责。二者分工使得计算和IO操作可以并行,即CPU和设备并行工作,从而提高资源的利用率。而通道是直接负责IO设备的读取,故而根据负责的IO设备和调度方式不同可以做如下分类:

a. 字节多路通道:以字节为单位传输,可连接若干IO设备,按照时间片轮转方式分时执行;
b. 数组选择通道:以数组(多个字节)为单位传输,从而数据传输速率高,通常连接高速设备,如磁盘机。 这种通道以串行方式执行通道程序,独占使用;
c. 数组多路通道:相比于数组选择通道的独占串行方式,改成时间片轮转分时(并发执行多个通道程序)。


Fig.2 具有通道的I/O系统结构

对于Linux系统而言第2,3种IO控制方式是主流采用的,通道控制方式虽然更高效,但是由于需要添加专门的通道协处理器,故而成本较高,常用于专用场景。

Linux内核:IO设备通信的控制方式相关推荐

  1. linux read函数_浅谈Linux内核IO体系之磁盘IO

    前言 Linux I/O体系是Linux内核的重要组成部分,主要包含网络IO.磁盘IO等.基本所有的技术栈都需要与IO打交道,分布式存储系统更是如此.本文主要简单分析一下磁盘IO,看看一个IO请求从发 ...

  2. 详解Linux内核IO技术栈

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 在开始正式的讨论 ...

  3. 深入Linux内核IO技术栈

    这是<Linux系统调用那些事>高级部分的第一章<聊聊Linux IO>.高级部分的文章均假设读者完整的学习过Linux系统基础以及Linux系统编程相关的内容,并已有一定的工 ...

  4. linux内核中kset是什么意思,Linux内核之设备驱动-底层数据结构kobject/kset

    Linux内核之设备驱动-底层数据结构kobject/kset kobject kobject是组成device.driver.bus.class的基本结构.如果把前者看成基类,则后者均为它的派生产物 ...

  5. 【学习笔记】第五章——I/O(设备分类、控制方式、软件层次结构、假脱机、缓冲)

    文章目录 一. 设备分类与控制方式 1)设备分类 2)控制方式 1. 程序直接控制方式 2. 中断驱动方式 3. DMA 方式 4. 通道控制方式 总结 二. 软件层次结构与假脱机 1)软件层次结构 ...

  6. Linux内核IO追踪:用GDB调试,一个磁盘IO的流程是什么样的

    Table of Contents 构建内核 产生IO写入的程序 追踪到兔子洞 准备步骤 进入FS层:我正在使用的fs是XFS 潜入块层 进入块驱动程序层:我的块驱动程序是SCSI 回到fs层,研究内 ...

  7. tia v15 添加项目_西门子S7-1500plc与S7-300plcPN/IO设备通信-创建项目

    西门子S7-1500plc与S7-300plcPN/IO设备通信,PROFINET的CPU支持I device功能,即智能IO设备功能,也就是该PN设备可以同时作为IO控制器和IO设备.一个PN智能设 ...

  8. 嵌入式(iMX6Q)TFTP加载 Linux 内核与设备树NFS挂载根文件系统

    配置实现过程: 嵌入式(iMX6Q)TFTP加载 Linux 内核与设备树 注:bootm对应启动uImage,bootz对应启动zImage setenv bootcmd "tftp 0x ...

  9. 合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

    一.简介 1.项目介绍 之前发布的文章有esp8266的wifi模块和BC20的NB模块与华为云物联网通信为主,本期文章采用了合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较 ...

最新文章

  1. 模拟电视频率可用于超级Wi-Fi
  2. 第 2 章 Editor
  3. 在js文件中引用别的js文件的方法
  4. oracle 5632,17、oracle 性能管理
  5. 网络流量监控分析工具 Ntopng 安装
  6. Mybatis的模糊查询
  7. 为什么C语言函数不能返回数组,却可以返回结构体
  8. java中保留小数位_Java中保留两位小数的方法
  9. 视图自己定义旋转动画 相似百度音乐
  10. java图片填充父容器_java相关:spring的父子容器及配置详解
  11. Windows平台上实现P2P服务(一)
  12. 浅谈URL生成方式的演变
  13. (转)美国的套利已经变成一门生意,而不是一门技术了
  14. 【分享】5G+北斗RTK高精度人员定位解决方案
  15. 如何使用MISRA改进嵌入式编程
  16. 计算机科学成为独立学科的奠基人,详解卡内基梅隆大学计算机学院
  17. 计算机硕士毕业论文范文,计算机论文:精选计算机硕士毕业论文范文十篇.docx...
  18. web.xml 3.0
  19. 在阿里云下安装SQL Server
  20. 批量修改Excel单元格内某些文字的颜色

热门文章

  1. timesten针对复制器新增一张复制表
  2. 135: Check failed: !auc_error AUC: the dataset only contains pos or neg samples
  3. sdutacm- 数据结构实验之排序一:一趟快排
  4. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.18
  5. 电脑硬盘为什么叫计算机,为什么女生的电脑总是很卡 原来硬盘是罪魁祸首
  6. 西门子PLC S7-200smart连接威伦通触摸屏流程
  7. Source Insight4.0 仿真sublime text主题配色
  8. 西门子培训2——OID
  9. 时间序列:时间序列模型---自回归过程(AutoRegressive Process)
  10. 测井等数据的噪声处理及图例