这是一篇杂记,记录了操作系统层面与I/O管理的零散知识点,用于温习使用。由于I/O管理是一个很大的范畴,后续会不断按照自己的生产需求来补充用的到的知识点。计算机系统是人造系统,没有绝对的对错(相对于自然系统的绝对性),只有特定场景下的优劣。我们在理解一块知识时应当从它提出的背景以及要解决的问题出发,去理解机制而不是纠结于如何具体的实现。即使目的相同,不同的公司或开发者在不同场景下的实现也不尽相同,了解几个例子加深自己的理解、帮助自己构建起知识体系即可(个人观点)。

设备控制器

DMA

中断

I/O通道

计算机中信息传递方式

一个中断处理过程

设备控制器

  设备控制器是计算机中的一个实体,其主要职责是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。它是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,以使处理机从繁杂的设备控制事务中解脱出来。设备控制器是一个可编址的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。设备控制器的复杂性因不同设备而异,相差甚大,于是可把设备控制器分成两类:一类是用于控制字符设备的控制器,另一类是用于控制块设备的控制器。在微型机和小型机中的控制器,常做成印刷电路卡形式,因而也常称为接口卡,可将它插入计算机。有些控制器还可以处理两个、四个或八个同类设备。
  控制器由:指令寄存器Instruction Register、指令译码器Instruction Decoder、定时与控制电路Programmable Logic Array、程序计数器Program Counter、标志寄存器Flags Register、堆栈和堆栈指针Stack Pointer、寄存器组等构成。设备控制器有以下任务:接收和识别指令、数据交换、标识和报告设备的状态、地址识别、数据缓冲、差错控制。
  其中标识和报告设备状态为我们今后的事件驱动I/O提供了底层支持,因为状态位的存在,使得我们可以观察设备目前就绪的事件,并将事件分发给事件处理程序处理。

DMA

  DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统算法和网络是很重要的。在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。目前cpu与dma分时使用内存有以下三种方式::(1)停止CPU访内存;(2)周期挪用;(3)DMA与CPU交替访问内存。
     

中断

  中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

  现代计算机使用中断的目的:

  ①提高计算机系统效率。计算机系统中处理机的工作速度远高于外围设备的工作速度。通过中断可以协调它们之间的工作。当外围设备需要与处理机交换信息时,由外围设备向处理机发出中断请求,处理机及时响应并作相应处理。不交换信息时,处理机和外围设备处于各自独立的并行工作状态。(操作系统由批处理发展为时分系统的产物!)
  ②维持系统可靠正常工作。现代计算机中,程序员不能直接干预和操纵机器,必须通过中断系统向操作系统发出请求,由操作系统来实现人为干预。主存储器中往往有多道程序和各自的存储空间。在程序运行过程中,如出现越界访问,有可能引起程序混乱或相互破坏信息。为避免这类事件的发生,由存储管理部件进行监测,一旦发生越界访问,向处理机发出中断请求,处理机立即采取保护措施。
  ③满足实时处理要求。在实时系统中,各种监测和控制装置随机地向处理机发出中断请求,处理机随时响应并进行处理。
  ④提供故障现场处理手段。处理机中设有各种故障检测和错误诊断的部件,一旦发现故障或错误,立即发出中断请求,进行故障现场记录和隔离,为进一步处理提供必要的依据。
  中断的处理主要分为以下几步:中断请求、中断判优、中断响应、中断处理和中断返回。
  对于外部中断,中断请求信号是由外部设备产生,并施加到CPU的NMI或INTR引脚上,CPU通过不断地检测NMI和INTR引脚信号来识 别是否有中断请求发生。
  对于内部中断,中断请求方式不需要外部施加信号激发,而是通过内部中断控制逻辑去调用。无论是外部中断还是内部中断,中断处理过程 都要经历以下步骤:请求中断→响应中断→关闭中断→保留断点→中断源识别→保护现场→中断服务子程序→恢复现场→中断返回。
  当系统中有多个中断源时,一旦有中断请求,CPU必须确定是哪一个中断源提出的中断请求,并由中断控制器给出中断服务子程序的入口地址,装入CS与IP/EIP两个寄存器,CPU转入相应的中断服务子程序开始执行。
  主程序和中断服务子程序都要使用CPU内部寄存器等资源,为使中断处理程序不破坏主程序中寄存器的内容,应先将断点处各寄存器的内容压入堆栈保护起来,再进入的中断处理。现场保护是由用户使用PUSH指令来实现的。当中断处理完毕后,用户通过POP指令将保存在堆栈中的各个寄存器的内容弹出,即恢复主程序断点处寄存器的原值。
  寻找中断服务程序的入口地址.由于中断周期结束后进入下条指令(即中断服务程序的第一条指令)的取指周期,因此在中断周期内必须设法找到中断服务程序的入口地址.由于入口地址有两种方法获得,因此在中断周期内也有两种方法寻找入口地址: 其一,在中断周期内,将向量地址送至PC(对应硬件向量法),使CPU下一条执行无条件转移指令,转至中断服务程序的入口地址. 其二,在中断周期内,将软件查询入口地址的程序(又叫中断识别程序)其首地址送至PC,使CPU执行中断识别程序,找到入口地址(对应软件查询法)。
  CPU管脚上有两个管脚叫做 NMI、INTR对应不可屏蔽和可屏蔽中断。CPU在执行完一条指令之后就会检测这个管脚的状态,如果满足某个条件就不再执行下一条指令,而是做另外一件事情,这件事情就是中断处理那一套过程。这就是外部中断。当CPU执行完一条指令,比如指令执行出错了,CPU也会进行另外的处理,这就是内部的中断。这是CPU内部电路的设计,Intel的设计就是这样的,但是其他的处理器可能就不是这样设计的。我们只需要理解中断机制的作用,至于实现方式不同的处理器会有不同的实现。计算机系统是人造系统,没有绝对的对错,只有特定场景下的优劣。很多时候只要我们对机制的出发点和用途理解正确,至于实现了解几个相应的例子即可。

I/O通道

  I/O通道(I/O Channel)设备的引入实际上,I/O通道是一种特殊的处理机。它具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作。但I/O通道又与一般的处理机不同,主要表现在以下两个方面:一是其指令类型单一,这是由于通道硬件比较简单,其所能执行的命令,主要局限于与I/O操作有关的指令;再就是通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的,换言之,是通道与CPU共享内存。通道处理机能够负担外围设备的大部分I/O工作,是能够执行有限I/O指令,并且能够被多台外围设备共享的小型DMA专用处理机。

  通道的功能:

  (1) 接受CPU发来的I/O指令,根据指令要求选择一台指定的外围设备与通道相连接。
  (2) 执行CPU为通道组织的通道程序,从主存中取出通道指令,对通道指令进行译码,并根据需要向被选中的设备控制器发出各种操作命令。
  (3) 给出外围设备的有关地址,即进行读/写操作的数据所在的位置。如磁盘存储器的柱面号、磁头号、扇区号等。
  (4) 给出主存缓冲区的首地址,这个缓冲区用来暂时存放从外围设备上输入的数据,或者暂时存放将要输出到外围设备中去的数据。
  (5) 控制外围设备与主存缓冲区之间数据交换的个数,对交换的数据个数进行计数,并判断数据传送工作是否结束。
  (6) 指定传送工作结束时要进行的操作。
  (7) 检查外围设备的工作状态,是正常或故障。根据需要将设备的状态信息送往主存指定单元保存。
  (8) 在数据传输过程中完成必要的格式变换。例如:把字拆卸为字节,或者把字节装配成字

  通道的类型(按工作方式分类)

  (1)选择通道:这种通道可以连接多台快速I/O设备,但每次只能从中选择一台设备执行通道程序,进行主存与该设备之间的数据传送。当数据传送完后,才能选择另一台设备。在这种工作方式中,数据传送以成组方式进行,传送速率很高,多用于连接快速I/O设备。但因连接在选择通道上的多台设备,只能依次使用通道与主存传送数据,故设备之间不能并行工作,且整个通道的利用率不高。
  (2)字节多路通道:这种通道可以连接多台慢速I/O设备,以交叉方式传送数据,即各设备轮流使用通道与主存进行数据传送,且每次只传送一个字节。因为每次数据传送仅占用了不同的设备各自分得的很短的时间片,所以大大提高了通道的利用率。(以时分复用的方式使多个设备共用通道,通道利用率高)
  (3)数组多路通道:数组多路通道综合了选择通道和字节多路通道的优点,它有多个子通道。即可以像字节多路通道那样,执行多路通道程序,使所有子通道分时共享总通道;又可以像选择通道那样进行成组数据的传送。子通道是指实现每个通道程序所对应的硬设备。选择通道在物理上可以连接多台设备,但在一段时间内只能执行一台设备的通道程序,即在逻辑上只能连接一台设备,所以它只包含一个子通道。字节多路通道和数组多路通道在物理上可以连接多台设备,而且在一段时间内可轮流执行多台设备的通道程序,即在逻辑上也可以连接多台设备,所以它们包含若干子通道。需要注意的是,一个子通道可以连接多台设备,但子通道数并不等于物理上可连接的设备数,而是该通道中能够同时工作的设备数。

  I/O指令与通道指令

  (1)I/O指令:I/O指令是计算机系统的一部分,由CPU执行。在采用通道的计算机系统中,I/O指令不直接控制I/O数据的传送,它只负责启动、停止I/O的过程、查询通道和I/O设备的状态、控制通道进行某些操作。
  (2)通道指令及其格式:通道指令也称通道控制字CCW,它是通道用于执行I/O操作的指令,由通道从主存中取出并执行之。

  通道的执行过程

  (1)初始化:
  编制通道程序;
  根据需要在主存中开辟I/O缓冲区;
  将缓冲区首址及传送字节数送到通道程序中,并将通道程序首地址写入某固定单元;
  执行启动命令SIO,该指令中给出通道号及设备号。
  (2)通道和设备的启动:
  指定的通道接到启动信号后,从某固定单元中读出通道地址字CAW;
  CAW送入通道地址寄存器CAWR;
  通道将SIO指令送来的设备号送入设备地址寄存器,然后向I/O总线送出所要启动的设备号;
  指定设备向通道送出回答信号,并回送本设备地址;
  若回送的设备地址与通道送出的设备地址一致,则启动成功;
  通道根据VAWR中的内容从主存取出第一条通道指令CCW1,并存于通道指令寄存器CCWR中,然后根据CCW1中的命令码去启动设备;
  设备在接到第一条通道发出的命令后,向通道送出状态码,若状态码全为0,则通道向CPU送出条件码,并告之启动成功。反之,则表示不能正常执行通道命令,并说明失败的原因。
  (3)数据传送:
  执行完第一条通道指令后,CAWR增值,以便读出第二条通道指令。若执行的是数据传送指令,当其传送字节数减到0时,表明该通道指令执行完毕,本次数据传送结束。依次类推,直到执行的某条通道指令中SD和CD均为0,则该通道指令是本通道程序中的最后一条。
  (4)通道程序的结束:当执行完通道程序的最后一条通道指令,则结束通道程序:一方面通道向设备发出结束命令,一方面向CPU发出中断请求信号,并将通道状态写入主存专用单元。
  设备接到结束命令后立即进行某些必要的动作,例如磁带继续运行一段,使磁头停止在两个数据之间的空白处。在设备必要的动作结束后,反馈给通道一个信号,以断开与通道的连接。
  CPU接到中断请求信号后,响应中断,执行I/O中断管理程序,对通道作结束处理。

  通道的组成

  不同的通道,其组成也不同,下面以选择通道为例介绍通道的组成。
  (1)通道地址字寄存器CAWR:它存放从主存某固定单元中读出的通道地址字CAW,再从CAW中取出通道程序首地址。通道中的CAWR类似于CPU中的程序计数器PC。
  (2)通道指令寄存器CCWR:它存放从主存中读出的通道指令,根据该通道指令向设备控制器发出控制命令。
  (3)数据缓冲寄存器:当发生访存冲突时,它用于暂时保存数据,等待一段时间后再传送。另外,通道与设备之间按字节传送,而通道与主存之间按字传送,故它具有组装与拆分功能。
  (4)设备地址寄存器:它接受启动I/O指令(SIO)中所包含的设备号,并依次向I/O总线送出设备地址,经译码产生选中设备信号。
  (5)通道状态字寄存器CSWR:它存放通道与设备的状态信息。
  (6)通道控制器:它产生控制通道操作的各种信号,类似于CPU中的微程序信号发生器。

