分类
按使用特性分
人机交互类:键盘、鼠标、打印机
存储设备:移动硬盘、光盘
网络通信设备:调制解调器
按速率分
低速设备:键鼠
中速设备:打印机
高速设备:磁盘
按信息交换单位分
块设备:磁盘等以块为单位传输
字符设备:键鼠,以字节为数据传输单位
I/O控制器
用于实现对I/O设备的控制
功能
- 接受和识别CPU发出的命令:控制器中有相应的控制寄存器来存放命令和参数
- 向CPU报告设备的状态:控制器中有相应的状态寄存器,用于记录I/O设备的当前状态
- 数据交换:设置数据寄存器,暂存CPU和设备发来的数据
- 地址识别:区分设备寄存器中的各个寄存器,分别给其设置地址用于区分读写寄存器
组成
I/O控制器可能对应多个设备
数据寄存器、控制寄存器、状态寄存器可能有多个,且有对应地址
若这些寄存器占用内存地址的一部分,称为内存映像I/O
若采用I/O专用地址,即寄存器独立编址
寄存器编址方式
内存映像I/O方便操作,而寄存器独立编制则需要设置专门指令并指明寄存器的地址和控制器的编号
I/O控制方式
程序直接控制方式
- CPU向控制器发出读指令,设置状态寄存器为1
- 轮询检查控制器的状态,直至其为0,表明设备准备好
- 输入设备准备好数据后将数据传入控制器并报告状态
- 控制器将输入数据放到数据寄存器中,并将状态改为0
- 此时控制器的状态为0,CPU会将数据寄存器放到CPU寄存器中,再拷贝到内存中
缺点在CPU和I/O只能串行,CPU处于轮询忙等
中断驱动方式
由于程序直接控制方式CPU利用率低,忙等,提出了中断驱动方式
引入中断机制,在CPU发出指令后,将等待I/O进程阻塞,先切换到别的进程执行
当I/O完成后,控制器向CPU发出一个中断信号,CPU检测到后会保存当前进程的运行环境信息,转去执行中断处理程序处理中断
处理中断时,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。
接着CPU恢复等待I/O的进程的运行环境,然后继续执行
CPU在每个指令周期末尾检查中断,中断处理过程中需要保存、恢复进程的运行环境,频繁发生中断也会降低系统性能
避免了CPU轮询,切换别的进程执行,CPU和I/O并行工作,但每次传输都需要CPU介入,频繁中断会消耗较多CPU时间
DMA方式
中断驱动解决了程序直接控制方式,但每次只能读写一个字会造成CPU频繁切换
DMA直接存储器存取,用于块设备
数据传送单位是块,不再是以字为单位
数据在设备和内存间传送,无需CPU介入
仅当传送开始和结束时才需要CPU干预
CPU指明此次要进行的操作,说明要读入数据的大小、数据存放在内存上的位置、数据在外部设备上的地址
控制器根据CPU提出的要求完成数据的读写工作,整块数据的传输完成后,才向CPU发出中断信号
控制器从设备读取数据也是一个一个字读取并存到DR,DR存满时才放入内存
缺点:CPU每发出一条I/O指令,只能读写一个或多个连续的数据块,如果要读写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,多次中断才能完成
通道控制方式
通道控制是用来解决连续存储问题
CPU告诉通道要执行的任务所在的内存地址,通道去取出任务,做完后发消息给CPU
- CPU向通道发出I/O指令,指明通道程序在内存中的位置,并指明要操作的是哪个I/O设备,之后CPU切换进程
- 通道执行内存中的通道程序,指明要读入写出的数据等
- 通道执行完任务后,向CPU发出中断信号
I/O层次
用户层软件
用户层实现了与用户交互的接口,使用提供的封装系统调用的库函数对设备进行操作
用户层软件将用户请求翻译成格式化I/O请求,并通过系统调用请求操作系统内核的服务
设备独立性软件
设备独立性软件,又称设备无关性软件,与设备硬件特性无关的功能都在此层实现,提供六大功能
- 向上层提供统一的调用接口
- 设备保护:校验设备访问权限
- 差错处理:处理设备错误
- 设备的分配与回收
- 数据缓冲区管理:通过缓冲技术屏蔽设备间数据交换单位大小和传输速度差异
- 建立逻辑设备名和物理设备的映射关系:根据设备类型选择调用相应的驱动程序。用户指定逻辑设备名,系统通过逻辑设备表LUT确定逻辑设备对应的物理设备,并找到对应的设备驱动程序
LUT 可以在整个系统中只设置一张,但只适合单用户操作系统
也可每个用户设置一张LUT,每个用户使用的逻辑设备名可重复,适用于多用户操作系统,系统在用户登录时为其建立管理进程,LUT存放在用户管理进程的PCB
不同设备的驱动程序不同,因为内部结构不一样,空闲字不同、数据寄存器数量不同等等…
设备驱动程序
负责对硬件设备的具体控制,将上层命令转化为特点设备的指令,设置设备寄存器、检查设备状态等
中断处理程序
假脱机
为了避免人工影响I/O速度,引入了脱机技术:磁带等
假脱机SPOOLing使用软件模拟脱机
输入井和输出井
输入井和输出井就是缓冲区
I/O设备分配与回收
分配因素
设备固有属性
独占设备、共享设备、虚拟设备
设备分配算法
先来先服务、优先级高优先、短任务优先
设备分配中的安全性
安全分配:进程获得设备后阻塞直到I/O将进程唤醒,不会死锁,但进程和I/O串行
不安全分配:发出I/O请求,系统为其分配I/O设备,进程可继续执行,之后还可发出I/O请求,只有I/O请求不满足时才堵塞,实现了I/O和进程并行,但可能死锁
静态分配与动态分配
静态分配:进程运行前分配所有资源,运行结束后归还资源
动态分配:进程运行时动态申请设备资源
分配管理的数据结构
设备控制表DCT
系统为每个设备配置一张DCT
控制器控制表COCT
通道控制表CHCT
系统设备表SDT
分配步骤
根据进程请求的物理设备名查找系统设备表SDT
根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列,不忙碌时将设备分配给进程
根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列,不忙碌则将控制器分配给进程
根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列,不忙碌时则将通道分配给进程
缺点在用户编程时需要使用物理设备名,编程困难,且拓展麻烦
若请求的物理设备正在忙碌,即时有同类型设备,进程也必须阻塞
分配步骤的改进
设置逻辑设备法LUT建立逻辑设备名和物理设备名之间的映射关系
用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据逻辑设备名来查找系统设备表,找到空闲设备分配给进程,并在LUT添加表项
当用户进程再次通过相同逻辑设备名请求设备,则系统通过LUT得知对应物理设备
多用户操作系统中LUT是每个用户一张
单用户操作系统中LUT是只有一张
缓冲区
缓冲区可以解决CPU和I/O设备间速度差异,避免每输出一个字就要向CPU发送一次中断信号
单缓冲
当T>C时,即传输时间大于处理时间
当T<C时
双缓冲
对比
两台机器单缓冲则只能在同一时刻内只能单向传输
两台机器双缓冲则可实现双向数据传输
循环缓冲区
缓冲池
需要收容输入时,从空缓冲队列取出空缓冲区,冲满数据后将缓冲区挂到输入队列队尾
需要提取输入时,从输入队列取出缓冲区,取空后将空缓冲区挂到空缓冲队列队尾
其他以此类推