操作系统学习笔记(七)I/O管理概述

I/O设备

I/O设备管理是操作系统设计中最凌乱也是最具挑战性的部分。由于它包含了很多领域的不同设备及设备相关的应用程序,因此很难有一个通用且一致的设计方案。所以在理解设备管理之前,应该先了解具体的I/O设备类型。

计算机系统中的I/O设备按使用特性可分为以下类型:

  1. 人机交互外部设备。用于与计算机用户之间交互的设备,如打印机,显示器,鼠标,键盘等。这类设备的数据交换速度相对较慢,通常是以字节为单位进行数据交换。
  2. 存储设备。用于存储程序和数据的设备,如磁盘,磁带,光盘等。这类设备用于数据交换,速度较快,通常以多字节组成的块为单位进行数据交换。
  3. 网络通信设备。用于远程设备通信的设备,如各种网络接口,调制解调器等。其速度介于前两类设备之间。网络通信设备在使用和管理上与前两类设备也有很大不同。

按传输速率分为:

  1. 低速设备。传输速率仅为每秒几字节到数百字节的一类设备,如键盘,鼠标等。
  2. 中速设备。传输速率为每秒数千字节至数万字节的一类设备,如行式打印机,激光打印机等。
  3. 高速设备。传输速率在数百千字节至千兆字节的一类设备,如磁带机,磁盘机,光盘机等。

按信息交换单位分为:

  1. 块设备。由于信息的存取总是以数据块为单位的,所以存储信息的设备称为块设备,它属于有结构设备,如磁盘等。磁盘设备的基本特征是传输速率较高,可寻址,即可以随机地读写任何一块。
  2. 字符设备。用于数据输入输出的设备为字符设备,因为其传输的基本单位是字符。它属于无结构类型,如交互式终端机,打印机等,其特点是传输速率低,不可寻址,并且在输入输出时常采用中断驱动方式。

I/O控制方式

设备管理的主要任务之一是控制设备和内存或处理机之间的数据传送。

外围设备和内存之间的输入输出方式有4种:

程序直接控制的方式

计算机从外部设备读取数据到存储器,每次读取一个字的数据。对读入的每个字,CPU需要对外设状态进行循环检查,直到确定该字已经在I/O控制器的寄存器中。

由于CPU的高速性和I/O设备的低速性,致使CPU大部分时间都处于等待I/O设备是否完成数据I/O的循环测试中,造成了CPU资源的极大浪费。

在这种方式中,CPU之所以需要不断测试是否完成,是因为CPU没有采用中断机制,使得I/O设备没法向CPU报告它已经完成了一个字的输入。

这种方式实现简单,但是缺点就是CPU和I/O设备只能串行。

中断驱动方式

允许I/O设备主动打断CPU运行并请求服务,从而解放CPU,使得其向I/O控制器发送读命令后可以继续做其他有用的工作。

我们可以分别从I/O控制器和CPU两个角度来看中断驱动方式的工作过程。

从I/O控制器角度:

  • I/O控制器从CPU接收了一个读指令
  • 从外围设备读取数据到控制器的寄存器
  • 通过控制线向CPU发送一个中断信号,表示数据已经准备好了,然后等待CPU请求该数据。
  • 控制器接收到CPU请求数据的信号后,将数据放到数据总线上,传到CPU的寄存器。

从CPU角度来看:

  • CPU发出读命令,然后保存当前运行程序的上下文(如程序计数器及处理机寄存器等),然后转去执行其他程序。
  • 在每个指令周期的末尾,CPU检查中断。
  • 如果有来自I/O控制器的中断,CPU保存当前程序的上下文,转去执行中断处理程序以处理该中断,此时,CPU从I/O控制器读取这一个字的数据到寄存器,并存入主存。
  • CPU恢复发出I/O命令的程序上下文,然后继续执行。

指令周期是什么?【浅析】CPU中的指令周期、CPU周期和时钟周期

I/O中断可以打断时间片吗?正常情况下,线程只能用完时间片才能让出cpu执行权吗? - 知乎

读取一个字就恢复原程序上下文?

DMA方式

中断驱动方式比程序直接控制方式有效,但由于数据中的每个字在存储器与I/O控制器之间的传输都要经过CPU,这就导致了中断驱动方式还是会消耗很多CPU。

而DMA(直接存储器存取)方式的基本思想是在I/O设备和内存之间开辟直接的数据交换通道。

