I/O控制的方式分为:
  • 程序直接控制方式(最简单的I/O方式)
                  •    无条件传送:对简单外设定时(同步)进行数据传送
                  •    条件传送:CPU主动查询,直接通过查询程序控制主机和外设的数据交换,也称程序查询或轮询(Polling)方式
I/O设备将自己的状态放到设备控制器中的状态寄存器中,处理器向控制器发送一个I/O命令查询状态寄存器中的特定状态,如果设备未就绪,则重复测试过程,直至设备就绪,执行数据交换。等待I/O操作完成后,才可以继续其它操作。 
“探询”期间,可一直不断查询(独占查询) ,也可定时查询(需保证数据不丢失!)。
特点:(1)处理I/O请求会终止原程序的执行
           (2)CPU需要等待I/O设备就绪
           (3)CPU需要参与数据传送
           (4)CPU和设备只能串行工作,效率低下,适合于慢速设备
           (5)简单、易控制、外围接口控制逻辑少
           (6)查询开销大,CPU等待时出现踏步现象,并非处于停止状态,而在反复执行相同指令等待外设完成,称为忙等待。
例如:sys_write进行字符串打印的程序段大致过程如下:
状态寄存器内特定位为0表示READY,CPU继续等待直到就绪状态为1:打印机控制器的数据缓冲中内容已被取走,现为“空”,可接受新的打印字符。由打印控制器自动设置。
copy_string_to_kernel (strbuf, kernelbuf, n);  // 将字符串复制到内核缓冲区
for (i=; i < n; i++) { // 对于每个打印字符循环执行
while ( printer_status != READY); // 未就绪时,一直等待直到打印机状态为“就绪”
*printer_data_port=kernelbuf[i]; // 向数据端口输出一个字符
*printer_control_port=START; // 发送“启动打印”命令
}
return_to_user ( ); // 返回用户态
打印AL寄存器中的字符:
  • 中断方式
处理器向控制器发出一个I/O命令,启动外设进行第一个数据的I/O操作,然后继续执行后续指令。如果该进程支持异步的I/O(不需要等待I/O完成),后续指令可以仍是该进程中的指令。否则,该进程在这个中断上挂起,处理器执行其他工作。
在CPU执行其他进程的过程中,外设在对应设备控制器的控制下进行数据的I/O操作。控制器检查设备状态,就绪后发起中断,CPU响应中断,转向中断服务程序进行读写操作,CPU在中断服务程序中,再启动随后数据的I/O操作,然后中断返回,回到被打断的进程继续执行。此时,外设和CPU并行工作。
特点:(1)响应中断后会终止原程序的执行
           (2)CPU不需要等待I/O设备就绪
           (3)CPU需要参与数据传送(响应中断后)
           (4)CPU和设备部分并行操作,效率有所提高
           (5)中断服务程序指令比查询程序多,因为有很多额外开销
如图:CPU 在中断服务程序中,再启动随后数据的I/O操作,然后中断返回,回到被打断的进程继续执行。中断响应的过程看作执行了一段中断隐指令:保护断点、关中断、识别中断源
sys_write进行字符串打印的程序段:
copy_string_to_kernel ( strbuf, kernelbuf, n);// 将字符串复制到内核缓冲区
enable_interrupts ( ); // 开中断,允许外设发出中断请求
while ( printer_status != READY); // 等待直到打印机状态为“就绪”
*printer_data_port=kernbuf[i]; // 向数据端口输出第一个字符
*printer_control_port=START; //发送启动打印命令
scheduler ( ); // 阻塞用户进程P,调度其他进程执行
在“字符打印”系统调用服务例程中启动打印机后,它就调用处理器调度程序scheduler来调出其他进程执行,而将用户进程P阻塞。
“字符打印”中断服务程序:
if (n==){
unblock_user ( ); //若字符串打印完,则用户进程P解除阻塞,P进就绪队列
}
else{
*printer_data_port=kernelbuf[i]; //向数据端口输出一个字符
*printer_control_port=START; //发送启动打印命令
n = n-; // 未打印字符数减1
i = i+; // 下一个打印字符指针加1
}
acknowledge_interrupt(); // 中断回答(清除中断请求)
return_from_interrupt(); // 中断返回
sys_write通过系统调用int $0x80调出来;中断服务程序通过中断请求调出来
  • 直接存储器访问(DMA)方式
