I/O设备
- I/O设备按可读性分类:
- 人可读设备: 打印机、终端(显示器、键盘)、鼠标
- 机器可读设备: 磁盘驱动器、USB密钥、传感器、控制器和执行器
- 通信设备: 用于远程设备通信,如调制解调器
- 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
命令的进程的后续指令- 若来自进程的
I/O
指令是是阻塞的,则处理器执行的下一条指令来自操作系统,它将当前的进程设置为阻塞态并调度其他进程
- 直接存储器访问(DMA): 一个
DMA模块
控制内存和I/O
模块之间的数据交换
- 处理器直接给DMA模块发出请求,且只有在整个数据块传送结束后,它才被中断
- I/O功能的发展:
- 处理器直接控制外围设备
- 增加了控制器或
I/O模块
(1)处理器使用非中断的方式
程序控制I/O
(2)处理器开始从外部设备接口的具体细节中分离出来- 与
2
相同但是采用了中断方式
I/O模块
通过DMA直接控制存储器
(1)仅在传送开始和结束时才需要用到处理器I/O模块
有一个单独的处理器,有专门的I/O
指令集,称为I/O通道
(1)中央处理器可以指定一系列
的I/O活动
(2)仅在整个序列执行完成后中央处理器才被I/O模块
有自己的局部存储器,本身就是一台计算机,称为I/O处理器
(1)可以控制许多I/O设备,使需要中央处理器参与的本分降到最小
I/O设计
- 设计目标:
- 效率:
- I/O操作通常是计算机系统的瓶颈
- I/O设计的主要任务是提高I/O的效率
- 通用性:
- 用一种统一的方式处理所有的设备
- I/O组织:
- 逻辑I/O:
- 把设备当作一个逻辑资源来处理,并不关心实际控制设备的细节
- 允许用户进程根据
设备标志符
及诸如打开、关闭、读、写等简单命令
与设备打交道
- 设备I/O:
- 请求的操作和数据被转换为适当的I/O指令、通道命令和控制器指令
- 调度和控制:
- I/O操作的排队、调度实际上发生在这一层。
- 与I/O模块和设备硬件真正发生交互的软件层
I/O缓冲
- 缓冲:
提前读:
在输入请求发出之前就开始执行输入传送延后写:
在输出请求发出一段时间之后才开始执行输出传送- 作用:
(1)缓冲是平滑I/O需求的峰值的一种技术
(2)在多道程序设计环境中,缓冲是提高操作系统效率和单个进程性能的一种方法
- 单缓冲:
- 输入的数据被放到系统缓冲区中,当传送完成时,进程把改块移到用户空间,并立即请求另一块,称为
预读
- 用户进程可在下一块读取的同时,处理已读入的数据块
- 单缓冲 vs 无缓冲:
- 使用单缓冲时每块的执行时间明显少于没有缓冲的情况
- 无缓冲时,每块的执行时间为 T + C T+C T+C
(1) T T T表示输入一个数据块所需要的时间
(2) C C C表示两次输入请求之间所需要的时间- 单缓冲时,每块的执行时间为 m a x [ T , C ] + M max[T,C]+ M max[T,C]+M
M M M表示把数据从系统缓冲区复制到用户缓冲区所需要的时间
- 双缓冲:
- 为操作分配两个系统缓冲区,在一个进程向缓冲区中传送数据(从这个缓冲区中取数据)的同时,操作系统正在清空(或填充)另一个缓冲区,双缓冲区又称为
缓冲交换
执行时间:
m a x [ C , T ] max[C, T] max[C,T]- 单缓冲区和双缓冲区下的系统处理时间
- 循环缓冲:
- 若进程需要执行大量的I/O操作,则仅有双缓冲是不够,此时需要使用多于两个缓冲区
- 当使用两个以上的缓冲区时,这组缓冲区本身会被当做
循环缓冲区
磁盘调度
- 磁盘的工作原理:
- 磁盘驱动器工作时,磁盘以某个恒定的速度旋转
- 为了读或写,磁头必须定位于指定的磁道和该磁道中指定扇区的开始处
- 一旦选择好磁道,磁盘控制器就开始等待,直到适当的扇区旋转到磁头处
- 一旦磁头定位完成,磁头就通过下面旋转的扇区,开始执行读或者写操作
- 磁盘性能参数:
- 寻道时间: 将磁头臂移到指定磁道所需要的的时间
- 旋转延迟: 完成寻道后,磁头到达扇区开始位置所需要的时间
- 15000 r p m 15000rpm 15000rpm:每分钟15000转,相当于 4 m s = ( 1 ∗ 60 ∗ 1000 ) / 15000 4ms = (1 * 60 * 1000)/15000 4ms=(1∗60∗1000)/15000旋转一周
- 存取时间: 磁头从
起始位置
到达读或写位置所需要的时间
存取时间 = 寻道时间 + 旋转时间
- 传送时间: 磁头通过下面旋转的扇区,完成数据传输所需的时间
- T = b / ( r ∗ N ) T = b/(r * N) T=b/(r∗N), T : T: T:传输时间, b : b: b:要传输的总字节数, N : N: N:一个磁道中的字节数, r : r: r:旋转速度
- 总平均存取时间:
- T a = T s + 1 / ( 2 ∗ r ) + b / ( r ∗ N ) Ta = Ts + 1 / (2 * r) + b / (r * N) Ta=Ts+1/(2∗r)+b/(r∗N), T a : T_a: Ta:平均存取时间, T s : T_s: Ts:平均寻道时间
- 除了存取时间和传输时间外,一次磁盘I/O操作还会存在
排队延迟
即进程发出一个I/O请求时,它必须先在一个队列中等待该设备可用- 如果这个设备与其他磁盘驱动器共享一个I/O通道或一组I/O通道,那么还需要额外的等待时间,用于等待通道可用
- 调度策略:
- 从磁盘读取扇区的顺序对I/O的性能有很大的影响
- 基于请求者属性:
- 先进先出(FIFO):
- 每一个请求都会得到处理,且按照收到的顺序处理,优点是公平
- 当只有需要访问某些进程,且大多数请求都是访问簇聚的文件扇区时,先入先出策略有望达到较好的性能
- 在单用户系统中,最佳的磁盘调度算法是先来先服务算法
- 若有大量进程竞争一个磁盘时,先入先出策略往往接近于随机调度
- 优先级:
- 目的不是优化磁盘的利用率,而是满足操作系统的其他性能,如响应时间等
- 后进先出
- 磁盘由于大量工作而一直处于忙绿状态时,明显会出现饥饿的可能性。
- 一旦任务在队列中发出I/O请求,并从队头退出,该任务就不能再回到队头,除非前面的队列清空
- 基于当前轨道的位置:
- 最短服务时间优先(SSTF):
- 选择使磁头臂从当前位置开始移动最少的磁盘I/O请求
- 不能保证平均寻道时间最小
- 扫描算法(SCAN)(电梯算法):
- 磁头臂仅沿一个方向移动,并在图中满足所有未完成的请求,直到它到达这个方向上的最后一个磁道,或者在这个方向上没有其他请求为止
- 接着反转服务方向,沿着反方向扫描,同样按顺序完成所有请求
- SCAN调度算法可以避免饥饿的发生
- 循环扫描算法(C-SCAN):
- C-SCAN策略把扫描限定在一个方向上,因此,当访问到沿着某个方向的最后一个磁道时,磁头臂返回到相反反向末端磁道,并再次开始扫描
- 如果当磁头刚刚从靠近磁盘某边的某个磁道上移过并向磁盘另一边移动时,恰好有个进程请求访问该磁道,那么该请求将被延迟:
(1)若使用SCAN算法: 2 T 2T 2T
(2)若使用C-SCAN算法: T + S m a x T + S_{max} T+Smax, T T T为磁头从一边扫描到另一个边所花费的时间(包含服务), S m a x S_{max} Smax为磁头从磁盘的一边直接返回另一边所花费的时间,通常 T > > S m a x T >> S_{max} T>>Smax
- N步SCAN和FSCAN:
- 磁头臂的粘性: 如果一个或多个进程对一个磁道有较高的访问速度,那么它们可通过重复地请求这一磁道来垄断整个设备
- N步SCAN策略 是把磁盘请求对了分成长度为N的几个子队列,每次使用SCAN处理一个子队列。在处理某个队列时,新请求必须添加到其他某个队列中。如果在扫描的最后,剩下的请求数小于N,则他们全在下一次扫描时处理
- FSCAN是一种使用两个子队列的策略。开始扫描时,所有请求都在一个队列中,另一个队列为空。在扫描过程中,所有新到的请求都放入另一个队列
磁盘容错技术
- 磁盘容错技术是为了保证磁盘数据的
可靠性
- 通过在系统中设置
冗余部件
来提高系统可靠性- 冗余部件:
磁盘驱动器
、磁盘控制器
- 当磁盘系统某部分出现缺陷或故障时,磁盘仍能正常工作,且不至于造成数据的错误和丢失
- 磁盘容错技术级别:
SFT-I
低级磁盘容错技术:主要防止磁盘表面介质缺陷所引起的数据丢失SFT-II
中级磁盘容错技术,主要防止磁盘驱动器和磁盘控制器故障所引起的数据丢失SFT-III
高级系统容错技术,常使用双系统,以保证在其中一台服务器出现故障,甚至停止工作时,整个系统仍然照常运作
- 第一容错技术(SFT-I):
双份目录
和双份文件分配表
(1)在不同的磁盘上或同一磁盘的不同区域中,分别建立维护两份文件目录和文件分配表(FAT)
(2)当其中一个目录或FAT损坏时,系统便自动启用另一个目录和FAT,同时在磁盘的其他区域再建立新的文件目录和FAT
(3)每当系统重新启动时,都要对这两份目录和FAT进行检查,以保证它们的一致性- 依赖于
热修复重定向
、写后读校验
(1)热修复重定向:
系统将一定的磁盘容量作为热修复重定向区
,用于存放当发现磁盘块有缺陷时的待写数据,并对写入该区的所有数据进行登记,以便于以后对此数据进行访问
(2)写后读校验:
每次将数据写到磁盘以后,立即从磁盘上读出该块数据,并进行对比,若写入的数据与读出的数据一致,表示写成功;否则重写数据。若重写后两者仍不一致,则认为磁盘块存在缺陷,便将该块标识为坏块,相似数据写入热修复重定向区
中
- 第二级容错技术(SFT-II):
磁盘镜像
: 在同一磁盘控制器上,连接两个完全相同的磁盘驱动器,同一数据被先后
写到两个驱动器上磁盘双工
将两台完全相同的磁盘驱动器连接到两个磁盘控制器上,数据同时
写到两个磁盘上- 磁盘双工的成本较高但可靠性更高
- 磁盘双工对两个磁盘的写入是
并行
进行,速度较快- 磁盘双工在某些实现中读数据时,还可以使用分离查找技术,从响应快的通道上取得数据,加快读取速度
RAID
RAID
独立磁盘冗余阵列(Redundant Array of Independent Disks
)RAID
磁盘阵列技术能以较低的成本,提供大容量、快速、安全可靠的磁盘存储系统。- 从容错角度,
RAID
技术应属于第二级容错技术,但其内涵远远不止容错
- RAID的特征:
结构:
磁盘阵列
(一组可并行工作的磁盘) +磁盘阵列管理软件
- 磁盘阵列管理软件把逻辑上连续的一组数据交叉分布存储在磁盘阵列中的各个磁盘上
(1) 磁盘阵列管理软件可以并行处理对一组数据中的单个或多个数据的存取请求- 磁盘阵列管理软件还负责存储相关的校验信息
(1)当磁盘阵列中的某个磁盘发生故障时,磁盘阵列管理软件可以恢复存储在该磁盘上的数据。- 磁盘阵列管理软件屏蔽了磁盘阵列的物理细节,是操作系统的其它成份不知道磁盘阵列的存在,在它们看来,系统中存在一个大容量的逻辑磁盘
- RAID级别0
- 仅使用了条带技术,未用冗余数据来提高性能或提供数据保护,
RAID
并不是RAID
家族中的真正成员- 不存储数据的校验信息
- 具备最好的读/写性能和最低和最低的成本
- 磁盘容量的利用率为100%,但
安全性最低
,其中任何一个磁盘损坏会导致整个系统不可用
- RAID级别0 vs 单个大磁盘:
- 优点:
(1)当两个不同的I/O请求为两块不同的数据挂起时,被请求的块很可能在不同的磁盘上,因此这两个请求可以并行发出,从而减少I/O排队等待的时间
(2) 如果一个I/O请求由多个逻辑上连续的条带组成,那么该请求可以并行处理,因此大大减少了I/O传输时间
- RAID级别1:
- RAID2到RAID6的RAID方案使用某种形式的奇偶计算来实现冗余,而RAID1则通过临时赋值所有数据来实现冗余
- RAID1读请求可由包含请求数据的任何一个磁盘提供服务,而不管哪个磁盘拥有最小寻道时间和旋转延迟
- RAID1写请求需要两个相应的条带进行更新,但这可以并行完成,写性能由两个写操作中较慢的那个决定
RAID1中无写损失
,而RAID2到RAID6涉及奇偶校验位的使用,因此一个条带被更新时,阵列管理软件必须先计算更新奇偶校验位以及实际需要修改的条带- RAID1从失效中恢复很简单
- RAID1的主要缺点是成本问题,它需要两倍于所支持的逻辑磁盘空间
- RAID1通常用于保存系统软件和数据以及其他及其重要的文件
- RAID级别2:
RAID级别2
和RAID级别3
使用了一种并行访问
技术,在并行访问阵列中,所有磁盘成员都参与每个I/O请求
的执行- 在
RAID2
和RAID3
中,条带非常小,常常只有1个字节或1个字RAID2
对这个数据磁盘中的相应位都计算一个错误校正码,并且这个码位保存在多个奇偶校验磁盘的相应位中- 错误矫正使用
汉明码
,能够纠正一位错误并检测两位错误RAID2
需要的磁盘数少于RAID1
但,它仍然相当昂贵,冗余磁盘的数量与数据磁盘数的对数成正比RAID2
仅是在可能发生许多磁盘错误是的环境中的一种有效选择
- RAID级别3:
- 与
RAID2
不同,不论磁盘阵列有多大,RAID3
都只需要一个冗余磁盘RAID3
为所有数据磁盘中同一位置的位的集合计算一个简单的奇偶校验位,而不是错误校验码- 任何一个I/O请求都意味着从所有数据磁盘中并行传送数据。因此对数据量的传送,性能的提高非常明显
- 由于一次只能执行一个I/O请求,因此在面向事务处理的环境中性能并不乐观
- 冗余性:
- 发生磁盘故障时,访问奇偶检验驱动器,并从其余的设备中重建数据
- 替换失效的驱动器时,失效的数据可恢复到新驱动器上,并继续执行操作
- 重建操作:
- 假设有5个驱动器的阵列,其中
X0
到X3
包含数据,X4
为奇偶校验磁盘。
第i
位的奇偶校验计算如下:
X 4 ( i ) = X 3 ( i ) ⨂ X 2 ( i ) ⨂ X 1 ( i ) ⨂ X ( 0 ) X4(i) = X3(i)\bigotimes X2(i)\bigotimes X1(i) \bigotimes X(0) X4(i)=X3(i)⨂X2(i)⨂X1(i)⨂X(0)- 式中, ⨂ \bigotimes ⨂表示异或操作
- 假设驱动器 X 1 X1 X1失效,在上式两边都加上 X 4 ( i ) ⨂ X 2 ( i ) X4(i)\bigotimes X2(i) X4(i)⨂X2(i),有
X 1 ( i ) = X 4 ( i ) ⨂ X 3 ( i ) ⨂ X 2 ( i ) ⨂ X ( 0 ) X1(i) = X4(i)\bigotimes X3(i)\bigotimes X2(i) \bigotimes X(0) X1(i)=X4(i)⨂X3(i)⨂X2(i)⨂X(0)- 因此, X 1 X1 X1中每个条带的数据内容都可有阵列中其余磁盘相应条带的内容重新生成。
- RAID级别4:
RAID4到6
使用了一种独立的访问技术,每个磁盘成员都单独运转,因此不同的I/O请求能并行地得以满足- 独立访问阵列更适合于需要更高
I/O
请求速度的应用程序,而相对不太适合于需要较高数据传送率的应用程序- 对于
RAID4到RAID6
,数据条带相对较大- 在
RAID 4
中,对每个数据磁盘中相应的条带计算一个逐位奇偶校验,奇偶校验位保存在奇偶校验磁盘的相应条带中RAID4
会引发写性能损失,每当写操作发生时,阵列管理软件不仅需要更新用户数据,而且必须更新相应的奇偶校验位- 要计算新的奇偶校验,阵列管理软件必须读取就用户条带和就奇偶校验条带,然后用新数据和就近计算的奇偶校验更新这两个条带。因此,每个条带的写操作都包含两次读和两次写
- 对于任何一种情况,每次写操作都必须包含奇偶校验磁盘,因此奇偶校验磁盘有可能成为瓶颈
- RAID级别5
- 与
RAID 4
不同之处在于RAID5
把奇偶校验条带分布在所有磁盘中- 奇偶校验条带分布在所有驱动器上,可避免
RAID4
中一个奇偶校验磁盘的潜在I/O
瓶颈问题
- RAID级别6
RAID 6
方案中采用了两种不同奇偶校验计算,并保存在不同磁盘的不同块中,因此用户数据需要N
个磁盘的RAID 6
阵列,由N+2
个磁盘组成。RAID 6
的优点是它能提供极高的数据可用性RAID 6
会导致严重的写性能损失- 与
RAID 5
相比,RAID 6
控制器会有30%
以上的整体性能损失RAID 5
和RAID 6
的读写性能相当
磁盘高速缓存
- 定义: 磁盘高速缓存是内存中为磁盘扇区设置的一个缓冲区,它包含有磁盘中某些扇区的副本
- 高速缓冲存储器利用局部性原理来减少平均存储器存取时间
- 出现对某一特定扇区的I/O请求时,首先会进行检测,以确定该扇区是否在高速缓存中,若在,则请求可通过这个高速缓存来满足;若不在,则把被请求的扇区从磁盘读到磁盘高速缓存中
- 设计考虑的因素:
- 数据传送方法:
- 当一个I/O请求从磁盘高速缓存中得到满足时,磁盘高速缓存中的数据必须传送到发送请求的进程
- 实现方法:
(1)在内存中把这一块数据从磁盘高速缓存传送到分配给该用户的存储空间中
(2)使用一个共享内存,传送指针指向磁盘高速缓存中相应项的指针可以解决传输时间
- 置换策略(页面置换算法):
- 当一个新扇区被读入磁盘高速缓存时,必须换出一个已存在的块
- 最常用的算法是最近最少使用算法(LRU):置换在高速缓存中未被访问的时间最长的块
SPOOLing技术
- 核心思想: 在快速辅助存储设备中建立缓冲区,用于缓存从慢速输入设备流入内存的数据,或缓存从内存流向慢速输出设备的数据