Jason Zhou的Coding之路 凡是过往皆为序章

操作系统学习笔记五 I/O管理


设备管理的主要对象是 I/O 设备,可能还会涉及到设备管理器和 I/O 通道。基本的任务是完成用户提出的 I/O 请求,提高 I/O 速率以及提高 I/O 设备的利用率。本节主要部分包括 I/O 系统,I/O 控制方式,缓冲管理,I/O 软件,设备分配和磁盘存储的管理。

I/O系统

I/O 系统是用于实现数据输入、输出和存储的系统。需要相应的设备控制器和高速总线。

I/O设备

  • 分类:
    • 按照使用特性分:存储设备,输入/输出设备
    • 按照速率分类:低速设备,中速设备,高速设备
    • 按照信息交换的单位分类:块设备,字符设备。
    • 按照共享属性分类:独占设备,共享设备,虚拟设备。
  • 接口:数据信号线:控制信号线,状态信号线。

设备控制器

  • 基本功能:接受和识别命令、数交换、标志和报告设备的状态、地址识别、数据缓冲和差错控制。
  • 组成:寄存器(数据寄存器(接受来自 CPU 或 I/O 逻辑),控制/状态寄存器),I/O 逻辑,控制器与设备的接口。
  • 信号交换:
    • 与 CPU 信号交换:数据线(连接数据寄存器和控制/状态寄存器),地址线,控制线
    • 与设备的交换:接口,每个接口一般包含数据、控制和状态三种类型的信号。(根据 CPU 发来的地址信号区选择具体设备)
  • I/O 逻辑:实现设备控制。

I/O通道

  • I/O 通道一类特殊的处理机。指令类型单一,主要局限于 I/O 操作相关。没有内存,程序在主机内存中。
  • 类型:
    • 字节多路通道:包含多个子通道,按照字节交叉方式工作。时间片轮转方式共享主通道。
    • 数组选择通道:一段时间仅执行一个通道程序,控制一台设备进行数据传送。
    • 数组多路通道:包含前两者的优点。
  • 瓶颈:通道数量少。解决方法:多通道共享给多个控制器。

总线系统

  • ISA Industry Standard Architecture 总线/ Extended ISA 总线
  • 局部总线:VESA Video Electronic Standard Association 总线和 PCI Peripheral component Interface 总线

I/O控制方式

程序I/O方式

  • 几乎不采用,CPU 不断检测控制器状态判断是否完成 I/O 操作,处于忙等待。

中断驱动I/O方式

  • I/O 控制器和 CPU 并行,提高 CPU 利用率。
  • 仍以字节为单位。

直接存储器访问(DMA)I/O控制方式

  • DMA Direct Memory Access 特点:
    • 数据基本单位:数据块。
    • 数据是内存和设备间的传输。
    • 仅在一个或多个数据块传输的开始和结束才需要 CPU 干预。整个传送过程是在控制器下完成的。
  • DMA 控制器组成:主机与 DMA 控制器的接口,DMA 控制器与块设备的接口,I/O 控制逻辑。
    • 设置四类寄存器:命令/状态寄存器(CR),内存地址寄存器(MAR),数据寄存器(DR),数据计数器(DC)。

I/O通道控制方式

  • I/O 通道方式:CPU 对数据块的的 I/O 操作以组为单位。实现了 CPU、通道和 I/O 设备三者并行操作。
  • 通道程序:操作码,内存地址,计数,通道程序结束位 P,记录结束标志 R。

缓冲管理

缓冲的引入

  • 缓解 CPU 与 I/O 设备速度不匹配
  • 减少 CPU 中断频率
  • 提高 CUPU 与 I/O 设备的并行性

单缓冲和双缓冲

  • 单缓冲:可能出现一个进程尚未完成对缓冲的使用,后一进程想要使用缓冲。
  • 双缓冲机制,也称为缓冲对换。减缓设备并行冲突。
  • 双机通信:单缓冲则类似半双工通信,双缓冲类似全双工通信。

