输入输出管理
0x00 I/O 设备
0x00 分类
按传输速率分类为:
- 低速设备:键盘鼠标
- 中速设备:打印机
- 高速设备:磁带机,磁盘,光盘
按信息交换的单位分类:
- 块设备:数据存储以数据块为单位,如磁盘,传输速率高可寻址,可以进行随机读写
- 字符设备:数据存储的基本单位是字符,如打印机,传输速率低不可寻址,输入输出时采用中断驱动方式
常见的设备及介质:
- CD-ROM 为光盘存储器,强调只读,说其只能写入一次是错误的
- Flash 存储器可以实现随机存取,但其从原理上讲仍为 ROM
ROM 即只读存储器,只能读出不能写入,信息永久保存
0x01 控制方式
-
程序直接控制:每读入一个字,CPU 都要对外设状态进行循环检查,造成了 CPU 资源的极大浪费,且 CPU 与 I/O 设备之间只能串行工作
-
中断驱动方式:允许 I/O 设备打断 CPU 而请求服务,数据中的每个字在存储器和 I/O 控制器之间的传输都必须经过 CPU,仍然会消耗较多的 CPU
-
DMA 方式:基本单位是数据块,所传送的数据直接送入内存,在传送一个或多个块开始和结束时才需要 CPU 干预,在 DMA 控制器下完成
DMA 往往连接高速存储器,其优先级高于中断请求,以防数据丢失。
-
通道控制方式:I/O 通道是指专门负责输入输出的处理机,可以实现 CPU,通道和 I/O 设备之间的并行操作,有效提高整体的利用率,I/O 通道与 CPU 共享内存,没有自己的内存,通道程序放在内存中
CPU 启动通道,不管成功与否,通道都要回答 CPU,通过执行通道程序来实现数据的传送,通道在执行通道程序时与 CPU 并行,当通道完成通道程序的执行时(即数据传送结束时),便产生 I/O 中断向 CPU 报告。
CPU 通过 I/O 指令来控制通道,而不是通过中断,中断服务程序最后一条指令是转移指令。
实例比较:
一个客户(CPU)向裁缝(I/O 设备)订了一批衣服(寻求了一段输入)
- 程序直接控制:裁缝没有客户的联系方式,客户必需每隔一段时间去看看裁缝把衣服做好了没有
- 中断驱动方式:裁缝有客户的联系方式,但是每做完一件,都要给客户打电话去拿,每完成一件都要让客户拿一次,比较耗费客户的时间
- DMA 方式:客户雇了一个秘书,给秘书规定好在什么地方拿,裁缝做完了,就给秘书打电话,秘书到指定的地方拿,每拿到 100 件衣服就像客户汇报一次,当客户跟多个裁缝订了货,一个秘书只对一个裁缝的货负责,大大节省了客户的时间
- 通道方式:赋予了秘书更大的自主权,秘书可以决定把衣服放在哪,同时也可以决定每 100 件还是每 1000 件向客户报告一次,一个秘书可以对多个裁缝负责
0x02 子系统层次结构
- 用户层 IO 软件:大部分运行在操作系统内部,小部分在用户层
- 设备独立性软件:用于实现用户程序与设备驱动器的统一接口,设备命令以及设备保护、设备的分配与释放
- 设备驱动程序:与硬件直接相关
- 中断处理程序:保存被中断进程的 CPU 环境,处理完并回复被中断进程的现场
- 硬件了呗
0x02 I/O 核心子系统
主要服务有:
- I/O 调度:确定一个好的顺序来执行 I/O 请求,因为应用程序给出的系统调用顺序不一定是最优的
- 缓冲与高速缓存
- 磁盘高速缓存:逻辑上属于磁盘,物理上为驻留在内存中的磁盘块,高速缓存中有的磁盘中必然有
- 缓冲区:缓解 CPU 和 I/O 设备之间速度不匹配的矛盾,提高 CPU 与 I/O 设备的并行性,减少中断频率,高速设备与低速设备的通信都要经过缓冲区,
- 设备分配与回收:依据用户的 I/O 请求来分配所需设备
- 独占式使用设备
- 分时式使用设备
- 使用 SPOOLing 方式使用的外部设备,就是假脱机技术,实质上为对 I/O 操作的批处理,以空间换时间
- 假脱机
- 设备保护和差错处理
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Shaoqun Liu's Blog!


