设备

  • IO 硬件
    • IO 设备分类
      • 字符设备:以字符为单位传输数据,主要是交互设备。
      • 块设备:以块为单位传输数据。主要是硬盘。
      • 网络通信设备:比字符设备块,比块设备慢。
      • 时钟:按照固定时间间隔产生中断。
    • 设备控制器
      • IO 设备的电子部分,处于 CPU 和 IO 设备之间,控制设备工作。
      • 重要的寄存器:
        • 控制寄存器:接收 CPU 的读写命令。
        • 状态寄存器:保存当前状态。
        • 数据缓存寄存器
      • 数据缓冲区:如 VRAM。
      • 磁盘控制器:
        • 把读的串行的位流组装为字节,存入内部数据缓冲区中形成以字节为单位的块。
        • 对块验证后,再一次一个字节地存入内存。
    • 数据传输的控制方式
      • 程序查询
        • 程序不断轮询设备控制器,需要 CPU 忙等,是串行方式。
      • 中断
        • 向设备控制器发送命令,完成时用中断回调,CPU 和设备并行工作。
      • 直接存储器访问/DMA
        • 允许 DMA 控制地址总线,控制设备缓冲区与内存的数据交换。
        • CPU 只干预开始和结束。
      • 通道
        • 一种专用的 IO 处理器,有自己的指令,通道指令形成通道程序。
        • 字节多路通道:以字节为单位传输数据,可以分时地执行多个通道程序。
          • 用于大量慢速设备。
        • 选择通道:每次传输一批数据,速度快,一段时间只能执行一个通道程序,不能分时。
          • 用于固定头磁盘等。
        • 数组多路通道:
          • 先为一台设备执行通道指令,再为另外一台执行。
          • 同时结合字节多路通道的分时、选择通道的高速。
          • 用于多台活动头磁盘机。
  • IO 软件
    • 层次结构
      • 用户空间的软件
      • 独立于设备的软件
      • 设备驱动程序
      • 中断处理程序
      • 硬件
    • 用户空间的软件
      • 大部分是 OS 提供的,小部分是库函数。
    • 独立于设备的软件
      • 设备命名:把设备符号名映射到具体的驱动程序。
      • 设备保护:把 IO 指令设为特权指令,用系统调用使用设备。
      • 提供设备无关的块尺寸
      • 提供缓冲
      • 分配和调度设备:
        • 分配分为静态分配或动态分配,动态分配利用率高。
        • 设备分为独占、共享、虚拟设备。
        • Spooling 技术用于虚拟设备,利用磁盘空间共享,把对设备的访问缓冲到磁盘上。
      • 错误处理:大部分由设备驱动程序处理。
    • 设备驱动程序
      • 每个设备驱动程序处理一种设备,可以获取设备控制器的情况。
      • 提供一套与文件操作类似的 API。
      • 功能:初始化设备、启动设备传输数据,中断处理。
    • 中断处理程序
      • 进程启动 IO 操作后会被阻塞,IO 完成后产生中断。
      • CPU 响应中断,自动执行中断处理程序。
      • 中断处理程序检查设备状态:
        • 若正常完成,则唤醒进程。检查并启动剩余的 IO 请求。
        • 若出错,则重试,或上报错误。
      • 返回被中断进程继续执行,或转进程调度。
  • IO 类型
    • 同步 IO:进程发起 IO 后必须阻塞等待,IO 完成后继续执行。
    • 异步 IO:无需阻塞等待,IO 完成后通知进程。
      • 通过设置进程地址空间内的某个变量。
      • 通过触发信号或软件中断。
      • 通过回调函数。
  • 磁盘管理
    • 磁盘类型
      • 固定头磁盘:每条磁道都有磁头。
      • 移动头磁盘:只有一个磁头,需要寻道。
    • 访问时间
      • 总访问时间 = 寻道时间 + 旋转延迟时间 + 读写时间。
      • 寻道时间和旋转延迟时间占据主要部分。
    • 调度算法
      • 先来先服务
        • 优点:实现简单,调度公平。
        • 缺点:效率低,磁头移动频繁,完全不考虑队列中的请求。
      • 最短寻道时间优先
        • 总是选择到当前距离最短的一个磁道。
      • 扫描法
        • 磁头不断地在两端之间来回移动,过程中处理各磁道的读写请求。
      • 循环扫描法
        • 磁头从一个端向另外一个端扫描,到达另外一端后立刻移动回去,整体只单向扫描。
      • 查询法
        • 类似扫描法,但是不移动到末端,只移动到当前方向上最远的一个请求磁道。
      • 循环查询法
        • 循环法和查询法的结合。