第十三章 I/O输入系统
使用昂贵的通用处理器来观察状态位并按字节来向控制器寄存器送入数据的过程称为程序控制I/O(Programmed I/O,PIO)。
计算机未来避免使用PIO增加CPU的负担,将一部分任务下放给一个专用处理器,称之为直接访问内存(DMA)控制器。
采用缓冲有三个理由:
处理数据流的生产者与消费者之间的速度差异。
协调传输数据大小不一致的设备。
支持应用程序I/O的复制语义。
<注>高速缓存cache和缓冲buffer是两个不同功能。
13.3
a.用于图形用户界面的鼠标
在进行更高优先级的操作时,可能需要缓冲来记录鼠标移动。假脱机和缓存是不合适的。中断驱动的I/O是最合适的。
b.多任务操作系统的磁带驱动器(假设并没有设备预分配)
缓冲可能需要管理磁带驱动器与I/O源或目的地之间的吞吐量差异,缓存可用于保存主流在磁带上的数据副本,以便更快地访问。假脱机可以用来筹划数据的装置时,多个用户想读或想写它。中断驱动I/O可能允许最佳的性能。
c.包含用户文件的磁盘驱动器
缓冲可以用来在从用户空间到磁盘的过程中保存数据,反之亦然。缓存可用于保存磁盘驻留数据以提高性能。假脱机是不必要的因为磁盘是共享接入设备。中断驱动I/O是最好的设备,如磁盘,在慢的速率传输数据。
d.能直接与总线相连且可以通过内存映射I/O访问的图形卡
可能需要缓冲来控制多个访问和性能(在显示当前屏幕时,可以使用双缓冲来保存下一个屏幕图像)。缓存和缓冲,不必要由于快速的设备访问和共享性。轮询和中断只对输入和I/O完成检测有用,对于内存映射设备,这两种检测都不需要。
6.
非阻塞IO:
用户接口:用来接收键盘和鼠标输入的同时还要处理并在屏幕上显示数据。
视频应用程序:用来从磁盘读取帧,同时解压并在显示器显示输出。
网络socket的select()系统调用:如果参数(用来描述最大等待时间)为0,应用程序可以轮流检测网络活动而无需阻塞。
阻塞IO:
当进程只等待一件特定事件时:应用程序从磁带、磁盘或者键盘读取数据。
原因:
非阻塞IO对于程序员来说难以实现,因为IO发生时需要异步交会。并且忙等待比中断驱动IO效率低,所以整个系统性能会下降。
9.11.
devicedriver
设备驱动程序为IO子系统提供了统一设备访问接口,就像系统调用为应用程序与操作系统之间提供了统一的标准接口一样。
Buffer、cache之概念以及引入它们的原因
Buffer:用来保存两个设备之间或在设备和应用程序之间所传输数据的内存区域。
引入缓冲的理由:
处理数据的产生着与消费者之间的速度差异
协调传输数据大小不一致的设备
支持应用程序IO的复制语义
Cache:可以保留数据副本的高速存储器。
引入cache理由:
高速缓冲区副本的访问要比原始数据访问更为高效。
I/Ois a major factor in system performance,why?
①执行设备驱动、内核I/O代码对CPU有大量需求
②上下文切换造成造成中断(随着进程阻塞变化而公平且有效地调度进程)
进程访问I/O设备时,只是进程频繁由执行进入阻塞状态,以及阻塞进入就绪
进程访问I/O设备时,核心频繁相应中断并处理中断
导致上下文切换比较频繁
③数据复制(在控制器和物理内存之间,以及应用程序数据空间和内核缓存区之间可以加载内存总线)
④网络传输导致高上下文切换率
Howto improve I/O subsystem performance?
①减少上下文切换的次数
②减少设备和应用程序之间传递数据时在内存之间的数据复制次数
③通过使用大传输、智能控制器、轮训(如果使忙等待最小化),以减少中断频率
④通过采用DMA智能控制器和通道来为主CPU承担简单数据复制,以增加并发
⑤将处理原语移入硬件,允许控制器内的操作与CPU和总线内的操作并发
⑥平衡CPU、内存子系统、总线和I/O的性能,这是因为任何一处的过载都会引起其他部分空闲
几种I/O控制方式之比较
I/O设备的保护
通过发出非法I/O指令,用户进程可能有意或无意地中断系统的正常操作。
定义所有I/O指令为特权指令
I/O必须通过系统调用来进行
内存映射和I/O端口内存位置同样受到保护
设备的分类
SPOOLing的组成、思想;
输入井与输出井
输入缓冲区与输出缓冲区(buffer)
输入进程与输出进程
请求输出队列
SPOOLing技术利用一台可共享的、高速大容量的块设备(通常是硬盘)来模拟独享设备的操作,使一台独享设备变为多台可并行使用的虚拟设备,即把独享设备变为逻辑上的共享设备;
类似于分时技术将一个CPU映射为多个CPU
给人的感觉就像是系统具有速度非常高的I/O设备;(如Printer)