IO设备的基本概念和分类🌟
- 块设备:如磁盘等——数据传输的基本单位是“块”,传输速率较高,可寻址,即对它可随机地读/写任一块
- 字符设备:鼠标、键盘等——数据传输的基本单位是字符。传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式
IO控制器
- 一个I/O控制器可能会对应多个设备;
- 数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。
- 有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O
- 另一些计算机则采用I/O专用地址,即寄存器独立编址
IO控制方式🌟
- IO控制方式:用什么样的方式来控制IO设备的数据读/写
程序直接控制方式
中断驱动方式
DMA方式
通道控制方式
IO软件层次
- 中间三层属于操作系统的内核部分,即"IO系统",或称"IO核心子系统"
- 每一层会利用其下层提供的服务,实现某些功能,并屏蔽实现的具体细节,向高层提供服务(“封装思想”)
- 越上面的层次越接近用户
- 越下面的层次越接近硬件
IO核心子系统
- 此I/O核心子系统要实现的功能其实就是中间三层要实现的功能
IO调度
- I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求
- 如:磁盘调度(先来先服务算法、最短寻道优先算法、SCAN算法、C-SCAN算法、LOOK算法、C-LOOK算法)。当多个磁盘I/O请求到来时,用某种调度算法确定满足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扇区的数据(物理上有一定的间隔)
- 读取地址连续的磁盘块时,采用(柱面号, 盘面号,扇区号)的地址结构可以减少磁头移动消耗的时间