目录
5.2 I/O软件原理
5.2.1 I/O软件的目标
-
统一命名
文件或设备名称是字符串或证书,不依赖具体机器
-
设备独立性
程序可以访问任何I/O设备,无序提前指定
-
同步和异步传输
同步传输(即阻塞):程序等待I/O操作完成
异步传输(即中断驱动):程序继续执行,I/O完成后通过中断通知
-
Buffering
设备产生的数据无法直接存放到目标内存,需要暂存到缓冲区
-
错误处理
尽可能在接近硬件的层面处理
-
共享设备和独占设备
共享设备:磁盘能同时让多个用户使用
独占设备:磁带机必须由单个用户独占使用
5.2.2 程序控制I/O
-
CPU直接控制I/O直到I/O完成
-
适用于单进程系统(MS-DOS、嵌入式系统(Embedded systems)
-
不适用于多道程序设计和分时系统
-
-
轮询/忙等
-
CPU不断检查设备状态寄存器来检测设备是否准备就绪
-
三种状态
-
Ready
-
Busy
-
Error
-
-
缺点:CPU浪费(CPU需处于忙等来等待I/O)
-
5.2.3 中断驱动I/O
-
CPU在发送第一个字符后,不再轮询等待,而是打印机READY时会发送硬件中断,再让CPU处理
-
缺点:每次字符输入都会发生中断
5.2.4 使用DMA的I/O
-
DMA控制器会把内核缓冲区的字符串输给打印机控制器,CPU不参与这个过程
-
传输完整个缓冲区(字符串),CPU才会被再次中断
5.3 ⭐I/O软件层次
5.3.1 中断处理程序
-
最好隐藏中断处理程序
-
把启动一个I/O操作的驱动程序阻塞,直至I/O操作完成并产生一个中断
-
如何阻塞驱动程序
-
在一个信号量上执行down
-
在一个条件变量上执行wait
-
在一个消息上执行receive
-
-
-
中断处理程序的位置由中断向量确定
-
中断处理流程
-
硬件
-
发出中断
-
处理器执行完当前指令
-
处理器发出中断确认信号
-
处理器将PSW和PC推入控制栈
-
处理器根据中断加载新PC值
-
-
软件
-
保存剩余进程状态信息
-
进程中断
-
恢复进程状态信息
-
恢复旧的PSW和PC
-
-
-
软件中的具体步骤
-
保存没被中断硬件保存的所有寄存器
-
为中断服务过程设置上下文,如TLB、MMU和页表
-
为中断服务过程设置堆栈
-
确认中断控制器,重启中断
-
将寄存器从它们被保存的地方复制到进程表
-
运行中断服务进程
-
选择下一次运行哪个进程
-
为下一次要运行的进程设置MMU上下文
-
装入新进程的寄存器
-
开始运行新进程
-
5.3.2 ⭐设备驱动程序(Device Driver)
-
用来控制I/O设备的特定代码
-
Device driver的逻辑定位
用户程序 -> 操作系统的其余部分 -> Device driver -> 总线 -> Device controller -> Device
-
功能
-
接收OS抽象的读/写请求
-
初始化设备
-
发送硬件命令
-
请求队列管理
-
错误处理
-
-
分类
-
块设备驱动程序:磁盘
-
字符设备驱动程序:键盘和打印机
-
5.3.3 ⭐Device-Independent的OS软件
功能
-
Device driver的统一接口
-
好处
-
驱动开发者知道驱动程序接口是什么样
-
操作系统开发者能基于接口编写device-independent的I/O功能
-
-
解决给I/O设备命名(以Unix为例)
-
设备被抽象为特殊文件,需要通过系统调用(如read()等)访问
-
文件名与每个设备关联,并确定一个包含主设备号和次设备号的i节点
-
主设备号:定位驱动程序
-
次设备号:作为参数传递给驱动程序,以指定读/写的单元(区分同一驱动的不同设备)
-
-
通常的文件保护规则也适用于I/O设备
-
-
-
缓冲
-
错误报告
处理层级
-
Device-controller
如校验错误
-
Device driver
如无法读取磁盘
-
Device-independent的OS软件层
-
编程错误(写入只读设备)
-
实际的I/O错误(摄像头关机)
-
-
-
分配与释放专用设备
不允许并发访问
-
提供device-independent块大小
不同磁盘扇区大小可能不同,应由device-independent软件隐藏并向高层提供统一块大小
5.3.4 功能
-
封装系统调用
-
格式化I/O处理(如printf())
-
假脱机管理
5.3.5 总结
流程(双向)
-
I/O请求
-
用户进程
-
Device-independent软件
-
Device driver
-
中断处理
-
硬件
-
响应
5.4 Disks
5.4.1 盘硬件
-
柱面(cylinder)->磁道(track)->扇区(sector)
-
扇区通常512B
-
磁盘可能有多个环带
-
因为本来每个磁道扇区数相同,越外圈每个扇区越大,会造成浪费。所以在外面的磁道有更多扇区
5.4.2 磁盘格式化
-
磁盘使用前要先进行低格式化和高格式化
-
低格式化
-
将磁盘分为磁盘控制器可读写的扇区
-
由供应商完成
-
磁道格式化方式
-
分为由
inter-sector-gap间隔的扇区 -
扇区格式:
前导码+数据+校验码
-
-
-
-
⭐柱面斜进(cylinder skew)
-
当磁盘读取完一个磁道,磁头需要移动到下一个磁道。在移动过程中,盘面一直在旋转,为保证磁头能从本磁道的末尾恰好移动至下一磁道开头,就需要柱面斜进
-
目的:改进性能,让磁盘在一次连续的操作中读取多个磁道而不丢失数据
-
例:How much cylinder skew is needed for a 7200-RPM disk with a track-to-track seek time of 1 msec? The disk has 200 sectors of 512 bytes each on each track.
7200转/分钟=0.12转/毫秒,磁道间寻道的这1毫秒期间,盘面会转过200*0.12=24个扇区。所以答案是24
-
-
扇区交错(interleaving)
-
若磁盘控制器只有一个扇区buffer,当一个扇区数据从硬盘传输至buffer后,需要把buffer数据拷贝至内存。此期间磁头将越过下一个扇区起始位置,因此下一个逻辑扇区不应是相邻的物理扇区,所以山区要交错排列
-
复制快可用单交错,复制慢可用双交错
-
5.4.3 ⭐磁盘臂调度算法
-
决定读写磁盘块时间的因素
-
寻道时间
磁盘臂移动至适当柱面的时间
-
旋转延迟
等待适当扇区旋转到磁头下所需时间
-
实际数据传输时间
-
-
⭐FCFS
-
⭐Shortest Seek First(SSF)
-
⭐Elevator Algorithm

1万+

被折叠的 条评论
为什么被折叠?



