设备管理
4.1 设备管理基础
4.1.1 设备管理概述
I/O设备:输入输出设备、外围设备、外部设备、外设。用于计算机系统与外部世界的信息交换或存储。
I/O系统:I/O设备及其接口线路、控制部件、通道和管理软件
I/O操作:内存和外设间的信息传送操作。
- 影响计算机系统的通用性和可扩充性
- 影响计算机系统的综合处理能力及性价比
I/O设备分类
信息传输视角
- 输入设备:键盘、鼠标、扫描仪
- 输出设备:显示器、打印机
- 输入输出设备:磁盘驱动器、网卡
交互功能视角
- 人机交互设备:鼠标、键盘、显示器
- 存储设备(==存储大量信息并快速检索==):磁盘驱动器、光盘驱动器
- 机机通信设备:网卡、调制解调器
设备管理视角
- 字符设备:鼠标、显示器,以==字符为单位==进行信息交换
- 块设备:磁盘,以固定大小的==数据块为单位==进行信息交换
- 网络设备:机机通信设备(网卡),即可抽象为 字符设备 也可抽象为 块设备
设备管理的目标
- 解决设备与CPU速度的不匹配,使主机和设备充分并行工作,提高设备使用效率
- 操作系统将所有设备都定义为文件,统一在文件系统之下
- 屏蔽设备的物理细节和操作过程,配置驱动程序,提供统一界面
- 抽象为裸设备
- 抽象为设备文件
设备管理的功能
- 设备中断处理
- 缓冲区管理
- 设备的分配和去配
- 设备驱动调度
- 虚拟设备的实现
设备管理的实现层次
- I/O硬件
- I/O设备及其接口路线
- 控制部件
- 通道
- I/O软件
- 系统I/O软件
- 用户空间I/O软件
4.1.2 I/O控制方式
设备控制器
优势:引入控制器后,通过传递简单参数就可进行I/O操作,大大简化系统的设计,有利于计算机系统对各类控制器和设备的兼容性
模块化和通用性的设计目标 =》机械部件 + ==电子部件==
电子部件:==设备控制器==;系统与设备控制器交互;设备控制器具体控制设备进行I/O。
设备控制器是 CPU 和 设备之间的接口,具有以下功能:
- 接收和识别 CPU或通道 发来的命令 =》控制寄存器
- 实现数据交换 =》 数据寄存器
- 发现和记录设备及自身的状态信息,供CPU处理时使用 =》状态寄存器
- 当连接多台设备时,识别设备地址 =》对寄存器寻址

注意:一个I/O控制器可能对应多个设备;数据寄存器、状态寄存器和控制寄存器也可能有多个。
I/O控制方式
轮询方式
==CPU和I/O设备串行操作==

读写数据:1、从I/O模块中读取字 2、往存储器中写入字
中断方式
==CPU与I/O设备并行工作==

处理器发送指令给控制器,然后继续执行指令 =》I/O操作完成后,控制器发起中断请求 =》...
一旦涉及大量数据传输,就会需要频繁的中断处理,消耗较多CPU的时间
DMA方式
DMA:Direct Memory Access 直接存储器存取
内存和设备之间有一条数据通路==成块==地传送数据,无须CPU干预,实际数据传输操作由DMA直接完成。

处理器向DMA发出I/O命令,继续自己的工作 =》 DMA完成数据传输后,中断处理器

注意:DMA控制器并不是每次直接读入一整块的数据,也是一个字一个字的传输,从 I/O设备 =》DR =》内存
一次读写一个或多个块(多个块必须是连续的)
==周期窃取==:同时通过总线访问主存时,CPU让出总线占有权给DMA
DMA的总线类型
I/O通道
==通道控制器==,用于完成逻辑上独立的I/O任务。
主机、通道、控制器和设备之间采用四级连接,实施三级控制,一个CPU连接若干个通道,一个通道连接若干个控制器,一个控制器连接若干个设备。
处理器不再执行I/O指令,而是在主存中组织通道程序,由I/O通道执行,CPU与通道高度并行工作
CPU启动指定通道上的设备,通道控制设备进行操作,CPU执行其他任务 =》 I/O操作完成,中断处理器处理I/O操作结束事件。
CPU作用 | 等待设备 | 内存数据交换 |
---|---|---|
轮询方式 | 需要 | 需要 |
中断方式 | 不需要 | 需要 |
DMA方式 | 不需要 | 不需要 |
I/O通道 | 不需要 | 不需要 |
I/O功能的演化
处理器直接控制外围设备
增加了控制器或I/O模块:程序控制
处理器开始从外围设备接口的具体细节中分离出来
采用中断方式的控制器或I/O模块
I/O模块通过DMA直接控制存储器
I/O模块被增强为单独的处理器,有专门为I/O设计的指令集
I/O模块有自己的局部存储器,本身就是一台计算机
4.1.3 总线与I/O
单总线结构
将CPU、主存和I/O模块连接到同一总线
优点:结构简单,易于扩充
缺点:共用总线,设备多时总线压力大,传输时延长,且慢速外设占用带宽多

