Device Management
继续学习电子科技大学蒲晓蓉老师的操作系统,课程能在中国大学MOOC网站上找到。以下为记的笔记。
I/O设备管理概述
Learning objectives:
- 计算机I/O子系统的组成
- OS设备管理模块的结构
- I/O缓冲技术
- 磁盘调度策略
- RAID技术
Techniques for Performing I/O:
- Programmed I/O(程序控制I/O)
- 处理器发送请求给I/O设备
- 处理器不断地检测I/O设备状态直到I/O设备就绪,会有busy-waiting(忙等)产生
- 没有中断产生
- Interrupt-Driven(中断驱动)
- 当I/O设备准备就绪时,处理器被中断
- 处理器能干其他事情,避免了忙等的产生
- 每个字符的读写都会产生中断,消耗了很多处理器的资源
- DMA Control(Direct memory access,DMA控制)
- 传输I/O设备的一连串数据(a block of data)到内存中
- 当I/O设备的任务完成时DMA向处理器发送中断请求
- 处理器只在开始和结束时处理数据
计算机I/O子系统的组成:
Logical I/O Device:从应用软件的角度看,逻辑I/O设备是一类具有相同或相似属性的物理I/O设备的抽象
逻辑I/O设备的分类:
- 字符设备
- 也叫面向流的设备(Stream-Oriented Device)
- 应用软件以字符为单位读写此类逻辑I/O设备
- 块设备
- 也叫面向块的设备(Block-Oriented Device)
- 应用软件以块为单位读写此类逻辑I/O设备
OS设备管理模块的分层结构
- 为了实现“通用性”这一设计目标,大多数OS的设备管理模块采用分层结构。
- 在分层结构中,上层可以屏蔽下层的实现细节
- 典型的两层结构:
- 设备硬件无关层,实现设备映射功能,把逻辑I/O设备映射到物理I/O设备
- 设备硬件相关曾,实现设备驱动功能,控制物理I/O设备以便完成实际的I/O操作
I/O buffering(缓冲技术) 的引入的原因
Problem of No buffering:
- I/O中断时,用户进程的运行速度取决于磁盘读入速度
- 单进程死锁
I/O Buffering
- 核心思想:在内存中建立I/O缓冲区
- 缓存从输入设备流入内存的数据
- 缓存从内存流向输出设备的数据
I/O缓冲的具体实现
-No Buffer
平均时间:T + C
-Single Buffer
平均时间:max(T, C) + M ,
其中T为外存进到缓冲区的时间,C为处理器处理的时间,M为缓冲区数据移到工作区的时间
T与C相差不大时:能够提高效率
T >> C:性能没有显著提高
T << C:性能没有显著提高
-Double Buffer
和Single Buffer类似
-Circular Buffer
多个缓冲区解决了缓存没有释放的问题
DiskCache介绍
定义:DiskCache不是一个硬件,其为内存上的一个区,作为磁盘的一个缓冲区
Disk Cache中的数据写出到磁盘:
1.在系统空闲或需要淘汰被写的缓存空间时进行写;
2.周期性地进行写;
3.立即写回,称为“写穿透高速缓存”,相当于只有读缓存而没有写缓存。
向用户进程提交扇区副本的方法:
- 如果系统不允许用户访问Disk cache,那么系统将把用户需要的扇区从disk cache中复制到用户工作区。
- 如果系统允许用户进程访问disk cache,那么系统将把用户进程需要的扇区副本在disk cache中的位置指针传递给用户进程。
DiskCache中的扇区置换算法
-Least Recently Used(LRU置换算法)
- 最长时间没有被使用的扇区置换出去
- 使用堆栈实现
-Least Frequently Used(LFU置换算法)
- 使用频率最低的扇区置换出去
- 使用计数器,使用一次计数加一
- 考虑一些进程一段时间频繁使用,但是这段时间过后就不使用了(加入堆栈解决该问题)
LFU算法(加入堆栈)实现细节:
- 系统把disk cache中的所有扇区组成一个栈:位于栈顶的扇区最近才被访问过;而位于栈顶的扇区最久没有被访问过。
- 系统从中间某个位置把disk cache中的栈分成两个部分:靠近栈顶的部分成为New Section,靠近栈底的部分成为Old Section。
- 当系统从磁盘上把一个新扇区读入disk cache中时,把该扇区放在disk cache的栈顶,并把该扇区的应用计数器置1.
- 当disk cache中的某个扇区被用户进程访问时,系统将把该扇区从其原来的位置移到disk cache的栈顶,同时判断该扇区原来是否位于栈的New Section:若是,该扇区的引用计数器的值保持不变;否则,该扇区的引用计数器的值加1
- 当需要从disk cache中选择一个被置换扇区时,系统将从位于栈的Old SEction中的所有扇区中选择引用计数器值最小的那个扇区。
- 如果位于栈的Old Section中的所有扇区其引用计数器的值均相等,那么系统将选择位于disk cache栈底的那个扇区。
不足:一个经常被引用但是从new section转入old section时因为计数器最小而很容易被置换出去。
改进:把堆栈分为三部分:new section;middle section;old section,middle section中的扇区被引用计数器会增加。
Spooling技术
核心思想:在快速辅助存储设备中建立I/O缓冲区,用于缓存从慢速输入设备流入内存的数据,或缓存从内存流向慢速输出设备的数据
磁盘调度策略
考虑多个磁盘I/O请求的加速
-Disk I/O
- 大容量磁盘
- 每条磁道上都有一个读/写磁头,可以并行读/写
- 中小型磁盘设备
- 每个盘面配置一个磁头,只能串行读/写(需要考虑磁盘调度问题)
- 为了读/写某磁道、某扇区的数据,首先让磁头伸缩,寻找指定磁道,再旋转磁盘,将相应扇区定位到磁头下面。
- 影响磁盘速度的参数:寻道时间seek time,旋转延迟rotational delay,传输时间transfer time,访问时间access time
Seek Time:
Rotational Delay
平均转半圈,所以除以2
Transfer Time
Access Time
Ta = Ts + Tr + T
Rotational Positional Sensing(RPS,旋转定位感知)
磁盘调度算法
基于请求者属性的磁盘调度策略:
- Random Scheduling Strategy (RSS)
效果最差的算法,用于评估其他算法
- First-in, First-out (FIFO)
也是随机的,效果也很差
- Priority-Based Strategy
用于优先级高的进程先服务,不是用于满足磁盘平均寻道时间的
- Last-in, First-out
适用于事务处理,可能会引起饥饿
以上的算法都是随机寻道的,都不能缩短平均寻道时间。
基于被请求扇区位置的磁盘调度策略:
- Shortest Service Time First (SSTF算法,最短寻道时间优先)
- 保证在满足两次磁盘读写请求之间磁头移动距离最小,但并不能保证一组请求的总磁头移动距离最小
- 该算法的性能比FIFO性能好
- 当不断有新的磁盘读写请求被提交时,该算法可能会导致饥饿现象
- SCAN(扫描算法、电梯调度算法)
- 和电梯运行原理一样
- 算法性能与SSTF相近,避免了SSTF的饥饿现象
- 如果当磁头刚刚从靠近磁盘某边的某个磁道上移过并向磁盘另一边移动时,恰好有一个进程请求访问该磁道,那么该请求将被严重推迟
- C-SCAN(单向扫描算法)
- 只在某一方向上移动时服务,可以解决SCAN算法的第三点的问题
- N-step-SCAN
- 将磁盘请求按照提交次序分成若干个队列,每个队列包含N个磁盘读写请求;
- 如果存在一个长度小于N的磁盘读写请求队列,那么当一个新的磁盘读写请求到达时,系统将其加入到该队列中;
- 如果不存在一个小于N的磁盘请求队列,那么当一个新的磁盘读写请求到达时,为其建立一个新的队列;
- 系统将使用FIFO策略依次处理每个磁盘读写请求队列;
- 系统将使用SCAN算法处理每个队列中的磁盘读写请求;
- 该算法避免了“磁壁黏着(Arm Stickiness,即磁头念黏着在一个请求很频繁的局部)”现象
- FSCAN
- 两个队列,系统使用SCAN算法处理第一个队列中的磁盘读写请求
- 系统在处理第一个队列的磁盘读写请求时,如果有新的读写请求到达,那么新的磁盘读写请求将被组织在第二个队列中
- 一旦第一个队列中磁盘请求处理完毕,系统转向第二个队列使用SCAN算法处理磁盘读写请求
- 上述第二步和第三步将被系统重复使用
做题的话使用以下方式计算:
磁盘容错技术
(冗余技术:1.提高可靠性 2.提高效率)
通过在系统中设置冗余部件提高系统的可靠性
冗余部件包括:磁盘驱动器,磁盘控制器等。可以提高可靠性和性能
磁盘容错技术级别
- SFT-1 低级容错技术
在同一个磁盘上对重要数据进行备份(软件冗余)
双份目录和双份文件分配表:
- 可在不同的磁盘或者同一磁盘的不同区域,分别建立维护两份文件目录和FAT
- 当其中一个目录或者FAT损坏时,同时在磁盘的其他区域再建立新的文件目录和FAT
- 每当系统重新启动时,都要对这两份目录和FAT进行检查,以保证他们的一致性
热修复重定向和写后读校验:(检测计算机的坏道)
- 热修复重定向:系统将一定的磁盘容量作为热修复重定向区,用于存放当发现磁盘块有缺陷时的待写数据,并对写入该区的所有数据进行登记,以便于以后对此数据进行访问。
- 写后读校验:每次将数据写到磁盘以后,立即从磁盘上独处该块数据,并进行对比。若写入的数据与读出的数据一致,则表示写入成功;否则,重写数据。若重写后两者仍不一致,则认为该磁盘块有缺陷,便将该块标识为坏快,相应数据写入热修复重定向区中。
- SFT-2 中级容错技术
对磁盘驱动器和磁盘控制器进行冗余(硬件冗余)
- 磁盘镜像:在同一磁盘控制器上,连接两个完全相同的磁盘驱动器,同一数据被先后写到两个驱动器上,同时还有并行的功能,提高磁盘读取的效率
- 磁盘双工:将两台完全相同的磁盘驱动器连接到两个磁盘控制器上,数据被同时写到两个磁盘上,读写都能同时进行。
磁盘双工VS磁盘镜像:
- 磁盘双工成本更高;
- 可靠性更高;
- 对两个磁盘的写入是并行进行,速度较快
- 在某些实现中读数据时,还可以使用分离查找技术,从响应快的通道上获取数据,加快读取速度
- SFT-3 高级容错技术
常使用双服务器,保证在其中一台服务器出现故障,整个系统任然能照常工作。
RAID技术
RAID:Redundant(冗余的) Array of Inexpensive Disks ——> Redundant Array of Independent Disks
- RAID由两部分构成:磁盘阵列(一组可并行工作的磁盘),以及磁盘阵列管理软件
- 数据交叉分布存储在磁盘阵列中的各个磁盘上,阵列管理软件可以并行处理对对一组数据中的一个或多个数据的存取请求。
- 磁盘阵列管理软件还负责存储相关校验信息,当磁盘阵列中的某个磁盘发生故障时,用于恢复存储在该磁盘上的数据。
- 磁盘阵列管理软件屏蔽了磁盘阵列的物理细节
条带Strip的粒度
- 条带可以是细粒度的(如一个字节或字),也可以是粗粒度的(如一个扇区或多个扇区)
- 若采用细粒度条带,几乎每个存取请求都会导致同时存取RAID中的所有磁盘,使得无法同时响应多个存取请求。因此,细粒度的条带只利于对单个存取请求进行并行处理
- 若采用粗粒度条带,不会使每个存取请求同时存取RAID中的所有磁盘;但,多个独立的存取请求通常会导致同时存取RAID中的所有磁盘。显然,粗粒度的条带只利于对多个独立的存取请求进行并行处理
RAID中的数据校验方式
- 对数据进行镜像存储
- 对数据进行Hamming编码
- 存储数据的奇偶校验信息
RAID级别的划分:
0级:无冗余,成本最低,安全性最差
1级:仅使用磁盘镜像技术或磁盘双工技术,磁盘利用率只有50%
2级:通过hamming编码,使用细粒度strip,能纠正1位错误,检测2位错误,相对Raid1成本更低,具有较好的数据传输性能但具有较差的I/O响应能力
3级:奇偶校验信息,使用细粒度(bit-interleaved parity)
4级:奇偶校验信息,使用粗粒度(block-level parity)
5级:(block-level distributed parity)奇偶校验信息存在不同的磁盘整列上,使其能够并行处理