IO 设备的基本概念和分类🌟

image.png

  • 块设备:如磁盘等——数据传输的基本单位是 “块”,传输速率较高,可寻址,即对它可随机地读 / 写任一块
  • 字符设备:鼠标、键盘等——数据传输的基本单位是字符。传输速率较慢,不可寻址,在输入 / 输出时常采用中断驱动方式

    IO 控制器

    image.png

  • 一个 I/O 控制器可能会对应多个设备;

  • 数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制 / 状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便 CPU 操作。
    • 有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像 I/O
    • 另一些计算机则采用 I/O 专用地址,即寄存器独立编址

image.png image.png

IO 控制方式🌟

  • IO 控制方式:用什么样的方式来控制 IO 设备的数据读 / 写

    程序直接控制方式

    image.png image.png

    中断驱动方式

    image.png

    DMA 方式

    image.png image.png

    通道控制方式

    image.png image.png image.png

IO 软件层次

image.png

  • 中间三层属于操作系统的内核部分,即 “IO 系统”,或称 “IO 核心子系统”
  • 每一层会利用其下层提供的服务,实现某些功能,并屏蔽实现的具体细节,向高层提供服务(“封装思想”)
  • 越上面的层次越接近用户
  • 越下面的层次越接近硬件

    IO 核心子系统

  • 此 I/O 核心子系统要实现的功能其实就是中间三层要实现的功能

    IO 调度

  • I/O 调度:用某种算法确定一个好的顺序来处理各个 I/O 请求

    • 如:磁盘调度(先来先服务算法、最短寻道优先算法、SCAN 算法、C-SCAN 算法、LOOK 算法、C-LOOK 算法)。当多个磁盘 I/O 请求到来时,用某种调度算法确定满足 I/O 请求的顺序
    • 同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定 I/O 调度顺序。

      设备保护

  • 操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)

  • 在 UNIX 系统中,设备被看做是一种特殊的文件,每个设备也会有对应的 FCB。当用户请求访问某个设备时,系统根据 FCB 中记录的信息来判断该用户是否有相应的访问权限,以此实现 “设备保护” 的功能。(参考 “文件保护” 小节)

    假脱机技术 (SPOOLing 技术)🌟

    注:假脱机技术(SPOOLing 技术)需要请求 “磁盘设备” 的设备独立性软件的服务,因此一般来说假脱机技术是在用户层软件实现的。但是 408 大纲又将假脱机技术归为 “I/O 核心子系统” 的功能,因此考试时还是以大纲为准
    image.png image.png

  • “输入进程” 模拟脱机输入时的外围控制机

  • “输出进程” 模拟脱机输出时的外围控制机
  • 在输入进程的控制下,“输入缓冲区” 用于暂存从输入设备输入的数据,之后再转存到输入井中
  • 在输出进程的控制下,“输出缓冲区” 用于暂存从输出井送来的数据,之后再传送到输出设备上
  • 注意,输入缓冲区和输出缓冲区是在内存中的缓冲区

image.png

  • 当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务
  • SPOOLing 技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备

image.png

设备分配与回收

image.png

  • 设备的固有属性可分为三种:独占设备、共享设备、虚拟设备
    • 独占设备——一个时段只能分配给一个进程(如打印机)
    • 共享设备——可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用
    • 虚拟设备——采用 SPOOLing 技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用 SPOOLing 技术实现的共享打印机)
  • 从进程运行的安全性上考虑,设备分配有两种方式:
    • 安全分配方式:为进程分配一个设备后就将进程阻塞,本次 I/O 完成后才将进程唤醒。(eg:考虑进程请求打印机打印输出的例子)
      • 一个时段内每个进程只能使用一个设备
      • 优点:破坏了 “请求和保持” 条件,不会死锁
      • 缺点:对于一个进程来说,CPU 和 I/O 设备只能串行工作
    • 不安全分配方式:进程发出 I/O 请求后,系统为其分配 I/O 设备,进程可继续执行,之后还可以发出新的 I/O 请求。只有某个 I/O 请求得不到满足时才将进程阻塞
      • 一个进程可以同时使用多个设备
      • 优点:进程的计算任务和 I/O 任务可以并行处理,使进程迅速推进
      • 缺点:有可能发生死锁(死锁避免、死锁的检测和解除)

image.png

缓冲区管理 (缓冲与高速缓存)🌟

image.png

  • T>C:块设备输入内存的时间比 CPU 处理数据的时间慢
    • 处理一块数据的平均用时 = T+M
  • T<C:块设备输入内存的时间比 CPU 处理数据的时间快
    • 处理一块数据的平均用时 = C+M
  • 综上,采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M

image.png

  • 假设 T>C+M,处理一块数据的平均用时 = T
  • 假设 T<C+M,处理一个数据块平均耗时 = C+M
  • 综上,采用双缓冲策略,处理一个数据块的平均耗时为 Max (T, C+M)

image.png image.png image.png

磁盘的结构

image.png

  • 需要把 “磁头” 移动到想要读 / 写的扇区所在的磁道。 磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读 / 写操作

image.png

磁盘调度算法🌟

image.png

先来先服务 (FCFS)

image.png

最短寻找时间优先 (SSTF)

image.png

扫描算法 (SCAN)

image.png

  • 若题目中无特别说明, 则 SCAN 就是 LOOK

image.png

循环扫描算法 (C-SCAN)

image.png

  • 若题目中无特别说明,C-SCAN 就是 C-LOOK

image.png

小结

image.png

减少延迟时间的方法

  • 磁头读入一个扇区数据后需要一小段时间处理, 如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的 “延迟时间”

    交替编号

    image.png

  • 采用交替编号的策略,让逻辑上相邻的扇区物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小

    错位命名

    image.png

  • 采用错位命名法, 读取完磁盘块 (000, 00, 111)之后, 还有一段时间处理, 当(000, 01, 000) 第一次划过 1 号盘面的磁头下方时,就可以直接读取数据。从而减少了延迟时间

    磁盘地址结构的设计

    image.png

  • 第一圈读到 0、1、2、3 扇区的数据 (物理上有一定的间隔)

  • 第二圈读到 4、5、6、7 扇区的数据 (物理上有一定的间隔)

image.png

  • 读取地址连续的磁盘块时,采用(柱面号, 盘面号,扇区号)的地址结构可以减少磁头移动消耗的时间

    小结

    image.png

    磁盘的管理

    磁盘初始化

    image.png

    引导块

    image.png

    坏块的管理

    image.png

    小结

    image.png