操作系统学习笔记(十三)-- 输入输出系统

最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助。同时盼望大家能对文章评论,大家一起多多交流,共同进步!

本文主要分以下几个方面:

  • I/O硬件
  • 应用于I/O的接口
  • 内核I/O子系统

I/O硬件:

相关概念:控制器(controller),总线(bus),端口(port)

设备均有地址,用于:

  • I/O直接指令
  • 控制器信息映射到内存 Memory-mapped I/O

控制器寄存器,一般包含四个寄存器:

  • Data-in:暂时存放读入数据,写入CPU
  • Data-out:存储到外设的数据
  • Status
  • Control

CPU控制外设读写的方式:

1. 轮循方式 Polling

  • 检查设备的状态:就绪(command-ready),忙碌(busy),出错(error)
  • 会造成CPU对外设的忙等(busy-waiting)

2. 终端方式 Interrupts

  • CPU有中断请求线(Interrupt-request line),由I/O设备触发
  • 中断处理器接收终端
  • 多数CPU由两类中断请求线:
    • 非屏蔽(nonmaskable)
    • 屏蔽->忽略或延时处理
  • 中断处理可基于优先级,有些中断不可屏蔽
  • 中断的相应处理机制也可用于处理异常(exception),在这里异常类似于trap(自陷)的概念

中断实现的I/O循环:

Direct Memory Access(DMA):

  • 用于大规模数据传输;
  • 需要DMA控制器
  • 在I/O设备和内存间直接传输数据,绕过CPU

使用DMA传输数据的步骤:

  1. 告知设备控制器传输数据的地址
  2. 设备控制器告诉磁盘控制器向缓存中地址为X的空间传输大小为C字节的数据
  3. 磁盘控制器初始化DMA传输
  4. 磁盘控制器按字节向DMA控制器传输
  5. DMA控制器向缓存X传数据,提高内存地址并减小C直到C等于0
  6. 当C=0时,DMA向CPU发出中断请求,完成数据传输

块设备:磁盘,操作包括读,写,查询;

字符型设备:键盘,鼠标,串口,操作包括读(get)和写(put)

内核I/O子系统 Kernal I/O Subsystem

  • Caching 缓存-高速存放数据备份的内存(内存和寄存器之间)
    • 永远都只是拷贝
    • 性能关键
  • Buffering -在设备间传输数据时用来存放数据
    • 用来解决传输速度不匹配问题
    • 用来解决传输数据内容大小不匹配问题
  • Spooling(Simultaneous Peripheral Operation On-Line)
    • 用于保存输入输出设备,如果每个设备智能同时服务一个请求(例如打印机)
    • 将独占型设备改造为可共享的虚设备

组成:

1. 输入井,输出井:用于暂时存放输入和输出数据

2. 工作进程,输出进程

3. 内存的缓存

错误处理:

  • OS可从不同错误状态中恢复
  • 大多数情况返回错误码
  • 会以系统日志的形式记录错误
原文地址:https://www.cnblogs.com/PaulingZhou/p/5404812.html