IO 管理
Q: I/O 设备采用统一编址时, I/O 设备地址与内存地址需要满足什么关系?
A: I/O 设备的地址与存储器的地址不能有重叠, 它们位于同一地址空间.
Q: I/O 设备采用独立编址时, I/O 设备地址与内存地址需要满足什么关系?
A: I/O 设备的地址与存储器的地址可以有重叠, 它们位于不同的地址空间.
Q: 能够使用访存指令访问独立编址的 IO 设备吗? 为什么?
A: 不可以
独立编址, 导致 IO 设备的地址可能与存储器地址相同 (不论是按字节编址还是按其他方式编址)
需要 IO 设备访问指令才行
Q: I/O 软件的层次结构从上到下分为哪四层?
A: 1. 用户层软件
2. 设备无关性软件 (设备独立性软件)
3. 设备驱动程序
4. 中断处理程序
I/O 软件层次结构中的用户层软件主要提供了什么功能?
{与用户交互的接口}
用户可以直接调用在用户层提供的库函数, 对设备进行操作.
I/O 软件层次结构中的设备无关性软件主要提供了什么功能?
- 设备的统一命名
- 设备保护
- 提供统一的块大小
- 缓冲管理
- 存储设备的块分配
- 实现逻辑设备到物理设备的映射
I/O 软件层次结构中的设备驱动程序主要负责什么?
{具体物理设备的控制}, 如设置设备寄存器, 检查设备状态, 读写设备等.
{设备初始化}
Q: I/O 软件层次结构, 谁来负责向硬件传递参数?
A: 设备驱动程序
设备驱动程序是操作系统与 I/O 设备之间的唯一接口
所有涉及到硬件的操作都有设备驱动程序负责
Q: I/O 软件层次结构中的中断处理程序主要负责什么?
A: - 在 I/O 操作完成后, 负责进行中断处理.
- 例如, 将 CPU 从等待状态唤醒.
Q: 如果用户程序发出磁盘设备的 IO 请求, 由谁来计算数据所在磁盘的柱面号, 磁头号, 扇区号?

A: 设备驱动程序
Q: 为什么三种不同的 I/O 控制方式, 设备驱动程序的代码不同?
A: 如果硬件只支持程序驱动方式,驱动程序的读写函数内部就会有一个循环,不断查询设备的状态寄存器。
如果硬件使用中断驱动方式,驱动程序就必须包含中断服务例程(ISR)来处理中断。
如果硬件支持 DMA 方式,驱动程序就需要负责设置 DMA 控制器(如源地址、目标地址、传输长度等),并在 DMA 传输完成后处理相应的中断。
Q: 在块设备输入时, 若采用单缓冲策略, 已知数据输入到缓冲区的时间为 T, 数据从缓冲区传送到工作区的时间为 M, CPU 处理数据的时间为 C, 则系统处理一
块数据的平均耗时是多少?
A: Max(C, T) + M
Q: 在块设备输入时, 若采用双缓冲策略, 已知数据输入到缓冲区的时间为 T, 数据从缓冲区传送到工作区的时间为 M, CPU 处理数据的时间为 C, 则系统处理一块数据的平均耗时是多少?
A: Max(C + M, T)
什么是 SPOOLing (假脱机) 技术?
SPOOLing (Simultaneous Peripheral Operations On-Line) 技术是一种用空间换时间的策略, 它在磁盘上开辟出输入井和输出井, 将 IO 操作变为“逻辑上的”设备操作.
- 输入过程: 输入设备的数据先送到磁盘的输入井, 当 CPU 需要数据时, 直接从输入井读取.
- 输出过程: CPU 的输出数据先送到磁盘的输出井, 待输出设备空闲时, 再从输出井将数据传给设备.
SPOOLing (假脱机) 技术在{磁盘}上开辟出输入井和输出井
使用了假脱机技术之后,设备输入的数据存储在{输入井},CPU输出的数据存储在{输出井}
Q: 程序员利用系统调用打开 I/O 设备时, 通常使用的设备标识是
逻辑设备名还是物理设备名
A: 逻辑设备
一般由设备独立性软件进行逻辑设备名到是物理设备名的映射
Q: 引入磁盘缓冲区 (Disk Buffer) 最主要的目的 (首要目的) 是什么?
A: 减少磁盘 I/O 的次数
经常访问的磁盘内容会被保存在磁盘缓冲区中
磁盘管理
Q: 一次磁盘的读/写操作所花费的时间由哪三部分组成?
A: 1. 寻道时间 (Seek Time)
2. 旋转延迟时间 (Rotational Latency)
3. 传输时间 (Transfer Time)
Q: 若磁盘转速为 r (转/秒), 则平均旋转延迟时间是多少?
A:
Q: 什么是短寻道时间优先 (SSTF) 算法?
A: 对于一个寻道序列, 每次选择调度的是与当前磁头最近的磁道, 使每次的寻道时间最短
Q: 短寻道时间优先 (SSTF) 算法会有饥饿问题吗?
A: 会的
可能一直在磁道的某片扇区来回寻道, 其他磁道产生饥饿
Q: 什么是扫描 (SCAN) 算法
A: 只有磁头移动到最外侧磁道时才能向内移动, 移动到最内侧磁道时才能向外移动
Q: 循环扫描 (Circular SCAN, C-SCAN) 算法与扫描 (SCAN) 算法的区别
A: 扫描: 来回移动
循环扫描: 单向移动, 例如只能从最外到最里
Q: SCAN 算法有什么缺点, 需要提出 Circular SCAN 算法来弥补?
A: SCAN 算法对最近扫描过的区域不公平
例如, 磁道宽为 100, 此时正从 75 向 100 移动.
此时刻同时出现了对于 50,60,70,80,90,100 的访问请求
处理的次序为 80,90,100,70,60,50
最近扫描过的区域响应最晚
Q: SCAN, C-SCAN 与 LOOK, C-LOOK 的区别
A: SCAN, C-SCAN 扫描到磁盘最边缘磁道
LOOK, C-LOOK 扫描到访问序列最边缘磁道
Q: 什么是磁头臂黏着?
A: 一直有对某个磁道的访问请求, 磁头一直留在该磁道
Q: 在 FCFS, SSTF, SCAN, C-SCAN, LOOK, C-LOOK 等磁盘调度算法中, 哪种算法不会导致磁道饥饿 (磁头臂黏着) 现象? 为什么?
A: FCFS (先来先服务) 算法不会导致饥饿.
原因: FCFS 根据请求到达的先后顺序进行调度, 每个请求最终都会被处理, 其等待时间是可预期的.
而其他算法 (SSTF, SCAN 等) 都涉及对磁道位置的优化, 如果不断有对某个或某片区域的磁道发出请求, 可能导致离该区域较远的请求长时间得不到服务, 从而产生饥饿.