DMA方式特点如下:

  • 基本单位是数据块。
  • 所传送的数据,是从设备直接进入内存,或者相反。
  • 仅在传输一个或多个数据块的开始和结束时,才需要CPU干预。整块数据的传送是在DMA控制器的控制下完成的。

img

要在主机和控制器之间实现成块数据的直接交换,需要在DMA控制器中设置如下4类寄存器:

  • 命令/状态寄存器(CR)。用于接收从CPU发来的I/O命令或有关的控制信息,或设备状态字。
  • 内存地址寄存器(MAR)。在输入时,它存放把数据从设备传送到内存的起始目标地址,在输出时,它存放由内存到设备的内存源地址。
  • 数据寄存器(DR)。用于暂存从设备到内存或从内存到设备的数据
  • 数据计数器(DC)。存放本次要传送的字(节)数。

如上图所示,DMA工作方式是:CPU接收到I/O设备的DMA请求后,它给I/O控制器发送发送一条命令,启动DMA控制器,然后继续其他工作。之后CPU就把控制操作委托给DMA控制器,由该控制器负责处理。DMA控制器直接与存储器交互,传送整个数据块,每次传送一个字,整个过程不需要CPU参与。传送完成后,DMA发送一个中断信号给CPU。

DMA控制方式和中断驱动方式的主要区别是,中断驱动方式在每个数据需要传输时中断CPU,而DMA控制方式则是在所要求传送的一批数据全部传送结束时才中断CPU。

通道控制方式

I/O通道是指专门负责输入输出的处理机(注意,这里不是控制器了)。I/O通道方式是DMA方式的发展,它可以进一步减少CPU的干扰,即把对一个数据块的读、写为单位的干预,减少为对一组数据块读写以及有关控制和管理为单位的干预。

同时,又可以实现CPU,通道和I/O设备三者的并行操作,有效提高整个系统的资源利用率。

例如,当CPU要完成一组相关的读或者写操作及有关控制时,只需要向I/O通道发送一条I/O指令,以给出其所要执行的通道程序的首地址和要访问的I/O设备,通道接收到该指令后,执行通道程序便可完成指定的I/O任务,数据传送结束时向CPU发送中断请求。

I/O通道与一般处理机的区别是:

  • 通道指令的类型单一。
  • 没有自己的内存,通道所执行的通道程序是放在主机的内存中的,也就是说,通道与CPU共享内存

DMA控制方式与中断控制方式的区别

  1. 中断控制方式在每个数据传送完成后中断CPU,而DMA控制方式则在所要求传送的一批数据全部传送完成后中断CPU。
  2. 中断控制方式的数据传送在中断处理时由CPU控制完成,而DMA控制方式则在DMA控制器的控制下完成。不过,在DMA控制方式中,数据传送的方向,存放数据的内存始址及传送数据的长度等仍然由CPU控制。
  3. DMA方式以存储器为核心,中断控制方式以CPU为核心,因此DMA方式能与CPU并行工作。
  4. DMA方式能批量传输数据,中断控制方式只能以字节为单位。

DMA控制方式和通道控制方式的区别

DMA控制方式中,在DMA控制器控制下设备和主存之间可以成批地进行数据交换而不用CPU干预,这样既减轻了CPU的负担,又提高了了I/O数据的传送速度。

通道控制方式与DMA控制方式类似,也是一种以内存为中心实现设备与内存直接交换数据的控制方式,不过在通道控制方式中,CPU只需要发出启动指令,指出通道相应的操作和I/O设备,该指令就可以启动通道并使通道从内存中调出相应的通道执行程序执行。

与DMA方式相比,通道控制方式需要CPU的干预更少,并且一个通道可以同时控制多台设备,进一步减轻了CPU的负担。

另外,对通道来说,可以使用一些指令灵活改变 通道程序,这一点DMA控制方式无法做到。

I/O子系统的层次结构

用户层I/O软件
设备独立性软件
设备驱动程序
中断处理程序
硬件

整个I/O系统可以视为具有4个层次的系统结构,各层次及其功能如下:

用户层I/O软件

实现与用户交互的接口,用户可以直接调用在用户层提供的,与I/O操作有关的库函数,对设备进行操作。一般而言,大部分的I/O软件都在操作系统内部,但仍有一小部分在用户层,包括与用户程序链接在一起的库函数,以及完全运行在内核之外的一些程序,用户层软件必须通过一组系统调用来获取操作系统服务。

设备独立性软件