通过DMA模块来模仿处理器控制主存和设备控制器之间的数据交换(DMA控制器类似中断控制器,也是一种I/O接口)。
采用“请求-响应”方式:每当高速设备准备好数据就进行一次“DMA请求”,DMA控制器接受到DMA请求后,申请总线使用权。
处理器向DMA模块发出I/O命令,处理器继续执行其它工作,DMA模块负责传送全部数据。
适用于:(1)高速设备,如磁盘、光盘等
               (2)成批数据交换,且数据间间隔时间短,一旦启动,数据连续读写
DMA传送结束时,要通过DMA结束中断告知CPU
特点:(1)CPU不会终止原程序的执行
           (2)CPU只在数据传送的开始和结束时参与,与主存进行信息交换时不参与
                 (开始时,CPU需要对DMA模块进行初始化; 结束时,CPU响应中断,但不必保存现场)
DMA方式中的周期窃取:当DMA和CPU同时经总线访问内存时,CPU总是将总线的占有权让给DMA一个或几个主存周期。对延迟CPU与主存的数据交换影响不大,因为:
  1. 数据传送过程是不连续的和不规则的
  2. CPU大部分情况下与Cache进行数据交换,直接访问内存较少。仅在DMA控制器初始化和处理DMA结束中断时介入,在DMA传送过程中不参与,因而CPU用于I/O的开销非常小。
DMA控制器的总线使用优先级比CPU高
通过DMA方式读一个磁盘扇区的例子:
(1)CPU对DMA控制器初始化:将传送方向(读命令)、传送数据个数、磁盘逻辑块号、主存起始地址等参数送到DMA控制器
         发送”启动DMA传送“命令
         CPU送出控制字然后启动磁盘驱动器工作,CPU被操作系统调度执行其它进程。
(2)磁盘控制器读相应的扇区,并由DMA控制器控制总线把数据从磁盘控制器送主存,此时,CPU执行其他进程
(3)当DMA传送结束(计数为0),DMA控制器向CPU发出DMA结束中断请求,要求CPU进行相应的后处理。
例子:采用DMA方式进行字符串输出
//sys_write进行字符串输出的程序段:
copy_string_to_kernel(strbuf, kernelbuf, n); // 将字符串复制到内核缓冲区
initialize_DMA ( ); // 初始化DMA控制器(准备传送参数)
*DMA_control_port=START; // 发送“启动DMA传送”命令
scheduler ( );
// 阻塞用户进程P,调度其他进程执行
DMA控制器接受到“启动”命令后,控制总线进行DMA传送。通常用”周期挪用法“:设备每准备好一个数据,挪用一次”存储周期“,使用一次总线事务进行数据传送,计数器减1。计数器为0时,发送DMA结束中断请求
//DMA结束中断服务程序:
acknowledge_interrupt(); // 中断回答(清除中断请求)
unblock_user ( ); // 用户进程P解除阻塞,进入就绪队列
return_from_interrupt(); // 中断返回
DMA方式与程序中断方式对比:
DMA方式进一步减小了CPU对I/O操作的干预,但每发出一次I/O指令,只能读写一个数据块。若用户希望一次能够读写多个离散数据块,并把它们传送到不同的内存区域,则需要CPU发出多条启动I/O指令及进行多次I/O中断才能完成。
都需进行中断处理,中断控制方式:中断服务程序主要进行从数缓器取数或写数据到数缓器,然后启动外设工作
                                DMA控制方式:中断服务程序进行数据校验等后处理工作
  • I/O通道,又称为通道控制器、I/O处理器
设备控制器包含自身专用的处理器和通道程序。 I/O指令不再由处理器执行,而是存在主存中,由I/O通道所包含的处理器执行,大大减少设备和CPU之间的逻辑联系,把CPU从琐碎的I/O操作中彻底解放出来,实现设备和CPU并行操作、通道之间并行操作、设备之间并行操作,达到提高整个系统效率的目的。
采用处理器、通道、控制器、设备四级连接,实施三级控制:一个CPU可以执行i/O指令连接若干通道(通过处理器、通道共用总线),一个通道可以执行通道命令连接若干控制器(通过下级总线),一个控制器可以发出动作序列连接若干设备
流程:
  1. CPU在遇到I/O请求后,组织通道程序,置通道程序地址字CAW,启动指定通道,通道从CAW获得指定通道程序
  2. 一旦启动成功,通道开始控制I/O设备进行操作, CPU执行其他任务,与通道并行工作
  3. I/O操作完成后,I/O通道发出I/O操作结束中断,CPU停止当前工作,转向处理I/O操作结束事件
