I/O
I/O硬件原理
设备
块设备: 块设备把信息储存在固定大小的块中, 每个块有哦自己的地址, 传输是以完整的块为单位的. i.e. USB
字符设备: 以字符为单位发送或接收一个字符流, 而不考虑任何块结构. i.e. 打印机, 鼠标
设备控制器
控制器的任务是把串行的位流转换位字节块, 并进行必要的校正工作
DMA - Direct Memory Access
直接储存器读取, 可以把这个理解成IO设备跟CPU的媒介, 或者代替CPU做一部分工作. CPU会对DMA控制器编程, 然后DMA控制负责与IO设备交互, 等到需要的时候再通知CPU传输工作已经完成了
I/O软件原理
目标
做到设备独立性, 可以访问任意的IO设备, 无需事先指定设备.
跟设备独立性相关的是统一命名, i.e. USB可以mount到目录 usr/ast/backup 下, 这样复制一个文件到usr/ast/backup/monday就是将文件复制到USB上
错误处理: 尽量在接近硬件的层面得到处理
缓存: 数据离开设备之后通常不能直接放在最终的目的地, 需要缓存
共享设备和独占设备: 比如磁盘能同时提供多个用户使用是共享设备, 打印机有单个用户使用是独享设备
IO软件层次
用户级别的IO软件 → 设备无关的OS软件 → 设备驱动程序 → 中断处理程序 → 硬件
设备驱动程序的统一接口
目的是为了让IO和驱动程序看起来是相同的, 所以在OS的层面提供一个标准的接口. 当驱动程序装载时, OS记录这张函数指针表地址, 当OS需要调用一个函数时, 通过这张表发出间接调用.
在命名上, 分主设备号和次设备号
小结
IO是一个比较杂的话题, 这里主要总结了最基本的IO的点. IO组织分为4个层次, 中断服务程序, 设备驱动程序, 与设备无关的OS软件和用户IO, 设备驱动程序处理运行设备的细节并向OS其余部分提供统一的接口