待补充
4.2 设备管理软件
4.2.1 I/O软件的实现层次
I/O软件的设计目标
- 设计目标
- 高效性:最关注磁盘I/O的效率
- 通用性:用统一标准的方法来管理所有设备
- 设计思路:层次结构,低层软件屏蔽硬件细节,高层软件与用户友好交互
- 主要问题
- 设备无关性
- 访问设备的程序与具体物理设备无关
- 出错处理
- 数据传输中的错误应该尽可能在靠近硬件的地方处理,尽量在低层次处理
- 同步(阻塞)——异步(中断驱动)传输
- 异步传输:CPU启动I/O后可以继续执行其他工作,直到中断到达
- 同步传输:阻塞方式,让启动I/O的进程阻塞等待,直到数据传输完成
- 独占型外围设备和共享型外围设备
- 建立数据缓冲区,让数据到达与离去率相匹配,提高系统吞吐率
- 设备无关性
I/O软件的层次结构

4.2.2 I/O软件的实现
I/O中断驱动程序
- 位于操作系统底层,与硬件密切相关
- 设备向CPU提出中断请求时,CPU响应并转入中断处理程序执行,通常做的工作
- 检查设备状态寄存器,判断中断原因
- 若传输有错:向上层软件报告设备的出错信息,实施重新执行
- 若正常结束:唤醒等待传输的进程,使其转换为就绪态
- 若有等待传输的I/O命令:通知相关软件启动下一个I/O请求
设备驱动程序
- 包括与设备密切相关的所有代码
- 把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行,如设备名=》端口地址,逻辑记录=》物理记录,逻辑操作=》物理操作
独立于设备的I/O软件
- 对设备驱动程序的统一接口
- 设备命名
- 设备都被看作文件,通过路径名进行寻址
- 设备不仅具有文件名,且支持与文件相关的所有系统调用,open、close、read等
- 设备文件依赖于inode来实现,文件目录并不能区分文件名是代表一个磁盘文件或设备文件。但是inode中的内容是不一样的,磁盘文件的inode包含指向数据块的指针,而设备文件的inode则包含指向内核设备驱动程序的指针,用来控制设备的I/O
- 设备保护
- 设备保护需要检查用户是否有权访问所申请的设备(I/O指令是特权指令,通过系统调用间接供用户使用)
- Unix/Linux中对I/O设备的特别文件采用rwx保护机制,对文件的保护规则也适用于I/O设备
- 提供与设备无关的块尺寸
- 屏蔽不同磁盘扇区大小并向高层软件提供统一大小的逻辑块
- 缓冲区管理
- 通过缓冲区来消除填满速率和清空速率之间的影响,块设备和字符设备都需要缓冲技术,可在主存建立缓冲区的方式解决
- 分配与状态跟踪
- 静态、动态、虚拟分配
- 出错处理和报告
- 错误处理多数由驱动程序完成,低层软件完成不了的情况,交给高层软件处理
用户空间的I/O软件
- 库函数实现的I/O系统调用
- 库函数将与应用程序链接在一起,形成可执行代码装入主存,库函数也是I/O系统的一部分
- 库函数所做的工作只是将系统调用所需要的参数放在合适的位置,然后陷入内核,由内核函数实现真正的I/O操作
I/O缓冲
目的
- 解决CPU与设备之间速度不匹配的矛盾
- 协调逻辑记录大小与物理记录大小不一致的问题
- 提高CPU和设备的并行性
- 减少I/O操作对CPU的中断次数
- 放宽对CPU中断响应时间的要求
面向块:数据存储和传送以块为单位,块的大小通常固定,可以通过块号访问数据(磁盘和磁带)
面向流:设备以字节流的方式传输数据(终端、打印机、通信端口、鼠标和其他指示设备以及大多数非辅存的其他设备)
I/O缓冲区
在内存中开辟的存储区,专门用于临时存放I/O操作的数据
单缓冲技术
输入传送的数据放到缓冲区中,传送完成时,进程将该块移动到用户空间,并立即请求另一块,称为超前(预先输入)

