第四章 设备管理
一、I/O硬件
I/O总线:
设备管理器:
- I/O部件通常包含一个机械部件和一个电子部件,电子部件被称作I/O部件或设备管理器。
- 操作系统一般只和控制器打交道,不和设备本身打交道。
- 控制器的任务:实现外设和内存或CPU之间完成比特流(或外部信号)和字节快(字节流)之间的转换。
DMA(Direct Memory Access):
用于大量数据的传输,使得设备与内存的数据传输可以不经过CPU,由DMA设备管理。
其中四个寄存器:
- DR:data register,用于暂存经过DMA的数据(设备->主存/主存->设备)。
- DC:data counter,用于存放被CPU要读或要写的字节数,开始时给定。
- MAR:Memory Address Register,输入时是数据传送到主存的起始地址,输出是由内存到设备的内存源地址。
- CR:code register,用于接受从CPU发来的I/O命令和相关控制信息,或保存设备状态。
I/O通道
定义:通道是独立于CPU的专门负责I/O的处理机,对外部设备实现统一管理,从而使输入操作和CPU并行操作。
通道这个术语在通常指功能比CPU较弱、速度慢、价格便宜的处理机,但在微型机中常常指与DMA和I/O处理机相连设备的单纯数据传送通路,并没有处理机的功能
通道的实现
- 命令字
因为不太涉及这方面的知识,所以不深入解释命令字。 - 通道程序:
通道命令字的有序集合,构成通道程序。通道程序由通道单独执行,和CPU并行执行。
通道的分类:
- 字节多路通道:按字节交叉的方式工作,处理完一个通道程序的控制某台设备传送一个字节后,可以处理另一个通道程序控制其他的设备。适用于以字节为单位的低速I/O设备,如打印机、终端。
- 数组选择通道:按成组的方式进行数据传输,在一段时间内只能执行一个通道程序,只允许一台设备进行数据传输。连接磁盘这种高速I/O设备。
- 数组多路通道:结合了以上两者的优点,先为一台设备执行一条通道指令,再自动转接,为另一台设备执行一条通道程序。
单通道和多通道:
交叉连接:减少设备的等待。
通道与中断程序的区别:
中断控制传送由中断控制器发出控制信息,中止CPU现行程序,转去执行中断程序。通道方式则是由执行通道程序来实现。中断服务程序和CPU的现行程序是串行工作的,而通道程序的执行与CPU的执行是并行工作的。通道是集中独立的硬件,可连接多台快、慢速外设并行工作,而中断控制传送适用于慢速外设每个外设都有自己的接口和中断服务程序。中断的功能强,可以处理各种异常或突发事件,而通道只适合于对数据传送的控制。程序中断控制传送以CPU为中心,通道和DMA以内存为中心。
- DMA主要靠专用接口硬件实现数据传输;通道则执行通道程序实现数据传送。
I/O设备的分类
I/O的发展历史:
程序直接控制:
程序直接控制I/O,I/O控制器仅执行交付的操作,用状态寄存器来反映设备状态。I/O完成任务,不以中断的方式来来主动通知CPU,而要CPU周期性(轮询)检查I/O部件的寄存器,也就是说,I/O直接控制I/O操作的全过程。
中断驱动方式:
为了解决CPU等待I/O操作完成的时间,进行以下步骤:
- 某个进程需要数据时,发出指令让I/O设备准备数据,同时使I/O控制器的中断允许位打开,准备随似乎调用中断操作
- 进程发出指令启动I/O后,进程进入等待队列等待,或者在继续运行的状态下等待I/O完成,
- I/O完成时,I/O设备控制器通过中断请求线向CPU发出中断信号,CPU收到信号后,转向预先设计好的中断处理程序对数据的传送工作做相应的处理。
- 得到数据的进程进入就绪对立。随后等待被调度继续工作。
问题:I/O控制器数据缓存器满了就会发生中断,但是数据传输量大时可能要进行多次中断,中断次数太多会发生CPU无法响应和数据丢失等问题。
DMA控制方式:
前面有详细介绍。
通道控制方式
前面也有详细介绍。
二、I/O软件
I/O软件的基本要求:
-
实现设备独立性和统一命名:;例如,应用程序使用文件或设备,知识简单地使用一个字符串或者整数即可,其命名不依赖于设备。
-
设备出错处理
-
阻塞式编程模式:把实际I/O编程中的中断驱动操作(异步)变为阻塞式(同步)的操作,方便用户的理解。
I/O软件组织的四个层次:- 中断处理程序 ------------------------------------ | 硬件
- 设备驱动程序--------------------------------------|
- 与设备无关的操作系统软件--------------------|
- 用户层软件-----------------------------------------| 软件
设备的管理与使用
设备管理为了给用户提供方面统一的界面,任务有动态地掌握并记录设备的状态,设备分配和释放,缓冲区管理和实现物理I/O设备的操作。
设备相关物理调用:
- 申请设备:系统调用中的参数说明了要申请的设备名称,处理调用时要按照设备特性及设备占用情况来分配设备,返回申请是否成功的标志。
- 将数据写入设备
- 从设备读取数据
- 释放设备。释放设备的反操作。
设备管理中的数据结构
在多通路的I/O系统中,为了满足一个I/O请求,不仅仅是分配一个I/O设备的问题,还应分配相应的控制器和通道,而设备管理程序对I/O设备的分配和控制是借助一些表格;表格记录了对I/O收购合并控制所需的信息。他们是设备管理程序实现管理功能的数据结构:
I/O设备的使用方式
1.独占式使用
在申请设备时,如果设备空闲,就将其独占,不再允许其他进程申请使用,一直到该设备被释放,才允许其他进程使用。(设备利用率比较低)
2.分时式共享使用设备
以一次I/O为单位分时使用设备,不同的进程的I/O操作请求以排队方式分时地占用设备。从用户程序调用界面来看,I/O操作是并发的。例如磁盘是这样的。
3.以SPOOLIing方式使用外设
在联机情况下实现的同时外围操作,假脱机真联机。实质是以批处理的形式完成I/O操作。目的是提高外设的利用率。
例如打印机进行输出时,必须独占打印机设备,才能使关联的字符行连续打印,但如果进程一边生成数据结果一边调用写打印机输出,则打印机在独占期间要等待输出结果而未被充分利用。所以可以先将生成的输出数据先写入磁盘的输出井中,然后等完成后打印机若空间传入内存中的输出缓存区等待输出。
共享打印机:
系统对于用户的打印输出,并不将打印机发呢配给用户进程,而是在输出井中申请一个空闲区,将打印数据送入其中,然后为用户申请并填写打印表,把该表挂在请求打印队列上。若打印机空闲,输出请程序从请求打印队首取表,将打印数据传送到输出缓冲区,再进行打印,直到打印队列为空。
在内存设指一个输出缓冲区和输入缓冲区,以及有两个进程(输出和输入)。而在磁盘设置输入井和输出井。
I/O软件层次结构
有一种说法:I/0软件层
一般将设备管理系统划分并组织成三个层次加一个硬件:
用户层:
用户层与设备的控制细节无关,不直接与设备打交道,将所有设备看作逻辑资源,为用户提供各类I/O函数。
与设备无关的I/O层:
为了提高系统的可适应性和可扩展性,我们希望所编制的用户程序与实际使用的物理设备无关。为此,将逻辑设备与物理设备区分,并引入逻辑设备名称和物理设备名的概念。为实现与设备的无关性,系统中有一张联系逻辑设备名称和物理设备名称的映射表(逻辑设备表)。对上层提供系统调用的接口,对下通过设备驱动程序接口调用设备驱动程序。
设备驱动与中断管理:
设备驱动程序就是将设备无关层的抽象请求转化为对地产设备的具体操作。
缓存管理:
缓解CPU和I/O速度不匹配的矛盾。提高CPU和I/O的并行性。减少CPU的中断频率。
分:
- 单缓冲
- 双缓冲(使数据区-缓冲区和缓冲区-外设的交换数据并行)
- 循环缓冲
三、存储设备
常见的存储外设:
- 磁盘
- 磁带
- 光盘
磁盘调度:
磁盘作为共享设备,一次只能允许一个进程操作。
磁盘调度分为寻道调度和旋转调度,现进行寻道,再进行旋转。
目前来看,寻道是访问磁盘最耗时的,所以磁盘调度的大多数算法还是在追求最短平均寻道时间上。下面介绍几个寻道磁盘调度算法:
- 先来先服务:所有进程的方位磁盘请求都是按照先来先服务,实现简单,未优化,平均寻道时间较长。
- 最短寻道时间优先:选择与当前磁头所在磁道最近的一下个进程I/O操作,是每次寻道时间最短,但是不能保证平均寻道时间最短。3. SCAN算法:又叫做电梯算法,要考虑方向,一次朝着规定的方向,等到到头了再折返,再规定的方向上选择与当前磁道最近的处理。4. 循环扫描算法:按例子说,假如18磁道是100左边最早到的,但是按照SCAN算法还是最后一个处理18,这就造成了“饥饿”。为了解决这个问题,当访问到184时,直接访问18,再循环向右(由里向外)。5. N步SCAN算法:将对磁盘的请求队列分组,一组一组的进程SCAN算法,这样可以避免“黏着”现象。
6. FSCAN算法:将NSCN简化,有两个队列,一个First和其他,再处理First队列的时候加入的请求,都放入其他队列中,处理完First再处理其他队列。
旋转调度算法:
- 一般就是扇区交叉编制,应为访问时会有惯性,不一定会转到下一个磁面。
磁盘错误:
- 寻道错误
- 瞬时校验错误
- 程序性错误
- 永久性校验错误
- 控制器错误
RAM盘:当内存足够大的时候,将一块内存区域虚拟成磁盘块设备,同样支持读写数据块操作。
磁盘阵列RAID
详细内容点击☞RAID磁盘阵列