约 871 个字 5 张图片 预计阅读时间 4 分钟
Chap 13 | I/O Systems
章节启示录
本章节是OS的第十三章。
1.I/O Hardware¶
More than 200 harddisk manufacturers
-
Common concepts
- Port
- Bus (daisy chain or shared direct access) 总线
- Controller (host adapter)
-
不同的访问方式:
- Special I/O instructions 芯片可以控制一些特定的设备(英特尔)
- Memory-mapped I/O 更为常见,把重要的地址、寄存器(保存一些控制信息和数据)与内存当中的逻辑地址映射起来。
-
典型的总线结构:
-
I/O Port Registers:
- Data-in: read by the host to get input
- Data-out: written by the host to send output
- Status: device status read by the host
- Control: written by the host to start a command or change the mode of a device
有很多种控制方式:
-
Polling:
- host反复读busy bit直到bit清除
- 设置write bit 到comman 此村其,并write a byte到data-out寄存器
- 设置command-ready bit
- 发现command-ready是1
- 通过data-out 寄存器获取byte并执行I/O
- 检查错误,没错误就把busy bit重置
-
Interrupt:
-
Direct Memory Access:可以让cpu以block的大小处理数据(但必须连续),只在DMA发生的前后才参与
- Used to avoid programmed I/O (可编程I/O) for large data movement
- Requires DMA controller
- Bypasses 旁路 CPU to transfer data directly between I/O device and memory
2.Application I/O Interface¶
-
I/O系统调用将设备行为封装在泛型类中,设备驱动层隐藏了内核中I/O控制器之间的差异
-
设备在许多方面都不同
- Character-stream or block 字符流或字符块
- Sequential or random-access 顺序访问或随机访问
- Sharable or dedicated 共享或专用
- Speed of operation 运行速度
- read-write, read only, or write only 读写、只读、只写(显示器,只能给他传数据)
-
A Kernel I/O Structure:通过driver,隐藏了device间的特异性
-
Block and Character Devices:
-
块设备包括磁盘驱动器
- 命令包括读、写、查找
- 原始I/O或文件系统访问
- 内存映射文件访问是可能的
-
字符设备包括键盘、鼠标、串行端口
- 命令包括get、put
- 层叠在上面的库允许行编辑
-
-
Network Devices:比较高速的设备
- 从块和字符变化足够有自己的接口
- Unix和Windows NT/9x/2000包括套接字接口
- 将网络协议与网络操作分离
- 包括服务器的选择功能
- 方法多种多样(pipes、FIFOs、streans、queues、mailboxes)
-
Blocking and Nonblocking I/O
- Blocking - process suspended until I/O completed
- 易于使用和理解
- 不足以满足某些需求
- Nonblocking - I/O call returns as much as available
- 用户界面,数据拷贝(缓冲I/O)
- 通过多线程实现
- 快速返回读取或写入的字节数
- Asynchronous - process runs while I/O executes
- 难以使用
- I/O子系统在I/O完成时发出信号
- Blocking - process suspended until I/O completed
3.Kernel I/O Subsystem¶
-
Scheduling调度
-
一些I/O请求通过每个设备队列排序
例如,磁盘调度
-
有些OS尝试公平
-
-
Buffering:在设备之间传输时将数据存储在内存中
- 处理设备速度不匹配,例如从调制解调器接收数据到磁盘。
- 双缓冲技术
- 处理设备传输大小不匹配,例如网络数据包
- 维护“复制语义”(当write()系统调用指定一个用于存储数据的缓冲区,并在系统调用后修改其内容时)
- 处理设备速度不匹配,例如从调制解调器接收数据到磁盘。
-
Caching:保存数据副本的快速内存
- 永远只是一个副本
- 绩效关键
-
Spooling假脱机:保持设备的输出
- 如果设备一次只能处理一个请求 >例如,印刷
-
Device reservation设备保留:提供对设备的独占访问
- 系统调用分配和回收
- 注意死锁