1 I/O 硬件原理
1.1 I/O 设备
IO设备大致可以分为:块设备和字符设备。
1.2 设备控制器
I/O设备一般有机械部件和电子部件两部分组成。 电子部件称作设备控制器,经常以主板上的芯片的兴衰出现。
1.2内存映射I/O
CPU如何与设备的控制寄存器和数据缓存区进行通信?
方法一: 为每个控制寄存器分配一个I/O端口(I/O port) 方法二: 将所有的控制寄存器映射到内存空间中。 I/O 映射优点:
- 减少控制I/O的开销
- 不需要特殊的保护机制来阻止用户进程进行I/O 操作。
- 可以引用内存的每一条指令也可以引用控制寄存器。
缺点:
- 对一个设备控制寄存器进行高速缓存可能是灾难性的。硬件必须能够针对每个页面有选择性地禁用高速缓存
- 高速内存总线问题。
高速内存总线问题解决方案
- 首先将全部内存引用发送到内存,如果内存相应失败,CPU将尝试其他总线。
- 在内存总线上放置一个探查设备。
- 在内存控制器中对地址进行过滤。
1.4 直接存储器存取
由DMA控制器调控到多个设备的数据传送,而这些数据传送经常是同时发生的。 DMA 控制器包含一个内存地址寄存器,一个字节计数寄存器,和一个或多个控制寄存器。
当磁盘控制器的缓存区满了之后,由DMA控制器请求传送到内存,不在由CPU控制请求传送到内存,这就大大提高了CUP的工作效率
某些DMA 控制器可以以 每次一字模式和块模式操作。
1.5 重温中断
中断向量表 精确中断 将机器留在一个明确的状态的中断,称为精确中断。 特性
- PC(程序计数器)保存在一个已知的地方
- PC所指向的指令之前的所有指令已经完全执行
- PC所指向的指令之后的所有指令都没有执行
- PC所指向的指令的执行状态是已知的。
2. I/O软件原理
2.1 I/O软件的目标
- 设备独立性: 它可以访问任意I/O设备而无需事先指定设备
- 统一命名: 一个文件或一个设备的名字应该是一个简单的字符串或整数,它不应依赖于设备。
- 错误处理:
- 同步和异步传输
- 缓冲: 数据离开一个设备之后通常并不能直接存放到其最终的目的地。
- 共享设备和独占设备
2.2 程序I/O控制
I/O的最简单形式是让CPU做全部工作。 程序控制I/O最根本的方面,就是输出一个字符之后,CPU要不断的查询设备以了解它是否就绪准备接收另一个字符
2.3 中断驱动I/O
这种允许CPU在等待打印机变为就绪的同时做某些其他事情的方式就是使用中断。
2.4 使用DMA的I/O
3. I/O 软件层次
3.1 中断处理程序
当中断发生是,中断处理程序将做它必须要做的全部工作以便对中断进行处理。 处理中断,并选择下一次运行哪个进程
3.2 设备驱动程序
每个链接到计算机上的I/O设备都需要某些设备特定的代码来对其进行控制,这样的代码称为设备驱动程序。
3.3 与设备无关的I/O软件
1. 设备驱动程序的统一接口
是所有设备(例如:磁盘、键盘、打印机等)的统一接口。 对于每一种设备类型,例如磁盘或打印机,操作系统定义一组驱动程序必须支持的函数。
2. 缓冲
a: 对于每个到来的字符,都必须启动用户进程 b: 循环缓冲区
3.错误报告
许多错误是设备特定的并且必须由适当的驱动程序来处理,但是错误处理的框架是设备无关的。 I/O 错误类型:编程错误、实际的I/O错误
4.分配与释放专用设备
5.与设备无关的块大小及字符设备的数据传输大小。
3.4 用户空间的I/O软件
用户层I/O 软件 :库过程 假脱机(spooling) 是多道程序中处理独占I/O设备的一种方法。另一种方法是创建一个特殊进程,称为守护进程,以及一个特殊目录、称为假脱机目录(spooling directory)。
|