设备管理的主要功能有: 缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等。由于I/O 设备不仅种类繁多,而且它们的特性和操作方式往往相差甚大,这就使得设备管理成为操作系统中最繁杂且与硬件最紧密相关的部分。
1 I/O 系统
顾名思义,I/O 系统是用于实现数据输入、输出及数据存储的系统。在 I/O 系统中,除了需要直接用于 I/O 和存储信息的设备外,还需要有相应的设备控制器和高速总线。在有的大、中型计算机系统中,还配置了 I/O 通道或 I/O 处理机。
1.1 I/O 设备
分类方式(省略)
设备与控制器之间的接口
通常,设备并不是直接与 CPU 进行通信,而是与设备控制器通信,因此,在 I/O 设备中应含有与设备控制器间的接口,在该接口中有三种类型的信 ,各对应一条信 线。
1) 数据信 线
这类信 线用于在设备和设备控制器之间传送数据信 。对输入设备而言,由外界输入的信 经转换器转换后所形成的数据,通常先送入缓冲器中,当数据量达到一定的比特(字符)数后,再从缓冲器通过一组数据信 线传送给设备控制器,如图 5-1 所示。对输出设备而言,则是将从设备控制器经过数据信 线传送来的一批数据先暂存于缓冲器中,经转换器作适当转换后,再逐个字符地输出。
2) 控制信 线
这是作为由设备控制器向 I/O 设备发送控制信 时的通路。该信 规定了设备将要执行的操作,如读操作(指由设备向控制器传送数据)或写操作(从控制器接收数据),或执行磁头移动等操作。
3) 状态信 线
这类信 线用于传送指示设备当前状态的信 。设备的当前状态有正在读(或写);设备已读(写)完成,并准备好新的数据传送。
1.2 设备控制器
设备控制器是计算机中的一个实体,其主要职责是控制一个或多个 I/O 设备,以实现 I/O设备和计算机之间的数据交换。它是 CPU 与 I/O 设备之间的接口,它接收从 CPU 发来的命令,并去控制 I/O 设备工作,以使处理机从繁杂的设备控制事务中解脱出来。
设备控制器的基本功能
1) 接收和识别命令
2) 数据交换
3) 标识和 告设备的状态
4) 地址识别
5) 数据缓冲
6) 差错控制
设备控制器的组成
1) 设备控制器与处理机的接口
2) 设备控制器与设备的接口
3) I/O 逻辑
1.3 I/O 通道
I/O 通道是一种特殊的处理机,它具有执行 I/O 指令的能力,并通过执行通道(I/O)程序来控制 I/O 操作。
通道类型
1) 字节多路通道(Byte Multiplexor Channel)
2) 数组选择通道(Block Selector Channel)
3) 数组多路通道(Block Multiplexor Channel)
1.4 总线系统
在计算机系统中的各部件,如 CPU、存储器以及各种 I/O 设备之间的联系,都是通过总线来实现的。总线的性能是用总线的时钟频率、带宽和相应的总线传输速率等指标来衡量的。随着计算机中 CPU 和内存速率的提高,字长的增加,以及不断地引入新型设备,促使人们对总线的时钟频率、带宽和传输速率的要求也不断提高。这便推动了总线的不断发展,使之由早期的 ISA 总线发展为 EISA 总线、VESA 总线,进而又演变成当前广为流行的 PCI 总线。
2 I/O 控制方式
在 I/O 控制方式的整个发展过程中,始终贯穿着这样一条宗旨,即尽量减少主机对 I/O 控制的干预,把主机从繁杂的 I/O 控制事务中解脱出来,以便更多地去完成数据处理任务。
2.1 程序 I/O 方式
2.2 中断驱动 I/O 控制方式
2.3 直接存储器访问(DMA)I/O 控制方式
2.4 I/O 通道控制方式
3 缓冲管理
为了缓和 CPU 与 I/O 设备速度不匹配的矛盾,提高 CPU 和 I/O 设备的并行性,在现代操作系统中,几乎所有的 I/O 设备在与处理机交换数据时都用了缓冲区。缓冲管理的主要职责是组织好这些缓冲区,并提供获得和释放缓冲区的手段。
3.2 单缓冲和双缓冲
在单缓冲情况下,每当用户进程发出一 I/O 请求时,操作系统便在主存中为之分配一缓冲区。
为了加快输入和输出速度,提高设备利用率,人们又引入了双缓冲区机制,也称为缓冲对换(Buffer Swapping)。在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。
3.3 循环缓冲
当输入与输出或生产者与消费者的速度基本相匹配时,采用双缓冲能获得较好的效果,可使生产者和消费者基本上能并行操作。但若两者的速度相差甚远,双缓冲的效果则不够理想,不过可以随着缓冲区数量的增加,使情况有所改善。因此,又引入了多缓冲机制。
可将多个缓冲组织成循环缓冲形式。对于用作输入的循环缓冲,通常是提供给输入进程或计算进程使用,输入进程不断向空缓冲区输入数据,而计算进程则从中提取数据进行计算。
3.4 缓冲池
上述的缓冲区仅适用于某特定的 I/O 进程和计算进程,因而它们属于专用缓冲。当系统较大时,将会有许多这样的循环缓冲,这不仅要消耗大量的内存空间,而且其利用率不高。为了提高缓冲区的利用率,目前广泛流行公用缓冲池(Buffer Pool),在池中设置了多个可供
若干个进程共享的缓冲区。
4 I/O软件
I/O 软件的总体设计目标是高效率和通用性。前者是要确保 I/O 设备与 CPU 的并发性,以提高资源的利用率;后者则是指尽可能地提供简单抽象、清晰而统一的接口,采用统一标准的方法,来管理所有的设备以及所需的 I/O 操作。为了达到这一目标,通常将 I/O软件组织成一种层次结构,低层软件用于实现与硬件相关的操作,并可屏蔽硬件的具体细节,高层软件则主要向用户提供一个简洁、友好和规范的接口。每一层具有一个要执行的定义明确的功能和一个与邻近层次定义明确的接口,各层的功能与接口随系统的不同而异。
4.1 I/O 软件的设计目标和原则
目标:
- 与具体设备无关;
- 统一命名
- 对错误的处理
- 缓冲技术
- 设备的分配和释放
- I/O 控制方式
通常把 I/O 软件组织成四个层次:
- 用户层软件
- 设备独立性软件
- 设备驱动程序
- 中断处理程序
4.2 中断处理程序
4.3 设备驱动程序
设备驱动程序通常又称为设备处理程序,它是 I/O 进程与设备控制器之间的通信程序,又由于它常以进程的形式存在,故以后就简称之为设备驱动进程。
为了实现 I/O 进程与设备控制器之间的通信,设备驱动程序应具有以下功能:
(1) 接收由设备独立性软件发来的命令和参数,并将命令中的抽象要求转换为具体要求,例如,将磁盘块 转换为磁盘的盘面、磁道 及扇区 。
(2) 检查用户 I/O 请求的合法性,了解 I/O 设备的状态,传递有关参数,设置设备的工作方式。
(3) 发出 I/O 命令。如果设备空闲,便立即启动 I/O 设备去完成指定的 I/O 操作;如果设备处于忙碌状态,则将请求者的请求块挂在设备队列上等待。
(4) 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。
(5) 对于设置有通道的计算机系统,驱动程序还应能够根据用户的 I/O 请求,自动地构成通道程序。
设备处理方式:在不同的操作系统中所采用的设备处理方式并不完全相同。根据在设备处理时是否设置进程,以及设置什么样的进程而把设备处理方式分成以下三类:
(1) 为每一类设备设置一个进程,专门用于执行这类设备的 I/O 操作。比如,为所有的交互式终端设置一个交互式终端进程;又如,为同一类型的打印机设置一个打印进程。
(2) 在整个系统中设置一个 I/O 进程,专门用于执行系统中所有各类设备的 I/O 操作。也可以设置一个输入进程和一个输出进程,分别处理系统中所有各类设备的输入或输出操作。
(3) 不设置专门的设备处理进程,而只为各类设备设置相应的设备处理程序(模块),供用户进程或系统进程调用。
设备驱动程序的特点:设备驱动程序属于低级的系统例程,它与一般的应用程序及系统程序之间有下述明显差异:
(1) 驱动程序主要是指在请求 I/O 的进程与设备控制器之间的一个通信和转换程序。它将进程的 I/O 请求经过转换后,传送给控制器;又把控制器中所记录的设备状态和 I/O 操作完成情况及时地反映给请求 I/O 的进程。
(2) 驱动程序与设备控制器和 I/O 设备的硬件特性紧密相关,因而对不同类型的设备应配置不同的驱动程序。例如,可以为相同的多个终端设置一个终端驱动程序,但有时即使是同一类型的设备,由于其生产厂家不同,它们也可能并不完全兼容,此时也须为它们配
置不同的驱动程序。
(3) 驱动程序与 I/O 设备所采用的 I/O 控制方式紧密相关。常用的 I/O 控制方式是中断驱动和 DMA 方式,这两种方式的驱动程序明显不同,因为后者应按数组方式启动设备及进行中断处理。
(4) 由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言书写。目前有很多驱动程序的基本部分,已经固化在 ROM 中。
(5) 驱动程序应允许可重入。一个正在运行的驱动程序常会在一次调用完成前被再次调用。例如, 络驱动程序正在处理一个到来的数据包时,另一个数据包可能到达。
(6) 驱动程序不允许系统调用。但是为了满足其与内核其它部分的交互,可以允许对某些内核过程的调用,如通过调用内核过程来分配和释放内存页面作为缓冲区,以及调用其它过程来管理 MMU 定时器、DMA 控制器、中断控制器等。
设备驱动程序的处理过程
不同类型的设备应有不同的设备驱动程序,但大体上它们都可以分成两部分,其中,除了要有能够驱动 I/O 设备工作的驱动程序外,还需要有设备中断处理程序,以处理 I/O 完成后的工作。设备驱动程序的主要任务是启动指定设备。但在启动之前,还必须完成必要的准备工作,如检测设备状态是否为“忙”等。在完成所有的准备工作后,才最后向设备控制器发送一条启动命令。以下是设备驱动程序的处理过程。
1) 将抽象要求转换为具体要求
2) 检查 I/O 请求的合法性
3) 读出和检查设备的状态
4) 传送必要的参数
5) 工作方式的设置
6) 启动 I/O 设备
驱动程序发出 I/O 命令后,基本的 I/O 操作是在设备控制器的控制下进行的。通常,I/O操作所要完成的工作较多,需要一定的时间,如读/写一个盘块中的数据,此时驱动(程序)进程把自己阻塞起来,直到中断到来时才将它唤醒。
4.4 设备独立性软件
为了提高 OS 的可适应性和可扩展性,在现代 OS 中都毫无例外地实现了设备独立性(Device Independence),也称为设备无关性。其基本含义是: 应用程序独立于具体使用的物理设备。
4.5 用户层的 I/O 软件
一般而言,大部分的 I/O 软件都在操作系统内部,但仍有一小部分在用户层,包括与用户程序链接在一起的库函数,以及完全运行于内核之外的一些程序。
5 设备分配
在多道程序环境下,系统中的设备供所有进程共享。为防止诸进程对系统资源的无序竞争,特规定系统设备不允许用户自行使用,必须由系统统一分配。每当进程向系统提出I/O 请求时,只要是可能和安全的,设备分配程序便按照一定的策略,把设备分配给请求用户(进程)。在有的系统中,为了确保在 CPU 与设备之间能进行通信,还应分配相应的控制器和通道。为了实现设备分配,必须在系统中设置相应的数据结构。
5.1 设备分配中的数据结构
在进行设备分配时,通常都需要借助于一些表格的帮助。在表格中记录了相应设备或控制器的状态及对设备或控制器进行控制所需的信息。在进行设备分配时所需的数据结构(表格)有:设备控制表、控制器控制表、通道控制表和系统设备表等。
设备控制表(DCT)
控制器控制表、通道控制表和系统设备表
系统设备表(SDT)。这是系统范围的数据结构,其中记录了系统中全部设备的情况。每个设备占一个表目,其中包括有设备类型、设备标识符、设备控制表及设备驱动程序的入口等项,如图 上图的 (c) 所示。
5.2 设备分配时应考虑的因素
为了使系统有条不紊地工作,系统在分配设备时,应考虑这样几个因素: ① 设备的固有属性;② 设备分配算法;③ 设备分配时的安全性;④ 设备独立性。
5.3 独占设备的分配程序
5.4 SPOOLing 技术
虚拟性是 OS 的四大特征之一。如果说可以通过多道程序技术将一台物理CPU 虚拟为多台逻辑 CPU,从而允许多个用户共享一台主机,那么,通过 SPOOLing 技术便可将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备,同样允许多个用户共享一台物理 I/O设备。
6 磁盘存储器的管理
磁盘存储器不仅容量大,存取速度快,而且可以实现随机存取,是当前存放大量程序和数据的理想设备,故在现代计算机系统中,都配置了磁盘存储器,并以它为主来存放文件。这样,对文件的操作,都将涉及到对磁盘的访问。磁盘 I/O 速度的高低和磁盘系统的可靠性,都将直接影响到系统性能。因此,设法改善磁盘系统的性能,已成为现代操作系统的重要任务之一。
磁盘简介:
本节内容多而杂,有很多常用基础专业用语,建议阅读原著。(P191)
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!