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

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



I/O操作技术的更多相关文章

  1. 《JAVASCRIPT高级程序设计》节点层次和DOM操作技术

    DOM可以将任何HTML和XML文档描绘成一个由多层次节点构成的结构.节点分为几种不同的类型,每种类型分别表示文档中不同的信息,每种类型都继承与Node接口,因此都共同享有一些属性和方法,同时,也拥有 ...

  2. Windows核心编程 第二十章 DLL的高级操作技术

    第2 0章 D L L的高级操作技术 看了下这章的内容,谈不上高级,都是些常用相关,但是还是有一些细节需要注意. 20.1 DLL模块的显式加载和符号链接 如果线程需要调用D L L模块中的函数,那么 ...

  3. DOM之操作技术

    1.1 动态脚本 动态加载的外部JS文件能够立即运行.难点在于如何知道脚本加载完成了?可以通过事件来检测.IE对待<script>元素特殊性,不允许DOM访问其子节点.使用元素的text属 ...

  4. 【PHP对XML文件的操作技术【完整版】】

    无论是c/c++还是java.c#均有对XML文件操作的技术,PHP对XML文件的操作的技术主要有三种: DOM.XPath.SimpleXml. 一.DOM DOM:Document Object ...

  5. 【java】字节码操作技术

    asm.javassist.cglib. 1.asm 比较底层,使用的visitor设计模式. 官网:https://asm.ow2.io/ 2.javassist 官网:http://www.jav ...

  6. DOM操作技术

    1.动态script function loadScript(url) { var script = document.createElement("script"); scrip ...

  7. DOM 操作技术【JavaScript高级程序设计第三版】

    很多时候,DOM 操作都比较简明,因此用JavaScript 生成那些通常原本是用HTML 代码生成的内容并不麻烦.不过,也有一些时候,操作DOM 并不像表面上看起来那么简单.由于浏览器中充斥着隐藏的 ...

  8. JS高程3:DOM-DOM操作技术

    动态脚本 加载外部脚本 方式一,直接写代码: var script = document.createElement("script"); script.type = " ...

  9. DOM操作技术之动态脚本与动态样式(兼容版)

    动态脚本 使用<script>元素可以向页面中插入Javascript代码,一种方式是通过其src特性包含外部文件,另一种方式就是用这个元素本身来包含代码. 而我们要说的动态脚本,指的是在 ...

随机推荐

  1. Python学习之day4

    参考文献:http://www.cnblogs.com/alex3714/articles/5143440.html 迭代器: 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直 ...

  2. (C)单链表

    老师版 #include <stdio.h> #include <stdlib.h> // 定于Node数据类型 struct Node { int data; // 数据域 ...

  3. SQL——表结构或数据的复制

    一.复制表结构及数据到新表 create table new_tb select * from old_tb 二.只复制表结构到新表 create table new_tb select * from ...

  4. chrome developer tool 调试技巧2

    我大概是从 08.09 年从 Firebug 转入 Chrome Developer Tool,一直用到现在,越用越喜欢.我平时调错时常用的功能有: 代码格式化可以将被压缩的代码自动展开 实时代码编辑 ...

  5. java实现电脑远程控制完整源代码(转)

    Java JDK1.4 的Robot对象,该对象可以完成屏幕图像截取操作,控制鼠标,键盘,如此便可以轻而易举地实现远程服务器的控制.本文向大家介绍如何用Java Robot对象实现远程服务器的控制,并 ...

  6. ios7状态栏属性的设置

    /* 状态栏的管理: 1> iOS7之前:UIApplication进行管理 2> iOS7开始:交给对应的控制器去管理 */ // 设置状态栏的样式 - (UIStatusBarStyl ...

  7. python下的web服务器模块

    python下的web服务模块有三种: BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler SimpleHTTPS ...

  8. PHP - __clone 对象克隆

    <?php /** * 此例子解释什么是深克隆. * 克隆学生类. */ class Student { public $name = '张三'; public $age = 12; //所属老 ...

  9. iOS导航条渐变透明

    来源:HelloYeah 链接:http://www.jianshu.com/p/b8b70afeda81 下面这个界面有没有觉得很眼熟.打开你手里的App仔细观察,你会发现很多都有实现这个功能.比如 ...

  10. LINQ简单案例

    1.在visual studio 创建一个解决方案,新建一个控制台程序Kong 2.新建两个类,分别为Master 类和Kongfu类  Master类中包含成员如下,并重写ToString方法 na ...