与外设打交道 的部分。

I/O特征

三种常见设备

  • 字符设备

    串口,鼠标/键盘等

访问特征:以字节为单位顺序访问 i/o命令:get()、put()等,通常使用文件访问接口和语义

  • 块设备
    • 存储设备 如磁盘驱动器、磁带驱动器、光驱等
    • 访问特征
      • 数据块为单位,均匀 数据量大
    • I/O命令
      • 文件系统接口/原始I/O( 提高性能)
      • 内存 映射文件访问
  • 网络设备
    • 与外界打交道 以太网 无线 蓝牙
    • 访问特征
      • 交互复杂 格式化报文交换 协议
    • I/O命令
      • send/receive 网络报文
      • 通过网络接口支持多种网络协议 封装

同步/异步 I/O

cpu 与设备 的交互

  • 阻塞i/o:wait
    • 读数据时,进程将进入等待状态 直到数据读出
    • 写数据,进程进入等待状态 直到设备完成数据写入处理 中断只是在返回的时候处理 图
  • 非阻塞 i/o:don’t wait
    • 立即从read或write系统调用返回,返回值为成功传输字节数。写了后 直接返回
    • read或write的传输字节数可能为0
  • 异步i/o 结合两者 tell me later
    • 读数据时 使用指针标记好用户缓冲区,立即返回;稍后内核将填充缓冲区并通知用户
    • 写数据时,使用指针标记好用户缓冲区,立即返回;稍后内核将处理数据并通知用户

I/O 结构

一个例子

  • 北桥
    • 高速
    • 内存
    • 显卡
  • 南桥
    • i/o设备
    • 各种设备相连
    • 磁盘 网络

cpu 与设备的链接

  • 设备控制器
    • cpu与I/o设备间的接口
    • 向cpu提供特殊指令和寄存器
  • i/o地址
    • cpu用来控制i/o硬件
    • 内存地址或段口号
      • i/o指令
      • 内存映射i/o
  • cpu与设备的三种通信方式
    • 轮询、设备中断和DMA

I/O 指令和内存映射I/O

  • I/O 指令
    • 通过I/O端口号访问设备寄存器
    • 特殊的cpu指令
      • out 0x21
  • 内存映射I/O
    • 设备的寄存器/存储被映射到内存物理地址空间中
    • 通过内存load/store指令完成I/O操作
    • MMU设置映射,硬件跳线或程序在启动时设置地址

i/o系统内核结构

i/o请求生存周期

I/O 数据传输

性能 关注的问题

cpu 与设备控制器的数据传输

  • 程序控制I/O pio - 通过cpu的in/out或load/store传输所有数据
    • 特点
      • 硬件简单,编程容易
      • 消耗的cpu时间和数据量成正比
    • 适用于简单的 小型的设备I/O
  • DMA 直接内存访问
    • 设备控制器可直接访问系统总线
    • 控制器直接与内存互相传输数据
    • 特点
      • 设备传输数据不影响cpu
      • 需要cpu参与设置 开始 结束
      • 适用于高吞吐量i/o

细化到磁盘

设备通知操作系统的机制

操作系统需要了解设备的状态 i/o操作完成时间 I/o操作遇到错误 两种方式 cpu主动轮询 设备中断

轮询

  • i/o设备在特定的状态寄存器中放置状态和错误信息
  • 操作系统定期检测状态寄存器
  • 特点
    • 简单
    • i/o操作频繁或不可预测时,开销大和延时长

设备中断

  • 交互过程
  • 特点
    • 处理不可预测事件效果好

设备中断I/O处理流程

在执行一条指令后检查中断请求


具体的例子 磁盘;提高性能 访问效率 调度和缓存;

磁盘调度

磁盘工作机制和性能参数。

  • 读取或写入时,磁头必须被定位在期望的磁道。并从期望的柱面和扇区的开始
  • 寻道时间
    • 定位到期望磁道所花费的时间
  • 旋转延迟
    • 从零扇区开始处到达目的地花费的时间
  • 平均延迟 转半圈的时间

磁盘 I/O传输时间

寻道+旋转延时+数据传输,主要优化寻道时间,

磁盘调度算法

  • 通过优化磁盘访问请求顺序来提高磁盘访问性能
    • 寻道时间是磁盘访问最耗时的部分
    • 同时会有多个在同一磁盘上的I/O请求
    • 随机处理访问请求性能差

fifo

公平对待所有进程 按顺序处理请求 接近随机访问调度

sstf 最短服务时间优先

  • 选择从磁臂当前位置需要移动最少的I/O请求
  • 总时选择最短寻道时间

scan

  • 磁臂在一个方向移动,访问所有未完成的请求,直到磁臂到达该方向上最后的磁道
  • 调换方向
  • aka 电梯算法 最底到最顶

cscan

循环扫描

  • 仅在一个方向扫描
  • 提高公平性
  • 当最后一个磁道也被访问过了后,磁臂返回到磁盘的另外一端再次进行

clook

  • 只是走到最后一个请求的位置 不是走到头

Nstepscan

n步扫描

  • 磁头粘着现象
    • sstf scan以及cscan等算法中,可能出现磁头停留在某处不动的情况
    • 如:进程反复请求对某一磁道的I/O操作
  • n步扫描算法
    • 将磁盘请求队列分成长度为N的子队列
    • 按FIFO算法依次处理所有子队列
    • 每个队列内部使用扫描算法

fscan

上一个的简化

  • 双队列扫描算法
  • 将磁盘请求队列分成两个子队列
  • 交替使用扫描算法处理一个队列。新生成的磁盘I/O请求放入另一队列中,所有新请求都将被推迟到下一次扫描时处理

磁盘缓存

  • 缓存
    • 数据传输双方访问速度差异较大时,引入的速度匹配中间层
  • 磁盘缓存是磁盘扇区在内存中的缓存区
    • 磁盘缓存的调度算法很类似虚拟存储调度算法倒过来 (利用磁盘存储内存放不下的数据)
    • 磁盘访问频率远低于虚拟存储内存频率
    • 磁盘缓存调度算法会比虚拟存储复杂

单缓存和双缓存

缓冲区1 io设备;缓冲区2 cpu读

访问频率置换算法

思路: