zoukankan      html  css  js  c++  java
  • I/O操作技术

    

    I/O操作有三种可能的技术:可编程I/O、中断驱动I/O、直接内存存取(DMA

    1. 可编程I/O

      当处理器正在运行程序并遇到一个与I/O相关的指令时,它通过给对应的I/O模块发命令来运行这个指令。使用可编程I/O操作时,I/O模块运行请求的动作并设置I/O状态寄存器中对应的位,它并不进一步通知处理器,尤其是它并不中断处理器。

      因此处理器在运行I/O指令后,还要定期检查I/O模块的状态,以确定I/O操作是否已经完毕。

      假设使用这样的技术,处理器负责从内存中提取数据以用于输出,并在内存中保存数据以用于输入。I/O软件应该设计为由处理器运行直接控制I/O操作的指令。包含检測设备状态、发送读命令或写命令和传送数据,因此指令集中包含下面几类I/O指令:

      控制:用于激活外部设备。并告诉它做什么。

      状态:用于測试与I/O模块及其外围设备相关的各种状态条件。

      传送:用于在存储器寄存器和外部设备间读数据或写数据。

      缺点:这是一个耗时的处理,处理器总是处于没实用的繁忙中。

    2. 中断驱动I/O

      处理器给模块发出I/O命令,然后继续做其它一些实用的工作。当I/O模块准备好与处理器交换数据时,它将打断处理器的运行并请求服务。

      处理器和前面一样运行数据传送,然后恢复处理器曾经的运行过程。

      缺点:因为数据中的每一个字不管从存储器到I/O模块还是从I/O模块到存储器都必须通过处理器处理,这导致中断驱动I/O仍然会花费非常多处理器时间。

    3. 直接内存存取

      对于前面两种形式的I/O。处理器都须要主动干预在存储器和I/O模块之间的数据传送,而且不论什么数据传送都必须全然通过处理器。

      因此前两种I/O形式由双方面固有的缺陷:

      1. I/O传送速度受限于处理器測试设备和提供服务的速度

      2. 处理器忙于管理I/O传送的工作。必须运行非常多指令以完毕I/O传送

        当须要移动大量的数据时,须要使用一种更有效的技术:直接内存存取(DMA)。DMA功能能够由系统总线中一个独立的模块完毕,也能够并入到一个I/O模块中。

    不论採用哪种形式,该技术的工作方式例如以下所看到的:当处理器要读或写一块数据时,它给DMA模块产生一条命令。发送下面信息:

    • 是否请求一次读或写

    • 涉及的I/O设备的地址

    • 開始读或写的存储器单元

    • 须要读或写的字数

      之后处理器继续其他工作。

      处理器把这个操作托付给DMA模块,由该模块负责处理。

      DMA模块直接与存储器交互。传送整个数据块,每次传送一个字(16位系统)。这个过程不须要处理器參与。当传送完毕后,DMA模块发一个中断信号给处理器。因此仅仅有在開始传送和传送结束时处理器才会參与。

      DMA模块须要控制总线以便于存储器进行数据传送。

      因为在总线使用中存在竞争,当处理器须要使用总线时要等待DMA模块。注意,这并非一个中断,处理器没有保存上下文环境去做其它的事情,而是只暂停一个总线周期(在总线上传送一个字的时间(16位系统))。其总的影响是在DMA传送过程中,当处理器须要訪问总线时处理器的运行速度会变慢。

        下面是三种技术的流程图:

    
  • 相关阅读:
    Linux 下的类似Windows下Everything的搜索工具
    windows和linux环境下制作U盘启动盘
    程序调试手段之gdb, vxworks shell
    LeetCode 1021. Remove Outermost Parentheses (删除最外层的括号)
    LeetCode 1047. Remove All Adjacent Duplicates In String (删除字符串中的所有相邻重复项)
    LeetCode 844. Backspace String Compare (比较含退格的字符串)
    LeetCode 860. Lemonade Change (柠檬水找零)
    LeetCode 1221. Split a String in Balanced Strings (分割平衡字符串)
    LeetCode 1046. Last Stone Weight (最后一块石头的重量 )
    LeetCode 746. Min Cost Climbing Stairs (使用最小花费爬楼梯)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5160728.html
Copyright © 2011-2022 走看看