第六章:IO系统
- I/O 性能
- I/O 可靠性
- 廉价磁盘冗馀阵列 RAID
- 总线
- 通道处理机
- I/O 与操作系统
6.1 I/O系统性能与CPU性能
- IO 系统包括 IO 设备与 IO 设备和处理机的连接
- IO 系统是计算机的一个重要组成部分
- IO 系统可分为存储 IO 系统及通信 IO 系统
- 系统响应时间:从用户输入命令开始,到得到结果需要的时间。由 IO 系统响应时间和 CPU 处理时间组成
- 评价 IO 系统的参数:连接特性/IO 系统容量
6.2 I/O系统的可靠性、可用性、可信性
系统可靠性:系统从某个初始参考点开始一直连续提供服务的能力,用平均无故障时间 MTTF来衡量。
- MTTF:Mean Time To Failure
- MTTF 的倒数是系统的失效率。
- MTTR:平均修复时间
计算系统可靠性的方法:将不同部件的失效率相加求倒。
提高系统部件可靠性的方法:
- 有效构建方法:消除故障隐患
- 纠错方法:即使出现故障也能正常工作
系统的可用性:系统正常工作的时间在连续两次正常服务间隔时间中所占的比例。
平均失效间隔时间 MTBF:MTTF+MTTR
可信性:服务的质量。多大程度上可以合理地认为服务是可靠的。这是不可以度量的。
6.3 磁盘冗馀阵列RAID
磁盘阵列 DA(Disk Array):使用多个磁盘(包括驱动器)的组合来代替一个大容量的磁盘。
- 多个磁盘并行工作。
- 以条带为单位把数据均匀地分布到多个磁盘上。(交叉存放)
- 条带存放可以使多个数据读/写请求并行地被处理,从而提高总的 I/O 性能。
- 多个独立请求可以由多个盘并行地处理:减少了 IO 请求的排队时间
- 如果一个请求访问了多个块,就可以多个盘一起处理:提高了单个请求的数据传输率
- 增加磁盘数量会导致磁盘阵列的可靠性下降
- 磁盘阵列组成
- 细粒度:优点:所有 I/O 请求都能够获得很高的数据传输率;缺点:在任何时间,都只有一个逻辑上的 I/O 在处理当中,而且所有的磁盘都会因为为每个请求进行定位而浪费时间。
- 粗粒度:多个较小规模的请求可以同时得到处理。对于较大规模的请求又能获得较高的传输率。
- 设置冗馀需要解决的问题:
- 如何计算冗馀信息:奇偶校验码
- 如何将信息分布:将信息存放在几个盘中;将数据均匀分在所有盘中
6.3.1 RAID0
RAID0
- 非冗馀阵列
- 将数据切分为条带,交叉地进行存放
6.3.2 RAID1
RAID1
- 双备份磁盘:将数据写入镜像磁盘
- 特点:
- 能实现快速读取
- 写性能由最差的磁盘决定
- 可靠性高
- 昂贵
6.3.3 RAID2
RAID2
- 存储式磁盘阵列,使用汉明码
- 特点
- 每个数据盘存放所有数据字的一位(位交叉存放)
- 各个数据盘上的相应位计算汉明校验码,编码位被存放在多个校验(ECC)磁盘的对应位上。
- 冗馀盘是用来存放汉明码的,其个数为 log2m 级。m:数据盘的个数(也就是数据字的位数)
- 并未被广泛应用,目前还没有商业化产品。
6.3.4 RAID3
RAID3
- 位交叉奇偶阵列
- 特点
- 采用奇偶校验
- 写数据时需要写入校验盘
- 读数据时可以通过校验盘恢复数据
- 采用的带宽比较小
- 校验空间开销小
6.3.5 RAID4
RAID4
- 块交叉奇偶校验
- 采用比较大的条带,可以同时处理多个小规模访问请求
- 特点
- 访问只需要访问数据所在的磁盘
- 只有在故障时才会读取校验码并进行重建
- 对于上图的设定,写数据需要两次磁盘读和两次磁盘写
6.3.6 RAID5
RAID5
- 块交叉分布奇偶校验磁盘阵列
- 无需冗馀盘,将奇偶校验分布在所有盘上
6.3.7 其他RAID
- RAID6:P+Q 双校验磁盘阵列:使用两个校验位,检验空间开销是 RAID5 的两倍;可以容忍两个磁盘出错
- RAID10:先进行镜像再进行条带存放
- RAID01:先进行条带存放再进行镜像
6.4 总线
优点:成本低、多样性
缺点:不同外设分时共享,限制了 I/O 的吞吐率
6.4.1 总线的设计
- 难点
- 总线上信息传输收到物理因素限制:总线的长度、设备的数目、信号的强度
- I/O 既要快又要高吞吐
分离事务总线
- 又称流水总线、悬挂总线
- 多个主设备时,可以通过打包技术提高总带宽:将事务分为请求和应答。再请求和应答之间,总线可以供给其他 I/O 使用
- 分离事务总线有较高的带宽,但是数据传输延迟更大
分离事务总线
同步总线:包含一个供总线上所有设备使用的时钟,并且这些设备是基于该时钟按照一个固定的协议来发送地址和数据的。
- 异步总线:没有统一的参考时钟,每个设备都有各自的定时方法。采用握手协议 。
6.4.2 与CPU的连接
- I/O 总线的连接有两种方法:连接到存储器上;连接到 Cache 上
- I/O 总线连接到存储器总线上
- CPU 对 I/O 设备的编址
- 存储器映射 I/O,将存储器地址分给 I/O 设备,使用 load 和 store 进行读写。将一部分存储空间空出用于设备控制
- 为 I/O 设备设置单独的 I/O 指令用于访问设备
6.5 通道处理机
通道处理机(简称通道):专门负责整个计算机系统的输入/输出工作。通道处理机只能执行有限的一组输入/输出指令。
6.5.1 通道的作用
- 程序控制、中断和 DMA 方式管理外围设备会引起两个问题:
- 所有外设的输入/输出工作均由 CPU 承担,CPU 的计算工作经常被打断而去处理输入/输出的事务,不能充分发挥 CPU 的计算能力。
- 大型计算机系统的外设虽然很多,但同时工作的机会不是很多。
- 一个典型的由 CPU、通道、设备控制器、外设构成的 4 级层次结构的输入/输出系统。
- 通道的功能
- 接收 CPU 发来的 I/O 指令,并根据指令要求选择指定的外设与通道相连接。
- 执行通道程序:从主存中逐条取出通道指令,对通道指令进行译码,并根据需要向被选中的设备控制器发出各种操作命令。
- 给出外设中要进行读/写操作的数据所在的地址。如磁盘存储器的柱面号、磁头号、扇区号等。
- 给出主存缓冲区的首地址:该缓冲区存放从外设输入的数据或者将要输出到外设中去的数据。
- 控制外设与主存缓冲区之间的数据传送的长度:对传送的数据个数进行计数,并判断数据传送是否结束。
- 指定传送工作结束时要进行的操作。例如:将外设的中断请求及通道的中断请求送往 CPU 等。
- 检查外设的工作状态是否正常,并将该状态信息送往主存指定单元保存。
- 在数据传输过程中完成必要的格式变换。例如:把字拆分为字节,或者把字节装配成字等。
- 通道的主要硬件
- 寄存器:数据缓冲寄存器,主存地址计数器,传输字节数计数器,通道命令字寄存器,通道状态字寄存器
- 控制逻辑:分时控制,地址分配,数据传送、装配和拆分等
6.5.2 工作过程
- 通道完成一次数据输入/输出的工作过程
- 在用户程序中使用访管指令进入管理程序,由管理程序生成一个通道程序,并启动通道。
- 用户在目标程序中设置一条广义指令,通过调用操作系统的管理程序来实现。
- 管理程序根据广义指令提供的参数来编制通道程序。
- 启动输入/输出设备指令是一条主要的输入/输出指令,属于特权指令。
- 通道处理机执行通道程序,完成指定的数据输入/输出工作。通道处理机执行通道程序与 CPU 执行用户程序是并行的。
- 通道程序结束后向 CPU 发中断请求。
- 在用户程序中使用访管指令进入管理程序,由管理程序生成一个通道程序,并启动通道。
- 时间关系
通道时间示意
6.5.3 种类
- 字节多路通道
- 为多台低速或中速的外设服务。
- 以字节交叉的方式分时轮流地为它们服务。
- 字节多路通道可以包含多个子通道,每个子通道连接一台设备控制器。
- 选择通道
- 为多台高速外围设备服务。
- 在一段时间内只为一台高速外设独占使用。
- 选择通道的硬件:寄存器/格式交换部件/通道控制部件
- 数组多路通道
- 适用于高速设备。
- 每次选择一个高速设备后传送一个数据块,轮流为多台外围设备服务。
6.5.4 重要:流量分析
- 通道流量:一个通道在数据传送期间,单位时间内能够传送的数据量。所用单位一般为 Bps。
- 又称为通道吞吐率、通道数据传输率等。
- 通道最大流量:一个通道在满负荷工作状态下的流量 。
- 参数的定义
- $T_S$:设备选择时间。从通道响应设备发出的数据传送请求开始,到通道实际为这台设备传送数据所需要的时间。
- $T_D$:传送一个字节所用的时间。
- p:在一个通道上连接的设备台数,且这些设备同时都在工作。
- n:每台设备传送的字节数,这里假设每台设备传送的字节数都相同。
- k:数组多路通道传输的一个数据块中包含的字节数。在一般情况下,k < n。对于磁盘、磁带等磁表面存储器,通常 k = 512。
- T:通道完成全部数据传送工作所需要的时间。
- 字节多路通道:
- 传送过程:通道每连接一台个外设,只传送一个字节,然后又与另一台设备连接,并传送一个字节。
- 为 p 个设备传送 n 个数据需要时间:
- 最大流量:
- 实际流量:连接在这个通道上所有设备的数据传输率之和
- 选择通道
- 在一段时间内只能单独为一台高速外设服务,当这台设备的数据传送工作全部完成后,通道才能为另一台设备服务。
- 为 p 个设备传送 n 个数据需要时间:
- 最大流量:
- 数组多路通道
- 为 p 个设备传送 n 个数据需要时间:
- 最大流量:
- 选择通道和数组多路通道的实际流量就是连接在这个通道上的所有设备中数据流量最大的那一个 。
- 各种通道的实际流量应该不大于通道的最大流量
6.6 I/O与操作系统
- 在用硬件实现的 I/O 技术中,哪些会实际被采用,是由操作系统来决定的。
- I/O 操作主要是在外设和存储器之间进行,所以操作系统必须保证这些 I/O 操作的安全性。
6.6.1 DMA与虚拟存储器
DMA 是使用虚拟地址还是物理地址?
- 使用物理地址进行 DMA 传输,存在以下两个问题:
- 对于超过一页的数据缓冲区,由于缓冲区使用的页面在物理存储器中不一定是连续的,所以传输可能会发生问题。
- 如果 DMA 正在存储器和缓冲区之间传输数据时,操作系统从存储器中移出(或重定位)一些页面,那么,DMA 将会在存储器中错误的物理页面上进行数据传输。
- 解决这些问题的方法
- 使操作系统在 I/O 的传输过程中确保 DMA 设备所访问的页面都位于物理存储器中,这些页面被称为是钉在了主存中。
- “虚拟 DMA”技术:允许 DMA 设备直接使用虚拟地址,并在 DMA 期间由硬件将虚拟地址转换为物理地址。在采用虚拟 DMA 的情况下,如果进程在内存中被移动,操作系统应该能够及时地修改相应的 DMA 地址表。
6.6.2 I/O和Cache数据一致性
- Cache 会造成两个副本
- 把 I/O 连接到存储器上会出现以下情况:
- CPU 修改了 Cache 的内容后,由于存储器的内容跟不上 Cache 内容的变化,I/O 系统进行输出操作时所看到的数据是旧值。(写直达 Cache 没有这样的问题)
- I/O 系统进行输入操作后,存储器的内容发生了变化,但 CPU 在 Cache 中所看到的内容依然是旧值。
- 把 I/O 直接连接到 Cache 上:
- 不会产生由 I/O 导致的数据不一致的问题。
- 所有 I/O 设备和 CPU 都能在 Cache 中看到最新的数据。
- I/O 会跟 CPU 竞争访问 Cache,在进行 I/O 时,会造成 CPU 的停顿。
- I/O 还可能会破坏 Cache 中 CPU 访问的内容,因为 I/O 操作可能导致一些新数据被加入 Cache,而这些新数据可能在近期内并不会被 CPU 访问。
- 解决内容一致性问题的方法(不管 Cache 是采用写直达法还是写回法)
- 软件的方法:设法保证 I/O 缓冲器中的所有各块都不在 Cache 中。
- 把 I/O 缓冲器的页面设置为不可进入 Cache 的,在进行输入操作时,操作系统总是把输入的数据放到该页面上。
- 在进行输入操作之前,操作系统先把 Cache 中与 I/O 缓冲器相关的数据“赶出”Cache,即把相应的数据块设置为“无效”状态。
- 硬件的方法
- 在进行输入操作时,检查相应的 I/O 地址(I/O 缓冲器中的单元)是否在 Cache 中(即是否有数据副本)。
- 如果发现 I/O 地址在 Cache 中有匹配的项,就把相应的 Cache 块设置为“无效”。
- 软件的方法:设法保证 I/O 缓冲器中的所有各块都不在 Cache 中。