第六章输入输出系统
6.1 I/O系统的功能、模型和接口
6.2 I/O设备和设备控制器
6.3 中断机构和中断处理程序
6.4 设备驱动程序
6.5 与设备无关的I/O软件
6.6 用户层的I/O软件
6.7 缓冲区管理
6.8 磁盘存储器的性能和调度
第七章文件管理
7.1 文件和文件系统
7.2 文件的逻辑结构
7.3 文件目录
7.4 文件共享
7.5 文件保护
第六章输入输出系统
6.1 I/O系统的功能、模型和接口
6.2 I/O设备和设备控制器
6.3 中断机构和中断处理程序
6.4 设备驱动程序
6.5 与设备无关的I/O软件
6.6 用户层的I/O软件
6.7 缓冲区管理
6.8 磁盘存储器的性能和调度
6.1 I/O系统的功能、模型和接口
I/O系统管理的主要对象是I/O设备和相应的设备控制器。其最主要的任务是,完成用户提出的I/O请求,提高I/O速率,以及提高设备的利用率,并能为更高层的进程方便地使用这些设备提供手段。
6.1.1 I/O系统的基本功能
1. 隐藏物理设备的细节
I/O设备的类型非常多,且彼此间在多方面都有差异,诸如它们接收和产生数据的速度,传输方向、粒度、数据的表示形式及可靠性等方面。
2. 与设备的无关性
隐藏物理设备的细节,在早期的OS中就已实现,它可方便用户对设备的使用。与设备的无关性是在较晚时才实现的,这是在隐藏物理设备细节的基础上实现的。
3. 提高处理机和I/O设备的利用率
在一般的系统中,许多I/O设备间是相互独立的,能够并行操作,在处理机与设备之间也能并行操作。因此,I/O系统的第三个功能是要尽可能地让处理机和I/O设备并行操作,以提高它们的利用率。为此,一方面要求处理机能快速响应用户的I/O请求,使I/O设备尽快地运行起来;另一方面也应尽量减少在每个I/O设备运行时处理机的干预时间。
4. 对I/O设备进行控制
对I/O设备进行控制是驱动程序的功能。目前对I/O设备有四种控制方式:① 采用轮询的可编程I/O方式;② 采用中断的可编程I/O方式;③ 直接存储器访问方式;④ I/O通道方式。
5. 确保对设备的正确共享
从设备的共享属性上,可将系统中的设备分为如下两类:
(1) 独占设备,进程应互斥地访问这类设备,即系统一旦把这类设备分配给了某进程后,便由该进程独占,直至用完释放。典型的独占设备有打印机、磁带机等。系统在对独占设备进行分配时,还应考虑到分配的安全性。
(2) 共享设备,是指在一段时间内允许多个进程同时访问的设备。典型的共享设备是磁盘,当有多个进程需对磁盘执行读、写操作时,可以交叉进行,不会影响到读、写的正确性。
6. 错误处理
大多数的设备都包括了较多的机械和电气部分,运行时容易出现错误和故障。从处理的角度,可将错误分为临时性错误和持久性错误。对于临时性错误,可通过重试操作来纠正,只有在发生了持久性错误时,才需要向上层报告。
6.1.2 I/O系统的层次结构和模型
1. I/O软件的层次结构
通常把I/O 软件组织成四个层次,如图6-1所示。
图6-1 I/O系统的层次结构
2. I/O系统中各种模块之间的层次视图
为了能更清晰地描述I/O系统中主要模块之间的关系,我们进一步介绍I/O系统中各种I/O模块之间的层次视图。见图6-2所示。 1) I/O系统的上、下接口
(1) I/O系统接口。
(2) 软件/硬件(RW/HW)接口。
图6-2 I/O系统中各种模块之间的层次视图
2) I/O系统的分层
与前面所述的I/O软件组织的层次结构相对应,I/O系统本身也可分为如下三个层次:
(1) 中断处理程序。
(2) 设备驱动程序。
(3) 设备独立性软件。
6.2 I/O设备和设备控制器
I/O设备一般是由执行I/O操作的机械部分和执行控制I/O的电子部件组成。通常将这两部分分开,执行I/O操作的机械部分就是一般的I/O设备,而执行控制I/O的电子部件则称为设备控制器或适配器(adapter)。在微型机和小型机中的控制器常做成印刷电路卡形式,因而也常称为控制卡、接口卡或网卡,可将它插入计算机的扩展槽中。在有的大、中型计算机系统中,还配置了I/O通道或I/O处理机。
2. 设备与控制器之间的接口
通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应含有与设备控制器间的接口,在该接口中有三种类型的信号(见图6-3所示),各对应一条信号线。
(1) 数据信号线。
(2) 控制信号线。
(3) 状态信号线。
图6-3 设备与控制器间的接口
6.2.2 设备控制器
1. 设备控制器的基本功能
(1) 接收和识别命令。
(2) 数据交换。
(3) 标识和报告设备的状态。
(4) 地址识别。
(5) 数据缓冲区。
(6) 差错控制。
2. 设备控制器的组成
由于设备控制器位于CPU与设备之间,它既要与CPU通信,又要与设备通信,还应具有按照CPU所发来的命令去控制设备工作的功能,因此,现有的大多数控制器都是由以下三部分组成:
(1) 设备控制器与处理机的接口。
(2) 设备控制器与设备的接口。
(3) I/O逻辑。
图6-4 设备控制器的组成
6.3 中断机构和中断处理程序
对于操作系统中的I/O系统,本章采取从低层向高层的介绍方法,从本节开始首先介绍中断处理程序。中断在操作系统中有着特殊重要的地位,它是多道程序得以实现的基础,没有中断,就不可能实现多道程序,因为进程之间的切换是通过中断来完成的。另一方面,中断也是设备管理的基础,为了提高处理机的利用率和实现CPU与I/O设备并行执行,也必需有中断的支持。中断处理程序是I/O系统中最低的一层,它是整个I/O系统的基础。
6.3.2 中断处理程序
当一个进程请求I/O 操作时,该进程将被挂起,直到I/O设备完成I/O操作后,设备控制器便向CPU发送一个中断请求,CPU响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除相应进程的阻塞状态。
图6-10 中断现场保护示意图
图6-11 中断处理流程
6.4 设备驱动程序
设备处理程序通常又称为设备驱动程序,它是I/O系统的高层与设备控制器之间的通信程序,其主要任务是接收上层软件发来的抽象I/O要求,如read或write命令,再把它转换为具体要求后,发送给设备控制器,启动设备去执行;反之,它也将由设备控制器发来的信号传送给上层软件。由于驱动程序与硬件密切相关,故通常应为每一类设备配置一种驱动程序。例如,打印机和显示器需要不同的驱动程序。
6.4.1 设备驱动程序概述
1. 设备驱动程序的功能
(1) 接收由与设备无关的软件发来的命令和参数,并将命令中的抽象要求转换为与设备相关的低层操作序列。
(2) 检查用户I/O请求的合法性,了解I/O设备的工作状态,传递与I/O设备操作有关的参数,设置设备的工作方式。
(3) 发出I/O命令,如果设备空闲,便立即启动I/O设备,完成指定的I/O操作;如果设备忙碌,则将请求者的请求块挂在设备队列上等待。
(4) 及时响应由设备控制器发来的中断请求,并根据其中断类型,调用相应的中断处理程序进行处理。
2. 设备驱动程序的特点
设备驱动程序属于低级的系统例程,它与一般的应用程序及系统程序之间有下述明显差异:
(1) 驱动程序是实现在与设备无关的软件和设备控制器之间通信和转换的程序,具体说,它将抽象的I/O请求转换成具体的I/O操作后传送给控制器。又把控制器中所记录的设备状态和I/O操作完成情况,及时地反映给请求I/O的进程。
(2) 驱动程序与设备控制器以及I/O设备的硬件特性紧密相关,对于不同类型的设备,应配置不同的驱动程序。但可以为相同的多个终端设置一个终端驱动程序。
(3) 驱动程序与I/O设备所采用的I/O控制方式紧密相关,常用的I/O控制方式是中断驱动和DMA方式。
(4) 由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言书写。目前有很多驱动程序的基本部分已经固化在ROM中。
(5) 驱动程序应允许可重入。一个正在运行的驱动程序常会在一次调用完成前被再次调用。
3. 设备处理方式
在不同的操作系统中,所采用的设备处理方式并不完全相同。
6.4.2 设备驱动程序的处理过程
设备驱动程序的主要任务是启动指定设备,完成上层指定的I/O工作。但在启动之前,应先完成必要的准备工作,如检测设备状态是否为“忙”等。在完成所有的准备工作后,才向设备控制器发送一条启动命令。
6.4.3 对I/O设备的控制方式
对设备的控制,早期是使用轮询的可编程I/O方式,后来发展为使用中断的可编程I/O方式。
3. 直接存储器访问方式
1) 接存储器访问方式的引入
虽然中断驱动I/O比程序I/O方式更有效,但它仍是以字(节)为单位进行I/O的。每当完成一个字(节)的I/O时,控制器便要向CPU请求一次中断。
该方式的特点是:
(1) 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块。
(2) 所传送的数据是从设备直接送入内存的,或者相反。
(3) 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在控制器的控制下完成的。可见,DMA方式较之中断驱动方式又进一步提高了CPU与I/O设备的并行操作程度。
2) DMA控制器的组成
DMA(Direct Memory Access,直接存储器访问)
DMA控制器由三部分组成:主机与DMA控制器的接口;DMA控制器与块设备的接口;I/O控制逻辑。图6-14示出了DMA控制器的组成。这里主要介绍主机与控制器之间的接口。
图6-14 DMA控制器的组成
3) DMA工作过程
当CPU要从磁盘读入一数据块时,便向磁盘控制器发送一条读命令。该命令被送入命令寄存器CR中。同时,需要将本次要读入数据在内存的起始目标地址送入内存地址寄存器MAR中。
图6-15 DMA方式的工作流程图
6.6 用户层的I/O软件
6.6.1 系统调用与库函数
1. 系统调用
一方面,为使诸进程能有条不紊地使用I/O设备,且能保护设备的安全性,不允许运行在用户态的应用进程去直接调用运行在核心态(系统态)的OS过程。但另一方面,应用进程在运行时,又必须取得OS所提供的服务,否则,应用程序几乎无法运行。为了解决此矛盾,OS在用户层中引入了一个中介过程——系统调用,应用程序可以通过它间接调用OS中的I/O过程,对I/O设备进行操作。
2. 库函数
在C语言以及UNIX系统中,系统调用(如read)与各系统调用所使用的库函数(如read)之间几乎是一一对应的。而微软定义了一套过程,称为Win32 API的应用程序接口(Application Program Interface),程序员利用它们取得OS服务,该接口与实际的系统调用并不一一对应。用户程序通过调用对应的库函数使用系统调用,这些库函数与调用程序连接在一起,被嵌入在运行时装入内存的二进制程序中。
6.6.2 假脱机(Spooling)系统
1. 假脱机技术
在20世纪50年代,为了缓和CPU的高速性与I/O设备低速性间的矛盾,而引入了脱机输入、脱机输出技术。该技术是利用专门的外围控制机,先将低速I/O设备上的数据传送到高速磁盘上,或者相反。这样当处理机需要输入数据时,便可以直接从磁盘中读取数据,极大地提高了输入速度。反之,在处理机需要输出数据时,也可以很快的速度把数据先输出到磁盘上,处理机便可去做自己的事情。
SPOOLing系统主要由以下四部分构成:
(1) 输入井和输出井。
(2) 输入缓冲区和输出缓冲区。
(3) 输入进程和输出进程。
(4) 井管理程序。
3. SPOOLing系统的特点
(1) 提高了I/O的速度。
(2) 将独占设备改造为共享设备。
(3) 实现了虚拟设备功能。
4. 假脱机打印机系统
打印机是经常用到的输出设备,属于独占设备。利用假脱机技术可将它改造为一台可供多个用户共享的打印设备,从而提高设备的利用率,也方便了用户。共享打印机技术已被广泛地用于多用户系统和局域网络中。假脱机打印系统主要有以下三部分:
(1) 磁盘缓冲区。
(2) 打印缓冲区。
(3) 假脱机管理进程和假脱机打印进程。
5. 守护进程(daemon)
前面是利用假脱机系统来实现打印机共享的一种方案,人们对该方案进行了某些修改,如取消该方案中的假脱机管理进程,为打印机建立一个守护进程,由它执行一部分原来由假脱机管理进程实现的功能,如为用户在磁盘缓冲区中申请一个空闲盘块,并将要打印的数据送入其中,将该盘块的首址返回给请求进程。另一部分由请求进程自己完成,每个要求打印的进程首先生成一份要求打印的文件,其中包含对打印的要求和指向装有打印输出数据盘块的指针等信息,然后将用户请求打印文件放入假脱机文件队列(目录)中。
6.7 缓冲区管理
在现代操作系统中,几乎所有的I/O设备在与处理机交换数据时都用了缓冲区。缓冲区是一个存储区域,它可以由专门的硬件寄存器组成,但由于硬件的成本较高,容量也较小,一般仅用在对速度要求非常高的场合,如存储器管理中所用的联想存储器;设备控制器中用的数据缓冲区等。
6.7.1 缓冲的引入
引入缓冲区的原因有很多,可归结为以下几点:
(1) 缓和CPU与I/O设备间速度不匹配的矛盾。
(2) 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
(3) 解决数据粒度不匹配的问题。
(4) 提高CPU和I/O设备之间的并行性。
6.8 磁盘存储器的性能和调度
6.8.1 磁盘性能简述
磁盘设备是一种相当复杂的机电设备,在此仅对磁盘的某些性能,如数据的组织、磁盘的类型和访问时间等方面做扼要的阐述。
1. 数据的组织和格式
磁盘设备可包括一个或多个物理盘片,每个磁盘片分一个或两个存储面(Surface)(见图6-28(a)),每个盘面上有若干个磁道(Track),磁道之间留有必要的间隙(Gap)。为使处理简单起见,在每条磁道上可存储相同数目的二进制位。
每个扇区512B
图6-28 磁盘的结构和布局
2. 磁盘的类型
对于磁盘,可以从不同的角度进行分类。最常见的有:将磁盘分成硬盘和软盘、单片盘和多片盘、固定头磁盘和活动头(移动头)磁盘等。下面仅对固定头磁盘和移动头磁盘做些介绍。
(1) 固定头磁盘。
(2) 移动头磁盘。
3. 磁盘访问时间
磁盘设备在工作时以恒定速率旋转。为了读或写,磁头必须能移动到所指定的磁道上,并等待所指定的扇区的开始位置旋转到磁头下,然后再开始读或写数据。
第七章文件管理
7.1 文件和文件系统
7.2 文件的逻辑结构
7.3 文件目录
7.4 文件共享
7.5 文件保护
7.1 文件和文件系统
文件系统的管理功能是将其管理的程序和数据通过组织为一系列文件的方式实现的。而文件则是指具有文件名的若干相关元素的集合。元素通常是记录,而记录又是一组有意义的数据项的集合。可见,基于文件系统的概念,可以把数据组成分为数据项、记录和文件三级。
2. 文件类型
1) 按用途分类
根据文件的性质和用途的不同,可将文件分为三类:
(1) 系统文件,这是指由系统软件构成的文件。大多数的系统文件只允许用户调用,但不允许用户去读,更不允许修改;有的系统文件不直接对用户开放。
(2) 用户文件,指由用户的源代码、目标文件、可执行文件或数据等所构成的文件。用户将这些文件委托给系统保管。
(3) 库文件,这是由标准子例程及常用的例程等所构成的文件。这类文件允许用户调用,但不允许修改。
2) 按文件中数据的形式分类
按这种方式分类,也可把文件分为三类:
(1) 源文件,这是指由源程序和数据构成的文件。通常,由终端或输入设备输入的源程序和数据所形成的文件都属于源文件。它通常是由ASCII码或汉字所组成的。
(2) 目标文件,这是指把源程序经过编译程序编译过,但尚未经过链接程序链接的目标代码所构成的文件。目标文件所使用的后缀名是“.obj”。
(3) 可执行文件,这是指把编译后所产生的目标代码经过链接程序链接后所形成的文件。其后缀名是 .exe。
3) 按存取控制属性分类
根据系统管理员或用户所规定的存取控制属性,可将文件分为三类:
(1) 只执行文件,该类文件只允许被核准的用户调用执行,不允许读和写。
(2) 只读文件,该类文件只允许文件主及被核准的用户去读,不允许写。
(3) 读写文件,这是指允许文件主和被核准的用户去读或写的文件。
4) 按组织形式和处理方式分类
根据文件的组织形式和系统对其处理方式的不同,可将文件分为三类:
(1) 普通文件。
(2) 目录文件。
(3) 特殊文件。
7.2 文件的逻辑结构
(1) 文件的逻辑结构(File Logical Structure)。
(2) 文件的物理结构,又称为文件的存储结构。
7.2.1 文件逻辑结构的类型
对文件逻辑结构所提出的基本要求,首先是有助于提高对文件的检索速度,即在将大批记录组成文件时,应采用一种有利于提高检索记录速度和效率的逻辑结构形式。其次是该结构应方便对文件进行修改,即便于在文件中增加、删除和修改一个或多个记录。第三是降低文件存放在外存上的存储费用,即尽量减少文件占用的存储空间,不要求大片的连续存储空间。
1. 按文件是否有结构分类
1) 有结构文件 (1) 定长记录。 (2) 变长记录。
2) 无结构文件
如果说在大量的信息管理系统和数据库系统中,广泛采用了有结构的文件形式的话(即文件是由定长或变长记录构成的),那么在系统中运行的大量的源程序、可执行文件、库函数等,所采用的就是无结构的文件形式,即流式文件。其文件的长度是以字节为单位的。对流式文件的访问,则是利用读、写指针来指出下一个要访问的字符。可以把流式文件看做是记录式文件的一个特例:一个记录仅有一个字节。
2. 按文件的组织方式分类
根据文件的组织方式,可把有结构文件分为三类:
(1) 顺序文件。 (2) 索引文件。 (3) 索引顺序文件。
7.2.2 顺序文件(Sequential File)
1. 顺序文件的排列方式
在顺序文件中的记录,可以按照各种不同的顺序进行排列。一般地,可分为两种情况: (1) 串结构。 (2) 顺序结构。
2. 顺序文件的优缺点
顺序文件的最佳应用场合是在对文件中的记录进行批量存取时(即每次要读或写一大批记录)。所有逻辑文件中顺序文件的存取效率是最高的。此外,对于顺序存储设备(如磁带),也只有顺序文件才能被存储并能有效地工作。
7.3 文 件 目 录
(1) 实现“按名存取”。
(2) 提高对目录的检索速度。
(3) 文件共享。
(4) 允许文件重名。
7.3.1 文件控制块和索引结点
1. 文件控制块FCB(File Control Block)
为了能对系统中的大量文件施以有效的管理,在文件控制块中,通常应含有三类信息,即基本信息、存取控制信息及使用信息。
1) 基本信息类
基本信息类包括:
(1) 文件名。 (2) 文件物理位置。(3) 文件逻辑结构。 (4) 文件的物理结构。
2) 存取控制信息类
存取控制信息类包括文件主的存取权限、核准用户的存取权限以及一般用户的存取权限。
3) 使用信息类
使用信息类包括文件的建立日期和时间、文件上一次修改的日期和时间,以及当前使用信息。这些信息包括当前已打开该文件的进程数,是否被其它进程锁住,文件在内存中是否已被修改但尚未拷贝到盘上等。应该说明,对于不同OS的文件系统,由于功能不同,可能只含有上述信息中的某些部分。
3. 目录操作
(1) 创建目录。
(2) 删除目录。
① 不删除非空目录。
② 可删除非空目录。
(3) 改变目录。
(4) 移动目录。
(5) 链接(Link)操作。
(6) 查找。
7.5 文 件 保 护
在现代计算机系统中,存放了越来越多的宝贵信息供用户使用,给人们带来了极大的好处和方便,但同时也有着潜在的不安全性。影响文件安全性的主要因素有:
(1) 人为因素。(2) 系统因素。(3) 自然因素。
为了确保文件系统的安全性,可针对上述原因而采取三方面的措施:
(1) 通过存取控制机制,防止由人为因素所造成的文件不安全性。
(2) 采取系统容错技术,防止系统部分的故障所造成的文件的不安全性。
(3) 建立后备系统,防止由自然因素所造成的不安全性。
7.5.1 保护域(Protection Domain)
1. 访问权
为了对系统中的对象加以保护,应由系统来控制进程对对象的访问。对象可以是硬件对象,如磁盘驱动器、打印机;也可以是软件对象,如文件、程序。对对象所施加的操作也有所不同,如对文件可以是读,也可以是写或执行操作。我们把一个进程能对某对象执行操作的权力,称为访问权(Access right)。
2. 保护域
为了对系统中的资源进行保护而引入了保护域的概念,保护域简称为“域”。“域”是进程对一组对象访问权的集合,进程只能在指定域内执行操作。这样,“域”也就规定了进程所能访问的对象和能执行的操作。