操作系统学习笔记: IO设备

参考资料: 《现代操作系统 3th edtion》原书第五章 输入/输出
在 xmind 上记录

一、硬件原理

大致分类

  • 块设备

    • CD-ROM/硬盘/USB
    • 每个块都能独立于其他块而读写
  • 字符设备

    • 以字符为单位发送或接收一个字符流,而不考虑任何块结构
    • 鼠标/打印机
  • 其他设备

    • 时钟

IO设备组成

  • 电子部件

    • 称作设备控制器(device controller)或适配器(adapter)
    • 经常以主板上的芯片的形式出现,或者以插入(PCI)扩展槽中的印刷电路板的形式出现
  • 机械部件

    • 设备本身

控制器与CPU的通信

  • 早期设计

    • 每个控制器有几个寄存器用来与CPU进行通信
    • 一个操作系统可以读写的数据缓冲区
    • 每个控制寄存器被分配一个I/O端口(I/O port)号
  • 内存映射IO

    • 将所有控制寄存器映射到内存空间中

    • 优点

      • 可以用C语言编写, 不涉及汇编
      • 不需要特殊的保护机制来阻止用户进程执行I/O操作
      • 对于内存映射I/O,可以引用内存的每一条指令也可以引用控制寄存器
    • 缺点

      • 需要选择性禁用高速缓存

直接存储器存取

(Direct Memory Access,DMA)

  • 外部设备不通过CPU而直接与系统内存交换数据的接口技术

三、软件原理

设计要点

  • 设备独立性(device independence): 它可以访问任意I/O设备而无需事先指定设备
  • 统一命名(uniform naming):文件名不依赖设备
  • 错误处理(error handling)
  • 同步(synchronous)(即阻塞)和异步(asynchronous)(即中断驱动)传输
  • 缓冲(buffering)
  • 共享设备和独占设备的问题

程序控制IO

  • I/O的最简单形式是让CPU做全部工作,这一方法称为程序控制I/O(programmed I/O)
  • 直到全部I/O完成之前要占用CPU的全部时间

中断驱动IO

  • 在等待时运行其他进程

使用DMA的IO

  • 本质上,DMA是程序控制I/O,只是由DMA控制器而不是主CPU做全部工作

四、I/O软件层次

硬件

中断处理程序

  • 保存没有被中断硬件保存的所有寄存器(包括PSW)
  • 为中断服务过程设置上下文,可能包括设置TLB、MMU和页表
  • 为中断服务过程设置堆栈
  • 应答中断控制器,如果不存在集中的中断控制器,则再次开放中断
  • 将寄存器从它们被保存的地方(可能是某个堆栈)复制到进程表中
  • 运行中断服务过程,从发出中断的设备控制器的寄存器中提取信息
  • 选择下一次运行哪个进程,如果中断导致某个被阻塞的高优先级进程变为就绪,则可能选择它现在就
    运行
  • 为下一次要运行的进程设置MMU上下文,也许还需要设置某个TLB
  • 装入新进程的寄存器,包括其PSW
  • 开始运行新进程

设备驱动程序

  • 每个连接到计算机上的I/O设备都需要某些设备特定的代码来对其进行控制。这样的代码称为设备驱动程序(device driver),它一般由设备的制造商编写并随同设备一起交付
  • 操作系统通常将驱动程序归类于少数的类别之一
  • 大多数操作系统都定义了一个所有块设备都必须支持的标准接口,并且还定义了另一个所有字符设备都必须支持的标准接口

与设备无关的I/O软件

  • 设备驱动程序的统一接口

    • 要求驱动程序提供统一的函数
  • 缓冲

    • 双缓冲

      • 当一个缓冲区正在被复制到用户空间的时候,另一个缓冲区正在收集新的输入
    • 循环缓冲区

      • 它由一个内存区域和两个指针组成,一个指向空闲,一个指向待取走
  • 错误报告

    • 软件要做的事情取决于环境和错误的本质
  • 分配与释放专用设备

  • 与设备无关的块大小

    • 隐藏硬件层面的差异

用户空间的I/O软件

  • scanf/printf

  • 假脱机系统

    • 处理独占I/O设备的一种方法

      • 守护进程
      • 假脱机目录

XMind: ZEN - Trial Version

后记: 关于操作系统的IO设备比较重要的一点应该是DMA,但这也是这篇博客没怎么提到的内容

你可能感兴趣的:(读书笔记)