I/O管理杂记

  这是一篇杂记,记录了操作系统层面与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作为下一条指令的地址

 

原文地址:https://www.cnblogs.com/niuyourou/p/11883495.html