第七章 输入/输出系统
7.1 I/O系统的功能、模型和接口
I/O系统管理的主要对象
I/O设备和相应的设备控制器。
其最主要的任务
完成用户提出的I/O请求
提高I/O速率
提高设备的利用率
为更高层的进程方便地使用这些设备提供手段
7.1.1 I/O系统的基本功能
1、能够隐藏物理设备的细节
2、能够保证OS与设备无关
3、能够提高处理机和I/O设备的利用率
4、能够对I/O设备进行控制
5、能够确保对设备的正确共享
6、能够处理错误
7.1.2 I/O系统的层次结构和模型
I/O软件的层次结构
I/O系统中各种模块之间的层次视图
7.1.3 I/O系统接口
在I/O系统与高层之间的接口中,根据设备类型的不同,又进一步分为若干个接口。
1 块设备接口
- 块设备:也叫存储设备。信息交换的基本单位为字符块,属于有结构设备,块大小一般为512B---4KB,典型的有:磁盘、-光盘等。通常采用DMA I/O方式
- 隐藏了磁盘的二维结构。
- 将抽象命令映射为低层操作。
(如收到读磁盘命令时,先将抽象命令中的逻辑块号转换为磁盘的盘面、磁道和扇区等)
2 流设备接口
该接口又称为字符设备接口,它反映了大部分字符设备的本质特征,用于控制字符设备的输入或输出。
- 字符设备:信息交换的基本单位为字符,典型的有:键盘、打印机和显示器等。通常采用中断驱动I/O方式。
- get和put操作。字符设备采用顺序存取方式
- get操作用于从字符缓冲区取得一个字符(到内存),并将它返回给调用者。
- put操作用于将一个新字符(从内存)输出到字符缓冲区网络。
- in-control指令。包含许多参数,每个参数均表示一个与具体设备相关的特定功能。
3 网络通信接口
OS提供相应的网络软件和网络通信接口,以使计算机能通过网络同网络上的其他计算机进行通信,或上网浏览信息。
7.2 I/O设备和设备控制器
1 I/O设备一般是由执行I/O操作的机械部分和执行控制I/O的电子部件组成,电子部分称为设备控制器或适配器,机械部分是设备本身。
2 设备与控制器之间的接口
通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应含有与设备控制器之间的接口。有三种类型的信号线:
1)数据信号线。这类信号线用于在设备和设备控制器之间传送数据信号。
2)控制信号线。这是作为由设备控制器向I/O设备发送控制信号时的通路。该信号规定了设备将要执行的操作,如读操作或写操作,或执行磁头移动等操作。
3)状态信号线。用于传送指示设备当前状态的信号。设备的当前状态有正在读(或写),设备已读/写完成,并准备好新的数据传送。
1.设备控制器的功能:
- 控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换
- 设备控制器是CPU和I/O设备之间的接口。接收从CPU发来的命令,并去控制I/O设备工作
- 设备控制器是一个可编址的设备
- 当仅控制一个设备时,它只有一个惟一的设备地址
- 若控制器可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备
2 设备控制器的组成
- 设备控制器与处理机的接口
- 设备控制器与设备接口
- I/O逻辑
- 硬件支持:控制寄存器(存放命令及参数)、数据寄存器(存放数据)、状态寄存器(记录设备状态)
CPU与控制器接口:实现CPU与设备控制器之间的通信,包括数据线、地址线和控制线
设备控制器与设备的接口:一个设备控制器可以连接一个或多个设备
I/O逻辑:实现对设备的控制。
7.2.3 内存映像I/O
驱动程序将抽象I/O命令转换成具体的命令和参数等装入设备控制器的相应寄存器,由控制器执行这些命令,具体实施对I/O设备的控制。具体方法:
1.利用特定的I/O指令
- 访问内存和设备需要两种不同的指令
2.采用内存映像I/O - 在编址上不在区分内存单元地址和设备控制器中的寄存器地址,统一编址 k 。 k在0~n-1范围时,为内存地址;若k>=n时,为某控制器的寄存器地址
- 统一了访问方法,简化了I/O编程
7.2.4 I/O 通道
引入通道的目的:
使一些原来由CPU处理的I/O任务转由通道来承担,从而把CPU从繁杂的I/O任务中解脱出来
用于I/O操作的命令主要有两种:
I/O指令:启动通道程序
通道命令:对I/O操作进行控制
7.2.5 I/O设备的控制方式
1.使用轮询的可编程I/O方式(基本不用)
- ①由CPU定时发出询问,询问设备是否忙,进程进入忙等
- ②不忙即进行I/O,否则转①
实现容易,但效率偏低,CPU会长期处于忙等待
2.使用中断的可编程I/O方式(广泛采用) - 当某进程要启动某个I/O设备工作时,便由CPU向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务。设备控制器于是按照该命令的要求去控制指定的I/O设备。此时,CPU与I/O设备并行操作。
设备管理的主要任务之一就是控制设备和内存或CPU之间的数据传送。
选择和衡量控制方式有如下3条原则:
- 数据传送速度足够高,能满足用户需要但又不丢失数据;
- 系统开销小,所需处理控制程序少;
- 能充分发回硬件资源的能力,使I/O设备尽量忙,而CPU等待时间少
DMA工作过程
1 CPU提供被读取块磁盘地址,并将目标存储地址和待读取字节数分别存放在MAR与DC中。
2 校验无误,进程入阻塞态。
3 控制器按照MAR中地址,把第一个字节送入主存,然后计数器值(DC)减1 ,按指定字节数进行数据传送其他字节,直到字节计数器等于0。
4 控制器引发中断,通知操作系统,操作完成。
7.3.2 中断处理程序
7.5 与设备无关的I/O软件
基本概念:为了提高OS的可适应性和可扩展性,在现代OS中都无一例外地增加了与设备无关的I/O软件,以实现了设备独立性,也称设备无关性。
7.5.5 I/O调度
调度一组I/O请求:按照确定好的顺序来执行I/O操作;提高计算机效率。
通过I/O调度可以
- 改善系统整体性能;
- 在进程间公平共享设备访问;
- 减少完成I/O调度所需的平均等待时间。
7.6.2 假脱机系统
- 1 为了缓和CPU的高速性与I/O设备的低速性间矛盾而引入
- 利用一个程序模拟脱机输入时的外围控制机功能,将低速的I/O设备上的数据传送到高速的磁盘上。
- 用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备
- 外围操作与CPU对数据的处理同时进行,这种在联机情况下实现的同时外围操作称为SPOOLing
- 是操作系统中采用的一项将独占设备改造成为共享设备的技术。
SPOOLING系统的组成
-
输出井和输入井:在磁盘上开辟的两个大的存储空间,
- 输入井:模拟脱机输入时的磁盘设备,用于暂存输入设备输入的数据
- 输出井:模拟脱机输出时的磁盘,用于暂存用户程序的输出数据
-
输入缓冲区和输出缓冲区:为了缓和CPU和磁盘之间速度不匹配的矛盾,在内存中开辟了两个缓冲区。
- 输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井;
- 输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。
-
输入进程Spi
- Spi模拟脱机输入时的外围控制机,将用户要求的数据从输入设备通过输入缓冲区再送入输入井,当CPU需要输入数据时,直接从输入井读入内存
-
输出进程Spo
- Spo模拟脱机输出时的外围控制机,把用户要求输出的数据,先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上
-
井管理程序
- 用于控制作业与磁盘井之间信息的交换
3 SPOOLING系统的特点
-
提高了I/O的速度
-对数据进行的I/O操作,已从对低速I/O设备进行的I/O操作,演变为对输入井或输出井中数据的存取
-
将独占设备改造成共享设备
- 实际上并没有为任何进程分配设备,只是在输入井或输出井中为进程分配一个存储区和建立一张I/O请求表
-
实现了虚拟设备功能
- 宏观上,多个进程同时使用一台独占设备;对每个进程来说,认为是自己独占了一个设备
-
假脱机管理进程
- 在磁盘缓冲区中为之申请一个空闲盘块,并将要打印的数据送入其中暂存
- 为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入表中,再将该表挂到假脱机文件队列上
-
假脱机打印进程
- 当打印机空闲时,进程从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井传送到内存缓冲区,再由打印机进行打印
- 打印完,进程再次察看请求打印队列,若非空,重复上述工作,直到队列为空。此后进程才将自己阻塞起来。仅当下次再有打印请求时,进程才被唤醒
7.7 缓冲管理
缓冲的引入
通道的建立提供了CPU、通道和I/O设备之间并行操作的可能性,但由于通道数量不足会产生"瓶颈"现象,影响并行的程度,引入缓冲可以减少占用通道的时间,缓解"瓶颈"现象。
引入缓冲的主要原因
- 缓冲CPU与I/O设备间速度不匹配的矛盾。
- 减少中断CPU的次数
- 解决数据粒度不匹配的问题。
- 提高CPU与I/O设备的并行性
缓冲:就是用来对数据传送速度不同的设备的传送速度进行匹配/缓冲的一种常用手段。
其实现方法除在关键地方可采用硬件缓冲器外,大都采用软件缓冲来实现。
单缓冲:
在设备和处理机之间设置一个缓冲。设备与处理机交换数据时,先把交换的数据写入缓冲区,然后需要数据的设备/处理机再从缓冲区中取走数据。
特点:缓冲区数只有一个;设备与处理机对缓冲区的操作是串行的。是操作系统能提供的最简单的缓冲技术。
双缓冲:在设备和处理机之间设置2个缓冲。设备与处理机交换数据时,先把交换的数据写入缓冲区,然后需要数据的设备/处理机再从缓冲区中取走数据。因缓冲区有2个,提高了设备与处理机并行操作的程度,只有当两个均为空时,需数据的进程才等待。
循环缓冲(1) 多个缓冲区
作为输入的多缓冲区可分为三种类型:
用于装输入数据的空缓冲区R,
已装满数据的缓冲区G
计算进程正在使用的现行工作缓冲区C
(2)多个指针
nextg(指示程序下一次可用的已经装满的数据缓冲区G)
nexti(指示输入设备下一次可使用的空缓冲区R)
current(用来指示程序正在使用的现行缓冲区)
缓冲池1、缓冲池:将系统内所有的缓冲区统一管理起来,就形成了能用于输入/输出的缓冲池。缓冲池通常由若干大小相同的缓冲区组成,是系统的公用资源,任何进程都可以申请使用缓冲池 中的各个缓冲区。
缓存(cache)
- 缓存是保存数据副本的高速内存区域:
- CPU缓存、磁盘缓存、光驱缓存等。
- CPU缓存(高速缓存):
- 为了缓和CPU运行速率与内存读/写速率不匹配的矛盾
- 当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;若没有找到,则从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据库调入缓存中。
- 缓存和缓冲:
- 缓冲可以保存数据项的唯一的现有版本。
- 缓存只是提供一个位于其他地方的数据项的更快存储副本
- 有时,同一个内存区,既可以是缓冲,也可以是缓存。
7.8 磁盘存储器的性能和调度
磁盘性能简述
磁盘设备可包括一个或多个物理盘片,每个磁盘片分一个或两个存储面(Surface);
磁盘容量计算
容量=柱面×磁头×扇区,每扇区存放512B数据
40GB硬盘
cylinder:19710;head:16;sector:255
计算:19710×255×16×512B=41173401600B=40GB
1.44MB软盘
Sides:2
Tracks:80
Sectors:18
计算:2×80×18×512B=1.44MB
磁盘访问时间
- 磁盘在工作时是以恒定速率旋转。
- 为了读或写,
- 磁头必须能移动到所指定的磁道上
- 并等待所指定的扇区的开始位置旋转到磁头下
- 再开始读或写数据。
- 一次访盘时间 = 寻道时间+旋转延迟时间+存取时间
- 寻道时间:把磁头移动到指定磁道上所经历的时间。
- 旋转延迟时间:指定扇区移动到磁头下面所经历的时间。
- 存取时间:把数据从磁盘读出或向磁盘写入数据所经历的时间。
先来先服务FCFS、最短寻道时间优先SSTF、 SCAN算法、循环扫描算法CSCAN这些算法结合题目容易理解。
先写课后题。