补充
[!IMPORTANT]
系统按照某种原则为每台设备分配一个唯一的号码,用作硬件(设备控制器) 区分和识别设备的代号,称作设备的绝对号
4.1.1 设备管理概述
I/O操作:内存和外设间的信息传送操作
I/O设备分类
-
信息传输视角
-
输入设备 将外界信息输入计算机
-
输出设备 将计算结果输出
-
输入输出设备 输入信息并输出信息
-
-
交互功能视角
- 人机交互设备 用于用户与计算机间的交互通信
- 存储设备 存储大量信息并快速检索
- 机机通信设备 用于计算机间通信
-
设备管理视角
- 字符设备 以字符为单位进行信息交换
- 块设备 以固定大小的数据块为单位进行信息交换
- 网络设备 机机通信设备
设备管理的目标
- 解决设备和CPU速度的不匹配,使主机和设备充分并行工作,提高设备使用效率
- 屏蔽设备的物理细节和操作过程,配置驱动程序,提供统一界面
- 抽象为裸设备
- 抽象为设备文件
设备管理的实现层次
- I/O硬件
- I/O软件
4.1.2 I/O控制方式
设备控制器
- 为达到模块化和通用性的设计目标,通常分开设置设备的机械部件和电子部件
- 电子部件称为设备控制器,又称为设备适配器、I/O控制器、I/O控制接口、I/O模块、I/O接口
- 系统与控制器交互,而非与设备交互设备控制器具体控制设备进行I/O
-
设备控制器具体控制设备进行I/O
- 功能
- 设备控制器是CPU与设备之间的接口
- 接收和识别CPU或通道发来的命令
- 实现数据交换
- 发现和记录设备及自身的状态信息,供CPU处理时使用
- 当连接多台设备时,识别设备地址
- 设备控制器是CPU与设备之间的接口
I/O控制的轮询方式
I/O控制的中断方式
I/O控制的DMA方式
DMA工作流程
- 处理器向DMA模块发出I/O命令
- 处理器继续执行其他工作,DMA模块负责传送全部数据
- 数据传送结束后,DMA中断处理器
I/O通道 实现内存与外设之间的信息传输 通道技术是一种硬件机制
- 又称为通道控制器、I/O处理器,用于完成逻辑上独立的I/O任务
- 采用四级连接:处理器、通道、控制器、设备
- 通道可控制多台同类或不同类的设备
- 处理器不再执行I/O指令,而是在主存中组织通道程序,由I/O通道执行
I/O通道的工作流程
- CPU遇到I/O任务,组织通道程序,置通道程序地址字CAW,启动指定通道
- 通道从CAW获得通道程序,控制I/O设备进行操作,CPU执行其他任务
- I/O操作完成后,I/O通道发出中断,CPU处理中断,并从通道程序状态字CSW获得通道执行情况,处理I/O操作
CPU与通道高度并行工作
4.1.3 总线与I/O
总线:解决I/O速度不匹配问题 使主机和设备充分并行,提高系统效率
- 单总线结构模型
- 将CPU、主存和I/O模块连接到同一总线
- 优点
- 结构简单,易于扩充
- 缺点
- 共用总线,设备多时总线压力大,传输时延长,且慢速外设占用宽带多
- 三级总线模型
- 主存与Cache通过主存总线连接,主存总线和扩展总线上的I/O设备间通过扩展总线接口缓冲
- 优点
- 主存与I/O设备之间的数据传送、处理器的内存活动分离,可以支持更多的I/O设备
- 缺点
- 不适用于I/O设备数据速率相差太大的情况
-
南桥与北桥
- 通过存储总线、PCI总线、E(ISA)总线分别连接主存、高速I/O设备和低速I/O设备优点:可以支持不同数据速率的I/O设备
- 优点
- 可以支持不同数据速率的I/O设备
- 一种基于通道的服务器总线模型
4.2.1 I/O软件的实现层次
I/O软件的设计目标
- 高效率
- 通用性
- 设计思路
- 把软件组织成层次结构
I/O软件设计要考虑的问题
- 设备无关性
- 出错处理
- 同步/异步传输 支持阻塞和中断驱动两种工作方式
- 异步传输
- CPU在启动I/O操作后既可继续执行其他工作,直到中断到达;
- 同步传输
- 阻塞方式,让启动l/O操作的进程阻塞等待,直到数据传输完成。
- 异步传输
4.2.2 I/O软件的实现
I/O中断处理程序
- 进程请求I/O操作时,通常被阻塞
- 数据传输结束后产生I/O中断
- CPU响应请求并转入中断处理程序
设备驱动程序
- 从独立于设备的软件中接收I/O请求
- 把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行
- 监督设备是否正确执行,访问数据缓冲区,进行必要的纠错处理
- 设备驱动程序的层次
- 每个设备驱动程序原则只处理一种设备或者一类紧密相关的设备
- 设备驱动程序可以分层实现
独立于设备的I/O软件
- 执行适用于所有设备的常用I/O功能,并向用户层软件提供一致性接口;包括:
- 设备命名:通过路径名寻址设备
- 设备保护:用户是否有权访问设备
- 提供与设备无关的数据单位:字符/块
- 缓冲技术:调整CPU与I/O速度不匹配
- 分配和状态跟踪:分配设备
- 错误处理/报告:驱动无法处理的错误
用户空间的I/O软件
- 库函数:一部分I/O软件可以使用库函数实现,放在操作系统内核之外,运行时与应用程序链接
- 虚拟设备软件:用一类设备模拟另一类设备的仿真I/O软件
4.2.3 I/O缓冲
I/O缓冲区
- 在内存中开辟的存储区,专门用于临时存放I/O操作的数据
- 操作过程:
- 写操作:将数据送至缓冲区,直到装满或需要写出,待适当时候系统将缓冲区内容写到设备上
- 读操作:系统将设备上的物理记录读至缓冲区,根据要求将当前所需要的数据从缓冲区中读出并传送给进程
-
单缓冲技术
- 双缓冲技术
- 循环缓冲技术
[!IMPORTANT]
为了使多个进程能有效地同时处理输入和输出,最好使用缓冲池结构的缓冲技术。
4.3.1 设备独立性
设备独立性及其实现
- 设备独立性:用户通常不指定物理设备而是指定逻辑设备,使得用户进程和物理设备分离开来,再通过其它途径建立逻辑设备和物理设备之间的映射
- 设备管理中需要将逻辑设备名转换为物理设备名,为此系统需要提供逻辑设备名和物理设备名的对应表以供转换使用
[!IMPORTANT]
为了提高操作系统的可适应性和可扩展性,在现代操作系统中都实现了设备独立性,即在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时, 还必须使用物理设备名称。
4.3.2 独占型外围设备的分配
设备分配方式
- 独占型外围设备
- 一次只能由一个进程独占使用
- 分配方式
- 静态分配 运行前申请
- 动态分配 进程随用随申请
设备分配的数据结构
- 设备类表
- 每类设备对应于设备类表的中一栏
- 包括:设备类,总台数,空闲台数,设备表起始地址等
- 支持设备独立性时使用
- 设备表
- 每类设备都有各自的设备表,用来登记这类设备中的每台物理设备
- 包括:物理设备名,逻辑设备名,占有设备的进程,分配标志,好/坏标志等
4.4.1 磁盘的物理结构
- 磁盘一般由多个盘片组成
- 每个盘片一般有两个盘面
- 盘面包括多个同心圆结构的磁道,不同盘面上位于相同位置的磁道构成柱面
- 每个磁道分为固定多个扇区,相邻扇区组合成簇
- 物理块地址
- 1.柱面号,磁头号,扇区号
- 2.0面0道1扇区:面指磁头/不是柱面
磁盘读写方式: 移臂 ->旋转 -> 读写
磁盘读写数据的方式
- 读写数据时,磁头必须定位到指定磁道的指定扇区的开始处。过程如下:
- 寻道:控制移动臂到达指定柱面
- 旋转:等待要读写的扇区旋转到磁头下
- 选择磁头号,进行数据传送
磁盘存取时间
4.4.2 磁盘的驱动调度
驱动调度
- 移臂调度
- 旋转调度
移臂调度
- 使移动臂的移动时间最短,从而减少寻道总时间
- 算法
- 先来先服务 移臂距离大 性能不好
- 最短查找时间优先(最小短距法)
- 先执行查找时间最短的请求,具有较好的寻道性能
- 存在“饥饿”现象
移臂调度的扫描算法
- 单向扫描
- 移动臂向一个方向扫描,归途不提供服务,适用于不断有均匀分布的大量柱面请求的情形
- 双向扫描
- 移动臂每次向一个方向移动,遇到最近的I/O请求便进行处理,到达最后一个柱面后再向相反方向移动
- 电梯调度
- 双向扫描的改进,当前移动方向没有访问请求时,就改变移动方向
旋转调度
- 使得旋转延迟的总时间最少
- 循环排序
- 通过优化I/O请求排序,在最少旋转圈数内完成位于同一柱面的访问请求
- 旋转位置测定硬件和多磁头同时读写技术有利于提高旋转调度的效率
- 循环排序
优化分布
- 通过信息在存储空间的排列方式来减少旋转延迟
- 交替排序:由于磁盘匀速运转,可能处理当前扇区数据时,下个扇区已经跳过。因此,可对扇区间隔编号,如交叉因子为n:1表示相邻编号间会间隔n-1个扇区
- 把相邻扇区集中成簇读写
- 按柱面集中存储数据(另一种集簇方式),可以减少数据读写时的移臂操作
磁盘调度策略
-
先进先出 FIFO
- 按顺序处理请求
- 对于所有进程是公平的
-
优先级
-
后进后出
- 把设备资源提供给最近的用户,会导致磁头臂在一个顺序文件中移动时移动得很少,甚至不移动
- 利用这种局部性可以提高吞吐量,减少队列长度
-
最短服务时间优先 SSTF
- 选择使磁头臂从当前位置开始移动最少的磁盘I/O请求,因此SSTF策略总是选择导致最小寻道时间的请求
- 总是选择最小寻道时间并不能保证平均寻道时间最小,但是,它的性能比FIFO更好
-
扫描 SCAN
-
要求磁头臂仅仅沿一个方向移动,并在途中满足所有为完成的请求,直到它到达这个方向上的最后一个磁道,或者在这个方向上没有其他请求为止,后一种改进有时候称为LOOK策略(又称为电梯调度算法)
-
接着反转服务方向,沿着相反方向扫描,同样按顺序完成所有请求
-
-
循环扫描 C-SCAN
- 把扫描限定在一个方向
- 当访问到沿某个方向的最后一个磁道时,磁头臂返回到磁盘相反方向磁道的末端,并再次开始扫描
-
N-step-SCAN
- 进程重复请求同一磁道会垄断整个设备,“造成磁头臂的粘性”,采用分布扫描可避免这类问题
- 把磁盘请求队列分成长度为N的子队列,每一次用SCAN处理一个子队列
- 在处理一个队列时,新请求必须添加到其他某个队列中
- 如果在扫描的最后剩下的请求数小于N,则它们全部将在下一次扫描时处理
- 当N很大时,N-step-SCAN的性能接近SCAN,当N=1时,实际是FIFO
-
FSCAN
- 使用两个子队列
- 当开始扫描时,所有请求都在一个队列中,而另一个队列为空
- 在扫描过程中,所有新到的请求都被放入另一个队列中
- 因此,对新请求的服务延迟到处理完成所有老请求之后
4.4.3 磁盘冗余阵列
RAID
-
RAID0
- RAIDO-连续的数据条带(每个条带可规定为1个或多个扇区)以轮转方式写到全部磁盘上,然后,采用并行交叉存取,减少I/O请求排队时间,适用于大数据量的I/O请求,但并无冗余校验功能,可靠性较差。
- RAID1
- RAID1-采用镜像盘双份所有数据来提高容错性,读请求拥有最小寻道时间,写请求可并行完成。缺点是容量下降一半,故成本很高。
- RAID2
- RAID2-采用数据字或字节交叉存放,并行存取获得高性能,使用海明校验码,适合大量顺序数据访问。由于使用多个冗余盘,成本较高
- 海明码:设有n个信息位,k个校验位,满足2^k^≥n+k+1,海明码可以定位出错的位置
- 空间利用率n / (n + k)
- RAID3
- RAID3仅用一个冗余盘,采用奇偶校验技术。
- 由于按照字节切分数据,读数据时,写数据时,也会利用所有磁盘的带宽,但所有的写校验数据都会在一个盘,因此,写性能主要受限于校验盘
- RAID4
- RAID4-采用独立存取磁盘阵列,数据条带交叉存放,访问请求可并行地获得满足,适合有较高I/O请求速度的应用场合,使用一个冗余盘存放奇偶校验码。
- 写性能受限于校验盘
- RAID5
- RAID5奇偶校验码循环分布在每个盘上使容错性更好,且比RAID4有更好的性能。
- 性能:读数据时,当数据分布在多块盘时,能够利用多块数据盘的带宽;写数据时,如果数据分布在多块盘时,能利用所有数据盘带宽,同时写校验数据也分散在多块盘上,但因为要额外写入校验数据,因此,写数据的性能略微有所下降
- RAID6
- RAID6-采用双重冗余技术,P和Q是两种不同的数据校验算法,其中一种是RAID4和RAID5所使用是异或计算,另一种是独立数据校验算法,即使有两个数据磁盘发生错误,也可重新生成数据。
- 因为要额外写入两份校验数据,因此,写数据的性能要略微下降。
- RAID10
- 为了保证数据安全的同时,又能获取较好的读写性能,可以将磁盘组成RAID1后,再组成RAID0,这样写入时候可以拥有RAID0的速度,同时又拥有RAID1的数据安全性
4.4.4 磁盘相关补充内容
磁盘Cache替换策略
- LRU
- 替换未被访问时间最长的
- LFU
- 替换被访问次数最少的
4.5.1 SPOOLing系统
[!IMPORTANT]
虚拟设备技术 使用一类物理设备模拟另一类物理设备的技术
通过硬件和软件的功能扩充,把原来独占的设备改造成能为若干用户共享的设备,这种设备称为虚拟设备
低速设备一般独享,高速设备一般共享
SPOOLing 系统
- 外部设备联机并行操作
- 是一种以共享型磁盘设备模拟独占型物理设备的技术,也是一种速度匹配技术
一个经典的SPOOLing系统
-
用高速的磁盘设备来模拟慢速的字符设备,缩短进程在内存中的驻留时间
-
慢速输出设备先输出到(输出井)
-
进程运行过程中只从输入井读入数据,只向输出井输出信息,使得全部I/O都基于磁盘
-
加快进程周转时间,提高系统吞吐量
-
软件组成
-
预输入程序:预先把数据从输入设备传送到磁盘输入井
-
缓输出程序:把数据从磁盘输出井传送到输出设备
-
井管理程序:控制作进程和井之间的数据交换(事实上是I/O重定向)
-