双缓冲技术

循环缓冲技术
使得I/O操作能够跟得上进程的执行

4.3 独占型外围设备的分配
设备分配
- 设备特性:独占设备、共享设备和虚拟设备三类
- 管理和分配外围设备的技术:独占方式、共享方式和虚拟方式
4.3.1 设备独立性
用户通常不指定物理设备,而是指定逻辑设备,使得用户进程和物理设备分离开来,再通过其他途径建立逻辑设备和物理设备之间的映射(系统需要提供逻辑设备名和物理设备名的对应表)
原因:如果直接指定某个物理设备的话,虽然会让设备分配变得简单,但是一旦该物理设备出现故障,即使系统中存在同类设备也不能运行
优点:1、应用程序和具体物理设备无关,变更设备时不需要修改源码。2、易于应对各种I/O设备故障,提高系统的可靠性。3、增加设备分配的灵活性,有利于更加有效地利用设备资源,实现多道程序设计。
4.3.2 独占型外围设备的分配
独占型外围设备:一次只能由一个进程独占使用
分配方式:1、静态分配,运行前申请,实现简单,防止死锁,但是降低设备利用率
2、动态分配,随用随分配,提高设备利用率
设备分配的数据结构:设备类表(记录各类设备的信息)设备表(记录某一类设备的信息)
设备分配算法(不知道重不重要)
- 根据设备类查找设备类表
- 若无空闲设备则等待设备
- 取得设备表首地址
- 查设备表发现空闲设备栏
- 若未发现空闲设备栏则等待设备
- 填占用进程号,逻辑设备名,分配设备
4.4 共享型外围设备的驱动
4.4.1 磁盘的物理结构
磁盘结构

- 磁盘由多个盘片组成
- 每个盘片一般有两个盘面(上下两个)
- 盘面包括多个同心圆结构的磁道
- 不同盘面上位于相同位置的磁道构成柱面
- 每个磁道分为固定多个扇区,相邻扇区组合成簇
- 物理块地址:柱面号,磁头号(盘面号),扇区号
磁盘读写数据的方式
- 寻道:控制移动臂到达指定柱面
- 旋转:等待要读写的扇区旋转到磁头下
- 选择磁头号,进行数据读写
磁盘存取时间

