跳转至

I/O Systems

I/O Hardware

More than 200 harddisk manufacturers

  • Common concepts
    1. Port
    2. Bus (daisy chain or shared direct access) 总线
    3. Controller (host adapter)
  • 不同的访问方式:
    1. Special I/O instructions 芯片可以控制一些特定的设备(英特尔)
    2. Memory-mapped I/O 更为常见,把重要的地址、寄存器(保存一些控制信息和数据)与内存当中的逻辑地址映射起来。
  • 典型的总线结构:
  • I/O Port Registers:
    1. Data-in: read by the host to get input
    2. Data-out: written by the host to send output
    3. Status: device status read by the host
    4. Control: written by the host to start a command or change the mode of a device

有很多种控制方式:

  • Polling:
    1. host反复读busy bit直到bit清除
    2. 设置write bit 到comman 此村其,并write a byte到data-out寄存器
    3. 设置command-ready bit
    4. 发现command-ready是1
    5. 通过data-out 寄存器获取byte并执行I/O
    6. 检查错误,没错误就把busy bit重置
  • Interrupt:
  • Direct Memory Access:可以让cpu以block的大小处理数据(但必须连续),只在DMA发生的前后才参与
    1. Used to avoid programmed I/O (可编程I/O) for large data movement
    2. Requires DMA controller
    3. Bypasses 旁路 CPU to transfer data directly between I/O device and memory

Application I/O Interface

  • I/O系统调用将设备行为封装在泛型类中,设备驱动层隐藏了内核中I/O控制器之间的差异
  • 设备在许多方面都不同
    1. Character-stream or block 字符流或字符块
    2. Sequential or random-access 顺序访问或随机访问
    3. Sharable or dedicated 共享或专用
    4. Speed of operation 运行速度
    5. read-write, read only, or write only 读写、只读、只写(显示器,只能给他传数据)
  • A Kernel I/O Structure:通过driver,隐藏了device间的特异性
  • Block and Character Devices:
    * 块设备包括磁盘驱动器
    1. 命令包括读、写、查找
    2. 原始I/O或文件系统访问
    3. 内存映射文件访问是可能的

    * 字符设备包括键盘、鼠标、串行端口
    1. 命令包括get、put
    2. 层叠在上面的库允许行编辑

  • Network Devices:比较高速的设备
    1. 从块和字符变化足够有自己的接口
    2. Unix和Windows NT/9x/2000包括套接字接口
    1. 将网络协议与网络操作分离
    2. 包括服务器的选择功能
    3. 方法多种多样(pipes、FIFOs、streans、queues、mailboxes)
  • Blocking and Nonblocking I/O
    * Blocking - process suspended until I/O completed
    1. 易于使用和理解
    2. 不足以满足某些需求
    * Nonblocking - I/O call returns as much as available
    1. 用户界面,数据拷贝(缓冲I/O)
    2. 通过多线程实现
    3. 快速返回读取或写入的字节数
    * Asynchronous - process runs while I/O executes
    1. 难以使用
    2. I/O子系统在I/O完成时发出信号

Kernel I/O Subsystem

  • Scheduling调度
    1. 一些I/O请求通过每个设备队列排序
      >例如,磁盘调度
    

    2. 有些OS尝试公平

  • Buffering:在设备之间传输时将数据存储在内存中
    1. 处理设备速度不匹配,例如从调制解调器接收数据到磁盘。
    * 双缓冲技术
    2. 处理设备传输大小不匹配,例如网络数据包
    3. 维护“复制语义”(当write()系统调用指定一个用于存储数据的缓冲区,并在系统调用后修改其内容时)
  • Caching:保存数据副本的快速内存
    1. 永远只是一个副本
    2. 绩效关键
  • Spooling假脱机:保持设备的输出
    * 如果设备一次只能处理一个请求
    >例如,印刷
  • Device reservation设备保留:提供对设备的独占访问
    1. 系统调用分配和回收
    2. 注意死锁