设备管理是对除CPU、主存和控制台以外的所有设备的管理。这些设备通常称为外部设备或I/O设备。
设备类别的划分可以从不同方面描述,比如按设备的使用特性,可分为存储设备、输入/输出设备、终端设备及脱机设备等。按设备的从属关系,可把设备划分为系统设备和用户设备。在此我们主要从以下3方面来描述。
按信息组织方式来划分设备。把外部设备划分为字符设备和块设备。键盘终端、打印机等以字符为单位组织和处理信息的设备被称为字符设备;而磁盘、磁带等以字符块为单位组织和处理信息的设备被称为块设备。
按照设备的数据传输速率可以分为低速设备、中速设备和高速设备。比如键盘、鼠标就属于低速设备;打印机、扫描仪属于中速设备;而磁盘、光盘驱动器属于高速设备。
按照设备的共享属性可以分为独占设备、共享设备和虚拟设备。独占设备是指一段时间内只允许一个用户(进程)访问的设备。共享设备是指一段时间内可以允许多个用户(进程)访问的设备,比如磁盘,它可以同时被多个进程访问。虚拟设备是指通过虚拟技术将一台独占设备当做多个设备共享。
设备管理是对计算机输入/输出系统的管理。其主要任务是:
(1)选择和分配输入/输出设备,以便进行数据传输操作。
(2)控制输入/输出设备和CPU(或内存)之间交换数据。
(3)为用户提供一个友好的透明接口,将用户和设备硬件特性分开,使得用户在编制应用程序时不必涉及具体设备,系统按用户要求控制设备工作。另外,这个接口还为新增加的用户设备提供一个与系统核心相连接的入口,以便用户开发新的设备管理程序。
(4)提高设备和设备之间、CPU和设备之间,以及进程和进程之间的并行操作程度,以使操作系统获得最佳效率。
因为设备管理直接与物理设备相关,而且不同的计算机系统配置不同的I/O设备,所以不同的操作系统的设备管理程序也有很大差别。但为了完成上述主要任务,设备管理程序一般要提供下述功能:
(1)提供和进程管理系统的接口。当进程要求设备资源时,该接口将进程要求转达给设备管理程序。
(2)进行设备分配。按照设备类型与相应的分配算法把设备和其他有关的硬件分配给请求该设备的进程,并把未分配到所请求设备或其他有关硬件的进程放入等待队列。
(3)实现设备和设备、设备和CPU等之间的并行操作,其中需要大量的硬件支持,例如寄存器、控制器、通道及中断等。
(4)进行缓冲管理,解决低速I/O设备与高速CPU之间传送数据的不匹配问题。
设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送,常用的数据传送控制方式有:程序直接控制方式、中断控制方式、DMA方式和通道控制方式。
程序直接控制方式就是由用户进程来直接控制内存或CPU与外围设备之间的信息传送。这种方式的控制者是用户进程。当用户进程需要数据时,它通过CPU发出启动设备准备数据的启动命令,同时将设备状态寄存器的忙/闲标志busy置为1,表示设备忙,然后用户进程进入测试等待状态。在等待时间内,CPU不断地用一条测试指令检查设备状态寄存器,当busy为0时,表示输入设备已将一个字符数据送入数据寄存器,于是处理机将该数据取出送到指定内存单元。接着开始读下一个数据,同时置busy为1。程序直接控制方式虽然控制简单,也不需要多少硬件支持,但是程序直接控制方式存在CPU和外围设备只能串行工作,CPU利用率低;不能实现设备之间的并行工作;无法发现和处理由于设备或其他硬件所产生的错误等问题。因此程序直接控制方式只适用于那些CPU执行速度较慢,而且外围设备较少的系统。
为了减少程序直接控制方式中CPU等待时间及提高系统的并行工作程序,中断控制方式被用来控制外围设备与内存或者CPU之间的数据传送。当某进程要启动某个I/O设备工作时,由CPU向该设备的设备控制器发出一个I/O命令,然后继续执行原来的工作,同时设备控制器开始控制I/O设备按照命令要求进行具体的I/O操作,当I/O完成后,设备控制器向CPU发出中断信号,表示一个I/O步骤完成,CPU再根据这条中断请求调用相应的中断处理程序进行处理。在这个过程中,CPU和I/O设备之间实现了并行工作。尽管中断方式与程序直接控制方式相比,CPU的利用率大大提高且能支持多道程序和设备的并行操作,但仍然存在着许多问题:
(1)由于在I/O控制器的数据缓冲寄存器装满数据后将会发生中断,而且数据缓冲寄存器通常较小(因为一般是以字为单位传送),因此在一些数据传送过程中,发生中断次数较多,这将耗去大量的CPU处理时间。
(2)现代计算机系统通常配置各种各样的外围设备。如果这些设备通过中断处理方式进行并行操作,则由于中断次数的急剧增加而造成CPU无法响应中断,出现数据丢失现象。(3)在采用中断控制方式时,我们都是假定外围设备的速度非常低,而CPU处理速度非常高。也就是说,当设备把数据放入数据缓冲寄存器并发出中断信号后,CPU有足够的时间在下一个数据进入数据缓冲寄存器前取走这些数据。如果外围设备的速度也非常高,则可能造成数据缓冲寄存器的数据由于CPU来不及取走而丢失。
DMA方式又称直接存取(Direct Memory Access)方式,是一种完全由硬件执行I/O数据交换的工作方式。它既考虑到中断的响应,同时又要节约中断开销。此时,DMA控制器代替CPU完全接管对总线的控制,数据交换不经过CPU,直接在内存和外围设备之间成批进行。批量数据(数据块)的传送由计数器逐个计数,并由内存地址寄存器确定内存地址。除了在数据块传送开始时需要CPU启动指令和在整个数据块传送结束时需发中断通知CPU进行中断处理外,不再像中断控制方式那样需要CPU的频繁干涉。
DMA方式仍存在着一定的局限性。DMA方式对外围设备的管理和某些操作仍由CPU控制。在大中型计算机中,系统所配置的外围设备种类越来越多,数量也越来越大,因而对外围设备的管理与控制也就愈来愈复杂。多个DMA控制器的同时使用会引起内存地址的冲突并使得控制过程进一步复杂化。因此,在大中型计算机系统中,除了设置DMA器件外,还设置专门的硬件通道装置。
通道控制方式与DMA方式相类似,也是一种以内存为中心,实现设备和内存直接交换数据的控制方式。与DMA方式不同的是,在DMA方式中,数据的传送方向、存取数据的内存起始地址及传送的数据块长度等都由CPU控制;而在通道方式中,这些都由独立于CPU的通道来进行控制。另外,与DMA方式每台设备至少一个DMA控制器相比,通道控制方式可以做到一个通道控制多台设备与内存进行数据交换,从而进一步减轻了CPU的工作负担,增加了计算机系统的并行工作程度。
通道是通过执行通道程序来完成CPU制定的I/O任务,当执行完成后,发出中断请求表示I/O结束,CPU再执行相应的中断处理程序。通道程序是由一系列通道指令组成的,通道指令一般包含被交换数据在内存中应占据的位置、传送方向、数据块长度及被控制的I/O设备的地址信息、特征信息(例如,是磁带设备还是磁盘设备)等,通道指令在通道中没有存储部件时存放在内存中。
通道指令的格式一般由操作码、通道程序结束标志P、记录结束标志R、计数段(数据块长度),以及内存地址段等组成。通道程序由系统根据进程要求数据自动生成。