用于实现用户程序与设备驱动器的统一接口,设备命令,设备保护及设备分配与释放等,同时为设备管理和数据传送提供必要的存储空间。

设备独立性也成为设备无关性,使得应用程序独立于具体使用的物理设备,为实现设备独立性而引入逻辑设备和物理设备两个概念。

在应用程序中,根据逻辑设备名来请求使用某类设备;而在系统实际执行时,必须将逻辑设备名映射成物理设备名使用。

使用逻辑设备名的好处是:

  • 增加设备分配的灵活性。
  • 易于实现I/O设备的重定向。

为了实现设备独立性,必须再在驱动程序之上设置一层设备独立性软件。总体而言,设备独立性软件的主要功能可以分为两个方面:

  • 执行所有设备的公有操作。包括:对设备进行分配和回收;将逻辑设备映射为物理设备名;对设备进行保护,禁止用户直接访问设备;缓冲管理;差错控制;提供独立于设备的大小统一的逻辑块,屏蔽设备之间信息交换单位大小和传输速率的差异。
  • 向用户层(文件层)提供统一接口。无论何种设备,它们向用户提供的接口应该是相同的,例如,对各种设备的读写操作,在应用程序中都统一使用read/write命令等。

设备驱动程序

与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。

通常,每类设备提供一个设备驱动程序,它是I/O进程与设备控制器之间的通信程序,常以进程形式存在。设备驱动程序向上层用户程序提供一组标准接口,设备具体的差别被设备驱动程序所封装,用于接收上层软件发来的抽象I/O请求,如read或write命令,转化为具体要求后,发送给设备控制器。它也将由设备控制器发送来的信号传送给上层软件,从而为I/O内核子系统隐藏设备控制器之间的差别。

中断处理程序

用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完并恢复中断进程的现场后,返回被中断进程。

中断处理层的主要任务有:进程上下文的切换,对处理终端信号源进行测试,读取设备状态和修改进程状态等。

由于中断处理与硬件密切相关,对用户而言,应尽量加以屏蔽,因此应放在操作系统的底层,系统其它部分应该尽可能少地与之发生关系。

硬件设备

I/O设备通常包含一个机械部件和一个电子部件。为了达到设计的模块性和通用性,一般将其分开:

  • 电子部件称为设备控制器(或适配器),在个人计算机中,通常是一块插入主板扩充槽的印制电路板。
  • 机械部分则是设备本身。

有几点注意:

这里说的设备控制器指的是硬件设备内部的控制器,不是前面的DMA控制器中的控制器。

设备无关性,做的是设备的公有操作,比如权限认证,差错校验,用缓存来将不同设备的大小不同的块统一为逻辑大小相同的块。

具体的系统指令解析和执行需要下层的设备驱动程序。

中断处理程序是整个操作系统的层面的东西,不仅仅在I/O中用到。

设备控制器通过寄存器与CPU通信,在某些计算机上,这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,寄存器独立编址。

操作系统通过向控制器寄存器写命令字来执行I/O功能。控制器收到一条命令后,CPU可以转向其他工作,而让设备控制器自行完成具体的I/O操作。

当命令执行完毕后,控制器发出一个中断信号,操作系统重新获取CPU的执行权限并检查执行结果,此时CPU仍旧从控制器寄存器中读取信息来获取执行的结果和设备的状态信息。

设备控制器的主要功能如下:

  • 接收和识别CPU或通道发来的命令,如磁盘控制器能接受读,写,查找命令。
  • 实现数据交换,包括设备和控制器之间的数据传输,通过数据总线或通道,控制器和主存之间的数据传输。
  • 发现和记录设备及自身的状态信息,供CPU处理使用。
  • 设备地址识别。

为了实现上述功能,设备控制器必须包含以下部分:

  • 设备控制器与CPU接口。该接口有三类信号线:数据线,地址线和控制线。数据线通常与两类寄存器相连,数据寄存器(存放从设备送来的输入数据或从CPU送来的输出数据)和控制/状态寄存器(存放从CPU送来的控制信息或设备的状态信息)
  • 设备控制器与设备接口。设备控制器连接设备需要相应数量的接口,一个接口连接一个设备,每个接口中都存在数据,控制和状态三类信号。
  • I/O控制逻辑。用于实现对设备的控制,它通过一组控制线与CPU交互,对从CPU收到的I/O命令进行译码。CPU启动设备时,将启动命令发送给控制器,同时通过地址线把地址发送给控制器,由控制器的I/O逻辑对地址进行译码,并相应地选择设备进行控制。

img