笔记大纲
- I/O硬件和原理
- I/O软件和原理
- I/O层次结构
- I/O设备
1.I/O硬件和原理
1.1 I/O设备
块设备:块设备将数据保存在固定大小的硬件单元中,每个单元有自己的地址,例如硬盘。
字符设备:以字符为单位发送或接受字符流数据,例如打印机、鼠标、键盘、音响。
1.2 设备控制器
- `设备控制器、适配器`:通常集中在主板芯片、PIC插槽形式。
- `机械部件`:设备本身。
1.3 内存映射I/O
内个控制器有几个寄存器用来与CPU通信,通过写入这些寄存器,操作系统可以命令设备收发数据;为了实现CPU与设备控制器通信,操作系统提供了2套方案: 方案一:每个控制器寄存器分配一个I/O端口号,这是一个8位或16位的整数值,I/O端口空间 会受到操作系统保护,用户态程序无法直接访问。 方案二:将所有控制器寄存器映射到内存空间中,寄存器别分配唯一的内存地址,而且不会冲 突,一般将这些寄存器的内存地址靠近内存地址的顶部受到保护。
1.4 直接内存访问/直接存储器存取 DMA
DMA是一种特殊的芯片,它可以控制设备控制器和内存数据交互的数据流,无需CPU干预。
1. CPU通过设置DMA控制器的寄存器,告诉数据需要传送到目的地址、磁盘扇区信息等。
1. DMA控制器负责和I/O控制器进行I/O数据交互。
1. DMA每完成一个数据块,给CPU发出一个中断来通知CPU。
2.I/O软件层次
2.1 中断处理程序
当进程发出中断,中断处理程序将为此需要做一定工作: 1.保存没有被中断硬件保存的所有寄存器 2.为中断服务过程设置上下文信息,包括设置TLB、MMU、页表等信息 3.为中断服务过程设置堆栈 4.应答中断控制器 5.将寄存器从他们的堆栈中拷贝到进程表 6.运行中断服务过程,从发出中断的设备的寄存器中读取中断信息 7.选择下一次需要运行的进程 8.未下一次要运行的进程设置MMU上下文、设置TLB等 9.装入新进程的寄存器 10.开始运行新进程
2.2 设备驱动程序
每个连接到操作系统的I/O设备都需要某些特备特定的代码程序来进行控制,这样的程序称之为设备驱动程序,它一般由设备制造厂商提供,不同的操作系统可能设备驱动程序都不一样,需要单独安装。
2.3 通用块层
对于块设备,为了减少不同块设备之间的差异带来的兼容影响,Linux操作系统提出了通用块层的概念,来管理不同块设备。
功能一:提供统一的块设备访问接口
功能二:为块这边的I/O请求进行调度
- 无调度
- FIFO 先入先出
- 完全公平调度(default):为每个进程维护一个I/O请求队列,按时间片分配请求
- 优先级调度:存在饥饿问题
- 最终期限调度:将读和写的I/O队列分开,提高磁盘吞吐量