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传送过程中,当处理器须要訪问总线时处理器的运行速度会变慢。

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

    
  • 相关阅读:
    vue+element-ui中的表单验证(电话等等)
    什么是 RegExp?
    C中的指针和字符串
    getchar与scanf区别
    回显程序
    Python基础之容器1----字符串和列表
    Python基础之语句2
    Python基础之语句1
    Python基础之数据基本运算
    python初识
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5160728.html
Copyright © 2011-2022 走看看