IO 设备的基本概念和分类🌟
- 块设备:如磁盘等——数据传输的基本单位是 “块”,传输速率较高,可寻址,即对它可随机地读 / 写任一块
字符设备:鼠标、键盘等——数据传输的基本单位是字符。传输速率较慢,不可寻址,在输入 / 输出时常采用中断驱动方式
IO 控制器
一个 I/O 控制器可能会对应多个设备;
- 数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制 / 状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便 CPU 操作。
- 有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像 I/O
- 另一些计算机则采用 I/O 专用地址,即寄存器独立编址
IO 控制方式🌟
IO 软件层次
- 中间三层属于操作系统的内核部分,即 “IO 系统”,或称 “IO 核心子系统”
- 每一层会利用其下层提供的服务,实现某些功能,并屏蔽实现的具体细节,向高层提供服务(“封装思想”)
- 越上面的层次越接近用户
-
IO 核心子系统
此 I/O 核心子系统要实现的功能其实就是中间三层要实现的功能
IO 调度
I/O 调度:用某种算法确定一个好的顺序来处理各个 I/O 请求
操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)
在 UNIX 系统中,设备被看做是一种特殊的文件,每个设备也会有对应的 FCB。当用户请求访问某个设备时,系统根据 FCB 中记录的信息来判断该用户是否有相应的访问权限,以此实现 “设备保护” 的功能。(参考 “文件保护” 小节)
假脱机技术 (SPOOLing 技术)🌟
注:假脱机技术(SPOOLing 技术)需要请求 “磁盘设备” 的设备独立性软件的服务,因此一般来说假脱机技术是在用户层软件实现的。但是 408 大纲又将假脱机技术归为 “I/O 核心子系统” 的功能,因此考试时还是以大纲为准
“输入进程” 模拟脱机输入时的外围控制机
- “输出进程” 模拟脱机输出时的外围控制机
- 在输入进程的控制下,“输入缓冲区” 用于暂存从输入设备输入的数据,之后再转存到输入井中
- 在输出进程的控制下,“输出缓冲区” 用于暂存从输出井送来的数据,之后再传送到输出设备上
- 注意,输入缓冲区和输出缓冲区是在内存中的缓冲区
- 当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务
- SPOOLing 技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备
设备分配与回收
- 设备的固有属性可分为三种:独占设备、共享设备、虚拟设备
- 独占设备——一个时段只能分配给一个进程(如打印机)
- 共享设备——可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用
- 虚拟设备——采用 SPOOLing 技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用 SPOOLing 技术实现的共享打印机)
- 从进程运行的安全性上考虑,设备分配有两种方式:
- 安全分配方式:为进程分配一个设备后就将进程阻塞,本次 I/O 完成后才将进程唤醒。(eg:考虑进程请求打印机打印输出的例子)
- 一个时段内每个进程只能使用一个设备
- 优点:破坏了 “请求和保持” 条件,不会死锁
- 缺点:对于一个进程来说,CPU 和 I/O 设备只能串行工作
- 不安全分配方式:进程发出 I/O 请求后,系统为其分配 I/O 设备,进程可继续执行,之后还可以发出新的 I/O 请求。只有某个 I/O 请求得不到满足时才将进程阻塞
- 一个进程可以同时使用多个设备
- 优点:进程的计算任务和 I/O 任务可以并行处理,使进程迅速推进
- 缺点:有可能发生死锁(死锁避免、死锁的检测和解除)
- 安全分配方式:为进程分配一个设备后就将进程阻塞,本次 I/O 完成后才将进程唤醒。(eg:考虑进程请求打印机打印输出的例子)
缓冲区管理 (缓冲与高速缓存)🌟
- T>C:块设备输入内存的时间比 CPU 处理数据的时间慢
- 处理一块数据的平均用时 = T+M
- T<C:块设备输入内存的时间比 CPU 处理数据的时间快
- 处理一块数据的平均用时 = C+M
- 综上,采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M
- 假设 T>C+M,处理一块数据的平均用时 = T
- 假设 T<C+M,处理一个数据块平均耗时 = C+M
- 综上,采用双缓冲策略,处理一个数据块的平均耗时为 Max (T, C+M)
磁盘的结构
- 需要把 “磁头” 移动到想要读 / 写的扇区所在的磁道。 磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读 / 写操作
磁盘调度算法🌟
先来先服务 (FCFS)
最短寻找时间优先 (SSTF)
扫描算法 (SCAN)
- 若题目中无特别说明, 则 SCAN 就是 LOOK
循环扫描算法 (C-SCAN)
- 若题目中无特别说明,C-SCAN 就是 C-LOOK
小结
减少延迟时间的方法
磁头读入一个扇区数据后需要一小段时间处理, 如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的 “延迟时间”
交替编号
采用交替编号的策略,让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小
错位命名
采用错位命名法, 读取完磁盘块 (000, 00, 111)之后, 还有一段时间处理, 当(000, 01, 000) 第一次划过 1 号盘面的磁头下方时,就可以直接读取数据。从而减少了延迟时间
磁盘地址结构的设计
第一圈读到 0、1、2、3 扇区的数据 (物理上有一定的间隔)
- 第二圈读到 4、5、6、7 扇区的数据 (物理上有一定的间隔)