计算机中信息传送方式

  (1)串行传送:串行传送就是一根数据线从低到高的顺序逐位传送数据。一般外总线采用串行传送方式。
  (2)并行传送:并行传送是用多根数据线同时传送一个字或一个字节的所有位,将同时传送的数据位数称为该总线的数据通路宽度。系统总线通常采用并行传送方式,以提高速度和效率。
  (3)并串行传送:它是并行和串行传送的结合。例如要传送的数据有多个字节组成,那么传送一个字节时采用并行传送,而字节之间采用串行传送。
  (4)分时传送:分时传送有两层含义,一层含义是在总线上分时传送不同类型的信息;另一层含义是共享总线的各部件分时使用总线。

一个I/O中断处理过程

  (1)CPU发送启动I/O设备的命令,将I/O接口中的B触发器置1,D触发器置0。

  (2)设备开始工作,需要向CPU传送数据时,将数据送入数据缓冲器中。

  (3)输入设备向I/O接口发出“设备工作结束”的信号,将D触发器置1,B触发器置0。标志着I/O设备已就绪。

  (4)CPU在每条指令执行即将结束时,发出中断查询信号。中断查询信号可以让那些接口中D触发器置1且中断屏蔽触发器(MASK)置0的设备的I/O接口中的中断请求触发器(INTR)置1。若该设备的I/O接口中的中断请求触发器(INTR)置1,则代表该设备正式向CPU提出中断请求。

  (5)一般来说,在同一个时间点存在多个设备同时提出中断请求,存在一个INTRi序列。而CPU每次只能处理一个中断请求,因此将INTRi序列送至排队器进行中断判优,速度越快的I/O设备优先级越高。

  (6)在中断允许触发器(EINT)置1的情况下,CPU对优先级最高的设备进行中断响应,首先将INTR发送到编码器形成向量地址。将向量地址至PC作为下一条指令的地址。