4.4.2 磁盘的驱动调度
磁盘可能同时接收到若干I/O请求,OS进行磁盘的驱动调度策略:1、移臂调度;2、旋转调度
移臂调度
目的:使移动臂的移动时间最短,从而减少寻道总时间
- 先来先服务(==FIFO/FCFS==):移臂距离大,性能不好
- 优先级(==Priority==)
- 比较短的批作业和交互作业的优先级较高,而较长计算时间的长作业优先级较低
- 长作业等待时间较长
- 后进先出(==LIFO==)
- 把设备资源优先提供给最后到来的用户
- 局部性好,提高吞吐率,资源利用率高
- 可能出现“饿死”
- 最短服务时间优先(==SSTF==):优先处理服务时间更短的请求(选择使磁头从当前位置开始移动的最少的请求),存在饥饿现象
- 扫描算法
- 单向扫描:移动臂向一个方向扫描,归途不提供服务
- 双向扫描(==SCAN==):移动臂每次向一个方向移动,遇到最近的I/O请求便进行处理,到达最后一个柱面后再向反方向移动(双向到底)
- 电梯调度(==LOOK==):双向扫描的改进,当前移动方向没有访问请求时,就改变移动方向(双向不到底)
- 循环扫描(==C-SCAN==):把扫描限定在一个方向,当访问到沿某个方向的最后一个磁道时,磁头臂返回到磁盘相反方向磁道的末端(归途不提供服务),再次开始扫描(单向到底)
- ==C-LOOK==:循环电梯?循环扫描的改进,当移动方向没有访问请求的时候,改变移动方向(归途不提供服务)(单向不到底)
- ==N-step-SCAN==
- 进程如果重复请求同一个磁道就会垄断整个设备,故采用分布扫描避免此类问题
- 把磁盘请求队列分成长度为N的子队列,每一次用SCAN处理一个子队列,处理一个队列时,新请求必须添加到其他某个队列中。
- ==FSCAN==
- 使用两个子队列
- 开始扫描时,所有请求处于一个队列中,另一个队列为空;扫描过程中,新到的请求放入另一个队列中
旋转调度
目的:使得旋转延迟的总时间最少
- 循环排序:在最少旋转圈数内完成位于同一柱面的访问请求
- 旋转位置测定硬件 和 多磁头同时读写技术 有利于提高旋转调度的效率
- 优化分布:通过信息在存储空间的排列方式来减少旋转延迟
- 交替排序:由于磁盘匀速运转,可能处理当前扇区数据时,下个扇区已经跳过了。所以,对扇区间隔编号,如交叉因子
n:1
表示相邻编号间会间隔n-1
个扇区,这样当处理完扇区数据之后可能正好达到下一个编号的扇区。
- 交替排序:由于磁盘匀速运转,可能处理当前扇区数据时,下个扇区已经跳过了。所以,对扇区间隔编号,如交叉因子
RAID
RAID0
并行交叉存取,适用于大数据量的I/O请求,无冗余校验
RAID1
容量下降一半,成本很高
RAID2
并行存取,海明校验码,成本较高
RAID3
只用一个冗余盘,采用奇偶校验技术
RAID4
独立存取磁盘阵列,数据条带交叉存放
RAID5
奇偶校验码循环分布在每个盘上使容错性更好
RAID6
双重冗余技术,且采用两种不同的数据校验算法
磁盘Cache
主存中为磁盘扇区设置的一个缓冲区,利用局部性原理,减少存储器存取时间
- LRU:替换Cache中未被访问的时间最长的块
- LFU:替换Cache中访问次数最少的块
4.5 虚拟设备
4.5.1 SPOOLing 系统
虚拟设备技术
使用一类物理设备模拟另一类物理设备的技术,通常是使用共享型外围设备模拟独占型外围设备。
- 内存卡模拟磁盘
- 块设备模拟字符设备
- 输入输出重定向
SPOOLing设备
外部设备联机并行操作(Simultaneous Peripheral Operations On-Line)
关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为“假脱机技术”
一个经典的SPOOLing系统:用高速的磁盘设备来模拟慢速的字符设备,缩短进程在内存中的驻留时间
- “井”是用作缓冲的存储区域,采用井的技术能调节供求之间的矛盾,消除人工干预带来的损失。
- “预输入程序”:预先把数据从输入设备传送到磁盘输入井
- ”缓输出程序“:把数据从磁盘输出井传送到输出设备
- “井管理程序”:控制进程与井之间的数据交换(I/O重定向)
全部的I/O都基于磁盘,加快进程周转时间,提高系统吞吐量

打印SPOOLing系统
- 守护进程是唯一有特权使用打印机设备的进程
- 打印文件前,用户进程先产生完整的待输出文件,并存放在打印目录下
- 打印机空闲时,启动守护进程,打印待输出文件
4.5.2 批处理系统的作业管理
作业调度和进程调度的关系

4.6 相关习题
- CPU输出数据的速度远远高于打印机的打印速度,为了解决这一矛盾,可采用 缓冲技术
- 为了使多个进程能有效地同时处理输入和输出,最好使用 缓冲池 结构的缓冲技术
- 在采用SPOOLing技术的系统中,用户的打印结果首先被送到 磁盘固定区域
- 采用假脱机技术,将磁盘的一部分作为公共缓冲区以代替打印机,用户对打印机的操作实际上是对磁盘的存储操作,用以代替打印机的部分是 虚拟设备
- 将系统中的每一台设备按某种原则进行统一的编号,这些编号作为区分硬件和识别设备的代号,该编号称为设备的 绝对号