zoukankan      html  css  js  c++  java
  • 操作系统学习笔记(十三)-- 输入输出系统

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

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

    • 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可从不同错误状态中恢复
    • 大多数情况返回错误码
    • 会以系统日志的形式记录错误
  • 相关阅读:
    [thinkphp] 是如何输出一个页面的
    [thinkphp] 获取根目录绝对路径
    onethink 插件模板定位
    win7 安全模式开启声音
    百度贴吧楼层评论地址
    第一天问题
    [php] 解析JSON字符串
    NDK编译时两 .so之间调用问题
    CDN问题积累
    C++模板特化
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/5404812.html
Copyright © 2011-2022 走看看