I/O管理杂记的更多相关文章

  1. linux杂记(七)linux档案与目录管理指令

    1.目录的相关操作:cd,pwd,mkdir,rmdir 路径(PATH): 绝对路径:路径的写法[一定由根目录/写起],例如/usr/share/doc这个目录 相对路径:路径的写法[不是由/写起] ...

  2. 面试基础知识集合(python、计算机网络、操作系统、数据结构、数据库等杂记)

    python python _.__.__xx__之间的差别 python中range.xrange和randrange的区别 python中 =.copy.deepcopy的差别 python 继承 ...

  3. hadoop杂记-为什么会有Map-reduce v2 (Yarn)

    转自:http://www.cnblogs.com/LeftNotEasy/archive/2012/02/18/why-yarn.html 前言: 有一段时间没有写博客了(发现这是我博客最常见的开头 ...

  4. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  5. 尚硅谷Docker---1、docker杂记

    尚硅谷Docker---1.docker杂记 一.总结 一句话总结: ~ php用的homestead就相当于docker,javaee一般都是用docker,php也可以用docker ~ dock ...

  6. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  7. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  8. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  9. Sublime Text 3中文乱码解决方法以及安装包管理器方法

    一般出现乱码是因为文本采用了GBK编码格式,Sublime Text默认不支持GBK编码. 安装包管理器 简单安装 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令 ...

随机推荐

  1. .tar.gz 文件和 .tar.xz 文件的区别

    tar.gz and tar.xz both are compressed tar-files, but with different compression methods. tar.gz is c ...

  2. 【转】用VMware 8安装Ubuntu 12.04详细过程(图解)

    图解演示环境版本: 本机系统: WIN7 虚拟机:VMware Workstation 8 (英文版) 安装目标:Ubuntu Desktop 12.04 LTS  (请点击这里)先下载好iso镜像文 ...

  3. 深入浅出 REST(转)

    文章讲的不错,更具体一些,对实践的指导意义更强 原文:https://www.infoq.cn/article/rest-introduction/ 不知你是否意识到,围绕着什么才是实现异构的应用到应 ...

  4. asp.net core MVC 入门学习

    前言 .net core 已经更新到2.0以上的版本了,今天才开始正式接触,深为程序员,丢脸了,作为无所不能的IT人,我着手折腾一下这个跨平台的开发框架. (转载自百度百科).NET Core 是.N ...

  5. 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)

    DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...

  6. winform按钮美化(非图片)

    在开发过程中,突然发现vs自带的按钮属性中通过修改Button控件的BackColor的颜色和字体颜色(ForeColor属性)及大小,如下图 就能达到简单美化按钮的效果,下面是显示效果 有兴趣的同学 ...

  7. android版本对应表

    API Level 最初Android版本 Linux内核版本 首次发布日期 后续Android版本 28 9 Unknown 2018-07-02(Beta 3) - 27 8.1 4.10 201 ...

  8. MySQL——python交互

    与python交互之前我们需要安装一个MySQL的驱动模块Connector,这个驱动模块直接在cmd命令行输入 pip install mysql.connector 安装是否成功可以接着输入 py ...

  9. MySQL难点语法——子查询

    本篇主要通过练习来讲解子查询的知识,进入正题之前,先熟悉数据表,表格的数据可以先不用管,主要是熟悉表格的字段名 这里子查询分为三个部分: 1.where条件子查询 这个子查询和普通的查询没什么区别,主 ...

  10. Spring MVC + CXF实现webservice接口

    本来都是WebAPI/RestfulAPI接口对外提供接口的,突然有个需求要提供WebService接口,本想着Spring和CXF这么成熟的两个产品,这么的也整不出什么幺蛾子来啊. 结果还真是出了几 ...