应用程序I/O接口

- 讲述了应用程序如何在不知道磁盘类型的情况下打开文件。这是因为设备驱动层隐藏了不同I/O控制器之间的差异,并提供了标准化的接口。
- I/O系统调用将设备行为封装在通用类中,使得新设备如果使用已实现的协议,就不需要额外的工作。
- 每个操作系统都有其自己的I/O子系统结构和设备驱动框架。

设备在多个维度上有所不同,如数据传输模式(字符流或块)、访问方式(顺序或随机访问)、传输调度(同步或异步)、共享性(共享或独占)、操作速度、I/O方向(读写、只读、只写)。


展示了操作系统内核中的I/O子系统如何组织。内核I/O子系统位于软件和硬件之间,通过设备驱动程序(如SCSI、键盘、鼠标、PCI总线、软盘、ATAPI设备驱动程序)来管理和控制对应的硬件设备。
- 列出了I/O设备的不同特征及其变化,例如数据传输模式可以是字符或块模式,访问方法可以是顺序或随机访问等。
- 这些特征有助于区分设备的行为,并在设计操作系统I/O子系统时需要考虑这些差异。
举例子
Block and character device块设备和字符设备

- 块设备支持访问磁盘驱动器和其他基于块的设备,支持的命令包括read write seek。应用程序通常通过文件系统接口访问这些设备。
- Raw I/O:操作系统或特定应用程序可能更倾向于将块设备视为简单的线性块数组来访问。
- Direct I/O:操作系统允许文件操作模式绕过缓冲机制。
- 内存映射文件访问:提供通过主内存中的字节数组来访问磁盘存储的方式。

字符设备包括键盘、鼠标、串口等,其命令包括get()、put()等。
Network device