目录
[第 5 章 输入 / 输出 (I/O) 管理](#第 5 章 输入 / 输出 (I/O) 管理)
[5.1 I/O 管理基础](#5.1 I/O 管理基础)
[5.1.1 I/O 设备](#5.1.1 I/O 设备)
[1.I/O 设备的基本概念](#1.I/O 设备的基本概念)
[2.I/O 设备的分类](#2.I/O 设备的分类)
[3.I/O 接口](#3.I/O 接口)
[4.I/O 端口](#4.I/O 端口)
[(1) I/O 端口的概念](#(1) I/O 端口的概念)
[(2) I/O 端口的编址](#(2) I/O 端口的编址)
[① 独立编址方式](#① 独立编址方式)
[② 统一编址方式](#② 统一编址方式)
[5.1.2 I/O 控制方式](#5.1.2 I/O 控制方式)
[1. 程序查询方式](#1. 程序查询方式)
[2. 程序中断方式](#2. 程序中断方式)
[3. DMA 方式](#3. DMA 方式)
[5.1.3 I/O 软件层次结构](#5.1.3 I/O 软件层次结构)
[1. 中断处理程序](#1. 中断处理程序)
[2. 设备驱动程序](#2. 设备驱动程序)
[3. 设备独立软件](#3. 设备独立软件)
[4. 用户层 I/O 软件](#4. 用户层 I/O 软件)
[5.1.4 输入输出应用程序接口](#5.1.4 输入输出应用程序接口)
[5.1.5 阻塞 / 非阻塞 I/O](#5.1.5 阻塞 / 非阻塞 I/O)
[5.1.6 习题精编](#5.1.6 习题精编)
[5.1.7 真题演练](#5.1.7 真题演练)
[5.2 设备独立软件](#5.2 设备独立软件)
[5.2.1 缓冲区管理](#5.2.1 缓冲区管理)
[1. 单缓冲(Single Buffer)](#1. 单缓冲(Single Buffer))
[2. 双缓冲(Double Buffer)](#2. 双缓冲(Double Buffer))
[3. 循环缓冲](#3. 循环缓冲)
[4. 缓冲池](#4. 缓冲池)
[5.2.2 设备分配与回收](#5.2.2 设备分配与回收)
[1. 设备分配数据结构](#1. 设备分配数据结构)
[2. 设备分配策略](#2. 设备分配策略)
[3. 设备分配的安全性](#3. 设备分配的安全性)
[4. 设备独立性](#4. 设备独立性)
[5.2.3 假脱机技术(SPOOLing)](#5.2.3 假脱机技术(SPOOLing))
[5.2.4 设备驱动程序接口](#5.2.4 设备驱动程序接口)
[5.2.5 习题精编](#5.2.5 习题精编)
[5.2.6 真题演练](#5.2.6 真题演练)
[5.3 外存管理](#5.3 外存管理)
[5.3.1 磁盘](#5.3.1 磁盘)
[1. 磁盘结构](#1. 磁盘结构)
[2. 磁盘格式化和分区](#2. 磁盘格式化和分区)
[4. 磁盘读取时间](#4. 磁盘读取时间)
[5. 磁盘调度算法](#5. 磁盘调度算法)
[(1) 先来先服务(First Come First Served, FCFS )算法](#(1) 先来先服务(First Come First Served, FCFS )算法)
[(2) 最短寻道时间优先(Short Seek Time First, SSTF )算法](#(2) 最短寻道时间优先(Short Seek Time First, SSTF )算法)
[(3) 扫描(SCAN )算法](#(3) 扫描(SCAN )算法)
[(4) 循环扫描(Circular SCAN, CSCAN)算法](#(4) 循环扫描(Circular SCAN, CSCAN)算法)
[5.3.2 固态硬盘](#5.3.2 固态硬盘)
[1. 读写性能特性](#1. 读写性能特性)
[2. 磨损均衡](#2. 磨损均衡)
[5.3.3 习题精编](#5.3.3 习题精编)
[5.3.4 真题演练](#5.3.4 真题演练)
[5.4 章末总结](#5.4 章末总结)
[5.4.1 本章知识点提炼](#5.4.1 本章知识点提炼)
[5.4.2 思考题解析](#5.4.2 思考题解析)
[附录 1 操作系统常用算法总结](#附录 1 操作系统常用算法总结)
[1.1 进程管理 --- 作业及进程调度算法](#1.1 进程管理 — 作业及进程调度算法)
[1. 作业调度算法](#1. 作业调度算法)
[2. 进程调度算法](#2. 进程调度算法)
[1.2 内存管理 --- 分配方式及分配和置换算法](#1.2 内存管理 — 分配方式及分配和置换算法)
[1. 基础内存管理方式及对应算法](#1. 基础内存管理方式及对应算法)
[2. 虚拟内存管理方式的页面置换算法](#2. 虚拟内存管理方式的页面置换算法)
[1.3 I/O 管理 --- 磁盘调度算法](#1.3 I/O 管理 — 磁盘调度算法)
第 5 章 输入 / 输出 (I/O) 管理
【考纲内容】
1.I/O 管理基础
(1)设备:设备的基本概念;设备的分类;I/O 接口;I/O 端口
(2)I/O 控制方式:轮询方式;中断方式;DMA 方式
(3)I/O 软件层次结构:中断处理程序;驱动程序;设备独立软件;用户层;I/O 软件
(4)输入输出应用程序接口:字符设备接口;块设备接口;网络设备接口;阻塞 / 非阻塞 I/O
2.设备独立软件
(1)缓冲区管理
(2)设备分配与回收
(3)假脱机技术(SPOOLing)
(4)设备驱动程序接口
1.外存管理
(1)磁盘:磁盘结构;格式化;分区;磁盘调度方法
(2)固态硬盘:读写性能特性;磨损均衡
【考情统计】
|------|------|------|-----|-----------------------------------------|
| 年份 | 单选题数 | 综合题数 | 总分值 | 考点 |
| 2009 | 2 | 0 | 4 | 磁盘调度方法、设备分配与回收 |
| 2010 | 1 | 1 | 9 | 中断处理程序、磁盘调度方法、数据读写时间 |
| 2011 | 2 | 0 | 4 | 中断处理程序、驱动程序、设备独立软件、用户层 I/O 软件、缓冲区管理 |
| 2012 | 2 | 0 | 4 | 中断处理程序、驱动程序、设备独立软件、用户层 I/O 软件、磁盘 I/O 性能 |
| 2013 | 2 | 0 | 4 | 设备驱动程序、缓冲区管理 |
| 2014 | 0 | 0 | 0 | 未考查 |
| 2015 | 2 | 0 | 4 | 缓冲区管理、磁盘调度方法 |
| 2016 | 1 | 0 | 2 | 假脱机技术 |
| 2017 | 2 | 0 | 4 | 格式化、DMA 方式 |
| 2018 | 1 | 0 | 2 | 磁盘调度方法 |
| 2019 | 0 | 1 | 7 | 磁盘调度方法、设备驱动程序 |
| 2020 | 1 | 0 | 2 | 设备分配与回收 |
| 2021 | 0 | 1 | 8 | 磁盘调度方法、格式化 |
| 2022 | 1 | 0 | 2 | 设备驱动程序 |
| 2023 | 1 | 1 | 4 | 设备分配与回收、设备驱动程序 |
| 2024 | 2 | 0 | 4 | IO 管理、磁盘调度算法 |【考点解读】
本章是操作系统原理的收官章节,408 统考对本章节的考查相对不多。对于 I/O 管理基础和设备独立性软件这两节,历年考查形式为概念理解的选择题,平均每年考查 1 - 2 个,其中 I/O 软件层次结构的考频最高。外存管理一节,408 统考不仅以选择题的形式进行考查,还有 3 次以综合应用题的形式进行考查,其中磁盘调度方法是本节的重中之重,通常与磁盘结构、磁盘 I/O 性能等考点进行综合考查,值得考生重点关注。
【复习建议】
1.了解 I/O 设备的概念、分类与特性。
2.理解 I/O 软件层次的结构与功能。
3.理解程序查询方式、程序中断方式、DMA 方式这三种 I/O 控制方式的实现及其特点。
4.了解单缓冲、双缓冲、循环缓冲、缓冲池的工作机制和优缺点。
5.重点掌握单缓冲、双缓冲的数据传输与处理时间的计算。
6.了解设备分配与回收的过程和相关数据结构。
7.理解假脱机系统的组成、特点与实现。
8.理解磁盘的结构,了解磁盘低级格式化、分区、高级格式化的概念和目的。
9.重点掌握各种磁盘调度方法和磁盘访问时间的计算。
10.了解固态硬盘的读写性能特性和磨损均衡机制。
5.1 I/O 管理基础
操作系统作为资源的管理者,需要提供进程管理、存储器管理、文件管理、I/O 管理等功能。处理器、存储器是主机内部的硬件,I/O 设备是主机外部的硬件,I/O 管理是对主机外部的硬件的管理。本节的目标是对 I/O 设备和 I/O 管理有一个整体的认识,考生在学习本节内容的过程中,请先尝试回答下列问题:
(1)什么是 I/O 设备?有哪些典型的 I/O 设备?
(2)为什么要进行 I/O 管理?
I/O 管理意味着操作系统需要管理主机和外设之间的信息传输,需要在本节的学习中对 I/O 控制方式和 I/O 软件层次结构进行深入的了解。请考生在学习过程中尝试回答下列问题(题目可以在各个小节中找到答案):
(1)I/O 设备可以如何进行分类?每个类别各有哪些典型的 I/O 设备?
(2)I/O 接口和 I/O 端口分别需要实现什么功能?
(3)不同的 I/O 控制方式是如何进行 I/O 控制的?它们各有什么优缺点?
(4)I/O 软件有哪些层次?每个层次又需要实现哪些功能?
5.1.1 I/O 设备
1.I/O 设备的基本概念
前面提到的处理器、存储器都是由操作系统管理的核心硬件设备,而主机外部的设备也由操作系统管理,这些设备就是 I/O 设备。
I/O 设备即输入 / 输出(Input/Output)设备,指的是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件 。
【举例】常见的 I/O 设备有打印机、硬盘、键盘和鼠标等。I/O 设备在计算机系统中起到了至关重要的作用,它们使计算机系统具备与外部世界进行交互和通信的能力。如果没有 I/O 设备,那么计算机系统就只是一台浪费电能产热的仪器而已。
2.I/O 设备的分类
(1)按使用特性分类
按使用特性可以将设备分为存储设备和输入输出型设备。
存储设备:用于存储信息的设备,如磁盘、光盘等。
输入输出型设备:又可分为输入设备和输出设备。键盘、鼠标、扫描仪等设备用于向计算机输入数据信息,属于输入设备;打印机、绘图仪等设备用于计算机向外输出数据信息,属于输出设备;而网络适配器、调制解调器等网络设备兼具输入设备和输出设备的功能。
(2)按传输速率分类
按传输速率可以将设备分为低速设备、中速设备和高速设备。
低速设备:传输速率仅为每秒几字节到数百字节的设备,如鼠标、键盘等。
中速设备:传输速率为每秒数千个字节到数十万个字节的设备,如打印机、传真机等。
高速设备:传输速率为每秒数十万字到千兆字节的设备,如磁盘、固态硬盘等。
(3)按信息交换单位分类
按信息交换单位可以将设备分为字符设备和块设备。
字符设备:以字符为信息交换单位的设备,每次可以交换一个或多个字符,传输速度较低,通常采用中断驱动方式,鼠标、键盘等设备属于字符设备。
块设备:以数据块 为信息交换单位的设备,每次可以交换一个或多个数据块的信息,传输速率较高,且支持对存储的信息进行寻址和随机读写 ,磁盘、固态硬盘等设备属于块设备。
【拓展】块设备是有结构设备,通常支持随机存取和寻址;而字符设备是无结构设备,通常不支持随机存取和寻址,以中断驱动方式进行输入和输出。
(4)按设备的共享属性 分类
按设备的共享属性可以将设备分为独占设备、共享设备和虚拟设备。
独占设备:同一时刻只能由一个进程占用的设备。操作系统将独占设备分配给进程后,进程将独占该设备,直到运行结束后释放,打印机、传真机等设备属于独占设备。
共享设备:同一时间段内允许多个进程同时访问的设备。共享设备可寻址可随机访问, 操作系统可以将共享设备分配给多个进程,这些进程可以对共享设备进行交叉使用,但是同一时刻只有一个进程能使用,磁盘、固态硬盘等设备属于共享设备。
1.下列关于设备属性的说法中,正确的是( )。
A. 在同一时刻允许多个进程同时访问的设备即为共享设备
B. 共享设备必须是既可以寻址,又支持随机读写的设备
C. 字符设备能指定输入的源地址以及输出的目标地址,因此其基本特征是可寻址到字节
D. 分配共享设备时会导致进程死锁
1.【参考答案】B
【解析】共享设备是同一时间段内允许多个进程同时访问的设备。共享设备可以被分配给多个进程,这些进程可以交叉使用共享设备,但是同一时刻只有一个进程能使用。共享设备必须是可寻址和可随机访问的设备,A 错误,B 正确;块设备是有结构设备,通常支持随机存取和寻址;而字符设备是无结构设备,通常不支持随机存取和寻址,而是以中断驱动方式进行输入和输出,C 错误;互斥条件、不剥夺条件、请求并保持条件、循环等待条件是死锁产生的四个必要条件,共享设备破坏了其中的互斥条件,不会导致死锁,D 错误。故本题选 B。
虚拟设备:通过 SPOOLing 等技术,把原本的独占设备改造为逻辑上的共享设备,并可以把一个物理设备变换为多个对应的逻辑设备 。以打印机为例,操作系统可以将多个进程待打印的文件发送给打印机,就像拥有多台打印机一样,从而实现打印机这一虚拟设备对各个进程的共享。
【拓展】
(1)独占设备属于临界资源,由于独占设备在使用时的独占特性,系统在对独占设备进行分配时,应考虑分配的安全性。
(2)假脱机技术(SPOOLing)可以将独占设备改造为虚拟的共享设备,将在 5.2.3 一节中详细介绍。
3.I/O 接口
I/O 设备通常由机械部件和电子部件 组成:其中的机械部件负责执行真正的 I/O 行为,CPU 需要通过电子部件间接控制和管理机械部件的执行;而其中的电子部件就是 I/O 接口(输入输出接口),又称 I/O 控制器、设备控制器。
**I/O 接口是各个外设和主机之间用于实现信息交换的逻辑部件(又称 I/O 控制器或设备控制器)。**由于外部设备的工作方式、数据格式和传输速度等特性都各不相同,它们与 CPU、内存这些主机部件的技术特性有明显差异,所以 I/O 接口主要用于解决这些矛盾,以协调外设与主机间的数据传输和命令发送。
(1) I/O 接口的功能
I/O 接口是主机(CPU 和主存等)和外设之间进行信息传输的 "桥梁",因此它在主机侧和外设侧 各提供了一个接口:主机侧的接口称为内部接口,它通过系统总线和 CPU、内存相连,数据的传输方式只能是并行传输;外设侧的接口称为外部接口,它通过 USB、串 / 并行电缆等各种接口电缆与外设相连,数据的传输方式可以是串行或并行方式,一个 I/O 接口可以通过多个外部接口连接多个设备。 因此,I/O 接口成为主机(CPU 和主存等)和外设之间一个高效的信息传输 "通路"。I/O 接口的主要功能如下:
(a) 数据缓冲
由于 CPU 寄存器、主存等部件的存取速度比外部设备快很多,为了进行速度匹配,可以将数据提前存到 I/O 接口中的数据缓冲区,以缓和高速系统组件和低速外部设备之间的速度差异。
9.如果 I/O 花费的时间比 CPU 处理时间短得多,则缓冲区( )。
A. 最有效
B. 几乎无效
C. 均衡
D. 以上都不是
9.【参考答案】B
【解析】由于 CPU 处理时间比 I/O 设备短得多,因此设立缓冲区机制,用于缓和 CPU 与 I/O 设备的速度差异,提高 CPU 与 I/O 设备之间的并行性;当 I/O 花费的时间比 CPU 处理时间短得多,则缓冲区的存在就毫无意义了,故本题选 B。
(b) 数据格式转换
由于主机和外部设备的数据格式不同,I/O 接口提供数据格式的相互转换,如串 - 并转换、并 - 串转换、数 - 模转换和模 - 数转换等。
(c) 控制和定时
为来自系统总线的控制和定时信号提供控制和定时逻辑,对内部资源及外设间动作的先后关系进行协调,并对数据通信过程进行控制。
(d) 错误或状态检测
提供可以保存各种状态信息的状态寄存器,CPU 通过读取这些寄存器来了解接口和外设的出错情况或状态。
(e) 与主机和设备通信
上述四个功能都必须通过主机与 I/O 接口之间和 I/O 接口与外设之间的通信来完成。
2.下列各项中,属于 I/O 接口功能的是( )。
I. 数据缓冲与格式转换
II. 错误与状态检测
III. I/O 操作的控制与定时A. I
B. I、III
C. I、II
D. I、II、III
2.【参考答案】D
【解析】I/O 接口的功能为:①地址译码,选取接口寄存器;②接收控制命令,提供工作状态信息并进行状态检测;③数据缓冲与格式转换;④I/O 控制与定时,如中断、DMA 控制逻辑、设备操作等;⑤对内与主机通信,对外与外设通信。综上,I、II、III 均属于 I/O 接口的功能,故本题选 D。
(2) I/O 接口的基本结构
由于不同的 I/O 接口在复杂性和控制外设的数量上都不尽相同,因此很难列举所有的情形,图 5.1 给出一个 I/O 接口的通用结构。
如图 5.1 所示,I/O 接口中的数据缓冲寄存器主要用于暂存与 CPU 或内存进行传送的数据信息,状态寄存器主要用于记录接口和设备的状态信息,控制寄存器主要用于保存 CPU 对外设的控制信息,这里的数据信息、状态信息和控制信息都是通过数据线进行传输的。此外,状态寄存器和控制寄存器在传送方向上是相反的。
【提示】状态寄存器和控制寄存器的使用在时间上是错开的,所以很多时候会将两者放在一起,变为状态 / 控制寄存器。
I/O 接口中的寄存器地址和控制信号分别通过系统总线的地址线和控制线(只传输读写信号)进行传送。地址译码器对地址信号进行译码后,交由设备选择电路进行设备选址,并通过控制信号来控制所选择的设备是读取还是写入数据。对外设的操作通过数据线传输到控制寄存器。I/O 接口中的 I/O 控制逻辑可以将控制寄存器中的命令字译码成控制信号送到外设,还可以在数据缓冲寄存器和外设之间发送或接收数据以及将外设状态收集到状态寄存器中。
(3) I/O 接口的类型(如图 5.2 所示)
按数据传送方式(外设和接口一侧)分类:
并行接口:一个字或字节的所有位同时传送。
串行接口:一位一位地按顺序传送。
按主机访问 I/O 设备的控制方式分类:分为程序查询接口、程序中断接口、DMA 接口。
按功能选择的灵活性分类:
可编程接口:可通过程序来改变或选择接口的功能和操作方式。
不可编程接口:不能从程序层面改变接口的功能,但可通过硬连线逻辑来实现不同的功能。
4.I/O 端口
(1) I/O 端口的概念
I/O 端口是指 I/O 接口中 CPU 可以直接访问的寄存器 。**I/O 接口中的数据缓冲寄存器用于存放数据信息,称为数据端口;控制寄存器用于存放控制命令,称为控制端口;状态寄存器用于存放状态信息,称为状态端口。**对于数据端口,CPU 可以对其中的数据进行读写;对于控制端口,CPU 只能对其写入各种控制命令;对于状态端口,CPU 只能对各外设的状态进行读取。
【提示】由于状态寄存器和控制寄存器的使用在时间上是错开的,可以公用一个寄存器,该寄存器称为控制 / 状态端口。
【拓展】一个 I/O 接口可能有多个用户可访问的寄存器,即 I/O 端口,每个端口都有一个地址,所以一个 I/O 接口可能有多个地址。
(2) I/O 端口的编址
为了使 CPU 能够访问 I/O 端口,必须对上述寄存器进行编址,I/O 端口的编址方式有独立编址和统一编址两种。
① 独立编址方式
独立编址方式中,每个 I/O 设备接口都分配了若干 I/O 端口号;端口号是 8 位或 16 位的整数,例如硬盘的端口号一般是 0x1f0 到 0x1f7。计算机使用一组特殊的指令(in/out 指令)搭配这些端口号向 I/O 设备收发数据。每条指令从端口号读取 1 到 4 字节,存入 CPU 寄存器;或者将 CPU 寄存器存储的 1 到 4 字节发往 I/O 端口。
优点:独立编址方式实现了将 I/O 访问与内存访问分离,减少了地址空间竞争的可能性,避免了内存与 I/O 的冲突。
缺点:in/out 指令通常只支持简单的传输操作,降低了程序设计的灵活性;端口地址通常较少,对于需要大量寄存器的设备或需要大量数据传输的情况,可能无法满足需求;而且 CPU 必须分别为存储器和 I/O 设备提供单独的读写命令,这使得总线控制逻辑变得更加复杂。目前,广泛使用的 x86 体系结构推荐使用统一编址方式,但出于兼容性考虑保留了独立编址方式。
3.下列关于 I/O 端口和接口的说法中,正确的是( )。
A. 采用独立编址方式时,通过地址线来区别存储单元和 I/O 设备
B. 采用独立编址方式时,需要设置专门的 I/O 指令访问端口C. 按照数据传送格式,接口可以分为同步传送接口和异步传送接口
D. 采用统一编址方式时,通过指令格式来区别存储单元和 I/O 设备
3.【参考答案】B
【解析】采用独立编址方式时,存储单元和 I/O 设备靠不同的指令格式区分,访问 I/O 设备端口需要单独设置指令,A 错误,B 正确;按照数据传送方式,I/O 接口可以分为并行接口和串行接口,C 错误;采用统一编址方式时,存储单元和 I/O 设备靠不同地址来区分,D 错误。故本题选 B。
② 统一编址方式
统一编址方式,又称内存映射 I/O、存储器映射方式。该方式对主存地址空间和 I/O 地址空间统一进行编址,将主存地址空间的一部分地址划分给 I/O 端口,因此,主存单元和 I/O 端口的地址属于同一地址空间 ,但位于不同的分段中,所以只需要使用统一的访存指令并根据地址范围就可以区分对二者的访问。
优点:由于 I/O 端口被当作存储器的单元进行地址分配,访问时不再需要专门的 I/O 指令,这使得 CPU 对 I/O 端口的访问更加灵活方便,且 I/O 寄存器的数目只受存储容量的制约,有利于扩大系统吞吐率;由于任何访存指令都可以用于 I/O 端口,这意味着访存指令的寻址方式和保护机制(分段或分页存储管理实现)等特性都可以被共享,所以不需要再设置专门的保护机制,提高了编程的灵活性。
缺点:I/O 端口占用了部分主存空间的地址,减少了主存可用容量;此外,由于在访问 I/O 端口时全部地址线都参与地址译码,这使得译码过程复杂,降低了寻址速度。
两种编址方式如图 5.3 所示。
5.1.2 I/O 控制方式
主机和外设之间的信息传输控制 方式,在经历了长期发展后,实现了由低级到高级、由简单到复杂和由集中管理到各部件分散管理的转变。按照它们发展的顺序以及主机与外设工作的并行程度,I/O 控制方式可以分为程序查询方式、程序中断方式、DMA 方式、通道方式四种。
【提示】由于最新版的 408 考试大纲删除了 "通道方式" 的内容,故不再介绍该控制方式。
1. 程序查询方式
程序查询方式,又称程序直接控制方式,是指直接通过查询程序来控制主机和外设之间数据传输的 I/O 控制方式。由于 CPU 和外设的速度相差较大,主机在读取外设的每一个字时,CPU 都需要预先检查外设是否为就绪状态,如果是,则说明该字已经被传送到 I/O 控制器的数据寄存器中,CPU 可以开始读取;否则,CPU 就轮询检查,直到外设状态变为就绪状态。
程序查询方式适用于针式打印机等字符设备,通常依据 I/O 设备本身的特点以及设备是否能够独立启动 I/O 等条件来判断设备是否适合采用该方式。
程序查询方式可分为定时查询方式和独占查询方式。定时查询方式是指 CPU 周期性地查询接口中的状态寄存器,直到条件满足后才开始传送数据,待数据传送完成后返回用户程序。独占查询方式是指一旦设备被启动,CPU 必须连续不断地查询接口的状态,此时,该设备的 I/O 独占 CPU,I/O 的整个过程均由 CPU 控制,CPU 与外设完全串行工作。
4.主机和外设只能串行工作的 I/O 控制方式有( )。
I. 程序查询方式
II. 程序中断方式
III. DMA 方式
IV. 通道方式
A. I
B. I、II
C. II、III、IV
D. II、IV
4.【参考答案】A
【解析】程序查询方式的 I/O 过程必须通过 CPU 完成,主机和外设无法并行工作,I 正确;程序中断方式中,主机和外设可以并行工作,外设准备好数据后向 CPU 发出中断请求即可,II 错误;DMA 方式中,整个传输过程由 DMA 控制器完成,CPU 只需在传送开始前设置传送方向、数据块大小、主存和设备地址等参数,III 错误;通道是一种专门负责输入 / 输出的 I/O 处理机,通道方式比 DMA 方式的并行度更高,CPU 介入程度更低,IV 错误,故本题选 A。
【提示】定时查询方式在周期内只有特定时间需要去查询接口中的状态寄存器,所以还是有一定的时间可以执行其他任务。
优点:实现简单,只需少量硬件,在读 / 写指令的基础上,加上实现循环检查等一系列指令即可。
缺点:CPU 需要一直在原地轮询外设的状态,会出现 "忙等" 现象,CPU 和外设只能串行工作,CPU 的利用率很低。
【提示】假设小明需要烧两壶开水,他买了一个不含报警器的普通电热水壶来烧水,由于水烧开后不会及时报警,为了防止水烧开后没人处理而发生事故,小明必须在旁边等待或频繁查看直到第一壶水烧开,然后将开水倒进开水瓶后接着烧第二壶水,并重复上述过程。该场景中,小明相当于 CPU,烧水相当于进程希望执行的 I/O 任务,而烧水的过程相当于整个 I/O 的过程,这种 I/O 管理方式就是 "程序查询方式"。由于小明在烧水的过程中需要一直等待,他不能离开去做其他事情,明显浪费了很多时间,效率低下。
2. 程序中断方式
在独占程序查询方式中,CPU 和外设完全串行工作,导致 CPU 长时间等待外设。程序中断方式使得 CPU 与外设能够并行工作,提高了 CPU 的利用率。如图 5.4 所示,当 CPU 需要进行 I/O 操作时,CPU 在启动外设后不再需要原地等待其准备就绪,而是将执行 I/O 操作的进程暂时挂起,然后在就绪队列中选择另一个进程开始执行。此时,CPU 与外设并行工作。
外设在完成操作后向 CPU 发出中断请求(即 I/O 中断)。CPU 在响应中断请求后,暂停当前程序的执行,转入中断服务程序,由中断服务程序完成一次数据传送,并再次启动外设进行下一个操作。待中断服务程序执行结束(完成数据传送)后,CPU 返回被中断的程序继续执行。此时,CPU 与外设又开始并行工作。程序中断方式的工作过程如下:
1.CPU 向 I/O 发送启动读写的命令,外设被启动并开始工作,CPU 去做其他事情;
2.当外设完成任务后,向 CPU 发出中断请求;
3.CPU 响应中断请求,并转入中断服务程序;
4.CPU 读取 I/O 控制器的状态,若状态就绪,则继续下一步;否则,进行错误处理;
5.从 I/O 控制器中读取(或写入)字;
6.往存储器(或 I/O 控制器)中写入字;
7.判断数据是否传送完成,如果是,则 I/O 任务结束;否则,返回到第一步。
程序中断方式的优点:实现了 CPU 与 I/O 设备的并行工作,提高了 CPU 的利用率。
程序中断方式的缺点:每次中断仅传输一个字(节)的数据,中断处理需要耗费一定的时间,频繁中断将会导致 CPU 的利用率大幅下降。
【提示】假设小明需要烧两壶开水,他吸取上一次烧水的教训,买了一个带有报警器的电热水壶来烧水,由于水烧开后会自动报警,小明在烧水的过程可以离开去做其他事情。直到听到报警声,小明暂时放下手中的事情,去将开水倒进开水瓶并接着烧第二壶水,并重复上述过程。该场景中,小明相当于 CPU,烧水相当于进程希望执行的 I/O 任务,而烧水的过程相当于整个 I/O 的过程,这种 I/O 管理方式就是 "程序中断方式"。由于小明在烧水的过程中不需要一直等待,他可以腾出时间去做其他事,工作效率得到了提高,但每烧开一壶水后,仍然需要他去处理,烧水的效率还能进一步提高。
程序查询方式和程序中断方式的处理流程如图 5.5 所示。
3. DMA 方式
程序中断方式相比程序查询方式,在一定程度上实现了 CPU 和外设的并行工作,提高了 CPU 的利用率,但是并没有实现 CPU 与外设之间完全的并行工作。CPU 只是在外设的数据准备阶段 可以去执行其他任务,而不需要原地等待,在执行中断服务程序传输数据时,CPU 仍需全程参与。因此对于高速 I/O 设备,CPU 仍然要频繁地暂停当前程序去处理中断。
DMA(Direct Memory Access,直接存储器存取)方式在更大程度上提高了 CPU 与外设的并行程度,它通过专门的 DMA 接口硬件(即 DMA 控制器) 来控制外设与主存之间的直接数据交换,数据传送不再需要经过 CPU,而是在外设和内存开辟了一条 "直接数据通道",使得数据传送时,不再需要 CPU 进行中断处理、保护并恢复 CPU 现场等繁琐操作,工作效率明显提高。DMA 方式主要用于磁盘等高速设备的成批数据传送。
8.DMA 在( )建立一条直接数据通路。
A. I/O 设备和主存之间
B. I/O 设备之间
C. I/O 设备和 CPU 之间
D. CPU 和主存之间
8.【参考答案】A
【解析】DMA 通过专门的 DMA 接口硬件(即 DMA 控制器)来控制外设与主存之间的直接数据交换,数据传送不再需要经过 CPU,而是直接在外设和内存之间开辟了一条 "直接数据通道",使得数据传送期间不再需要占用 CPU 时间处理中断以及进行保护、恢复 CPU 现场等繁琐操作,工作速度明显提高。故本题选 A。
以数据输入为例,DMA 工作过程可分为预处理、数据传送、后处理三个步骤:
1.预处理:CPU 向设备控制器发送读命令,对 DMA 控制器进行初始化,启动 DMA 控制器,然后去处理其他任务;
2.数据传送:DMA 申请总线控制权,占用总线完成设备和主存间的数据传送;
3.后处理:数据传输完毕,DMA 发出中断请求,CPU 执行中断服务程序,做 DMA 的结束工作,包括校验数据、决定是否继续传送等(DMA 的中断在每个机器周期结束时都能响应)。
20.【2017】系统将数据从磁盘读到内存的过程包括以下操作:①DMA 控制器发出中断请求;②初始化 DMA 控制器并启动磁盘;③从磁盘传输一块数据到内存缓冲区;④执行 "DMA 结束" 中断服务程序。正确的执行顺序是( )。
A. ③→①→②→④
B. ②→③→①→④
C. ②→①→③→④
D. ①→②→④→③
20.【参考答案】B
【解析】DMA 的传送过程主要分为预处理、数据传送和后处理三个阶段。预处理阶段:测试 I/O 设备的状态、DMA 控制器进行初始化等;传输阶段:当 I/O 设备准备好数据后发出 DMA 请求,CPU 让出总线控制权,完成数据传输;后处理阶段:DMA 控制器向 CPU 发出中断请求,CPU 执行相应的中断处理程序做 DMA 结束处理,包括检查传输过程是否正确和数据校验等。正确的执行顺序是②→③→①→④,故本题选 B。
DMA 方式的特点如下:
1.以数据块的基本单位进行数据传输,每次可以传送一个或多个数据块。
2.外设与主存之间可以直接进行数据交换,数据传送过程无需 CPU 干预。
3.只有预处理、后处理时需要 CPU 的干预,进一步提高了 CPU 与 I/O 设备的并行程度。
7.在 DMA 方式中,描述正确的是( )。
A. DMA 是一个专门负责输入 / 输出的处理机
B. I/O 过程由 DMA 控制器进行完成,CPU 只需要在预处理和后处理阶段进行干预
C. CPU 通过程序的方式给出 DMA 可以解释的程序
D. DMA 不需要 CPU 指出所取数据的地址与长度
7.【参考答案】B
【解析】DMA 并不是处理器,不具备解释程序的能力,只能单方面受 CPU 控制,A 和 C 错误;DMA 方式中,数据传输过程由 DMA 控制器进行控制,不需要 CPU 介入的,但是数据传输的预处理和后处理阶段都需要 CPU 的干预,B 正确,D 错误。故选 B。
DMA 方式的优点:使内存和设备之间交换信息无需通过 CPU,CPU 和 I/O 设备可以并行工作,显著地提高了 CPU 的效率;并且传输速度快,适用于磁盘等高速设备。
DMA 方式的缺点:需要更多的硬件支持。
【提示】假设小明需要烧两壶开水,这次他买了一个同时具备报警、出水、加水功能的全自动电热水壶(类似于饮水机)。由于这个电热水壶具备上述功能,当小明做好初始设置之后,后续的烧水过程中他都可以安心做自己的事情且不会被打扰。出水、加水这些事情全部由电热水壶自动完成,直到整个烧水过程结束(两壶水都烧开)后才会发出提示音告知小明。该场景中,小明相当于 CPU,烧水相当于进程希望执行的 I/O 任务,而烧水的过程相当于整个 I/O 的过程,这种 I/O 管理方式就是 "DMA 方式"。由于烧水的任务完全交给电热水壶自主完成,小明只需在烧水前进行一些初始化设置以及烧水结束后做一些简单处理。在此期间,他可以有更多的时间去做其他事情,工作效率进一步得到了提高。
DMA 方式的处理流程如图 5.5 所示。
从程序查询方式,到程序中断方式、DMA 方式,CPU 对 I/O 的干预越来越少,I/O 效率也越来越高。三种 I/O 控制方式的对比如表 5.1 所示:
|--------|----------------|----------------------------|
| 方式 | 数据传送 | 特点 |
| 程序查询方式 | CPU 定时查询,全程参与 | 便于实现,CPU 与 I/O 只能串行工作,效率低下 |
| 程序中断方式 | CPU 参与中断处理过程 | 相比程序查询方式提高了效率,仍大量消耗 CPU |
| DMA 方式 | CPU 只参与预处理和后处理 | 相比程序中断方式提高了效率,进一步解放 CPU |【提示】程序中断方式的数据传送是在中断处理时由 CPU 控制完成的,数据从 I/O 设备送入内存时需要 CPU 的中转;而 DMA 方式的数据传送则是在 DMA 控制器的控制下完成的,数据从 I/O 设备直接送入内存。
5.1.3 I/O 软件层次结构
操作系统普遍采用层次式结构的 I/O 系统来管理 I/O 软件。操作系统的设备管理模块 分为若干个层次,**低层软件用于屏蔽硬件细节的差异,高层软件向用户提供简洁、友善的界面,每一层都利用其下层提供的服务,来完成输入输出功能中的某些子功能,并屏蔽这些功能的实现细节,向高层提供服务。**层次式的设计使得复杂的 I/O 软件具有更清晰的结构、更好的可移植性和易适应性。
17.【2011】用户程序发出磁盘 I/O 请求后,系统的正确处理流程是( )。
A. 用户程序→系统调用处理程序→中断处理程序→设备驱动程序
B. 用户程序→系统调用处理程序→设备驱动程序→中断处理程序
C. 用户程序→设备驱动程序→系统调用处理程序→中断处理程序
D. 用户程序→设备驱动程序→中断处理程序→系统调用处理程序
17.【参考答案】B
【解析】I/O 软件层次结构从上至下可分为用户层 I/O 软件、设备独立性软件、设备驱动程序、中断处理程序共四个层次。当用户程序发出磁盘 I/O 请求后,首先从用户态切换到内核态,由内核执行系统调用处理程序,在完成逻辑设备名到物理设备名的映射后,调用相应的设备驱动程序,驱动磁盘工作,故本题选 B。
操作系统通常把 I/O 软件组织成中断处理程序、设备驱动程序、设备独立软件和用户层 I/O 软件四个层次。
18.【2012】操作系统的 I/O 子系统通常由四个层次组成,每一层明确定义了与邻近层次的接口。其合理的层次组织排列顺序是( )。
A. 用户级 I/O 软件、设备无关软件、设备驱动程序、中断处理程序
B. 用户级 I/O 软件、设备无关软件、中断处理程序、设备驱动程序
C. 用户级 I/O 软件、设备驱动程序、设备无关软件、中断处理程序
D. 用户级 I/O 软件、中断处理程序、设备无关软件、设备驱动程序
18.【参考答案】A
【解析】I/O 软件层次结构从上至下可分为用户层 I/O 软件、设备独立性软件、设备驱动程序、中断处理程序共四个层次。其中低层软件用来屏蔽硬件细节的差异,高层软件向用户提供简洁、友善的界面,每一层都利用其下层提供的服务,来完成 I/O 功能中的某些子功能,并屏蔽这些功能的实现细节,向高层提供服务,故本题选 A。
各层次及其功能如图 5.7 所示,其中最底层的 "硬件" 不属于操作系统 I/O 软件的组成层次,图中的箭头表示 I/O 的控制流。
1. 中断处理程序
中断处理程序的主要任务是分析中断类型并作出相应的处理,处理时需先保存中断前的状态,然后转入相应的中断服务程序进行处理,处理完毕后恢复中断前的状态。
【拓展】本小节的 "中断" 泛指一切中断,不仅是指 I/O 中断。中断的过程如下:
1.检查是否有未响应的中断信号,如有,则操作系统暂时收回当前进程对 CPU 的控制权,并将其转交给中断处理程序;
2.保护被中断进程的 CPU 环境,以便中断处理完成后能够恢复运行;
3.转入相应的处理程序,确定引起本次中断的 I/O 设备,给其发送确认信号;
4.中断处理:进行数据交换、异常处理等操作;
5.恢复被中断进程的 CPU 环境,并退出中断。
中断处理程序处于 I/O 软件层次结构的最底层,直接与硬件交互,且与系统的其余部分尽可能少地发生联系。I/O 设备发送中断信号时,先由硬件作出初步处理,保存被中断进程的 CPU 环境,并转由中断处理程序处理该中断信号。处理完成后恢复该进程的 CPU 环境,然后返回断点继续执行。
16.【2010】本地用户通过键盘登录系统时,首先获得键盘输入信息的程序( )。
A. 命令解释程序
B. 中断处理程序
C. 系统调用服务程序
D. 用户登录程序
16.【参考答案】B
【解析】I/O 软件层次结构从上至下可分为用户层 I/O 软件、设备独立性软件、设备驱动程序、中断处理程序共四个层次。当用户使用键盘进行输入时会产生中断,通过中断处理程序可以获取用户输入的信息,因此最先获得键盘输入信息的程序是中断处理程序,故本题选 B。
2. 设备驱动程序
设备驱动程序用于具体实现系统对设备发出的操作指令,驱动 I/O 设备工作。
设备驱动程序处于 I/O 软件层次结构的次底层,每一类设备通常对应一个设备驱动程序,负责上层 I/O 软件与设备控制器之间的通信。设备驱动程序负责具体实现系统对设备发出的操作指令,驱动 I/O 设备工作,并为应用程序提供了统一抽象的接口,从而屏蔽了不同设备之间的差异。
用户进程通过设备驱动程序控制 I/O 设备工作的过程如下:
1.用户软件发出命令后,设备驱动程序将抽象的 I/O 请求转换为具体设备操作请求,例如:将簇号转换为磁盘物理地址;
10.下列可以将系统调用参数翻译成设备操作命令的是( )。
A. 用户层 I/O 软件
B. 设备独立软件
C. 中断处理程序
D. 设备驱动程序
10.【参考答案】B
【解析】I/O 软件层次结构从上至下可分为用户层 I/O 软件、设备独立性软件、设备驱动程序、中断处理程序共四个层次。系统调用尚不涉及不同种类设备的具体操作,因此属于设备独立性软件,故本题选 B。
2.设备驱动程序检查用户的 I/O 请求,根据具体情况作出相应处理;
3.设备驱动程序把状态寄存器中的内容读入 CPU 的寄存器中,检查设备状态,如果设备就绪,则启动设备控制器,否则等待;
4.设备驱动程序将数据和参数传送给设备控制器的寄存器;
5.设备驱动程序启动 I/O 设备,并控制 I/O 设备工作。
19.【2013】用户程序发出磁盘 I/O 请求后,系统的处理流程是:用户程序→系统调用处理程序→设备驱动程序→中断处理程序。其中,计算数据所在磁盘的柱面号、磁头号、扇区号的程序是( )。
A. 用户程序
B. 系统调用处理程序
C. 设备驱动程序
D. 中断处理程序
19.【参考答案】C
【解析】不同厂家生产的设备通常提供了不同的设备驱动程序,不同的设备驱动程序对应不同的中断处理,因此需要各自的设备驱动程序来完成,故本题选 C。
12.下面不属于驱动程序功能的是( )。
A. 接收进程发来的 I/O 命令和参数,并检查其合法性
B. 查询 I/O 设备的状态
C. 发出 I/O 命令,启动 I/O 设备
D. 对 I/O 设备传回的数据进行分析和缓冲
12.【参考答案】D
【解析】设备驱动程序的主要功能有:①接收设备独立软件发来的命令和参数,并将命令转换为与设备相关的低层操作序列;②响应由设备控制器发来的中断请求,根据中断类型调用相应的中断处理程序进行处理;③发出 I/O 命令,如果 I/O 设备空闲,则启动设备,否则等待;④检查用户进程 I/O 请求是否合法,传递 I/O 操作的参数。因此 A、B、C 正确,D 错误。题干要求选择错误的选项。故本题选 D。
11.下列关于设备驱动程序的说法中,正确的是( )。
I. 设备驱动程序负责处理与设备相关的中断处理过程
II. 驱动程序全部使用汇编语言编写,没有使用高级语言编写
III. 设备驱动程序负责处理磁盘调度
IV. 一个计算机系统配置了 1 台扫描仪和 2 台同型号的打印机,系统应该提供 3 个设备驱动程序才能正确驱动这些设备
A. 仅 II、III
B. 仅 I
C. 仅 I、III、IV
D. I、II、III、IV
11.【参考答案】B
【解析】不同厂家生产的设备通常提供了不同的设备驱动程序,不同的设备驱动程序对应不同的中断处理,因此需要各自的设备驱动程序来完成,I 正确;驱动程序仅有一部分需要用汇编语言编写,其余部分可以用高级语言编写,II 错误;磁盘调度是操作系统内核中的一个功能。操作系统会根据磁盘调度算法决定多个磁盘 I/O 请求的执行顺序,故 III 错误;同类型的设备只需要 1 个驱动程序,因此 2 个同型号的打印机只需要 1 个驱动程序,本题共需要 2 个设备驱动程序,IV 错误。故本题选 B。
【拓展】
1.对于不同类型的设备,其内部的电子部件和硬件特性也不相同,对设备内部寄存器的设置需要通过不同指令序列来完成,因此不同类型的设备需要不同驱动程序。
2.设备驱动程序对设备控制器操作的细节和差异进行了封装,这就像计算机网络中的层次体系结构,每一层将数据封装后交付给上层,上层无需考虑下层的实现细节。
3. 设备独立软件
设备独立软件,又称设备无关性软件,位于设备驱动程序与用户层 I/O 软件之间。 由于用户层 I/O 软件部分与设备有关,部分与设备无关,设备驱动程序不直接从用户程序接收 I/O 请求,而是通过设备独立软件来获得用户请求。设备独立软件引入了逻辑设备和物理设备的概念,程序可以使用逻辑设备名来使用设备。设备独立软件使得 I/O 软件独立于具体使用的物理设备,便利了操作系统对设备的分配,提高了操作系统的可适应性和可扩展性。
设备独立软件的主要功能如下:
1.缓冲区管理(5.2.1 节):用于缓和 CPU 与 I/O 设备的速度差异,提高 CPU 与 I/O 设备之间的并行性。
2**.设备分配与回收(5.2.2 节)**:引入逻辑设备名,并实现逻辑设备名到物理设备名的转换;将设备、控制器和通道分配给进程,确保 CPU 与 I/O 设备之间能正常通信。
14.【2009】程序员利用系统调用打开 I/O 设备时,通常使用的设备标识是( )。
A. 逻辑设备名
B. 物理设备名
C. 主设备号
D. 从设备号
14.【参考答案】A
【解析】以系统调用形式打开设备时,使用的是逻辑设备名而非物理设备名。用户程序面对的只能是逻辑设备,由设备分配程序将逻辑设备名转换为物理设备名之后,再根据要求的物理设备号进行分配,故本题选 A。
3.虚拟设备(5.2.3 节):将独占设备改造为共享设备的技术,以 SPOOLing(假脱机技术)为例,可以将独占设备改造为共享设备,并将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备,从而提高设备的利用率。
4.为设备驱动程序提供统一接口(5.2.4 节):方便用户添加设备驱动程序,更换设备时就无需修改 I/O 软件,大大方便了系统的更新和扩展。
【提示】在最新版 408 统考大纲中,SPOOLing 技术是 "设备独立软件" 的组成部分;而在一些经典教材中,SPOOLing 技术是 "用户层 I/O 软件" 的组成部分,请考生留意。
4. 用户层 I/O 软件
I/O 软件一般工作在核心态,但也有一小部分在用户态,这部分称为用户层 I/O 软件。用户层 I/O 软件位于 I/O 软件层次的最上层,用于实现与用户交互的接口,包括库函数和 SPOOLing(假脱机)软件等。它们通过系统调用来获取操作系统的服务。用户可直接调用库函数来使用 I/O 系统调用,进而对设备进行操作;SPOOLing 则是在用户模式运行的 I/O 软件,可以把独占设备变为共享设备,关于 SPOOLing 的具体内容将在 5.2.3 节详细介绍。
【举例】当用户使用库函数 printf 时,将会执行 write 系统调用,这个过程就是由用户层 I/O 软件完成的,它将用户请求翻译成格式化的 I/O 请求,并通过 "系统调用" 请求操作系统内核的服务。
【拓展】系统调用与库函数看似相似,但是它们有不同的实现,很多库函数的实现涉及系统调用。系统调用与库函数的区别如下表所示:
|------|------------------|---------------------|
| 不同点 | 系统调用 | 库函数 |
| 本质 | OS 内核提供的函数,面向硬件 | 为方便编程而设计,面向开发 |
| 运行状态 | 内核态 | 用户态 |
| 地址空间 | 内核空间 | 用户空间 |
| 调用对象 | OS 内核提供的服务 | 函数库中的一个程序(或函数) |
| 调用开销 | 需进行上下文切换,开销大 | 未使用系统调用时开销小 |
| 可移植性 | 依赖于内核,不保证移植性 | 与系统无关,可移植性好 |
| 调用性质 | 操作系统的一个入口点 | 与用户程序相联系 |
| 常见例子 | write、open、close | printf、fopen、fclose |5.1.4 输入输出应用程序接口
在 I/O 系统和主机的接口中,根据设备类型的不同,可分为块设备接口、字符设备接口和网络设备接口,下图展示了 I/O 系统各模块间的层次视图。
- 字符设备接口
字符设备是以字符为信息交换单位的设备,每次可以交换一个或多个字符,传输速度较低,通常采用中断驱动方式 。鼠标、键盘等设备属于字符设备。
字符设备接口,又称流设备接口,用于控制字符设备的输入和输出。字符设备接口提供以下操作:
(1)打开和关闭操作:由于大多数字符设备都属于独占设备,因此在共享时需实现互斥,使用字符设备时需先使用打开操作来打开设备,如果设备已被打开,则表示它正被其他进程使用。
(2)get 和 put 操作:由于字符设备不可寻址,只能以顺序方式存取,字符设备接口建立字符缓冲区,向用户程序提供 get 和 put 操作来从字符缓冲区输入和输出。get 操作用于从字符缓冲区读入一个字符到内存,并返回给调用者,put 操作用于把一个字符从内存先输出到字符缓冲区,再输出到设备。
- 块设备接口
块设备是以数据块 为信息交换单位的设备,每次可以交换一个或多个数据块的信息,传输速率较高,且支持对存储的信息进行寻址和随机读写。磁盘、固态硬盘等设备属于块设备。
块设备接口用于控制块设备的输入和输出,提供以下功能:
(1)隐藏磁盘的二维结构 :磁盘的每个扇区的地址需要用磁道号和扇区号来表示,因此磁盘地址是二维结构。块设备接口将磁盘上的所有扇区从 0 到 n - 1 依次编号(其中 n 为扇区总数),将磁盘地址映射到一维,从而隐藏了磁盘的二维结构。
(2)将抽象命令映射为低层操作 :由于用户进程使用的 open、close、read、write 无法直接被设备识别并执行,块设备接口会将这些命令映射为设备能识别的具体操作。例如,用户进程申请写磁盘时,块设备接口会将 write 命令中的逻辑块号转换为柱面号、磁头号(盘面号)和扇区号等。
【提示】字符设备接口和块设备接口的根本区别在于它们是否支持随机访问 。键盘输入的是数据流,当用户键入字符串 "operating system" 时,键盘驱动程序按照与输入完全相同的顺序返回字符流。如果对上述字符随机读取,就无法正确输入,因此键盘是典型的字符设备。而对于磁盘,磁盘驱动程序可以先读取磁盘上某一个块的内容,再读取磁盘上另一个块的内容,被读取的块在磁盘上位置不一定连续。硬盘属于块设备,支持随机访问,而不是以流的方式被访问。
- 网络设备接口
现代操作系统一般都提供了网络连接的功能,操作系统需要通过一定的方式把计算机连接到网络上,并提供网络软件和网络通信使用的网络设备接口,用于描述具体网络设备属性和操作,使计算机能通过网络与其他计算机进行通信。许多操作系统提供网络套接字接口,将本地套接字与远程套接字相连接,使网络上不同主机的进程之间能够进行端到端的通信。
【举例】IP 协议、TCP 协议、UDP 协议等网络通信协议,物理层、数据链路层、网络层、传输层、应用层等网络的层次结构都属于网络设备接口的内容。
5.1.5 阻塞 / 非阻塞 I/O
输入输出应用程序接口的另一方面涉及选择阻塞 I/O 与非阻塞 I/O。阻塞 I/O 和非阻塞 I/O 的区别主要在于应用程序的调用是否立即返回。
【举例】阻塞 I/O 与非阻塞 I/O 的区别就像需要做一件事,能不能立即得到 "返回值":如果不能立即获得 "返回值",则需要等待,也就是进程需要面临阻塞,阻塞过程中无法完成其他工作,这就是阻塞 I/O;反之,如果能立即获得 "返回值",则无需等待,也就是进程无需阻塞,在等待的过程可以完成其他的工作,这就是非阻塞 I/O。
- 阻塞 I/O
阻塞 I/O 是指进程发起 I/O 系统调用后,进程被阻塞,从操作系统的运行队列被移到阻塞队列。由操作系统内核空间对 I/O 系统调用进行处理,整个 I/O 处理完毕后,应用程序才被移回到就绪队列,当该进程恢复执行且系统调用成功时,它会收到系统调用的返回值,从而获取到所需的数据。
优点:进程阻塞不消耗 CPU 资源,可以及时响应每个操作;实现难度低、开发应用较容易;适用于并发量小的网络应用开发。
缺点:不适用于并发量大的应用,因为请求 I/O 会阻塞进程,所以需要给每个请求分配一个处理进程(线程)以便及时响应,系统开销大。
【举例】假设你要去接开水,到了接开水的地方,发现没有开水,你不知道什么时候有开水,只能站在那里等待,有其他事情要做也做不了,只有等接到开水后,才能去做其他的事情。在这个例子中,"你" 比喻进程,"开水" 比喻资源,这就是阻塞 I/O 在生活中的体现。
- 非阻塞 I/O
非阻塞 I/O 是指进程发起 I/O 系统调用后,如果内核缓冲区没有数据,需要到 I/O 设备中读取,进程返回一个错误,这个过程无需阻塞;进程发起 I/O 系统调用后,如果内核缓冲区有数据,内核就会把数据返回进程。
优点:进程(线程)发起 I/O 系统调用无需阻塞,系统开销相对较小,适用于并发量大的应用。
缺点:对 I/O 系统调用的执行情况的跟踪需要轮询 OS 内核,将占用一定的 CPU 资源;实现难度高,开发应用较困难。
【举例】假设你要去接开水,到了接开水的地方,发现没有开水,你不知道什么时候有开水,于是你把开水壶放在那里,就去做别的事情了,过一会儿回去检查开水到底有没有来,直到能接到开水。你接到了开水,结束这一 "轮询" 的过程。在这个例子中,"你" 比喻进程,"开水" 比喻资源,这就是非阻塞 I/O 在生活中的体现。
5.1.6 习题精编
1.下列关于设备属性的说法中,正确的是( )。
A. 在同一时刻允许多个进程同时访问的设备即为共享设备
B. 共享设备必须是既可以寻址,又支持随机读写的设备
C. 字符设备能指定输入的源地址以及输出的目标地址,因此其基本特征是可寻址到字节
D. 分配共享设备时会导致进程死锁
1.【参考答案】B
【解析】共享设备是同一时间段内允许多个进程同时访问的设备。共享设备可以被分配给多个进程,这些进程可以交叉使用共享设备,但是同一时刻只有一个进程能使用。共享设备必须是可寻址和可随机访问的设备,A 错误,B 正确;块设备是有结构设备,通常支持随机存取和寻址;而字符设备是无结构设备,通常不支持随机存取和寻址,而是以中断驱动方式进行输入和输出,C 错误;互斥条件、不剥夺条件、请求并保持条件、循环等待条件是死锁产生的四个必要条件,共享设备破坏了其中的互斥条件,不会导致死锁,D 错误。故本题选 B。
2.下列各项中,属于 I/O 接口功能的是( )。
I. 数据缓冲与格式转换
II. 错误与状态检测
III. I/O 操作的控制与定时
A. I
B. I、III
C. I、II
D. I、II、III
2.【参考答案】D
【解析】I/O 接口的功能为:①地址译码,选取接口寄存器;②接收控制命令,提供工作状态信息并进行状态检测;③数据缓冲与格式转换;④I/O 控制与定时,如中断、DMA 控制逻辑、设备操作等;⑤对内与主机通信,对外与外设通信。综上,I、II、III 均属于 I/O 接口的功能,故本题选 D。
3.下列关于 I/O 端口和接口的说法中,正确的是( )。
A. 采用独立编址方式时,通过地址线来区别存储单元和 I/O 设备
B. 采用独立编址方式时,需要设置专门的 I/O 指令访问端口
C. 按照数据传送格式,接口可以分为同步传送接口和异步传送接口
D. 采用统一编址方式时,通过指令格式来区别存储单元和 I/O 设备
3.【参考答案】B
【解析】采用独立编址方式时,存储单元和 I/O 设备靠不同的指令格式区分,访问 I/O 设备端口需要单独设置指令,A 错误,B 正确;按照数据传送方式,I/O 接口可以分为并行接口和串行接口,C 错误;采用统一编址方式时,存储单元和 I/O 设备靠不同地址来区分,D 错误。故本题选 B。
4.主机和外设只能串行工作的 I/O 控制方式有( )。
I. 程序查询方式
II. 程序中断方式
III. DMA 方式
IV. 通道方式
A. I
B. I、II
C. II、III、IV
D. II、IV
4.【参考答案】A
【解析】程序查询方式的 I/O 过程必须通过 CPU 完成,主机和外设无法并行工作,I 正确;程序中断方式中,主机和外设可以并行工作,外设准备好数据后向 CPU 发出中断请求即可,II 错误;DMA 方式中,整个传输过程由 DMA 控制器完成,CPU 只需在传送开始前设置传送方向、数据块大小、主存和设备地址等参数,III 错误;通道是一种专门负责输入 / 输出的 I/O 处理机,通道方式比 DMA 方式的并行度更高,CPU 介入程度更低,IV 错误,故本题选 A。
5.已知每个打印页面有 20 行,每行 50 个字符,若某打印机的打印速度为 30 页 / 分钟,向打印机的输出寄存器中写字符的时间忽略不计。每打印一个字符都需要花费 50μs 的中断处理时间,使用中断驱动 I/O 方式运行这台打印机,中断的系统开销占 CPU 的百分比为( )。
A. 2.5%
B. 15%
C. 20%
D. 50%
5.【参考答案】A
【解析】已知该打印机每分钟可以打印 30 页,30 页纸包含 30×20×50 = 30000 个字符,打印速度为 500 字符 / 秒,打印每个字符都需要 50μs 进行中断处理,则每一秒内进行中断处理的时间有 50×500 = 25ms,中断系统开销占 CPU 的百分比为 2.5%,故本题选 A。
6.引起 I/O 中断的事件有( )。
I. 数据传输完毕
II. 设备出错
III. 缺页
IV. 指令出错
A. I、III
B. I、II、III
C. I、II、III、IV
D. 以上都错
6.【参考答案】C
【解析】数据传输完毕时,会引起 I/O 中断,由 CPU 来处理这些数据,I 正确;设备出错或指令出错,需要 CPU 介入处理,会引起 I/O 中断,II 和 IV 正确;缺页发生时,CPU 需要将该页面从磁盘调入内存,会引起 I/O 中断,III 正确,故本题选 C。
7.在 DMA 方式中,描述正确的是( )。
A. DMA 是一个专门负责输入 / 输出的处理机
B. I/O 过程由 DMA 控制器进行完成,CPU 只需要在预处理和后处理阶段进行干预
C. CPU 通过程序的方式给出 DMA 可以解释的程序
D. DMA 不需要 CPU 指出所取数据的地址与长度
7.【参考答案】B
【解析】DMA 并不是处理器,不具备解释程序的能力,只能单方面受 CPU 控制,A 和 C 错误;DMA 方式中,数据传输过程由 DMA 控制器进行控制,不需要 CPU 介入的,但是数据传输的预处理和后处理阶段都需要 CPU 的干预,B 正确,D 错误。故选 B。
8.DMA 在( )建立一条直接数据通路。
A. I/O 设备和主存之间
B. I/O 设备之间
C. I/O 设备和 CPU 之间
D. CPU 和主存之间
8.【参考答案】A
【解析】DMA 通过专门的 DMA 接口硬件(即 DMA 控制器)来控制外设与主存之间的直接数据交换,数据传送不再需要经过 CPU,而是直接在外设和内存之间开辟了一条 "直接数据通道",使得数据传送期间不再需要占用 CPU 时间处理中断以及进行保护、恢复 CPU 现场等繁琐操作,工作速度明显提高。故本题选 A。
9.如果 I/O 花费的时间比 CPU 处理时间短得多,则缓冲区( )。
A. 最有效
B. 几乎无效
C. 均衡
D. 以上都不是
9.【参考答案】B
【解析】由于 CPU 处理时间比 I/O 设备短得多,因此设立缓冲区机制,用于缓和 CPU 与 I/O 设备的速度差异,提高 CPU 与 I/O 设备之间的并行性;当 I/O 花费的时间比 CPU 处理时间短得多,则缓冲区的存在就毫无意义了,故本题选 B。
10.下列可以将系统调用参数翻译成设备操作命令的是( )。
A. 用户层 I/O 软件
B. 设备独立软件
C. 中断处理程序
D. 设备驱动程序
10.【参考答案】B
【解析】I/O 软件层次结构从上至下可分为用户层 I/O 软件、设备独立性软件、设备驱动程序、中断处理程序共四个层次。系统调用尚不涉及不同种类设备的具体操作,因此属于设备独立性软件,故本题选 B。
11.下列关于设备驱动程序的说法中,正确的是( )。
I. 设备驱动程序负责处理与设备相关的中断处理过程
II. 驱动程序全部使用汇编语言编写,没有使用高级语言编写
III. 设备驱动程序负责处理磁盘调度
IV. 一个计算机系统配置了 1 台扫描仪和 2 台同型号的打印机,系统应该提供 3 个设备驱动程序才能正确驱动这些设备
A. 仅 II、III
B. 仅 I
C. 仅 I、III、IV
D. I、II、III、IV
11.【参考答案】B
【解析】不同厂家生产的设备通常提供了不同的设备驱动程序,不同的设备驱动程序对应不同的中断处理,因此需要各自的设备驱动程序来完成,I 正确;驱动程序仅有一部分需要用汇编语言编写,其余部分可以用高级语言编写,II 错误;磁盘调度是操作系统内核中的一个功能。操作系统会根据磁盘调度算法决定多个磁盘 I/O 请求的执行顺序,故 III 错误;同类型的设备只需要 1 个驱动程序,因此 2 个同型号的打印机只需要 1 个驱动程序,本题共需要 2 个设备驱动程序,IV 错误。故本题选 B。
12.下面不属于驱动程序功能的是( )。
A. 接收进程发来的 I/O 命令和参数,并检查其合法性
B. 查询 I/O 设备的状态
C. 发出 I/O 命令,启动 I/O 设备
D. 对 I/O 设备传回的数据进行分析和缓冲
12.【参考答案】D
【解析】设备驱动程序的主要功能有:①接收设备独立软件发来的命令和参数,并将命令转换为与设备相关的低层操作序列;②响应由设备控制器发来的中断请求,根据中断类型调用相应的中断处理程序进行处理;③发出 I/O 命令,如果 I/O 设备空闲,则启动设备,否则等待;④检查用户进程 I/O 请求是否合法,传递 I/O 操作的参数。因此 A、B、C 正确,D 错误。题干要求选择错误的选项。故本题选 D。
13.以下是 I/O 子系统提供的服务的是( )。
A. 文件系统空间分配
B. 设备分配
C. I/O 调度
D. 以上都是
13.【参考答案】D
【解析】I/O 设备种类繁多,由 I/O 子系统负责管理众多的 I/O 设备,其主要提供的服务有文件系统空间分配、设备分配、I/O 调度等。故选 D。
14.请说明下列操作分别是由 I/O 软件层次结构中的什么程序完成的。
(1) 向设备寄存器写命令;
(2) 对用户的设备使用权限进行检查;
(3) 将二进制整数转换成 ASCII 码的格式打印;
(4) 缓冲区管理。
14.【参考答案】
(1) 向设备寄存器写命令是由设备驱动程序完成的;
(2) 检查用户权限是由设备独立软件实现的;
(3) 将二进制整数转换成 ASCII 码的格式是由用户层 I/O 软件的库函数实现的;
(4) 缓冲区管理位于设备独立软件这一层次,是由设备独立软件实现的。
15.假设某通信接口中设有一个 8 位寄存器,在利用该接口进行通信时,其通信速率为 9.6Kb/s。请回答:
(1) 每隔多久需中断一次 CPU?
(2) 如果中断处理时间为 0.7ms,CPU 必须在多长时间内予以响应?
15.【参考答案】
(1) 已知通信速率为 9.6Kb/s,每秒传输 9600b,需中断 9600/8 = 1200 次,间隔为 1/1200 = 0.83ms。
(2) 因为中断处理时间为 0.7ms,每间隔 0.83ms 就会产生新的中断,因此 CPU 必须在 0.83 - 0.7 = 0.13ms 内响应。
5.1.7 真题演练
16.【2010】本地用户通过键盘登录系统时,首先获得键盘输入信息的程序( )。
A. 命令解释程序
B. 中断处理程序
C. 系统调用服务程序
D. 用户登录程序
16.【参考答案】B
【解析】I/O 软件层次结构从上至下可分为用户层 I/O 软件、设备独立性软件、设备驱动程序、中断处理程序共四个层次。当用户使用键盘进行输入时会产生中断,通过中断处理程序可以获取用户输入的信息,因此最先获得键盘输入信息的程序是中断处理程序,故本题选 B。
17.【2011】用户程序发出磁盘 I/O 请求后,系统的正确处理流程是( )。
A. 用户程序→系统调用处理程序→中断处理程序→设备驱动程序
B. 用户程序→系统调用处理程序→设备驱动程序→中断处理程序
C. 用户程序→设备驱动程序→系统调用处理程序→中断处理程序
D. 用户程序→设备驱动程序→中断处理程序→系统调用处理程序
17.【参考答案】B
【解析】I/O 软件层次结构从上至下可分为用户层 I/O 软件、设备独立性软件、设备驱动程序、中断处理程序共四个层次。当用户程序发出磁盘 I/O 请求后,首先从用户态切换到内核态,由内核执行系统调用处理程序,在完成逻辑设备名到物理设备名的映射后,调用相应的设备驱动程序,驱动磁盘工作,故本题选 B。
18.【2012】操作系统的 I/O 子系统通常由四个层次组成,每一层明确定义了与邻近层次的接口。其合理的层次组织排列顺序是( )。
A. 用户级 I/O 软件、设备无关软件、设备驱动程序、中断处理程序
B. 用户级 I/O 软件、设备无关软件、中断处理程序、设备驱动程序
C. 用户级 I/O 软件、设备驱动程序、设备无关软件、中断处理程序
D. 用户级 I/O 软件、中断处理程序、设备无关软件、设备驱动程序
18.【参考答案】A
【解析】I/O 软件层次结构从上至下可分为用户层 I/O 软件、设备独立性软件、设备驱动程序、中断处理程序共四个层次。其中低层软件用来屏蔽硬件细节的差异,高层软件向用户提供简洁、友善的界面,每一层都利用其下层提供的服务,来完成 I/O 功能中的某些子功能,并屏蔽这些功能的实现细节,向高层提供服务,故本题选 A。
19.【2013】用户程序发出磁盘 I/O 请求后,系统的处理流程是:用户程序→系统调用处理程序→设备驱动程序→中断处理程序。其中,计算数据所在磁盘的柱面号、磁头号、扇区号的程序是( )。
A. 用户程序
B. 系统调用处理程序
C. 设备驱动程序
D. 中断处理程序
19.【参考答案】C
【解析】不同厂家生产的设备通常提供了不同的设备驱动程序,不同的设备驱动程序对应不同的中断处理,因此需要各自的设备驱动程序来完成,故本题选 C。
20.【2017】系统将数据从磁盘读到内存的过程包括以下操作:①DMA 控制器发出中断请求;②初始化 DMA 控制器并启动磁盘;③从磁盘传输一块数据到内存缓冲区;④执行 "DMA 结束" 中断服务程序。正确的执行顺序是( )。
A. ③→①→②→④
B. ②→③→①→④
C. ②→①→③→④
D. ①→②→④→③
20.【参考答案】B
【解析】DMA 的传送过程主要分为预处理、数据传送和后处理三个阶段。预处理阶段:测试 I/O 设备的状态、DMA 控制器进行初始化等;传输阶段:当 I/O 设备准备好数据后发出 DMA 请求,CPU 让出总线控制权,完成数据传输;后处理阶段:DMA 控制器向 CPU 发出中断请求,CPU 执行相应的中断处理程序做 DMA 结束处理,包括检查传输过程是否正确和数据校验等。正确的执行顺序是②→③→①→④,故本题选 B。
5.2 设备独立软件
本节围绕设备独立软件及其主要功能展开。上一小节阐述了 I/O 软件层次结构,而设备独立软件则是其中的一个层次,它为操作系统管理 I/O 设备提供了可靠支持。考生在学习本节内容的过程中,请先尝试回答下列问题:
(1) 什么是设备独立性?为什么要实现设备独立性?
(2) 设备独立软件在 I/O 软件层次结构的哪一层?它为什么在这一层次?
设备独立软件的主要功能是缓冲区管理、设备分配与回收、提供设备驱动程序接口、设备保护等。请考生在学习过程中尝试回答下列问题(题目可以在各个小节中找到答案):
(1) 缓冲区和高速缓存有哪些区别和联系?
(2) 单缓冲、双缓冲、循环缓冲、缓冲池这四种缓冲区管理机制各有什么优缺点?
(3) 如何进行设备分配?需要遵守哪些原则?如何在设备分配中实现设备独立性?
(4) 假脱机技术是如何实现的?它有哪些特点?
(5) 为什么操作系统需要设备驱动程序接口?
5.2.1 缓冲区管理
缓冲区是一块存储区域,用于保存在两个设备之间或在设备和应用程序之间传输的数据。缓冲区管理的主要功能是对系统中的缓冲区进行有效组织,并提供获得和释放缓冲区的手段。
【拓展】缓冲区可以由寄存器等专用的硬件实现(硬件缓冲),也可以由操作系统在内存中开辟一个空间来实现(软件缓冲)。
引入缓冲区的原因可归结为以下几点:
(1) 缓和 CPU 和 I/O 设备的速度差异。
(2) 减少对 CPU 的中断频率,提高 CPU 的效率。
(3) 解决数据单元大小不匹配的问题。
(4) 提高 CPU 和 I/O 设备之间的并行性。
缓冲区的基本思想:当进程与设备执行数据交换时,先向系统申请一个缓冲区,然后由进程或设备将数据送至缓冲区,待缓冲区填满或数据输入完成时,将缓冲区中的数据送给设备或进程。缓冲区为空时,才能向缓冲区输入数据;缓冲区的数据填满时,才能从缓冲区输出数据。
缓冲(buffer)和缓存(cache)是两个相似而又有区别的概念。二者都是一段临时存储区,都能用来协调高速设备(比如处理机)与低速设备(比如硬盘、内存或者输入设备)之间的速度差异,都能提高计算机系统的效率。二者区别在于工作原理不同:缓冲是一个 "中转站",而缓存是数据源的副本。缓冲区中的数据可以是唯一的:数据源将数据发往缓冲区后就可以不再保留;但缓存保存的数据则一定是数据源中数据的子集。
常用的缓冲区技术有单缓冲、双缓冲、循环缓冲和缓冲池。
1. 单缓冲(Single Buffer)
单缓冲仅使用一个缓冲区,每当用户进程发出 I/O 请求时,操作系统便在内存的系统区中为之分配一个缓冲区。单缓冲的工作机制如图 5.9 所示。
对于块设备输入,先从磁盘把一块数据送至缓冲区,缓冲区填满后,系统把缓冲区中的数据送到用户区。假设磁盘把一块数据输入到缓冲区的时间为 T,操作系统把缓冲区送到用户区的时间为 M,CPU 处理该数据的时间为 C,由于 T 和 C 是可以并行的,则系统对除第 1 块和最后一块之外的每块数据的平均处理时间为 Max (C, T) + M。块设备输出类似,区别在于其数据流向相反。
1.设外设将一块数据传送到缓冲区耗时 20μs,将缓冲区的数据传送到用户区耗时 35μs,CPU 处理一块数据耗时 40μs。采用单缓冲区分传送外设数据,则处理五块数据所用的总时间为( )。
A. 395μs
B. 200μs
C. 375μs
D. 300μs
1.【参考答案】A
【解析】单缓冲工作示意图如图 5.9 所示。处理第 2 - 4 块数据的平均耗时为 Max (C, T) + M = 75μs,则处理第 2 - 4 块共耗时 75×4 = 300μs。第一块数据送入缓冲区耗时 20μs,第五块数据从缓冲区送入用户区耗时 35μs,第 5 块数据的 CPU 处理时间为 40μs。故处理五块数据所用的总时间为 300 + 20 + 35 + 40 = 395μs。故本题选 A。
对于字符设备输入,缓冲区用于暂存用户输入的一行数据,输入时用户进程挂起,等待一行数据输入完毕;输出时用户进程将第一行数据送入缓冲区后,继续进行处理,当用户进程已有第二行数据准备输出时,若第一行数据尚未被提取完毕(即缓冲区未空),则此时用户进程应等待。
【提示】对于单缓冲机制,输入和输出共用一个缓冲区,无法同时进行输入与输出,因此引入了双缓冲机制。
2. 双缓冲(Double Buffer)
双缓冲为输入和输出设备共分配两个缓冲区,在一个进程往一个缓冲区中传送数据(或从这个缓冲区中读取数据)的同时,操作系统可以清空(或填充)另一个缓冲区。双缓冲可以加快输入和输出速度,提高设备利用率。
双缓冲的工作机制如图 5.10 所示。输入数据时,先从设备读出数据,并送入缓冲区 1。待缓冲区 1 装满后,系统可从中读取数据,并送到用户进程,由用户进程对缓冲区 1 的数据进行加工和计算。与此同时,又可以从设备读出数据,并送入缓冲区 2。当缓冲区 1 为空时,可再次从设备读出数据,并送入缓冲区 1。待缓冲区 2 装满后,系统又可以把缓冲区 2 的数据送给用户进程,由用户进程对缓冲区 2 的数据进行加工和计算,实现了用户进程对两个缓冲区的交替使用。
假设磁盘把一块数据输入到缓冲区的时间为 T,操作系统把缓冲区送到用户区的时间为 M,CPU 处理该数据的时间为 C,对于双缓冲,M 和 C 可以与 T 并行,此时有以下两种情况:
(1) T > C 时,输入操作比计算操作慢,这时由于 M 远远小于 T,故将磁盘上的一块数据送到一个缓冲区期间,系统已将另一个缓冲区中的数据传送到用户区,并对这块数据进行处理,所以一块数据的传输和处理时间为 Max (C, T) = T,这种情况可保持块设备连续工作。
(2) T < C 时,计算操作比输入操作慢,当用户进程对上一块数据处理完毕时,需要把一个缓冲区中的数据送到用户区,花费时间为 M,再对这块数据进行计算,花费时间为 C,所以一块数据的传输和处理时间为 Max (C, T) + M = C + M,这种情况使得进程不必等待 I/O 操作。
综上,采用双缓冲系统对除第 1 块和最后一块之外的每块数据的处理时间平均为 Max (T, C + M)。
2.假设将一个数据块从外部设备传送到系统缓冲区的时间为 25μs,从系统缓冲区传送到用户区的时间为 40μs,CPU 处理一个数据块的时间为 40μs。总共需要读入和分析 4 个数据块,则采用双缓冲结构比单缓冲结构快( )。
A. 0μs
B. 10μs
C. 15μs
D. 20μs
2.【参考答案】A
【解析】① 双缓冲区工作示意图如图 5.10 所示。双缓冲处理第 2 - 3 个数据块的平均时间为 Max (C + M, T) = 80μs。第一块数据送入缓冲区耗时 25μs,第 4 块数据从缓冲区送入用户区耗时 40μs,第 4 块数据的 CPU 处理时间为 40μs。故处理 4 块数据所用的总时间为 80×3 + 25 + 40 + 40 = 345μs。② 单缓冲工作示意图如图 5.9 所示。单缓冲区处理第 2 - 3 个数据块的平均时间为 Max (C, T) + M = 80μs,第一块数据送入缓冲区耗时 25μs,第 4 块数据从缓冲区送入用户区耗时 40μs,第 4 块数据的 CPU 处理时间为 40μs。故处理 4 块数据所用的总时间为 80×3 + 25 + 40 + 40 = 345μs。故 345 - 345 = 0μs。故选 A。
【拓展】在双机通信中,单缓冲在任一时刻都只能实现单方面的数据传输,如图 5.11 (a) 所示;而双缓冲在双方的机器上分别设置了发送缓冲区和接收缓冲区,可以使通信的双方同时发送和接收数据,如图 5.11 (b) 所示。
【提示】虽然双缓冲机制提高了 I/O 设备的并行程度,减少了进程调度开销,但是输入和输出的速度不匹配,双缓冲机制的效果有限。可以通过增加缓冲区的个数,并组织成循环队列的形式来改善这种情况,因此引入了循环缓冲机制。
3. 循环缓冲
循环缓冲将多个大小相等的缓冲区链接成循环队列。在循环缓冲机制中,每个缓冲区都有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,组成循环缓冲区。
循环缓冲的工作机制如图 5.12 所示,灰色表示装满数据的缓冲区,白色表示空缓冲区。循环缓冲设置 in 和 out 两个指针,in 指针指向第一个空缓冲区,输入数据时,in 指针向前移动;out 指针指向第一个装满数据的缓冲区,输出数据时,out 指针向前移动,到达缓冲区的尾部时,指针又指向循环缓冲的头部。
【提示】由于循环缓冲是为特定的输入和输出设置的,属于专用缓冲,利用率不高,大量设置循环缓冲将浪费大量的内存空间,因此引入了缓冲池机制。
4. 缓冲池
缓冲池(Buffer Pool)包含了一个数据结构及一组操作函数的管理机制,用于管理大小相等的缓冲区。缓冲池既可用于输入又可用于输出,可被多个进程共享。
【提示】循环缓冲中的缓冲区仅仅是一组内存块的链表,而缓冲池则是包含了一个用于管理的数据结构及一组操作函数的管理机制,用于管理多个缓冲区,请考生注意区分。
4.缓冲技术中的缓冲池在( )中。
A. 寄存器
B. ROM
C. 外存
D. 内存
4.【参考答案】D
【解析】循环缓冲的缓冲区是一组内存块的链表,故本题选 D。
① 缓冲池的组成
通常将缓冲池中具有相同类型的缓冲区链接成一个队列,按使用状况可形成以下三个队列:
(1)空白缓冲队列:由空缓冲区链成的队列,用于取出空缓冲区来进行写入操作。
(2)输入队列:装满输入数据的缓冲区链成的队列,用于保存输入设备输入的数据,供用户程序读取。
(3)输出队列:装满输出数据的缓冲区链成的队列,用于保存用户程序输出到设备的数据,供用户程序读取。
除上述三个队列外,缓冲池还应具有四种工作缓冲区:用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区和用于提取输出数据的工作缓冲区。
② 缓冲池的工作机制
如图 5.13 所示,缓冲池中的缓冲区有以下四种工作方式:
(1)收容输入:输入进程从空缓冲队列的队首摘下一空缓冲区,作为收容输入工作缓冲区,然后把数据输入其中,装满后再将它挂在输入队列队尾。
(2)提取输入:计算进程从输入队列的队首取得一个缓冲区,作为提取输入工作缓冲区,从中提取数据,用完数据后将它挂在空缓冲队列队尾。
(3)收容输出:计算进程从空缓冲队列的队首取得一空缓冲区,作为收容输出工作缓冲区,当其中装满数据后,将其挂在输出队列末尾。
(4)提取输出:输出进程从输出队列的队首取得一装满输出数据的缓冲区,作为提取输出工作缓冲区,在数据提取完后,再将它挂在空缓冲队列末尾。
四种缓冲区管理机制的对比如表 5.3 所示。
3.下列选项中,可以使并发进程的 I/O 效率尽可能高的技术是( )。
A. 循环缓冲
B. 单缓冲
C. 双缓冲
D. 缓冲池
3.【参考答案】D
【解析】单缓冲机制中输入和输出共用一个缓冲区,无法同时进行输入与输出;双缓冲未解决输入和输出速度不匹配的问题,效果有限;循环缓冲与单缓冲、双缓冲同属专用缓冲,利用率不高,大量设置循环缓冲将浪费大量的内存空间;而缓冲池属于共享资源,可以使并发进程的 I/O 效率尽可能高,故本题选 D。
5.2.2 设备分配与回收
设备分配的任务是按照一定的策略,为提出 I/O 请求的进程分配合适的设备,确保 CPU 与 I/O 设备之间能正常通信,还应分配相应的控制器和通道。
【提示】通道是一种独立于 CPU 的专用于 I/O 控制的处理器,它可以控制 I/O 设备与内存直接进行数据交换。通道的启动需要由 CPU 执行相应指令,并在操作结束时向 CPU 发出中断信号。在数据交换过程中,CPU 无需进行干预,可以提高 CPU 和 I/O 的并行程度。
5.设备分配程序为用户进程分配设备的过程通常是( )。
A. 先分配设备,再分配设备控制器,最后分配通道
B. 先分配设备控制器,再分配设备,最后分配通道
C. 先分配通道,再分配设备,最后分配设备控制器
D. 先分配通道,再分配设备控制器,最后分配设备
5.【参考答案】A
【解析】通道控制设备控制器,设备控制器控制设备。当进程提出 I/O 请求后,系统的设备分配程序可按以下步骤进行设备分配:①如果设备空闲,则分配设备;②如果设备对应的控制器空闲,则分配设备控制器;③如果设备控制器对应的通道空闲,则分配通道。故本题选 A。
1. 设备分配数据结构
用于设备分配的数据结构的主要作用是描述系统的配置、I/O 设备的状态特性及当前的使用情况。在进行设备分配时需要以下数据结构:
(1) 设备控制表 DCT (Device Control Table):用于记录设备的情况,系统为每个设备配置一张设备控制表,如图 5.14 所示,设备控制表中应含有下列字段:
(a)设备类型:用于指示设备类型。
(b)设备标识符:即物理设备名,同一系统中的物理设备名是独一无二的。
(c)设备状态标志:用于表示当前设备的状态是忙或闲。
(d)指向控制器表的指针:指向该设备所连接的控制器的控制表。
(e)重复执行次数或时间:设备在工作中发生错误时应重复执行的次数。
(f)设备队列的队首指针:凡因请求本设备而未得到满足的进程,应将其 PCB 按照一定的策略排成一个设备请求队列,其队首指针指向队首 PCB。
【提示】"重复执行次数" 字段用于判定 I/O 请求是否失败,只有当失败并重传达到相应的次数,才能将该 I/O 请求判定为失败。
(2) 控制器控制表 COCT (Controller Control Table):用于记录控制器情况,系统为每个控制器配置一张控制器控制表,如图 5.15 (a) 所示。
(3) 通道控制表 CHCT (Channel Control Table):用于记录通道情况,系统为每个通道配置一张通道控制表,如图 5.15 (b) 所示。
【提示】一个通道可以控制多个设备控制器,而每个设备控制器又可以控制多个设备。当通道、设备控制器和设备都成功分配时,进程才能正常使用设备。
(4) 系统设备表 SDT (System Device Table):用于记录系统中全部设备的情况,每个设备占一个表目,整个系统只有一张系统设备表,如图 5.15 (c) 所示。
2. 设备分配策略
(1) 设备分配原则
设备分配的原则是根据设备特征、用户要求和系统配置情况决定的。设备分配的总原则是既要充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方法造成进程死锁,还要做到把用户程序和具体物理设备隔离开来。即用户程序面对的是逻辑设备,而分配程序将逻辑设备转换为物理设备之后,再根据要求的物理设备号进行分配,如图 5.16 所示。
(2) 设备分配方式
设备分配方式有静态分配和动态分配两种:
(1)静态分配:在作业执行前,由操作系统一次性分配该作业所需的全部设备、控制器和通道,当作业在执行过程中不再需要,或作业执行结束时再收回设备。静态分配一般用于独占设备。静态分配实现简单,破坏了死锁发生的 "请求和保持" 条件,能够防止死锁,但是系统会为进程一直保留设备,直到该进程完成,此时设备只能被特定的进程使用,因此降低了设备的利用率。
(2)动态分配:在作业需要用到某设备时,操作系统才会对其进行分配,当作业用完此设备,系统就会立刻回收。动态分配一般用于共享设备。动态分配可以提高设备利用率,但有可能出现死锁。
(3) 设备分配算法
通常采用以下两种设备分配算法:
(1)先来先服务:操作系统直接根据各个进程提出设备使用请求的先后次序分配设备。
(2)优先级高者优先:操作系统对进程设置优先级,进程的优先级越高,就越优先被分配设备,对于优先级相同的 I/O 请求,操作系统则按照先来先服务算法分配设备。
3. 设备分配的安全性
从进程运行的安全性上考虑,设备分配有以下两种方式:
(1) 安全分配方式
在安全分配方式中,一个进程在同一时间段内只能使用一个设备。获得设备的进程当即进入阻塞状态,不能再请求任何资源;阻塞状态的进程不能保持任何资源,直到其 I/O 操作完成时才被唤醒。
优点:破坏了死锁产生的 "请求和保持" 条件,设备分配安全。
缺点:对于同一个进程,CPU 和 I/O 设备串行工作,进程推进的效率不高。
(2) 不安全分配方式
在这种分配方式中,进程在发出 I/O 请求后继续运行而不阻塞,需要时可以继续发出 I/O 请求;仅当进程所请求的设备已被另一进程占用时,才进入阻塞状态。
优点:一个进程可同时操作多个设备,使进程迅速推进。
缺点:分配不安全,因其满足 "请求和保持" 条件,可能造成死锁(可以使用银行家算法来避免死锁)。
4. 设备独立性
设备独立性,又称设备无关性,是指应用程序与具体使用的物理设备无关。用户可以利用逻辑设备进行 I/O 操作,不必指定物理设备。
优点:应用程序与具体使用的物理设备无关,系统增减或变更设备时不必修改源程序,便于处理 I/O 设备故障,提高系统可靠性,并使设备的分配更加灵活,提高设备的利用率。
实现方式:为了实现设备独立性,通常通过逻辑设备表(Logical Unit Table, LUT)来建立逻辑设备到物理设备的映射。如图 5.17 所示,逻辑设备表的表项包括逻辑设备名、物理设备名和设备驱动程序的入口地址。
当进程用逻辑设备名请求分配 I/O 设备时,系统为其分配一台相应的物理设备,同时在 LUT 上建立一个表项,当以后进程再利用该逻辑设备名请求 I/O 操作时,便可从 LUT 中得到物理设备名和驱动程序入口地址。
逻辑设备表可以在整个系统只设置一张,也可以为每个用户设置一张:
(1)整个系统只设置一张 LUT:将系统中所有进程的设备分配情况都记录在同一张 LUT,无论是否是同一用户的逻辑设备,均不允许重名,因此只适合单用户系统。
(2)为每个用户设置一张 LUT:将系统中每个用户的设备分配情况都记录在不同的 LUT,因此对于不同的用户,该方式支持使用相同的逻辑设备名。
【拓展】在整个系统只设置一张 LUT 和为每个用户设置一张 LUT 就好比文件管理中单级目录结构和二级目录结构的区别,前者的全部文件位于同一目录,因此不允许 "重名",后者允许不同用户有相同的文件名。
5.2.3 假脱机技术(SPOOLing)
脱机输入、输出技术利用专门的外围控制机,将低速 I/O 设备上的数据传送到高速磁盘上,或者从磁盘传到 I/O 设备。缓和了 CPU 的高速性与 I/O 设备低速性之间的矛盾。当系统中引入了多道程序技术后,可以利用不同的程序,分别模拟脱机输入、输出时外围控制机的功能。
假脱机技术(Simultaneous Peripheral Operating OnLine, SPOOLing),可以直译为 "联机情况下同时进行的外围设备操作"。它可以将独占设备改造为共享设备,并将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备,从而提高设备的利用率。
SPOOLing 技术通过 "空间换时间" 的策略,解决了低速 I/O 设备与计算机主机交换信息时速度不匹配的问题。如图 5.18 所示,SPOOLing 技术利用输入、输出进程模拟外围控制机,数据从 I/O 设备输入时,先把低速 I/O 设备上的数据经内存的输入缓冲区传送到高速磁盘上,当 CPU 需要数据时再从磁盘读取相应数据;数据输出到 I/O 设备时,先把数据经内存的输出缓冲区输出到高速磁盘,再从磁盘输出到低速 I/O 设备。在这个过程中,外围操作可以与 CPU 对数据的处理同时进行,因此将这种在联机情况下同时进行的外围设备操作称为假脱机操作。
如果说,通过多道程序技术可将一台物理 CPU 虚拟为多台逻辑 CPU,从而允许多个用户共享一台主机。那么,通过假脱机技术,则可将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备,这样也允许多个用户共享一台物理 I/O 设备。
- SPOOLing 系统的组成
如图 5.18 所示,SPOOLing 系统主要由以下四部分组成:
(1) 输入井和输出井:输入井和输出井是磁盘上的两个区域,由输入井负责暂存输入数据,由输出井负责暂存输出数据。
(2) 输入缓冲区和输出缓冲区:输入缓冲区和输出缓冲区是内存中的两个缓冲区,用于缓和 CPU 和磁盘之间速度不匹配的矛盾。输入缓冲区负责暂存从输入设备送来的数据,以备传送到输入井;输出缓冲区负责暂存从输出井送来的数据,以备传送到输出设备。
(3) 输入进程和输出进程:输入进程,又称预输入进程,用于将用户要求的数据从输入设备通过输入缓冲区再送到输入井。当 CPU 需要输入数据时,不必再启动输入设备,直接从输入井读入内存。输出进程,又称缓输出进程,用于将用户要求的数据从内存输出到输出井。当输出设备空闲时,位于输出井的数据通过输出缓冲区传送到输出设备。
(4) 井管理程序:井管理程序,包含输入井管理程序和输出井管理程序,用于控制设备与输入井、输出井之间信息的交换。当进程提出 I/O 操作请求时,由操作系统调用井管理程序,并由井管理程序控制信息的输入与输出。
【举例】打印机是独占设备,在没有改造为共享设备时,假如它被一个进程占用且长时间未使用,则其他进程都无法使用打印机,可以通过 SPOOLing 技术将其改造为共享设备。对于使用了 SPOOLing 技术的打印机,当用户进程请求打印时,SPOOLing 系统接受打印请求,并将要打印的数据送入输出井,由输出进程根据打印顺序,依次从输出井传送到内存中的输出缓冲区,最后由打印机进行打印。
- SPOOLing 系统的特点
SPOOLing 系统具有以下特点:
(1) 缓冲区的设置缓和了 CPU 和 I/O 设备之间速度不匹配的矛盾:把对 I/O 设备的操作转变为对磁盘缓冲区的数据存取,提高了 I/O 速度。
(2) 将独占设备改造为虚拟的共享设备:SPOOLing 系统没有直接把设备分配给进程,而是改造为共享设备以供多个进程同时使用,提高了 I/O 设备的使用效率。
(3) 将一个物理设备变换为多个对应的逻辑设备:进程无需独占物理设备,而是使用逻辑设备,实现了虚拟设备功能。
5.2.4 设备驱动程序接口
设备驱动程序用于具体实现系统对设备发出的操作指令,驱动 I/O 设备工作。想象一下这样的场景:操作系统先发布,某一类型的设备后出现,那么操作系统是否能识别该类型的 I/O 设备?新的设备类型的出现是否又意味着操作系统需要修改呢?
假设操作系统与每个设备驱动程序的接口都不同,那么可供操作系统调用的驱动程序的函数和驱动程序所需的内核函数也不相同,最终将导致操作系统为每个新的驱动程序提供接口都需要大量的编程工作。
如果驱动程序具有相同的接口,那么只要符合驱动程序接口,添加新的驱动程序就容易得多了。对于同一种设备类型,操作系统定义一组驱动程序必须支持的函数。而驱动程序通常包含一张表格,这张表格具有针对这些函数指向驱动程序自身的指针。当驱动程序装载时,操作系统记录下这张函数指针表的地址,操作系统需要调用一个函数时,可以通过这张表格发出间接调用。这张函数指针表定义了驱动程序与操作系统其余部分之间的接口。给定类型的所有设备都必须服从这一要求。
设备驱动程序接口还涉及为 I/O 设备命名和设备保护的问题,由设备独立软件把符号化的设备名映射到适当的驱动程序上,由操作系统对每个设备设置访问权限,防止无权访问设备的用户对相应设备进行访问。
5.2.5 习题精编
1.设外设将一块数据传送到缓冲区耗时 20μs,将缓冲区的数据传送到用户区耗时 35μs,CPU 处理一块数据耗时 40μs。采用单缓冲区分传送外设数据,则处理五块数据所用的总时间为( )。
A. 395μs
B. 200μs
C. 375μs
D. 300μs
1.【参考答案】A
【解析】单缓冲工作示意图如图 5.9 所示。处理第 2 - 4 块数据的平均耗时为 Max (C, T) + M = 75μs,则处理第 2 - 4 块共耗时 75×4 = 300μs。第一块数据送入缓冲区耗时 20μs,第五块数据从缓冲区送入用户区耗时 35μs,第 5 块数据的 CPU 处理时间为 40μs。故处理五块数据所用的总时间为 300 + 20 + 35 + 40 = 395μs。故本题选 A。
2.假设将一个数据块从外部设备传送到系统缓冲区的时间为 25μs,从系统缓冲区传送到用户区的时间为 40μs,CPU 处理一个数据块的时间为 40μs。总共需要读入和分析 4 个数据块,则采用双缓冲结构比单缓冲结构快( )。
A. 0μs
B. 10μs
C. 15μs
D. 20μs
2.【参考答案】A
【解析】① 双缓冲区工作示意图如图 5.10 所示。双缓冲处理第 2 - 3 个数据块的平均时间为 Max (C + M, T) = 80μs。第一块数据送入缓冲区耗时 25μs,第 4 块数据从缓冲区送入用户区耗时 40μs,第 4 块数据的 CPU 处理时间为 40μs。故处理 4 块数据所用的总时间为 80×3 + 25 + 40 + 40 = 345μs。② 单缓冲工作示意图如图 5.9 所示。单缓冲区处理第 2 - 3 个数据块的平均时间为 Max (C, T) + M = 80μs,第一块数据送入缓冲区耗时 25μs,第 4 块数据从缓冲区送入用户区耗时 40μs,第 4 块数据的 CPU 处理时间为 40μs。故处理 4 块数据所用的总时间为 80×3 + 25 + 40 + 40 = 345μs。故 345 - 345 = 0μs。故选 A。
3.下列选项中,可以使并发进程的 I/O 效率尽可能高的技术是( )。
A. 循环缓冲
B. 单缓冲
C. 双缓冲
D. 缓冲池
3.【参考答案】D
【解析】单缓冲机制中输入和输出共用一个缓冲区,无法同时进行输入与输出;双缓冲未解决输入和输出速度不匹配的问题,效果有限;循环缓冲与单缓冲、双缓冲同属专用缓冲,利用率不高,大量设置循环缓冲将浪费大量的内存空间;而缓冲池属于共享资源,可以使并发进程的 I/O 效率尽可能高,故本题选 D。
4.缓冲技术中的缓冲池在( )中。
A. 寄存器
B. ROM
C. 外存
D. 内存
4.【参考答案】D
【解析】缓冲区是一组内存块的链表,故本题选 D。
5.设备分配程序为用户进程分配设备的过程通常是( )。
A. 先分配设备,再分配设备控制器,最后分配通道
B. 先分配设备控制器,再分配设备,最后分配通道
C. 先分配通道,再分配设备,最后分配设备控制器
D. 先分配通道,再分配设备控制器,最后分配设备
5.【参考答案】A
【解析】通道控制设备控制器,设备控制器控制设备。当进程提出 I/O 请求后,系统的设备分配程序可按以下步骤进行设备分配:①如果设备空闲,则分配设备;②如果设备对应的控制器空闲,则分配设备控制器;③如果设备控制器对应的通道空闲,则分配通道。故本题选 A。
6.下列关于设备独立性的说法中正确的是( )。
A. 设备独立性指的是 I/O 设备可以独立执行 I/O 功能,不需要 CPU 干预
B. 设备独立性是指进程使用的设备名独立于物理设备
C. 设备独立性是指各个外部设备是相互独立的,无法进行通信
D. 设备独立性是指设备驱动程序独立于物理设备
6.【参考答案】B
【解析】设备独立性并不意味着 CPU 无需干预,A 错误;设备独立性的实现使得应用程序与具体使用的物理设备无关,B 正确,D 错误;设备独立性的实现不会影响外部设备之间的通信,C 选项是对设备独立性的曲解,故本题选 B。
7.下列不属于设备分配算法的是( )。
A. 先来先服务
B. 短作业优先
C. 优先级高的优先
D. 以上几种都不是
7.【参考答案】B
【解析】设备分配算法主要有两种:先来先服务算法和优先级高者优先算法,短作业优先算法属于进程 / 作业调度算法,故本题选 B。
8.若某系统采用了 SPOOLing 技术,则用户进程打印的数据首先被传送到( )。
A. 输出井
B. 输入井
C. 内存
D. 外部设备
8.【参考答案】A
【解析】采用 SPOOLing 技术的系统会在磁盘中开辟两块区域,分别是输入井和输出井,输入井负责暂存输入数据,输出井负责暂存输出数据。当用户进程的打印内容已经准备完毕,首先送到输出井中,在打印机空闲时再进行输出,故本题选 A。
9.下列关于 SPOOLing 系统的说法中,正确的是( )。
A. 当输入设备忙时,SPOOLing 系统中的用户程序必须暂停执行,直到外设空闲才能进行输入操作
B. SPOOLing 系统必须有外围控制机的支持
C. SPOOLing 系统只需在磁盘中开辟输入井和输出井,即可实现脱机输入与输出
D. 无论设备空闲与否,SPOOLing 系统中的用户程序都可以将输出数据送到输出井中,待外设空闲即可完成输出操作
9.【参考答案】D
【解析】在 SPOOLing 技术中,当输入设备忙时,可以给进程分配虚拟设备,进程无需等待 I/O 完成,A 错,D 对;SPOOLing 系统中有输入进程和输出进程,二者模拟了脱机方式的外围控制机,因此 SPOOLing 系统中没有设置外围控制机,B 错;SPOOLing 技术除了在磁盘中设置输入井和输出井,还需要井管理程序来控制作业与输入井、输出井之间信息的交换,C 错。
10.下列关于虚拟设备的说法中,正确的是( )。
A. 虚拟设备是指允许用户以统一的接口使用物理设备
B. 虚拟设备是指允许用户使用比系统具有的物理设备更多的设备
C. 虚拟设备是指把一个物理设备变换为多个对应的逻辑设备
D. 虚拟设备是指允许用户程序部分装入内存即可使用系统中的设备
10.【参考答案】C
【解析】虚拟设备技术是一种将独占设备改造为共享设备的技术,可将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备,从而增加设备利用率。A、B、D 表述不准确,故本题选 C。
11.以时间换空间或者以空间换时间是操作系统的基本技术,下列属于以空间换时间的是( )。
A. SPOOLing
B. 中断技术
C. 通道技术
D. 覆盖技术
11.【参考答案】A
【解析】SPOOLing 技术可以将独占设备改造为虚拟的共享设备,通过预输入和缓输出来缓和 CPU 与 I/O 设备的速度差异,从而提升 I/O 性能,B、C、D 与空间换时间无关,故本题选 A。
12.下列关于 SPOOLing 的说法中,错误的是( )。
A. SPOOLing 系统中不需要独占设备
B. SPOOLing 技术可以提高 I/O 效率
C. SPOOLing 技术可以将独占设备改造成共享设备
D. SPOOLing 技术将一个物理设备变换为多个对应的逻辑设备
12.【参考答案】A
【解析】SPOOLing 技术可以将独占设备改造为虚拟的共享设备,从而提高输入 / 输出效率,B 和 C 正确;SPOOLing 技术将一个物理设备虚拟为多个对应的逻辑设备,D 正确;SPOOLing 系统中必须有独占设备用以改造,A 错误。题干要求选择错误的选项,故本题选 A。
13.某系统采用双缓冲区结构,已知将一个数据块从外部设备传送到系统缓冲区的时间为 80μs,从系统缓冲区传送到用户区的时间为 20μs,CPU 处理一个数据块的时间为 40μs,总共需要读取和分析 4 个数据块,每个数据块的平均处理时间是多少?
13.【参考答案】
处理一块数据的平均时间为 Max (C + M, T) = 80μs,处理前 3 块数据共耗时 240μs,处理最后一块数据耗时 80 + 20 + 40 = 140μs,处理 4 块数据总耗时为 380μs,每块数据的平均处理时间为 380μs / 4 = 95μs。
5.2.6 真题演练
14.【2009】程序员利用系统调用打开 I/O 设备时,通常使用的设备标识是( )。
A. 逻辑设备名
B. 物理设备名
C. 主设备号
D. 从设备号
14.【参考答案】A
【解析】以系统调用形式打开设备时,使用的是逻辑设备名而非物理设备名。用户程序面对的只能是逻辑设备,由设备分配程序将逻辑设备名转换为物理设备名之后,再根据要求的物理设备号进行分配,故本题选 A。
15.【2011】某文件占 10 个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析,假设一个缓冲区与一个磁盘块大小相同,把一个磁盘块读入缓冲区的时间为 100μs,将缓冲区的数据传送到用户区的时间是 50μs,CPU 对一块数据进行分析的时间为 50μs。在单缓冲区和双缓冲区结构下,读入并分析完该文件的时间分别是( )。
A. 1500μs, 1000μs
B. 1550μs, 1100μs
C. 1550μs, 1550μs
D. 2000μs, 2000μs
15.【参考答案】B
【解析】单缓冲区中,系统对每一块数据的处理时间 t = Max (C, T) + M,即 Max (50, 100) + 50 = 150μs,处理前 9 个磁盘块耗时 9×t = 9×150 = 1350μs,处理最后一个磁盘块耗时 T + M + C = 200μs,共耗时 1350 + 200 = 1550μs;双缓冲区中,系统对每一块数据的处理时间 t = Max (C + M, T),即 Max (50 + 50, 100) = 100μs,处理前 9 个磁盘块耗时 9×t = 9×100 = 900μs,处理最后一个磁盘块耗时 200μs,共耗时 900 + 200 = 1100μs,故本题选 B。
16.【2013】设系统缓冲区和用户工作区均采用单缓冲,从外设读入 1 个数据块到系统缓冲区的时间为 100,从系统缓冲区读入 1 个数据块到用户工作区的时间为 5,对用户工作区中的 1 个数据块进行分析的时间为 90 (如下图所示)。进程从外设读入并分析 2 个数据块的最短时间是( )。
A. 200
B. 295
C. 300
D. 390
16.【参考答案】C
【解析】单缓冲区中,系统对每一块数据的处理时间 t = Max (C, T) + M,即 Max (90, 100) + 5 = 105,处理第 1 个磁盘块耗时 105,处理第 2 个数据块,即最后一个数据块,耗时 T + M + C = 195,共耗时 105 + 195 = 300,故本题选 C。
17.【2015】在系统内存中设置磁盘缓冲区的主要目的是( )。
A. 减少磁盘 I/O 次数
B. 减少平均寻道时间
C. 提高磁盘数据可靠性
D. 实现设备无关性
17.【参考答案】A
【解析】内存和磁盘的速度差异巨大。根据局部性原理,可以在内存中设置磁盘缓冲区,用于存取磁盘中频繁使用的块来减少磁盘 I/O 次数,进而提高磁盘性能,故本题选 A。
18.【2016】下列关于 SPOOLing 技术的叙述中,错误的是( )。
A. 需要外存的支持
B. 需要多道程序设计技术的支持
C. 可以让多个作业共享一台独占设备
D. 由用户作业控制设备与输入 / 输出井之间的数据传送
18.【参考答案】D
【解析】SPOOLing 系统由输入 / 输出井、输入 / 输出缓冲区、输入 / 输出进程、井管理程序构成。输入井和输出井是在磁盘中开辟的存储区域,A 对;SPOOLing 技术可以将独占设备改造成虚拟的共享设备,常用于多道程序系统,需要多道程序设计技术的支持,B、C 对;井管理程序用于控制设备与输入井、输出井之间信息的交换,D 错误。
19.【2020】对于具备设备独立性的系统下列叙述中错误的是( )。
A. 可以使用文件名访问物理设备
B. 用户程序使用逻辑设备名访问物理设备
C. 需要建立逻辑设备与物理设备之间的映射关系
D. 更换物理设备后必须修改访问该设备的应用程序
19.【参考答案】D
【解析】Linux 系统将所有的设备都看作文件来处理,用户可以像使用文件一样使用这些设备,而无需了解它们的具体存在与实现形式,A 正确;设备独立软件负责将逻辑设备名转化为物理设备名,用户程序只需使用逻辑设备名即可访问设备,B 和 C 正确;由于设备独立性的实现,用户进程使用逻辑设备名来访问设备,更换物理设备不会对设备访问产生影响,无需修改应用程序,D 错误。题干要求选择错误的选项,故本题选 D。
5.3 外存管理
本节有两个核心:磁盘和固态硬盘,它们是两种典型的外存设备。本节的概念较为琐碎,以理解和记忆为主,难度不大。考生在学习本节内容时,可以先尝试对磁盘结构有一个初步的认识,并尝试回答下列问题:
(1) 什么是磁盘?什么是固态硬盘?
(2) 磁盘和固态硬盘各有什么样的性能表现?
磁盘从出厂到使用需要经过低级格式化、分区和高级格式化,其中会涉及引导块和坏块的知识。磁盘调度算法是对磁盘寻道时间的优化,固态硬盘无需寻道,但是需要进行磨损均衡。请考生在学习过程中尝试回答下列问题(题目可以在各个小节中找到答案 ):
(1) 磁盘由哪些部件组成?它们是如何相互配合工作的?
(2) 如何计算磁盘读取时间?
(3) 四种磁盘调度算法分别是如何进行磁盘调度的?它们有哪些优缺点?
(4) 为什么固态硬盘需要进行磨损均衡?动态磨损均衡和静态磨损均衡各有哪些优缺点?
5.3.1 磁盘
磁盘是一种利用磁记录技术存储数据的存储器,具有记录密度高、容量大、速度快等优点,它是目前计算机存储系统中使用最普遍的一种外部存储器。磁盘是以数据块为信息交换单位的设备,每次可与内存交换一个或多个数据块的信息,且支持操作系统直接存取磁盘上的任意物理块。
【提示】操作系统对磁盘等辅存的访问是以块为单位的,而对主存的访问是以字节或字为单位的。例如在分页存储管理方式中,访问主存不仅需要页号,而且需要页内偏移才可以访问。
1. 磁盘结构
磁盘结构如图 5.19 所示(4 个盘片,8 个磁头,每个磁道 8 个扇区),磁盘安装在一个磁盘驱动器中,它由磁头臂、用于旋转磁盘的主轴和用于数据输入 / 输出的电子设备组成。传统磁盘通常是盘面旋转,而磁头在一定范围内移动。磁盘的相关概念如下:
(1) 盘片:由铝合金材料或玻璃构成的基片,盘片的表面涂有磁性物质,每个磁盘有一个或多个盘片。
(2) 盘面:盘片上涂有磁性物质的面,每个盘片有一个或两个盘面。
(3) 磁头:对磁盘进行读写的部件,每个盘面对应一个磁头,因此盘面号又叫磁头号,所有磁头连在同一磁臂上,因此所有磁头只能 "共进退"。
(4) 磁道:盘面上以盘片中心为圆心,不同半径的同心圆,每个盘面有若干个磁道,各磁道之间有必要的间隙。
(5) 柱面:所有盘面上由相同水平位置的磁道从上到下组成的圆柱体。
(6) 扇区:每个磁道可以被分为若干个弧段,一个弧段就是一个扇区,各扇区之间有必要的间隙。扇区是磁盘的最小组成单元,每个扇区存放的数据量相等,一般为 512 字节。
磁盘上的任意一个物理地址可以用(柱面号,盘面号,扇区号 )来表示。磁盘的存储容量 = 磁头数 (盘面数)× 磁道数 (柱面数)× 每个磁道上的扇区数 × 每个扇区的字节数。
【提示】由于每个扇区存放的数据量相等,因此扇区所在的磁道越往内侧,扇区面积越小,扇区内的数据密度就越大,因此磁盘的存储能力由最内侧磁道的最大记录密度决定。
通常对磁盘扇区进行错位编号、对磁盘盘面进行错位命名,如图 5.20 和图 5.21 所示。磁头读完一个扇区的数据时,还需要一部分处理时间。由于此时盘片仍在旋转,无法连续读取下一个磁盘块,需等到盘片再转一圈才能够读取,因此错位编号和错位命名可以减少磁盘的旋转延迟时间。
2. 磁盘格式化和分区
磁盘格式化可以分为低级格式化和高级格式化两种,磁盘分区则是磁盘高级格式化前的必要步骤。
(1) 低级格式化
低级格式化,又称物理格式化,是指对一个新磁盘划分出柱面和磁道,再将磁道划分为若干个扇区。每个扇区又划分为头部、尾部和数据区域,其中头部和尾部包含了一些磁盘控制器的信息,用于保存扇区号、进行扇区校验。
低级格式化一般由磁盘生产厂家在出厂前完成。如果某个扇区在出厂前已经损坏,且无法通过纠错算法恢复,则低级格式化过程将对该扇区进行标记,防止操作系统进行读写。低级格式化只能针对整块磁盘,不能对某个分区单独进行。
【拓展】当磁盘出现大量坏扇区时,可以通过低级格式化来对扇区重新划分,从而修复磁盘。但低级格式化是一种损耗性操作,会对磁盘寿命产生一定的负面影响,非必要应避免。
(2) 分区
分区是指把一个物理磁盘的存储空间划分为几个相互独立的部分,由分区起始和终止的磁头、柱面、扇区、总的扇区数等信息来控制分区的边界。在逻辑上,每个分区就是一个独立的逻辑磁盘。
一个磁盘可以有一个或多个分区,不同的分区可以使用不同的文件系统。对磁盘进行分区有利于文件的分类管理,将系统文件和数据文件隔离开。如果操作系统需要从磁盘引导启动,就必须有一个分区被标记为活动分区。
(3) 高级格式化
高级格式化,又称逻辑格式化,是对磁盘分区创建文件系统,包括创建文件系统的根目录、初始化存储空间管理所用的数据结构(如位示图、空闲分区表 )等,使操作系统能够对磁盘进行读写。高级格式化会删除硬盘驱动器上的数据,生成引导区信息、初始化文件分配表、标注逻辑坏道、校验数据等。高级格式化的方法因操作系统的不同而有所差异。
【提示】低级格式化针对的是硬盘,高级格式化针对的是分区,一块新磁盘要经过低级格式化、分区、高级格式化,才可以正常使用。
- 磁盘引导块和坏块
(1) 引导块
引导块包含引导操作系统的代码。每个分区都有一个引导块,引导块中的程序将装载该分区中的操作系统。为统一起见,每个分区都从引导块开始,如果分区不包含操作系统,则引导块的内容可以为空。
计算机启动时需要先运行一个自举程序(初始化程序 ),该程序通常位于只读存储器(ROM)中。由于改变 ROM 中的引导代码需要改变 ROM 的硬件芯片,因此 ROM 中只包含自举程序中固定不变的一部分,而把完整的自举程序放在磁盘固定位置的引导块中,以便引导程序的更新。
(2) 坏块
坏块是无法正常使用的扇区,属于硬件故障。磁盘在生产时就有可能存在坏块,出厂前的低级格式化会对磁盘上的坏块进行标记,并用磁盘末尾的一些空闲块进行替换,操作系统无法感知。在出厂后,仍然会有正常的磁盘块变成坏块,这种情况则可以被操作系统检测到。
坏块只能进行屏蔽,不能进行修复,可以在磁盘控制器或从操作系统层面对坏块进行处理。磁盘控制器可以将坏块重新映射到出厂预留的空闲块中,而操作系统可以在逻辑格式化时对整个磁盘进行坏块检查,标记哪些块属于坏块,例如在 FAT 表上标明以避免使用。
4. 磁盘读取时间
磁盘的读取时间由寻道时间、旋转延迟、传输时间共同决定。
5. 磁盘调度算法
由于磁盘的读写涉及磁头的移动,磁头移动产生的寻道时间是磁盘读取时间的主要部分,而旋转延迟时间和传输时间几乎 无法从操作系统层面优化,因此磁盘调度的目标是使磁盘的平均寻道时间尽可能少。为了减少寻道时间,应尽可能找到一种磁盘调度的最佳算法,目前常用的磁盘调度算法有先来先服务、最短寻道时间优先和扫描等算法。
(1) 先来先服务(First Come First Served, FCFS )算法
先来先服务算法依据进程请求访问磁盘的先后次序进行调度。该算法实现简单,对进程公平,不会导致进程饥饿。但该算法未对寻道进行优化,平均寻道时间可能较长。
如图 5.22 所示,磁盘请求队列中的请求顺序分别为:50,150,30,190,20,100,55,90,磁头的初始位置是磁道 50,访问磁盘的实际顺序与请求顺序相同。采用该算法,磁头移动磁道总数 =(150 - 50)+(150 - 30)+(190 - 30)+(190 - 20)+(100 - 20)+(100 - 55)+(90 - 55) = 710,平均寻道长度 = 710/8 = 88.75。
(2) 最短寻道时间优先(Short Seek Time First, SSTF )算法
最短寻道时间优先算法每次寻找磁盘访问请求中与当前磁头最近的磁道,使每次寻道时间最短。但该算法会导致进程饥饿,且仍然不能保证平均寻道时间最短。假设有大量靠近当前磁道的磁盘访问请求,则请求时间早且距离当前磁头较远的磁盘访问请求将长期无法得到满足,从而出现 "饥饿" 现象。
如图 5.23 所示,磁盘请求队列中的请求顺序分别为:50,150,30,190,20,100,55,90,磁头的初始位置是磁道 50,访问磁盘的实际顺序分别为:50,55,30,20,90,100,150,190。采用该算法,磁头移动磁道总数 =(55 - 50)+(55 - 30)+(30 - 20)+(90 - 20)+(100 - 90)+(150 - 100)+(190 - 150) = 210,平均寻道长度 = 210/8 = 26.25。
(3) 扫描(SCAN )算法
扫描算法,又称电梯算法。每次在磁头移动方向上,选择与当前磁头最近的磁道作为访问对象。直至到达这个方向上的最后一个磁道,再沿反方向按照上述规则选择访问对象。该算法不会导致进程饥饿,且平均寻道时间较短,但对最近访问过的区域不公平。例如:当磁头刚越过某个磁道,而新的磁盘访问请求位于该磁道时,进程可能会面临较长时间的等待。
如图 5.24 所示,磁盘请求队列中的请求顺序分别为:50,150,30,190,20,100,55,90,磁头的初始位置是磁道 50,访问磁盘的实际顺序分别为:50,55,90,100,150,190,30,20。采用该算法,磁头移动磁道总数 = (55 - 50)+(90 - 55)+(100 - 90)+(150 - 100)+(190 - 150)+(200 - 190)+(200 - 30)+(30 - 20) = 330,平均寻道长度 = 330/8 = 41.25。
【提示】按照 SCAN 磁盘调度算法的规则,即使没有访问请求也须扫描到最后一个可扫描的磁道,因此到达 190 后还需继续扫描到 200。
(4) 循环扫描(Circular SCAN, CSCAN)算法
循环扫描算法在 SCAN 算法的基础上,加了磁头只能在一个方向上提供服务这个限定条件。当磁头访问某个方向的最后一个磁道时,磁头臂回到反方向的起始端重新扫描(返回时不响应请求 )。这减少了新请求的最大延迟,避免了两侧磁道的长时间等待。
如图 5.25 所示,磁盘请求队列中的请求顺序分别为:50,150,30,190,20,100,55,90,磁头的初始位置是磁道 50,访问磁盘的实际顺序分别为:50,55,90,100,150,190,20,30。采用该算法,磁头移动磁道总数 =(55 - 50)+(90 - 55)+(100 - 90)+(150 - 100)+(190 - 150)+(200 - 190)+(200 - 0)+(20 - 0)+(30 - 20) = 380,平均寻道长度 = 380/8 = 47.5。
对于 SCAN 算法和 CSCAN 算法,无论是否有访问请求,磁头都要移动到最后一个磁道。因此对这两种算法做了改进,磁头只需移动到最远端的一个请求即可返回,不需要到达最后一个磁道,改进后的算法称为 LOOK 算法和 CLOOK 算法。
【提示】如无特殊说明,一般默认 SCAN 算法和 CSCAN 算法为改进后的 LOOK 算法和 CLOOK 算法。
四种磁盘调度算法的优缺点如表 5.4 所示:
|----------|------------------|-------------------------|
| 算法 | 优点 | 缺点 |
| FCFS 算法 | 公平、简单 | 未对寻道进行优化,适合磁盘 I/O 较少的情况 |
| SSTF 算法 | 相比 FCFS 算法有更好的性能 | 不能保证平均寻道时间最短,可能出现饥饿现象 |
| SCAN 算法 | 解决了 SSTF 的饥饿现象 | 不利于远离磁头一端出现的磁盘 I/O 请求 |
| CSCAN 算法 | 解决了 SCAN 的不公平现象 | 若某个磁道出现连续请求,磁臂将不再移动 |5.3.2 固态硬盘
固态硬盘(Solid State Disk, SSD)的接口规范和使用方法与磁盘几乎相同。相比于磁盘而言,固态硬盘不是磁表面存储器,而是由 NAND 闪存组成的存储设备,具有读写快、质量轻、能耗低、体积小等优点。
1. 读写性能特性
固态硬盘一般使用 NAND 闪存来作为存储介质,一块固态硬盘中一般有多个 NAND 闪存,每个 NAND 闪存中包含多个块(Block),每个块包含多个页(Page)。由于 NAND 闪存的特性,固态硬盘必须以页为单位进行存取。
NAND 闪存还有一个重要的特性:只能读写单个页,不允许覆盖写入。如果需要写入某个页,必须先清空里面的内容才能写入。由于清空内容需要的电压较高,又必须是以块为单位来清空。因此,在没有空闲的页时,必须要找到不存在有效内容的块并对其清空,然后再选择空闲的页进行写入。
固态硬盘一般会维护一个逻辑地址到物理地址的映射表,在每次读写时,可以通过逻辑地址直接查表找到物理地址。这与磁盘相比省去了寻道时间和旋转时间,因此固态硬盘可以取得很好的读写性能。
从 NAND 闪存的原理可以看出,固态硬盘和磁盘的主要区别如下:
(1) 定位数据块:磁盘需要经过寻道和旋转,才能定位到要读写的数据块,而固态硬盘只需通过映射表计算即可找到数据块。
(2) 读取速度快:磁盘的速度取决于旋转速度,而固态硬盘的读写不涉及机械部件的移动,因此普遍快于磁盘。
2. 磨损均衡
虽然固态硬盘拥有读写快、体积小等优点,但是 NAND 闪存中的块是有擦写次数限制的。当某个块超过一定的擦写次数后,这个块就只能读取,无法写入。为了使得固态硬盘的寿命最大化,需要在擦除次数上保持平衡,而固态硬盘具有的 "磨损均衡" 机制则可以实现这一目标。
磨损均衡是一种平衡机制,用于均衡固态硬盘内部各个块的使用程度,优先对擦写次数少的块进行读写,从而延长整个固态硬盘的使用寿命。对于固态硬盘,一个好的损耗均衡算法就很有必要,主流的方法有动态磨损均衡和静态磨损均衡两种,表 5.5 列举了它们的优缺点。
表 5.5 动态磨损均衡和静态磨损均衡的优缺点
|--------|--------------|--------------------|
| 机制 | 优点 | 缺点 |
| 动态磨损均衡 | 实现简单,读写占用资源小 | 优化不足,磨损均衡的效果有限 |
| 静态磨损均衡 | 优化全面,提高整体寿命 | 实现困难,会增加 NAND 擦写次数 |动态磨损均衡:记录每个块的擦写次数,每次写入数据时,找到擦写次数最少的空闲块进行擦除,然后写入数据。
静态磨损均衡:在擦写时,优先把长久不用的数据从擦写次数较少的块转移到擦写次数较多的块,并将待写入的数据写入擦写次数较少的块中,以实现磨损均衡。
【举例】假如固态硬盘中有 25% 的数据是动态的,另外 75% 的数据是静态的。对于动态磨损均衡方法,每次要找的是擦除了数据的块,而静态的块里面是有数据的,因此,每次都只会在动态的块中,即最多会在 25% 的块中进行磨损均衡;对于静态磨损均衡算法,每次找的块既可能是动态的,也可能是静态的,因此,有可能在全部的块中进行磨损均衡。
【提示】这里的静态和动态是指的是数据的特性,如果数据频繁更新,那么数据是动态的;如果数据写入后不更新,那么数据是静态的。
5.3.3 习题精编
1.已知磁带中每条记录的大小为 50B,磁带的记录密度为每英寸 100B,块与块之间存在 0.2 英寸的间隔,如果现在需要存储 2000 条记录,则存储这些记录需要的磁带长度和磁带的利用率分别为( )。
A. 1400 英寸,71.4%
B. 1600 英寸,71.4%
C. 1400 英寸,70.5%
D. 1600 英寸,70.5%
1.【参考答案】A
【解析】磁带中每个记录的长度为 50/100 = 0.5 英寸,因此存储 2000 条逻辑记录需要 (0.5 + 0.2)×2000 = 1400 英寸的磁带,磁带的利用率为 0.5/(0.5 + 0.2) = 71.4%,故本题选 A。
2.在设计针对传统机械式硬盘的磁盘调度算法时,主要考虑下列哪种因素对磁盘 I/O 的性能影响最为显著( )。
A. 移动磁头的延迟
B. 单个磁盘块的读写时间
C. 磁盘平均旋转延迟
D. 磁盘最大旋转延迟
2.【参考答案】A
【解析】磁盘读写时间由寻道时间、旋转时间、传输时间共同决定,其中旋转延迟时间和传输时间几乎无法从操作系统层面优化,因此机械硬盘的磁盘调度算法主要考虑寻道时间对磁盘 I/O 性能的影响,故本题选 A。
3.在磁盘的物理格式化阶段所执行的操作是( )。
A. 建立文件系统根目录
B. 初始化磁盘空闲空间管理的数据结构
C. 建立管理已分配空间的数据结构
D. 初始化扇区的数据结构
3.【参考答案】D
【解析】一个新的磁盘是只含有磁性记录材料的空白盘,为了使该磁盘能够存储数据,需要对其进行物理格式化,初始化扇区的数据结构,D 正确;物理格式化之后,要进行逻辑格式化,在这个过程中,为磁盘建立文件系统根目录,初始化磁盘空闲空间管理的数据结构,建立管理已分配空间的数据结构,A、B、C 属于磁盘逻辑格式化阶段执行的操作,故本题选 D。
4.下列算法中不能随时改变磁头的运动方向的是( )。
I. SSTF 算法
II. FCFS 算法
III. SCAN 算法
IV. CSCAN 算法
A. II、III、IV
B. I、III、IV
C. I、II、IV
D. III、IV
4.【参考答案】D
【解析】SSTF 算法优先响应距离当前磁头最近的访问请求,FCFS 算法则根据磁盘请求的先后顺序进行调度,在这两种算法中,磁头可以随时改变运动方向,I 和 II 错误;SCAN 算法和 CSCAN 算法固定了磁头移动方向,不能随时改变,III 和 IV 正确,故本题选 D。
5.已知当前磁道访问请求序列为 23,56,59,51,67,102,136,140,194,磁头当前所在位置为 100,若采用 SSTF(最短寻道时间优先)算法,则磁头总共需要移动的磁道数是( )。
A. 95
B. 174
C. 347
D. 265
5.【参考答案】D
【解析】已知磁头的起始位置为 100,根据 SSTF 算法,依次访问的磁道是 100,102,136,140,194,67,59,56,51,23,磁头分别移动了 2,34,4,54,127,8,3,5,28,即磁头共移动了 265 个磁道,故本题选 D。
6.下列算法会导致 "饥饿" 现象出现的是( )。
A. SCAN 算法
B. SSTF 算法
C. CSCAN 算法
D. FCFS 算法
6.【参考答案】B
【解析】SCAN 和 CSCAN 算法限制了磁头的移动方向,因此不同访问请求可以得到及时响应,不会产生 "饥饿" 现象,A 和 C 错误;FCFS 算法对各访问序列是公平的,不会产生 "饥饿" 现象,D 错误;在 SSTF 算法中,如果不断出现距离当前磁头近的访问请求,则距离磁头远的访问请求就会被推迟,会出现 "饥饿" 现象,故本题选 B。
7.假定某磁盘有 1000 个柱面,编号从 0 到 999,当前磁头正在 734 处,若请求队列的先后顺序是:164,845,911,165,788,432,396,700,25。用 SCAN 算法(初始时磁头向磁道号增加的方向移动)和 SSTF 算法完成上述请求,磁臂分别需要移动的柱面数是( )。
A. 1865,1543
B. 1688,1738
C. 1239,1131
D. 1239,1738
7.【参考答案】C
【解析】采用 SCAN 算法时,依次访问的磁道是 788,845,911,999,700,432,396,165,164,25,磁臂一共移动了 (999 - 734)+(999 - 25) = 1239 个磁道,对应 1239 个柱面;采用 SSTF 算法时,依次访问的磁道是 700,788,845,911,432,396,165,164,25,磁臂一共移动了 (734 - 700)+(911 - 700)+(911 - 25) = 1131 个磁道,对应 1131 个柱面,故本题选 C。
8.假设磁头当前位于 100 号磁道,正在向磁道号增大的方向移动。当前的访问请求序列为 23,64,65,16,45,102,53,99,采用 SCAN 算法得到的磁道访问序列是( )。
A. 102→99→65→64→53→45→23→16
B. 102→65→99→45→64→53→23→16
C. 102→99→65→53→64→45→16→23
D. 102→64→65→45→53→16→23→99
8.【参考答案】A
【解析】题干要求采用 SCAN 算法,磁头沿磁道号增大的方向移动,期间依次对访问请求进行响应,然后沿相反方向移动。因此磁头依次访问的磁道是 102,99,65,64,53,45,23,16,故本题选 A。
9.假设磁头当前处于 90 号磁道,磁头正向磁道号减小的方向移动,磁道号从 0 到 99。现有一个磁盘读写请求队列:98,83,73,22,46,24,65,53。若采用 SCAN 算法依次响应请求,平均寻道长度是( )。
A. 24
B. 32.5
C. 23.5
D. 28
9.【参考答案】C
【解析】题干采用 SCAN 算法,磁头沿磁道号减小的方向移动,期间依次对访问请求进行响应,然后沿相反方向移动。因此磁头依次访问了 83,73,65,53,46,24,22,0,98 号磁道,共移动了 (90 - 0)+(98 - 0) = 188 个磁道,188/8 = 23.5,故本题选 C。
10.假设磁头当前处于 90 号磁道,磁头正向磁道号增大的方向移动,磁道号从 0 到 99。现有一个磁盘读写请求队列:92,85,78,24,47,26,65,51。若采用 CSCAN 算法依次响应请求,磁头总共需要移动的磁道数是( )。
A. 24
B. 135
C. 280
D. 193
10.【参考答案】D
【解析】题干要求采用 CSCAN 算法,磁头沿磁道号增大的方向移动,期间依次对访问请求进行响应,然后返回首端,重新开始扫描。因此磁头依次访问的磁道是 92,99,0,24,26,47,51,65,78,85,共移动了 (99 - 90)+(99 - 0)+(85 - 0) = 193 个磁道,故本题选 D。
11.假设磁头当前处于 64 号磁道,磁头正向磁道号减小的方向移动,磁道号从 0 到 99。现有一个磁盘读写请求队列:88,94,26,43,55,3。若采用 LOOK 算法依次响应请求,磁头总共需要移动的磁道数是( )。
A. 152
B. 127
C. 160
D. 275
11.【参考答案】A
【解析】题干要求采用 LOOK 算法,磁头沿磁道号减小的方向移动,期间依次对访问请求进行响应,然后反向移动,途中继续响应请求,LOOK 算法不需要移动到磁道的两端即可返回。在这个过程中,磁头依次访问的磁道是 55,43,26,3,88,94,共移动了 (64 - 3)+(94 - 3) = 152 个磁道,故本题选 A。
12.已知磁道号从 0 到 199,假设当前磁头位置为 64 号磁道,且正向磁道号增大的方向移动。若磁头移动到相邻磁道所需时间为 2ms,数据传输时间为 5ms,旋转延迟可以忽略不计。现有一个磁盘读写请求队列:165,134,126,189,86,53,71,99。若采用 LOOK 算法依次响应这些请求,则总耗时为( )。
A. 370ms
B. 562ms
C. 450ms
D. 275ms
12.【参考答案】B
【解析】题干要求采用 LOOK 算法,磁头沿磁道号增大的方向移动,期间依次对访问请求进行响应,然后反向移动,途中继续响应请求,LOOK 算法不需要移动到磁道的两端即可返回。在这个过程中,磁头依次访问的磁道是 71,86,99,126,134,165,189,53,共移动了 (189 - 64)+(189 - 53) = 261 个磁道,寻道时间为 261×2 = 522ms。由于每个磁道的传输时间为 5ms,总传输时间为 5×8 = 40ms。总耗时为 522 + 40 = 562ms,故本题选 B。
13.已知磁道号从 0 到 99,假设当前磁头位置为 78 号磁道,且正向磁道号增大的方向移动。现有一个磁盘读写请求队列:65,34,24,89,86,53,74,98。若采用 CLOOK 算法依次响应这些请求,则平均移动的磁道数是( )。
A. 16
B. 17
C. 18
D. 19
13.【参考答案】C
【解析】题干要求采用 CLOOK 算法,磁头沿磁道号增大的方向移动,期间依次对访问请求进行响应,然后返回首端,重新开始扫描,CLOOK 算法不需要移动到磁道的两端即可返回。在这个过程中,磁头依次访问的磁道是 86,89,98,24,34,53,65,74,共移动了 (98 - 78)+(98 - 24)+(74 - 24) = 144 个磁道,平均移动的磁道数为 144/8 = 18,故本题选 C。
14.如果当前读写磁头在 67 号磁道上执行 I/O 操作,依次有 4 个等待者分别要访问的磁道号为 35、77、55、121,当采用( )调度算法时,下一次读写磁头才可能到达 55 号磁道。
A. 循环扫描算法(磁头向大磁道号方向移动时处理 I/O)
B. 最短寻道时间优先
C. 电梯调度(当前正向小磁道号方向移动)
D. 先来先服务
14.【参考答案】C
【解析】采用循环扫描算法时,磁头当前位于 67 号磁道,由于磁头向磁道号增大的方向移动,下一个处理的是 77 号磁道,A 错误;采用最短寻道时间优先算法时,由于 77 号磁道距离当前 67 号磁道最近,下一个处理的是 77 号磁道,B 错误;采用电梯调度算法时,由于磁头向磁道号减小的方向移动,下一个处理的是 55 号磁道,C 正确;采用先来先服务算法时,磁头根据访问磁道的先后顺序进行调度,下一个处理的是 35 号磁道,D 错误。
15.下列说法正确的是( )。
I. 当发现系统中存在抖动(Thrashing)时,应更换一块更大的磁盘用于页面置换
II. 内存分页管理方式不会产生外部碎片
III. 磁盘访问时间主要由旋转时延和传输时延组成
IV. FCFS 算法可用于实现磁盘调度
A. I、II
B. III、IV
C. II、IV
D. I、III
15.【参考答案】C
【解析】在页面置换过程中,刚刚换入的页面马上就要被换出,或刚刚换出的页面马上又要换入内存,这种频繁的页面调度行为称为颠簸或抖动。抖动发生的主要原因是进程访问的页面数目高于可用的物理块数,因此,应当扩大主存容量,更换一块更大的磁盘并不能解决抖动问题,I 错误;内存分页管理方式将主存空间划分为大小相等且固定的页,作为主存的基本单位,分页管理方式不会产生外部碎片,II 正确;磁盘访问时间主要由寻道时间、旋转延迟、传输时间三者构成,III 错误;FCFS 算法即先来先服务调度算法,根据进程请求访问磁盘的先后顺序进行调度,可以实现磁盘调度,IV 正确,故本题选 C。
16.下列关于固态硬盘的说法中,错误的是( )。
A. 固态硬盘是基于闪存的存储技术
B. 固态硬盘的读写性能比磁盘更好
C. 固态硬盘在写入前必须进行擦除
D. 固态硬盘的寿命比机械硬盘更长
16.【参考答案】D
【解析】固态硬盘是基于闪存的存储技术,A 正确;固态硬盘没有机械部件,不存在磁头移动等机械操作,读写性能明显高于磁盘,B 正确;固态硬盘以页为读写单位,只有在一页所属的块整个被擦除后,才能对这一页进行写入,C 正确;固态硬盘的 NAND 闪存中的块有擦写次数限制,因此寿命有限是 SSD 的缺点之一,故本题选 D。
17.下列关于固态硬盘的说法中,正确的是( )。
A. 固态硬盘的读写性能低于磁盘的读写性能
B. 固态硬盘比磁盘的能耗更大
C. 固态硬盘写入时,每次都选择擦写次数少的存储块
D. 固态硬盘需要进行磨损均衡,而磁盘不需要
17.【参考答案】D
【解析】固态硬盘没有机械部件,不存在磁头移动等机械操作,读写性能明显高于磁盘,且具有质量轻、能耗低、体积小等优点,A 和 B 错误;动态磨损均衡记录每个块的擦写次数,每次写入数据时,找到被擦除次数最小的空闲块进行写入;静态磨损均衡对数据块进行检测,尽可能保证各块写入和擦除均衡,并非是每次写入都选择长期存放数据而很少擦写的块,C 错误;由于固态硬盘的 NAND 闪存中的块有擦写次数限制,需要进行磨损均衡,而磁盘不需要,故本题选 D。
18.下列方法中不能改善磁盘系统的可靠性的是( )。
A. 后备系统
B. 磁盘容错技术
C. 磁盘高速缓存
D. RAID 阵列
18.【参考答案】C
【解析】磁盘高速缓存根据局部性原理,将磁盘上的一些常用数据块暂时保存在随机存储器(RAM)中,使得对磁盘的访问可以转化为对随机存储器的访问,大大提高磁盘的读写性能。但是磁盘高速缓存并不能改善磁盘系统的可靠性,而后备系统、磁盘容错系统和 RAID 阵列都能改善磁盘系统的可靠性,故本题选 C。
19.假定某磁盘共有 50 个柱面,每个柱面上有 10 个磁道,每个磁道包含 8 个扇区。柱面、磁道、扇区均从 0 开始编址,请计算 2734 号扇区的柱面号、磁道号和扇区号。
19.【参考答案】
【解析】① 因为从 0 开始编址,故 2734 号扇区是第 2735 个扇区。每个柱面有 10×8 = 80 个扇区,2735/80 = 34,2735%80 = 15,34 个柱面包含了 2720 个扇区,剩余的 15 个扇区在第 35 个柱面,即 34 号柱面。② 15/8 = 1,15%8 = 7,34 号柱面的 0 号磁道包含了 8 个扇区,剩余 7 个扇区在第 2 个磁道,即 1 号磁道,剩余的第 7 个扇区即 6 号扇区。综上,2734 号扇区对应的是 34 号柱面、1 号磁道、6 号扇区。
20.已知一磁盘共有 40 个磁道,相邻磁道的磁臂移动时间为 5μs。若某文件逻辑上相邻的数据块平均相隔 20 个磁道,每块数据的旋转延迟时间及传输时间分别为 100μs 和 20μs,计算读取一份大小为 100 块的文件需要多长时间?
20.【参考答案】
【解析】已知读取一块数据耗时 20×5 + 100 + 20 = 220μs,因此读取 100 块数据共需 22000μs,即 22ms。
21.某磁盘的扇区编号如下图所示。已知每个磁道有 8 个扇区,每个扇区大小为 1KB,旋转速度为 3000r/min。盘片按逆时针方向旋转,0 扇区转到磁头下需要 1/2 转,设备控制器采用半双工方式进行输入 / 输出,数据从控制器传送至内存期间,磁头扫过
请计算:
(1) 依次读取一个磁道上的所有扇区的总耗时;
(2) 磁盘的数据传输率。
21.【参考答案】
【解析】数据从控制器传送至内存的这段时间内,从磁头下通过的扇区数为 2,而相邻的编号之间刚好相隔 2 个扇区,因此磁头可以连续工作。
(1) 旋转速度为 3000r/min,即 20ms/r,读取一个扇区耗时 20/8 = 2.5ms,读取一个扇区并送入内存总共需要的时间为 2.5×3 = 7.5ms,因此依次读取一个磁道上的所有扇区需要 20/2 + 8×7.5 = 70ms。
(2) 由 (1) 可知,每 70ms 可以传输 8×1KB = 8KB,数据传输速率为 8KB/70ms = 114.3KB/s。
5.3.4 真题演练
22.【2009】假设磁头当前位于 105 道,正在向磁道序号增加的方向移动。现有一个磁道访问请求序列为 35,45,12,68,110,180,170,195,采用 SCAN 调度(电梯调度)算法得到的磁道访问序列是( )。
A. 110,170,180,195,68,45,35,12
B. 110,68,45,35,12,170,180,195
C. 110,170,180,195,12,35,45,68
D. 12,35,45,68,110,170,180,195
22.【参考答案】A
【解析】题干要求采用 SCAN 算法,磁头从最内侧磁道移动到最外侧,然后返回最内侧(或者相反)。当前磁头位于 105 号磁道,并沿磁道号增大的方向移动,因此会依次访问 110,170,180,195,68,45,35,12,故本题选 A。
23.【2012】下列选项中,不能改善磁盘设备 I/O 性能的是( )。
A. 重排 I/O 请求次序
B. 在一个磁盘上设置多个分区
C. 预读和滞后写
D. 优化文件物理块的分布
23.【参考答案】B
【解析】对 I/O 请求次序进行排序,可以优化平均等待时间,A 正确;在一个磁盘上设置多个分区可以方便用户操作,但会使 I/O 的具体实现变复杂,对改善 I/O 性能没有帮助,B 错误;预读和滞后写基于局部性原理,可以改善 I/O 性能,C 正确;优化文件物理块分布可以缩短寻找数据的时间,如果文件连续存放,可以极大地改善存取效率,D 正确。
24.【2015】某硬盘有 200 个磁道(最外侧磁道号为 0),磁道访问请求序列为:130,42,180,15,199,当前磁头位于第 58 号磁道并从外侧向内侧移动。按照 SCAN 调度方法处理完上述请求后,磁头移过的磁道数是( )。
A. 208
B. 287
C. 325
D. 38
24.【参考答案】C
【解析】题干要求采用 SCAN 算法,磁头从最内侧磁道移动到最外侧,然后返回最内侧(或者相反)。当前磁头位于 58 号磁道,并沿磁道号增大的方向移动,因此会依次访问 130,180,199,然后开始返回,向 0 号磁道方向移动,依次访问 42 和 15 号磁道,磁头一共移动的磁道数为 (199 - 58)+(199 - 15) = 325,故本题选 C。
25.【2017】下列选项中,磁盘逻辑格式化程序所做的工作是( )。
I. 对磁盘进行分区
II. 建立文件系统的根目录
III. 确定磁盘扇区校验码所占位数
IV. 对保存空闲磁盘块信息的数据结构进行初始化
A. 仅 II
B. 仅 II、IV
C. 仅 III、IV
D. 仅 I、II、IV
25.【参考答案】B
【解析】确定校验码位数由物理格式化完成,而磁盘分区则是逻辑格式化和物理格式化之间的步骤,I 和 III 错误;逻辑格式化根据一定的分区格式对磁盘进行标记,并完成引导信息生成、初始化文件分配表、建立根目录、文件系统数据结构初始化等工作,II 和 IV 正确,故本题选 B。
【总结】物理格式化(低级格式化)涉及到在磁盘表面划分基本元素,如柱面号、盘面号、扇区号,并检测和修复坏扇区。磁盘分区是在物理格式化之后进行的,它将硬盘划分为一个或多个逻辑分区,如 C 盘、D 盘等。逻辑格式化(高级格式化)是在分区之后进行的,在每个分区上建立文件系统的数据结构,如目录、空闲空间的管理等。
26.【2018】系统总是访问磁盘的某个磁道而不响应对其他磁道的访问请求,这种现象称为磁臂黏着。下列磁盘调度算法中,不会导致磁臂黏着的是( )。
A. 先来先服务(FCFS)
B. 最短寻道时间优先(SSTF)
C. 扫描算法(SCAN)
D. 循环扫描算法(CSCAN)
26.【参考答案】A
【解析】对于 SSTF 算法,假设有大量靠近当前磁道的磁盘访问请求,磁臂就会停留该磁道附近,B 会导致磁臂粘着;对于 SCAN 算法和 CSCAN 算法,如果持续出现与当前磁头移动方向相同、且距离磁头最近的访存请求,同样有可能出现磁臂停留在某处不动的情况,C 和 D 会导致磁臂粘着;对于 FCFS 算法,由于其按照请求顺序进行访问,可以避免出现磁臂粘着,故本题选 A。
27.【2021】某系统磁盘的磁道数为 200(0~199),磁头当前在 184 号磁道上。用户进程提出的磁盘访问请求对应的磁道号依次为 184,187,176,182,199。若采用最短寻道时间优先调度算法(SSTF)完成磁盘访问,则磁头移动的距离(磁道数)是( )。
A. 37
B. 38
C. 41
D. 42
27.【参考答案】C
【解析】根据最短寻道时间优先算法,应选择距离当前磁道最近的请求进行访问,因此磁头依次访问的磁道是 184,182,187,176,199,移动的距离为 2 + 5 + 11 + 23 = 41,故本题选 C。
28.【2010】假设计算机系统采用 CSCAN(循环扫描)磁盘调度策略,使用 2KB 的内存空间记录 16384 个磁盘块的空闲状态。
(1) 请说明在上述条件下如何进行磁盘块空闲状态的管理。
(2) 设某单面磁盘旋转速度为 6000r/min,每个磁道有 100 个扇区,相邻磁道间的平均移动时间为 1ms。若在某时刻,磁头位于 100 号磁道处,并沿着磁道号增大的方向移动(如下图所示),磁道号请求队列有 50,90,30,120,对请求队列中的每个磁道需读取 1 个随机分布的扇区,则读完这 4 个扇区共需要多少时间?要求给出计算过程。
(3) 如果将磁盘替换为随机访问的 Flash 半导体存储器(如 U 盘、SSD 等),是否有比 CSCAN 更高效的磁盘调度策略?若有,给出磁盘调度策略的名称并说明理由;若无,说明理由。
28.【参考答案】
(1) 使用位示图进行空闲块管理,每个比特位对应一个磁盘块的空闲状态,则一共需要 16384bit 即 2KB,故使用 2KB 的位示图进行管理。
(2) 根据 CSCAN 算法,依次访问 120,30,50,90 号磁道,磁头共移动了 20 + 90 + 20 + 40 = 170,因此总寻道时间为 170ms;每访问一个磁道,旋转延迟是旋转半圈所需的时间,访问 4 个扇区的总旋转延迟为旋转 2 圈所需的时间,即 20ms;由于转速为 6000rpm,因此磁盘每秒旋转 100 圈,共扫过 10000 个扇区,因此每个扇区读取时间为 0.1ms,4 个扇区的读取时间为 0.4ms。综上,读完这 4 个扇区点共需要 170 + 20 + 0.4 = 190.4ms。
(3) 由于 Flash 半导体存储器不需要进行机械寻道和旋转,无需考虑寻道时间和旋转延迟,采用 FCFS 算法可以使磁盘访问更加公平,且不容易出现磁臂黏着现象。
29.【2019】某计算机系统中的磁盘有 300 个柱面,每个柱面有 10 个磁道,每个磁道有 200 个扇区,扇区大小为 512B。文件系统的每个簇包含 2 个扇区。请回答下列问题:
(1) 磁盘的容量是多少?
(2) 假设磁头在 85 号柱面上,此时有 4 个磁盘访问请求,簇号分别为 100260,60005,101660 和 110560。若采用最短寻道时间优先(SSTF)调度算法,则系统访问簇的先后次序是什么?
(3) 第 100530 簇在磁盘上的物理地址是什么?将簇转换成磁盘物理地址的过程是由 I/O 系统的什么程序完成的?
29.【参考答案】
(1) 磁盘容量 = 柱面数 × 磁道数 × 扇区数 × 扇区大小,该磁盘的容量为 300×10×200×512B = 3×10⁵KB。
(2) 每个柱面共有 10×200 = 2000 个扇区,即 1000 个簇,所以 85 号柱面上是第 85000 号~85999 号簇。根据最短寻道时间优先算法,应选择距离当前磁道最近的磁道访问请求进行访问,系统访问簇的先后次序是 100260,101660,110560,60005。
(3) 已知每个柱面有 10 个磁道,每个磁道有 200 个扇区,每个簇包含 2 个扇区。则每个柱面包含 10×200÷2 = 1000 个簇。
① 第 100530 簇所在的柱面号为:⌊100530÷1000⌋ = 100。
② 该簇在 100 号柱面的簇号为:100530 % 1000 = 530。每个磁道包含 200÷2 = 100 个簇。磁头号为:⌊530÷100⌋ = 5,即磁头号为 5。
③ 因为每个簇包含 2 个扇区,则扇区号为:(530×2) % 200 = 60。
综上,第 100530 号簇在磁盘上的物理地址是:(柱面号 100,磁头号 5,扇区号 60)。将簇号转换成磁盘物理地址的过程是由 I/O 系统的磁盘驱动程序完成的。
【提示】此题中簇在磁盘上的物理地址指的是 (柱面号,磁头号,扇区号) 这样的地址。
30.【2021】某计算机用硬盘作为启动盘,硬盘第一个扇区存放主引导记录,其中包含磁盘引导程序和分区表。磁盘引导程序用于选择要引导哪个分区的操作系统,分区表记录硬盘上各分区的位置等描述信息。硬盘被划分成若干个分区,每个分区的第一个扇区存放分区引导程序,用于引导该分区中的操作系统。系统采用多阶段引导方式,除了执行磁盘引导程序和分区引导程序外,还需要执行 ROM 中的引导程序。请回答下列问题:
(1) 系统启动过程中操作系统的初始化程序、分区引导程序、ROM 中的引导程序、磁盘引导程序的执行顺序是什么?
(2) 把硬盘制作成启动盘时,需要完成操作系统的安装、磁盘的物理格式化、逻辑格式化、对磁盘进行分区,执行这 4 个操作的正确顺序是什么?
(3) 磁盘扇区的划分和文件系统根目录的建立分别是在第 (2) 问的哪个操作中完成的?
30.【参考答案】
(1) 执行顺序是 ROM 中的引导程序、磁盘引导程序、分区引导程序、操作系统的初始化程序。系统启动过程中,首先运行 ROM 中的引导程序,由磁盘引导程序指明操作系统所在的分区,然后运行该分区的分区引导程序,最后运行该分区内操作系统的初始化程序。
(2) 执行顺序是磁盘的物理格式化、对磁盘进行分区、逻辑格式化、操作系统的安装。磁盘格式化分物理格式化和逻辑格式化两种,物理格式化对新磁盘划分磁道和扇区,并在每个扇区的地址域上记录地址信息,每个扇区又划分出标识部分、间隔区和数据区等,物理格式化由磁盘生产厂家在出厂前完成;逻辑格式化是指在磁盘物理格式化之后对磁盘进行分区、建立根目录、写入文件管理所需的数据结构的过程。对分区进行逻辑格式化后,才能在该分区安装操作系统。
(3) 由 (2) 可知,磁盘扇区的划分是在磁盘的物理格式化中完成的,文件系统根目录的建立是在磁盘的逻辑格式化中完成的。
5.4 章末总结
5.4.1 本章知识点提炼
本章内容较为分散,主要包括 I/O 管理基础、设备独立软件和外存管理三节内容,这里进行简单的回顾。
I/O 管理一节,首先引入了 I/O 设备,并介绍了 I/O 设备的基本概念和常见分类。I/O 设备是区别于处理机、存储器等主机内部设备的外部硬件,I/O 管理是对主机外部硬件的管理。按设备的共享属性可以将设备分为独占设备、共享设备和虚拟设备。这三种设备类型贯穿 I/O 管理全章节,独占设备属于临界资源,共享设备允许在同一时间段内被不同进程同时使用,而假脱机技术(SPOOLing)可以将独占设备改造为虚拟的共享设备,实现了虚拟设备的功能。I/O 接口控制各个外设和主机之间的信息交换,I/O 端口则是 I/O 接口中 CPU 可以直接访问的寄存器,考生需重点理解其编址方式。
从程序查询方式到程序中断方式,再到 DMA 方式,这三种 I/O 控制方式实现了由低级到高级、由简单到复杂以及由集中管理到各部分分散管理的转变。CPU 对 I/O 的干预越来越少,I/O 效率也越来越高,其中 DMA 过程及其传送特点、DMA 控制器的组成及其功能是综合且热门的考点。操作系统将 I/O 软件组织成中断处理程序、设备驱动程序、设备独立软件和用户层 I/O 软件四个层次,这四个层次的功能都非常重要。中断处理程序负责分析中断类型并作出处理,设备驱动程序用于驱动 I/O 设备工作,设备独立软件实现了缓冲区管理、设备分配与回收、虚拟设备和设备驱动程序接口等功能,用户层 I/O 软件则实现了与用户交互的接口,假脱机技术(SPOOLing)则是在用户层实现的最典型的 I/O 软件。
设备独立软件一节,讨论的主要问题是如何使用户程序独立于具体使用的物理设备,从而便利操作系统对设备的分配、提高操作系统的可适应性和可扩展性,真题通常以选择题的形式对本节进行考查。单缓冲、双缓冲、循环缓冲和缓冲池是四种典型的缓冲区技术,缓和了 CPU 与 I/O 设备的速度差异,考生需重点掌握单缓冲和双缓冲的处理数据块的时间计算。设备分配与回收立足于发挥设备的使用效率,并确保 CPU 与 I/O 设备之间能正常通信;假脱机技术(SPOOLing)将独占设备改造为虚拟的共享设备,实现了虚拟设备的功能,进一步提高了 CPU 与 I/O 的并行性;设备驱动程序接口统一了驱动程序应具备的接口,以便新类型的 I/O 设备出现时,操作系统无需修改即可正确识别。
外存管理一节,围绕磁盘和固态硬盘两种典型的外存设备展开,真题会以综合应用题的形式进行考查。考生要强化对柱面、磁道、扇区等磁盘结构的理解,应能够根据给定的扇区号计算出柱面号、磁道号和扇区号。对于一块新的磁盘,要经过出厂前的低级格式化将坏块屏蔽,并在出厂后进行分区和高级格式化后才可以正常使用,而磁盘中安装操作系统需要由引导块来进行引导。考生需牢记磁盘的读取时间 = 寻道时间 + 旋转延迟 + 传输时间,FCFS、SSTF、SCAN、CSCAN 这四种典型的磁盘调度算法关注的是对磁盘寻道时间的优化。固态硬盘是由 NAND 闪存组成的存储设备,拥有很好的读写性能,但它不支持覆盖写入,即在写入前必须先进行擦除。NAND 的擦写次数限制意味着需要对固态硬盘的各个块进行磨损均衡,以延长使用寿命。
5.4.2 思考题解析
1. 什么是 I/O 设备?有哪些典型的 I/O 设备?
I/O 设备即输入 / 输出(Input/Output)设备,是指能够将数据输入到计算机,或者能够接收计算机输出数据的外部设备,属于计算机中的硬件部件。与处理机、存储器等计算机内部硬件不同,I/O 设备是计算机的外部硬件。像键盘、鼠标这类设备属于低速的字符设备,而磁盘、固态硬盘等则是高速的存储设备,此外,扫描仪、打印机、传真机、绘图仪等也都属于典型的 I/O 设备。
- 为什么要进行 I/O 管理?
操作系统需要根据用户提出的 I/O 请求对 I/O 设备进行合理的分配,并依据用户的请求控制 I/O 设备的各种操作,完成 I/O 设备与内存的数据交换,以满足用户要求。在多道程序系统中,还要按一定的算法对 I/O 设备进行合理分配,防止不同进程因为对 I/O 设备的竞争而出现死锁。不同的 I/O 设备需要不同的驱动程序,I/O 管理应要求驱动程序具备统一的接口,以便新类型的 I/O 设备出现时,操作系统无需修改即可正确识别。此外还需要尽可能提高 I/O 设备的利用率、提高 I/O 设备与 CPU 的并行性。
- 什么是设备独立性?为什么要实现设备独立性?
设备独立性,又称设备无关性,是指应用程序与具体的物理设备无关。设备独立性的实现使得系统增减或变更设备时不必修改源程序,便于处理 I/O 设备故障,提高系统可靠性,并使设备的分配更加灵活,提高设备的利用率。对于实现了设备独立性的操作系统,其 I/O 设备就像特殊的文件,只要安装了它们的驱动程序,用户就可以像使用文件一样使用这些设备,而无需了解它们的具体存在与实现形式;此外还可以把设备当作特殊的文件,因此设备也会有设备的 FCB,可通过检查 FCB 中的信息来判断用户是否有权限访问,从而实现 "设备保护"。
- 设备独立软件在 I/O 软件层次结构的哪一层?它为什么在这一层次?
设备独立软件,又称设备无关性软件,位于设备驱动程序与用户层 I/O 软件之间。由于用户层 I/O 软件部分与设备有关,部分与设备无关,因此设备驱动程序不直接从用户程序接收 I/O 请求,而是通过设备独立软件来获得用户请求。设备独立软件使得用户程序独立于具体使用的物理设备,便利了操作系统对设备的分配,提高了操作系统的可适应性和可扩展性。
- 什么是磁盘?什么是固态硬盘?
磁盘和固态硬盘都是典型的外存设备,磁盘是一种利用磁记录技术存储数据的存储设备,固态硬盘是一种由 NAND 闪存组成的存储设备。磁盘和固态硬盘都是以数据块为信息交换单位的设备,每次可与内存交换一个或多个数据块的信息,且支持操作系统直接存取任意物理块。
- 磁盘和固态硬盘各有什么样的性能表现?
磁盘的读写涉及磁头的移动,磁头的移动会产生大量的寻道时间,磁盘的速度受限于它的旋转速度,它的随机读写性能一般;固态硬盘的读写不涉及机械部件的移动,因此它的连续读写性能和随机读写性能都普遍快于磁盘。但是固态硬盘中的 NAND 闪存存在擦写次数限制,寿命相对有限,而磁盘在高速旋转时不受到震动,寿命相对较长。
附录 1 操作系统常用算法总结
1.1 进程管理 --- 作业及进程调度算法
在进程管理一章,主要涉及两类算法:作业调度算法和进程调度算法。作业调度算法发生在高级调度时,即操作系统将外存中作业调度进内存并为之创建进程的过程;进程调度算法发生在低级调度时,即操作系统将有限的处理机资源合理分配给多个进程的过程。
无论是在批处理系统还是分时系统中,进程数一般都多于处理机数。这就使得进程互相争夺处理机,从而要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。
1. 作业调度算法
该算法的目的是将外存后备队列里的作业,按照一定的规则调度进内存,为其创建进程。
(1) 先来先服务:优先调度先进入外存后备队列的作业。
(2) 短作业优先:优先调度预计运行时间短的作业。
(3) 优先级调度:优先调度优先级最高的作业进入内存。
(4) 高响应比优先:考虑作业的等待时间和运行时间并将这些指标定义为响应比,优先调度响应比高的作业。
2. 进程调度算法
该算法的目的是,合理解决多个进程竞争少数处理机的问题,增加系统效率。相较于作业调度算法,进程调度算法额外考虑了剥夺与非剥夺的特性。
(1) 先来先服务:优先调度先进入就绪队列的进程。
(2) 短进程优先(非抢占式):优先调度预计运行时间最短的进程。
(3) 最短剩余时间优先(抢占式):优先调度剩余运行时间最短的进程。
【举例】此时处理器上
PA正在运行,其剩余运行时间为 5 单位时间,若此刻PB进入就绪队列,其预计运行时间为 3 单位时间,若采用短进程优先调度算法,则不发生调度;若采用最短剩余时间优先调度算法,则发生调度。
(4) 优先级调度(分抢占式和非抢占式):优先调度就绪队列中优先级最高的进程。
(5) 时间片轮转:适用于分时系统,就绪队列的所有进程依次获得处理机并执行相等的时间(时间片)。
(6) 多级队列:将就绪队列分成多个单独队列,每个队列有自定的优先级、调度算法等属性,各个进程按照进程的特点,分别分到各个队列中(一个进程只会进入一个队列)。
(7) 多级反馈队列:将就绪队列分成多个单独队列,每个队列有自定的优先级、调度算法等属性。进程从进入第一级队列开始,每次都会进入优先级更低的队列,直到进入优先级最低的队列,才会结束在队列间移动的行为。
1.2 内存管理 --- 分配方式及分配和置换算法
1. 基础内存管理方式及对应算法
(1) 连续分配方式
① 单一连续分配:系统将用户区整体分配给一个进程使用,该方式只适用于单道程序环境。
② 固态分区分配:在初始化时将内存空间分割成固定大小的区域,当有程序需要运行时,系统从内存中寻找一片合适的空闲分区分配给该程序。
③ 动态分区分配:系统在有待运行程序时,再从内存空间中划分出一块与程序大小相当的连续区域分配出去,而不是在初始化时就将内存划分好。
(1)首次适应算法:将空闲分区按照地址升序排序,每一次都从头向后查找,在第一个足以容纳该程序的连续空间中划分出程序所需的空间。
(2)循环首次适应算法:循环首次适应算法是指将空闲分区按地址升序排序,设置一个查找指针从头向后查找,随后的每一次查找都从上次查找后指针的停留位置开始。
(3)最佳适应算法:最佳适应算法是指将空闲分区按大小升序排列,依次查找,选择第一个可以容纳程序的空间分配出去。
(4)最坏适应算法:最坏适应算法指选取所有空闲分区中最大的分区来分配给程序,若最大的空闲分区不够大,则分配失败。
(2) 非连续分配方式
① 分页存储:将程序地址空间分割成一定大小的页面,按照一定的策略将这些页面调入到内存的页框中。
② 分段存储:将程序(逻辑地址)划分为大小不等的块,方便用户编程,利于编程人员组织程序的逻辑结构。
③ 段页式存储:是分页式存储管理方式和段式存储管理方式的结合。段页式存储管理方式先将进程空间分段,再对进程空间的每一段进行分页。
2. 虚拟内存管理方式的页面置换算法
(1) 最佳置换算法:指在每次置换中,都把将来不使用或者最长时间不使用的页面调出。
(2) 先进先出算法:指每次置换都将最早被调入的页面调出内存。
(3) 最近最久未使用算法:将最长时间未被使用的页面置换出内存。
(4) 时钟置换算法:为每个页面设置一个访问位,当访问链中存在所请求的页时,该页访问位置为 1,指针不变,否则,指针从上次被淘汰的页面的下一个位置开始循环遍历,当指针指向的页面访问位为 1 时,则将其置零,如果访问位为 0,则淘汰此页面。
(5) 改进型时钟置换算法:为每个页面添加记录其是否被更改的修改位。页面淘汰顺序:① 访问位 = 0,修改位 = 0;② 访问位 = 0,修改位 = 1;③ 访问位 = 1,修改位 = 0,④ 访问位 = 1,修改位 = 1。
(6) 最不常用置换算法:每次淘汰到当前时间为止访问次数最少的页面。
1.3 I/O 管理 --- 磁盘调度算法
(1) 先来先服务(FCFS):依据进程请求访问磁盘的先后次序进行调度。
(2) 最短寻道时间优先(SSTF):每次寻找磁盘访问请求中与当前磁头最近的磁道,使每次寻道时间最短。
(3) 电梯算法(SCAN):每次在磁头移动方向上,选择与当前磁头最近的磁道作为访问对象。
(4) 循环电梯算法(CSCAN):在 SCAN 算法的基础上,加了磁头只能在一个方向上提供服务这个限定条件。
操作系统学习笔记第5章 (竟成)
丰锋ff2025-05-21 15:26
相关推荐
The_cute_cat1 小时前
25.5.20学习总结明月清了个风1 小时前
数据结构与算法学习笔记(Acwing 提高课)----动态规划·状态机模型laocui11 小时前
Launch文件笔记: 二、加载GAZEBO文件铃木隼.2 小时前
Web技术与Nginx网站环境部署qq_2518364573 小时前
基于springboot3 VUE3 火车订票系统前后端分离项目适合新手学习的项目包含 智能客服 换乘算法虾球xz3 小时前
游戏引擎学习第299天:改进排序键 第二部分im_AMBER4 小时前
Leetcode 01 javaQ_Q19632884754 小时前
python宠物用品商城系统博览鸿蒙4 小时前
小白入门FPGA设计,如何快速学习?Sandm。旧颜6095 小时前
告别蜘蛛池!PHP 打造你的网站专属蜘蛛导航仪