5.1、IO管理概述
1、IO设备
IO设备管理是操作系统设计中最凌乱也最具挑战性的部分。由于它包含了很多领域的不同设备以及与设备相关的应用程序,因此很难有一个通用且一直的设计方案。所以在理解设备管理之前,应该先了解具体的IO设备类型。
计算机系统中的IO设备按使用特性可以分为一下类型:
1)人机交互类外部设备,又称慢速IO设备,用于桶计算机用户之间交互的设备,如打印机、显示器、鼠标、键盘等。这类设备数据交换速度相对较慢,通常是以字节为单位进行数据交换。
2)存储设备,用于存储程序和数据的设备,如磁盘、磁带、光盘等。这类设备用于数据交换,速度较快,通常以多字节组成的块为单位进行数据交换。
3)网络通信设备,用于与远程设备通信的设备,如各种网络接口、调制解调器等。其数据交换速度介于外部设备与存储设备之间。网络通信设备在使用和管理上与前两者设备有很大的不同。
1)低速设备,传输速率仅为每秒钟几个字节至数百个字节的一类设备,如键盘、鼠标等。
2)中速设备,传输速率在每秒数千个字节至数万个字节的一类设备,如行式打印机、激光打印机等。
3)高速设备,传输速率在数百个千字节至千兆字节的一类设备,如磁带机、磁盘机、光盘机等。
(2)按信息交换的单位分类
1)块设备
由于信息的存取总是以数据块为单位,所以存储信息的设备称为块设备。它属于有结构设备,如磁盘等。磁盘设备的基本特征是传输速率高,以及可寻址,即对他可随机地读写任意块。
2)字符设备
用于数据输入输出的设备为字符设备,因为其传输的基本单位是字符。它属于无结构类型,如交互式终端机、打印机等。他们的传输速率低、不可寻址、并且在输入输出时常采用中断驱动方式。
对于IO设备,有以下三种不同类型的使用方式:
独占式使用设备。独占式使用设备是指在申请设备是,如果设备空闲,就将其独占,不再允许其他进程申请使用,一直等到该设备被释放才允许其他进程申请使用。例如:打印机。
分时式共享使用设备。独占式使用设备时,设备利用率低,当设备没有独占使用的要求时,可以通过分时共享使用,提高利用率。例如:对磁盘设备的IO操作,各进程每次IO操作请求可以通过分时来交替进行。
以SPOOLing方式使用外部设备。SPOOLing技术是在批处理操作系统时代引入的,即假脱机IO技术。这种技术用于对设备的操作,实质上就是对IO操作进行批处理。具体的内容后面有单独讲解。
采用上面三种使用方式的设备分别称为独占设备、共享设备和虚拟设备。
2、IO管理目标
IO设备管理的主要目标有以下三个方面。
方便使用:方便用户使用外部设备,控制设备工作完成用户的输入输出要求。
提高效率:提高系统的并行工作能力,提高设备的使用效率。
方便控制:提高外围设备和系统的可靠性和安全性,以使系统能正常工作。
3、IO管理功能
IO设备管理的功能是按照输入输出子系统的结构和设备类型制定分配和使用设备的策略,主要包括:
设备的分配和回收。
外围设备的启动。
对磁盘的驱动调度。
外部设备中断处理。
虚拟设备的实现。
4、IO应用接口
IO应用接口就是从不同的输入输出设备中抽象出一些通用类型。每个类型都可以通过一组标准函数(即接口)来访问。具体的差别被内核模块(也称设备驱动程序)所封装。这些设备驱动程序一方面可以定制,以设和各种设备,另一方面也提供了一些标准接口。
IO应用接口的具体实现方式是:先把IO设备划分为若干种类的通用类型;然后对每一种类型提供一组标准函数来访问,这里的标准函数就是接口;为每个IO设备提供各自的设备驱动程序,各种设备间的差异就体现在设备驱动程序的不同之中,而对于访问这些设备的接口却是按照该设备分数的类型而统一。
划分IO设备所属的通用类型的依据:
l 字符设备还是块设备。
l 顺序访问还是随机访问。
l IO传输是同步还是异步。
l 共享设备还是独占设备。
l 操作速度的高低。
l 访问模式是读写、只读还是只写。
5、设备控制器(IO部件)
IO设备通常包括一个机械部件和一个电子部件。为了达到设计的模块性和通用性,一般将其分开。电子部件成为设备控制器(或适配器),在个人计算机中,通常是一块插入主板扩充槽的印制电路板;机械部件即设备本身。
由于具体的设备操作涉及硬件接口,且不同的设备有不同的硬件特性和参数,所以这些复杂的操作交由操作系统用户编写程序来操作是不实际的。引入控制器后,系统可以通过几个简单的参数完成对控制器的操作,而具体的硬件操作则由控制器调用相应的设备接口完成。设备控制器的引入大大简化了操作系统的设计,特别是有利于计算机系统和操作系统对各类控制器和设备的兼容;同时也实现了主存和设备之间的数据传输操作,使CPU从繁重的设备控制操作中解放出来。
设备控制器通过寄存器与CPU通信,在某些计算机上,这些寄存器占用内存地址的一部分,称为内存映像IO;另一些计算机则采用IO专用地址,寄存器独立编址。操作系统通过想控制器寄存器写命令字来执行IO功能。控制器收到一条命令后,CPU可以转向进行其他工作,而让设备控制器自行完成具体IO操作。当命令执行完毕后,控制器发出一个中断信号,操作系统重新获得CPU的控制权并检查执行结果,此时,CPU仍旧是从控制器寄存器中读取信息来获得执行结果和设备的状态信息。
设备控制器的主要功能为:
l 接收和识别CPU或通道发来的命令,如磁盘控制器能就收读、写、查找、搜索等命令。
l 实现数据交换,包括设备和控制器之间的数据传输;通过数据总线或通道,控制器和主存之间的数据传输。
l 发现和记录设备及自身的状态信息,供CPU处理使用。
l 设备地址识别。
为实现上述功能,设备控制器必须包含以下组成部分:
该接口有三类信号线:数据线、地址线和控制线。数据线通常与两类寄存器相连接:数据存储器(存放从设备送来的输入数据或从CPU送来的输出数据)和控制/状态寄存器(存放从CPU送来的控制信息或设备的状态信息)。
设备控制器链接设备需要相应数量的接口,一个借口链接一台设备。每个接口中都存在数据、控制和状态三种类型的信号。
用于实现对设备的控制。它通过一组控制线与处理器交互,对从处理器收到的IO命令进行译码。CPU启动设备时,将启动命令发送给控制器,并同时通过地址线吧地址发送给控制器,由控制器的IO逻辑对地址进行译码,并相应地对所选设备进行控制。
6、IO控制方式
设备管理的主要任务之一是控制设备和内存或处理器之间的数据传送,外围设备和内存之间的输入输出控制方式有四种,下面分别介绍。
计算机从外部设备读取数据到存储器,每次读一个字的数据。对读入的每个字,CPU需要对状态循环检查,知道确定该字已经在IO控制器的数据寄存器中。在程序IO方式中,由于CPU的高速型和IO设备的低速性,致使CPU的绝大部分时间都处于等待IO设备完成数据IO的循环测试中,造成CPU的极大浪费。在该方式中,CPU之所以要不断地测试IO设备的状态,就是因为在CPU中无中断机构,使IO设备无法向CPU报告它已完成了一个字符的输入操作。
程序直接控制方式虽然简单易于实现,但是其缺点也是显然的,由于CPU和外部设备只能串行工作,导致CPU的利用率相当低。
中断驱动方式的思想是:允许IO设备主动打断CPU的运行并请求服务,从而“解放”CPU,使得其向IO控制器发送命令后可以继续做其他有用的工作。我们从IO控制器和CPU两个角度分别来看中断驱动方式的工作过程: 从IO控制器的角度来看,IO控制器从COU接受一个读命令,然后从外围设备读数据。一旦数据读入到该IO控制器的数据寄存器,便通过控制线给CPU发出一个中断信号,表示数据已准备好,然后等待CPU请求该数据。IO控制器收到CPU发出的取数据请求后,将数据放到数据总线上,传到CPU的寄存器中。至此,本次IO操作完成,IO控制器又可以开始下一次IO操作。
从CPU的角度来看,CPU发送读命令,然后保存当前运行程序的上下文(现场,包括程序计数器及处理器寄存器),转去执行其他程序。在每个指令周期的末尾,CPU检查中断。当有来自IO控制器的中断时,CPU保存当前正在运行程序的上下文,转去执行中断处理程序处理该中断。这时,CPU从IO控制器读一个字的数据传送到寄存器,并存入主存。接着,CPU恢复发出IO命令的程序(或其他程序)的上下文,然后继续运行。
中断驱动方式比程序直接控制方式有效,但由于数据中的每个字在存储器与IO控制器之间的传输都必须通过CPU处理,这就导致了中断驱动方式仍然会花费较多的CPU时间。
中断驱动方式中,CPU仍然需要主动处理在存储器和IO设备之间的数据传送,所以速度还是受限,而直接内存存取(DMA)方式的基本思想是在外围设备和内存之间开辟直接的数据交换通路,彻底解放CPU。该方式的特点是:
l 基本单位是数据块。
l 所传诵的数据,是从设备直接送入内存的,或者相反。
l 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在DMA控制器的控制下完成的。
为了实现在主机与控制器之间成块数据的直接交换,必须在DMA控制器中设置如下四类寄存器:
l 命令/状态寄存器(CR)。用于接收从CPU发来的IO命令或有关控制信息,或设备的状态。
l 内存地址寄存器(MAR)。在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。
l 数据寄存器(DR)。用于暂存从设备到内存或从内存到设备的数据。
l 数据计数器(DC)。存放本次CPU要读或写的字节数。
DMA的工作过程是:CPU读写数据时,他给IO控制器发出一条命令,启动DMA控制器,然后继续其他工作。之后CPU就把这个操作委托给DMA控制器,由该控制器负责处理。DMA控制器直接与存储器交互,传送整个数据块,这个过程不需要CPU参与。当传送完成后,DMA控制器发送一个中断信号给处理器。因此,只有在传送开始和结束时才需要CPU的参与。
DMA控制方式与中断驱动方式的主要区别是中断驱动方式在每个数据传送玩后中断CPU,而DMA控制方式则是在所要求传送的一批数据全部传送结束时中断CPU;此外,中断驱动方式数据传送的是在中断处理时由CPU控制完成,而DMA控制方式则是在DMA控制器的控制下完成的。
IO通道方式是DMA方式的发展,它可以进一步减少CPU的干预,即把对一个数据块的读或写为一个单位的干预,减少为对一组数据块的读或写及有关的控制盒管理为单位的干预。同时,又可以实现CPU、通道和IO设备三者的并行操作,从而更有效的提高整个系统的资源利用率。
例如,当CPU要完成一组相关的读或写操作及有关控制时,只需向IO通道发送一条IO指令,已给出其所要执行的通道程序的首址和要访问的IO设备,通道接到该指令后,通过执行通道程序便可完成CPU指定的IO任务。
IO通道和一般处理器的区别是:通道指令的类型单一,没有自己的内存,通道所执行的通道程序释放在主机内存中的,也就是说通道与CPU共享内存。
IO通道与DMA的区别是:DMA方式需要CPU来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的。另外,每个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换。