循环缓冲

  • 引入多缓冲,形成循环缓冲形式。缓解两进程速度不匹配的问题。
  • 循环缓冲的组成:
    • 多缓冲区:多个大小相同的缓冲区。其中分为空缓存,装满缓冲,工作缓冲。
    • 多指针:下一个可用空缓冲 Nextg,下一个可用满缓冲 Nexti,正在工作的缓冲区 C。
    • 可能还需要计数,互斥量等。
  • 使用:
    • Getbuf 过程
    • Releasebuf 过程
  • 进程同步:两个指针速度不匹配会出现不同进程对系统的限制。

缓冲池

  • 缓冲池 Buffer Pool:设置多个可供若干进程共享的缓冲区。
  • 同时具备输入和输入的公用缓冲池一般包括三类缓冲区:空缓冲区;装满输入数据的缓冲区;装满输出数据的缓冲区。
  • 相同类型缓冲区一般排成三个队列。
  • 还有相应的工作缓冲区:分别用于输入/输出数据的收容/提取缓冲,所以还有四类工作缓冲。
  • 考虑到互斥和同步的问题:工作流程如下
  • Procedure Getbuf(type)
    begin
        Wait(RS(type));
        Wait(MS(type));
        B(number):=Takebuf(type);
        Signal(MS(type));
    end
    Procedure Putbuf(type)
    begin
        Wait(MS(type));
        Addbuf(type, number);
        Signal(MS(type));
        Signal(RS(type));
    end
    
  • 缓冲区工作方式;分别由收容输、提取输入、收容输出、提取输出四种工作方式。

I/O软件

设备分配

设备分配中的数据结构

  • 设备控制表 DCT:设备类型,设备标识符,设备状态,指向控制表的指针,重复执行次数或时间,设备队列的队首指针。
  • 控制器控制表,通道控制表,系统设备表。

设备分配时考虑的因素

  • 设备固有属性:独享设备,共享设备,虚拟设备。
  • 分配算法:FIFS,优先级高者优先。
  • 设备分配安全性:安全分配(常 I/O 请求则阻塞,摒弃“请求和保持”条件)和不安全分配。

设备独立性

  • 设备独立性,也称为设备无关性:应用程序独立于具体使用的物理设备。引入逻辑设备和物理设备概念,所以具有逻辑设备名称转换为物理设备名称的功能。带来的好处:设备分配时的灵活性,易于实现 I/O 重定向。
  • 设备独立性软件:执行所有设备的共有操作,向用户层(或文件层)软件提供统一接口
  • 逻辑设备名到物理设备名的映射实现:逻辑设备表,LUT 的设置问题。

独占设备的分配程序

  • 基本分配程序:分配设备:分配控制器,分配通道。三者都分配成功才算分配成功。
  • 改进:增加设备对立性。考虑多通路情况(当所有通路或设备都忙才算忙)。

SPOOLing 技术

  • 将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备。允许多个用户共享一台物理 I/O 设备。
  • SPOOLing Simultaneaus Periphenal Operation On-Line:用一道程序模拟脱机输出、输入时外围控制器的功能。
  • 共享打印机:SPOOLing 系统同意打印,但并未立即打印。仅在输出进程中记录打印数据,并添加用户请求打印表到打印队列上。
  • 特点:提高 I/O 速度,独占设备变为共享设备,实现虚拟设备功能。

设备处理

