IO设备的概念和分类
IO设备的概念
IO设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件
IO设备的分类
按使用特性分类
人机交互类设备
存储设备
网络通信设备
按传输速率分类
低速设备
中速设备
高速设备
按信息交换单位分类
块设备
字符设备
IO控制
IO控制器
IO控制器的主要功能
接受和识别CPU发出的命令(控制寄存器)
向CPU报告设备的状态(状态寄存器)
数据交换(数据寄存器)
地址识别(由IO逻辑实现)
IO控制器的组成
CPU与控制器之间的接口(实现控制器与CPU之间的通信)
IO逻辑(处理CPU发出的命令,并向设备发出命令)
控制器与设备之间的接口(实现控制器与设备之间的通信)
IO控制器的两种寄存器编址方式
内存映射IO
控制器中的寄存器与内存统一编址,可以采用内存进行操作的指令来对控制器进行操作
寄存器独立编制
控制器中的寄存器独立编址,需要设置专门的指令来操作控制器
IO控制方式
程序直接控制方式
流程:CPU向控制器发出命令,然后不断轮询检查IO控制器的状态寄存器,直到设备准备好数据,CPU将数据读入CPU寄存器,再将CPU寄存器中的内容写到内存中
中断驱动方式
流程:引入中断机制,CPU向控制器发出命令后,就去执行其他指令,每条指令执行结束后CPU都会检查是否有中断信号(每读写一个字IO控制器就会向CPU发送一个中断请求),如果有IO控制器的中断信号,CPU将数据读入CPU寄存器,再将CPU寄存器中的内容写到内存中
DMA方式
流程:CPU指明此次要进行的操作(如:读操作),并说明要读入多少数据、数据要存放在内存的什么位置、数据在外部设备上的地址;控制器会根据CPU提出的要求完成数据的读写工作,整块数据的传输完成后,才向CPU发出中断信号,之后CPU对中断信号进行处理
通道控制方式
流程:CPU向通道发出IO指令,指明通道程序在内存中的位置,并指明要操作的是哪个IO设备,之后CPU就去执行其他指令;通道执行内存中的通道程序;通道执行完规定的任务后,向CPU发出中断信号,之后CPU对中断信号进行处理

IO软件层次结构

用户层软件:实现了与用户交互的接口,使用设备独立性软件向上提供的系统调用,向上层用户提供跟方便的库函数
设备独立性软件:向上层提供统一的调用接口;实现设备的保护;差错处理;设备的分配与回收;数据缓冲区管理;建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序
设备驱动程序:主要负责对硬件设备的具体控制
中断处理程序:当IO任务完成时,IO控制器会发送一个中断信号,系统会根据中断信号类型找到对应的中断处理程序并执行
硬件:IO控制器部分
输入/输出应用程序接口

阻塞IO:应用程序发出IO系统调用,进程需转为阻塞态等待
非阻塞IO:应用程序发出IO系统调用,系统调用可迅速返回,进程无需阻塞等待
设备驱动程序接口
操作系统规定好设备驱动程序的接口标准,各厂商必须按照要求开发设备驱动程序
IO核心子系统
IO核心子系统要实现的功能其实就是:设备独立性软件、设备驱动程序、中断处理程序三层要实现的功能;这些功能有:假脱机技术(SPOOLing技术)、IO调度、设备的分配与回收、缓冲区管理
假脱机技术
脱机技术
外围控制机+更高速的设备(磁带)
缓解了设备与CPUde速度矛盾,实现预输入、缓输出
假脱机技术
用软件的方式模拟脱机技术
输入井和输出井:模拟脱机输入输出时的磁带
输入进程和输出进程:模拟脱机输入输出时的外围控制机
输入缓冲区和输出缓冲区:内存中的缓冲区,输入输出时的中转站
共享打印机
用SPOOLing技术将独占式的打印机“虚拟”成共享打印机
设备的分配与回收
静态分配与动态分配
静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
动态分配:进程运行过程中动态申请设备资源
设备分配中的数据结构
设备控制表(DCT):每个设备对应一张DCT,关键字段:类型/标识符/状态/指向COCT的指针/等待队列指针
控制器控制表(COCT):每个控制器对应一张COCT,关键字段:状态/指向CHCT的指针/等待队列指针
通道控制表(CHCT):每个通道对应一张CHCT,关键字段:状态/等待队列指针
系统设备表(SDT):记录整个系统中所有设备的情况,每个设备对应一个表目,关键字段:设备类型/标识符/DCT/驱动程序入口
缓冲区管理
缓冲区的概念:利用内存作为缓冲区,缓解CPU与设备的速度矛盾、减少对CPU的中断频率、解决数据粒度不匹配的问题、提高CPU与IO设备之间的并行性
单缓冲
过程:设备 --> 缓冲区 --> 工作区 --> 处理
双缓冲
系统会在主存中为进程分配两个缓冲区
循环缓冲
将多个大小相等的缓冲区链接成一个循环队列
缓冲池
由系统中共用的缓冲区组成。可以按照使用状况分为:空缓冲队列、输入队列、输出队列
IO调度(主要介绍磁盘的调度)
磁盘的调度算法
先来先服务
按照访问请求到达的先后顺序进行处理
最短寻找时间优先
贪心算法的思想,能保证眼前最优,但不能保证总的寻道时间最短,每次都优先相应距离磁头最近的磁道的访问请求(可能会导致饥饿)
扫描算法
只有磁头移动到最边缘磁道时才可以改变磁头移动方向(对各个位置的磁道相应频率不均,中间多,两边少)
循环扫描算法
只有磁头朝某个方向移动时才会相应请求,移动到边缘后立即让磁头返回起点,返回途中不响应任何请求
LOOK算法
扫描算法的改进,只要磁头移动方向上不再有请求,就立刻改变磁头方向
C-LOOK算法
C-SCAN算法的改进,只要磁头移动方向上不再有请求,就立刻让磁头返回
减少延迟时间的方法
交替编号
由于磁盘在读取完一个扇区后需要一段时间处理才能继续读入下一个扇区
方案:让编号相邻的扇区在物理上不相邻
错位命名
由于磁盘在读取完一个扇区后需要一段时间处理才能继续读入下一个扇区
方案:让相邻盘面的扇区编号“错位”
磁盘地址结构的设计
地址结构:(柱面号,盘面号,扇区号)
在读取地址连续的磁盘块时,这种结构更不需要移动磁头