带有局部存储器的I/O通道,相当于一台自治的计算机,I/O指令存储在控制器自带的局部存储器中,并由I/O通道所包含的处理器执行,可以控制大量的I/O设备,同时最小化CPU的干涉,常用于交互式终端通信,负责包括控制终端在内的大部分任务。

操作系统-I/O(4)I/O控制方式的更多相关文章

  1. 操作系统:进程管理和IO控制

    一.进程管理 进程管理包括进程控制,进程调度,进程同步与通信,死锁控制四个内容. (一)进程控制 进程是操作系统中运行的基本单位,包括程序段,数据段和进程控制段.操作系统通过进程控制块(PCB)管理进 ...

  2. ZeroMQ接口函数之 :zmq_proxy_steerable – 以STOP/RESUME/TERMINATE控制方式开启内置的ZMQ代理

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...

  3. JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作

    1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...

  4. JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理

    1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ...

  5. RobotFrameWork接口项目分层及通用控制方式

    1. 前言 上一篇文章介绍了在设计接口用例之前应遵守的设计规范,详见<RobotFramework接口设计规范>,当然读者公司的内部规范也不一定非得完全遵循笔者所提到的,适合自己公司内部的 ...

  6. I/O控制方式

    I/O控制方式 在计算机系统中,CPU管理外围设备也有几种类似的方式: 1 程序查询方式 程序查询方式是早期计算机中使用的一种方式.数据在CPU和外围设备之间的传送完全靠计算机程序控制,查询方式的优点 ...

  7. Android——UI和View——控制方式

    控制方式 只用xml实现 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...

  8. 1、 Shiro框架:认证,授权(验权 2. Shiro框架实现权限控制方式:

    1. Shiro框架:认证,授权(验权) a) 认证逻辑:applicationCode—>通过工具类获取subject对象,调用login方法参数令牌信息->安全管理器------> ...

  9. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

随机推荐

  1. 零起点PYTHON机器学习快速入门 PDF |网盘链接下载|

      点击此处进入下载地址 提取码:2wg3 资料简介: 本书采用独创的黑箱模式,MBA案例教学机制,结合一线实战案例,介绍Sklearn人工智能模块库和常用的机器学习算法.书中配备大量图表说明,没有枯 ...

  2. PHP rsort() 函数

    实例 对数组 $cars 中的元素按字母进行降序排序: <?php$cars=array("Volvo","BMW","Toyota" ...

  3. navicat for mysql 连接报错1251的解决方法

    这是因为比较新的mysql版本采用新的保密方式,若要用navicat连接需要改使用到的用户的密码方式:use mysql:ALTER USER 'root'@'localhost' IDENTIFIE ...

  4. vue_shop(基于vue电商管理后台网站)

    vue_shop 目录 vue_shop day01 实现登录功能 项目预开发处理 Login.vue完整代码: 处理步骤: 添加element-ui的表单组件 添加第三方字体: 添加表单验证 导入a ...

  5. SpringCloud服务注册中心

    SpringCloud服务注册中心 Spring Cloud 是一系列框架的有序集合,如服务注册发现.配置中心.消息总线.负载均衡.断路器等,都可以用 Spring Boot 的开发风格做到一键启动和 ...

  6. Taurus.MVC 2.3.4 :WebAPI 文档集成测试功能升级:WebAPI批量自动化测试功能。

    前言: 最近升级了一下Taurus.MVC,现在最新版本是:Taurus.MVC 2.3.4,源码版本和nuget同步. 下面分三个步骤介绍下新版本的WebAPI批量自动化测试功能. 1.启用WebA ...

  7. 手把手教你使用Python网络爬虫获取招聘信息

    1.前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. ...

  8. 15、Java中级进阶 面向对象 继承

    1.何为面向对象 其本质是以建立模型体现出来的抽象思维过程和面向对象的方法(百度百科)是一种编程思维,也是一种思考问题的方式 如何建立面向对象的思维呢?1.先整体,再局部2.先抽象,再具体3.能做什么 ...

  9. 社区观点 | 关于比原链MOV巡查官制度的几点思考

    在ChainNode白皮书解密读书会01期活动中,比原链高级研究员刘秋杉带领大家领读「MOV:下一代去中心跨链 Layer 2 价值交换协议」白皮书,得到了很多粉丝的关注,其中gentledog的读书 ...

  10. [POJ3783]Balls 题解

    题目大意 鹰蛋问题.$ n\(个蛋,\)m\(层楼. 存在一层楼\)E\(,使得\)E\(以及\)E\(以下的楼层鹰蛋都不会摔碎,问最坏情况下最少多少次能够知道\)E$. 非常经典的模型,初看题目根本 ...