设备驱动程序的功能和特点

  • 设备驱动程序的功能:
    • 接受 I/O 进程发来的命令和参数,将抽象要求转换为具体要求。
    • 检测用户 I/O 请求的合法性。
    • 发出 I/O 命令
    • 及时响应控制器或通道发来的中断请求
    • 对于设置通道的计算机,驱动程序根据用户 I/O 请求,自动构成通道程序。
  • 设备处理方式:
    • 为每类设备设置一个进程
    • 为整个系统设置一个 I/O 进程
    • 不设置进程,仅为每类设备设置相应的设备处理程序(模块)以供调用。
  • 特点:
    • 驱动程序是 I/O 请求进程与设备控制器之间的一个通信和转换程序。
    • 与设备控制器和 I/O 设备硬件特性相关。
    • 与 I/O 设备采用的 I/O 控制方式紧密相关。
    • 由于与硬件紧密相关,所以其中一部分必须由汇编语言书写。

设备驱动程序的处理过程

  1. 抽象要求转换为具体要求
  2. 检查 I/O 请求的合法性
  3. 读出和检查设备的状态
  4. 传送必要的数据
  5. 工作方式设置
  6. 启动 I/O 设备

磁盘存储器管理

磁盘性能概述

  • 数据结构:磁盘设备,多个物理盘片,一到两个存储面,多个磁道*多个扇区。
  • 磁盘类型:固定头磁盘(每个磁道一个头),移动头磁盘(每个盘面一个头)
  • 访问时间:
    • 寻道时间 $T_S = m \times n + s$,启动磁臂的时间 $s$ 加上移动 $n$ 条磁道所花费的时间和。
    • 旋转延迟时间 $T_r$
    • 传输时间 $T_t = b / rN$,$r$ 为每秒磁盘转数,$N$ 为一条磁道上的字节数,$b$ 为总字节数。
    • 总时间:
    $$ T_a = T_S + \frac{1}{2r} + \frac{b}{rN}$$

磁盘调度

  • 先来先服务 FCFS:公平,简单,但平均寻道距离大,适用于请求磁盘 I/O 的进程数目较少的场合。
  • 最短寻道时间优先 SSTF,Shortest Seek Time First:产生进程“饥饿”现象
  • 扫描(SCAN)算法:磁头运动方向相同的最短寻道时间优先,其次才是最短寻道时间优先。可避免饥饿情况。
  • 循环扫描(CSCAN)算法:在 SCAN 算法基础上,设定磁头仅单向移动,单向移动结束后,只需要将磁头移动到反方向欲访问的磁道上。
  • NStepSCAN 和 FSCAN 调度算法:将新进入的磁盘请求与之前的磁盘请求分开成不同队列存储(NStep 则 N 个队列,FSCAN 则两个队列)。

磁盘高速缓冲 Disk Cache

  • 磁盘高速缓存形式:逻辑上属于磁盘,物理上驻留在内存的盘块。
    • 第一种:单独在内存中开辟一块空间作为磁盘高速缓存,大小固定。
    • 第二种:将未利用的内存空间变成一个缓冲池,供请求分页系统和磁盘 I/O(磁盘高速缓存)时共享。
  • 数据交付方式
    • 数据交付:直接交付好俗缓存种的数据。
    • 指针交付:将高速缓存中某个区域的指针交付给请求者进程。
  • 置换算法
    • 最近最久未使用原则
    • 访问频率
    • 可预见性
    • 数据的一致性
  • 周期性地写回磁盘:UNIX 具有这种固定时间间隔强制写回的机制。MS-DOS 采用的是有修改则立即写回“写穿透、高速缓存”(write-through cache)。

提高磁盘I/O速度的其他方法

  • 提前读
  • 延迟写
  • 优化物理块分布(减小磁头移动)
  • 虚拟盘(利用内存去仿真磁盘)

廉价磁盘冗余阵列 RAID

  • Redundant Array of Inexpensive Disk
  • 并行交叉存取:具有多台磁盘驱动器,将相同子盘数据存放到不同磁盘的相同位置,数据传输可实现并行传输方式。
  • RAID 的分级,不同分级存储方式不同,磁盘的数据校验功能不同,容错技术也不同。RAID7 较高传输速率和优异性能,价格也最贵。
  • RAID 优点:可靠性高,磁盘 I/O 速度快,性价比高。

Similar Posts

Comments