I/O即为 输入/输出(input / output)
I/O设备:将数据输入/数据计算机的设备
①使用特性分类:人机交互类设备、存储设备、网络通信设备
②按传输速率分类:低速(键鼠)、中速(打印机)、高速(移动硬盘)
③按信息交换单位分类:块设备(移动硬盘)、字符设备(键鼠)
作为CPU和I/O设备机械部件之间的中介,用于实现CPU对I/O设备的控制。
①接收和识别CPU发出的命令:I/O控制器中有控制寄存器用于存放命令和参数
②向CPU报告设备的状态:I/O控制器中有状态寄存器用于记录I/O设备当前状态
③数据交换:I/O控制器中有数据寄存器用于暂存CPU和I/O设备之间的数据
④地址识别:CPU控制不同寄存器
①CPU与控制器的接口 ②I/O逻辑 ③控制器与设备接口
一个I/O控制器可能对应多个设备;寄存器可能存在多个,为了便于CPU操作,系统会才去以下方法对其编址:①内存映像I/O ②寄存器独立编址
Ⅰ在等待I/O完成的过程中,CPU需要不断地轮询检查(会频繁占用CPU)
Ⅱ每次读/写都是一个字
Ⅲ数据会先经过CPU再写入内存/输出I/O设备
Ⅳ优点:实现简单
缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于忙碌状态,CPU利用率低
ⅠCPU会在每个指令末尾检测中断,每次中断会读入一个字的数据
Ⅱ中断处理过程中需要保存、恢复进程的运行环境(需要一定开销,频繁中断会降低系统性能)
Ⅲ数据会先经过CPU再写入内存/输出I/O设备
Ⅳ优点:CPU不再需要轮询,CPU可以与I/O设备并行工作,提升了CPU的利用率
缺点:每次仅能传送一个字,频繁中断会降低系统性能
DMA:直接存储器存取,做出了以下改进
Ⅰ数据传输单位变为了块(一次只能读取连续的块)
Ⅱ数据不再需要先经过CPU而是直接写入内存/输出设备
Ⅲ进一步降低CPU干预率
优点:进一步提升了数据传输效率,降低了CPU介入率
缺点:CPU每次发出一条I/O指令只能读/写一个/连续多个数据块
DMA控制器:
通道:一种硬件,可以识别和执行一系列的通道指令
通道仅能识别一些单一的指令,且与CPU共享内存
ⅠCPU占用率极低
Ⅱ每次读/写一组数据块
Ⅲ数据不再需要先经过CPU而是直接写入内存/输出设备
Ⅳ优点:CPU、通道、I/O可以并行工作,系统资源利用率高
缺点:实现复杂,需要专门的硬件支持
层次 | 功能 |
用户层软件 | 实现与用户交互的接口,为用户提供相关的库函数 |
设备独立性软件 | 向上提供系统调用接口 实现设备保护(权限控制) 差错处理 设备的分配和回收 数据缓冲区管理 建立逻辑设备名到物理设备名直接的映射(逻辑设备表LUT) |
设备驱动程序 | 负责对硬件进行具体控制(由厂家设计) 驱动程序在系统中会以独立进程的方式存在 |
中断处理程序 | 处理设备中断信号 |
硬件 | 执行具体I/O操作 |
用某种算法确定一个顺序来处理I/O请求,于设备独立性软件层实现
如先来先服务算法、优先级算法、短作业优先算法等
设备有时被视为特殊的文件,以文件保护的方式为其提供访问权限控制。于设备独立性软件层实现
SPOOLing技术,实际是由软件模拟脱机技术,于用户层软件实现 。
系统会建立输入井和输出井用以存放数据,同时以一个输入进程和一个输出进程来模拟外围控制机。
于设备独立性软件层实现
1.设备分配时考虑的因素:
设备的固有属性:独占设备、共享设备、虚拟设备
设备分配算法:略
设备分配中的安全性:安全分配方式(占用时会阻塞,所以不会导致死锁;但是会导致CPU和I/O设备只能串行工作) 不安全分配方式(进程不会被阻塞,会提升资源利用率,但是可能导致死锁)
2.设备分配方式
静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
破坏了请求和保持条件,不会产生死锁
动态分配:进程运行过程中动态的申请资源
3.分配管理中的数据结构
设备控制表(DCT):每个设备一张,用于记录设备情况,包含以下字段:设备类型、设备标识符(物理设备名)、设备状态、指向控制器的指针、重复执行次数或时间(重复执行多次后不成功才能认定此次I/O失败)、设备队列的队首指针(用于指向此时正在等待此设备的进程队列)
控制器控制表(COCT):每个控制器配置一张,操作系统通过此表的信息对控制器进行管理,包含以下字段:控制器标识符(唯一ID)、控制器状态、指向通道表的指针(由此指针找到更多通道信息)、控制器队列的队首指针、控制器队列的队尾指针(指向正在等待该控制器的进程队列)
通道控制表(CHCT):每个通道对应一张,操作系统通过此表的信息对通道进行管理,包含以下字段:通道标识符(唯一ID)、通道状态、与通道连接的控制器表首地址、通道队列的队首指针、通道队列的队尾指针
系统设备表(SDT):记录了系统中全部设备的情况
4.设备分配的具体步骤
①根据物理设备名查找SDT
②根据SDT找到DCT,若设备忙碌则将进程挂到等待队列上;不忙碌则直接分配
③根据DCT找到COCT,若控制器忙碌则将进程挂到等待队列上;不忙碌则直接分配
缺点:编程时需要使用物理设备名;若更换了物理设备程序将无法运行;即使有同类型的设备空闲进程依旧会被阻塞(指定一个)
改进:建立逻辑设备名与物理设备名之间的映射(在操作系统中建立逻辑设备表LUT)
于设备独立性软件层实现
缓冲区可以由专门的硬件缓冲区构成(速度快、成本高、容量小),也可以由内存充当缓冲区(需要软件对其进行管理)
作用:1.缓和CPU与I/O设备之间不匹配的矛盾
2.减少对CPU的中断频率
3.解决数据粒度不匹配的问题(如产生块输出字)
4.提高CPU和I/O之间的并行性
分类:
1.单缓冲:操作系统在主存中为其分配一个缓冲区。缓冲区非空时,不能充入数据,只能传出数据;缓冲区为空时可以充入数据,但是必须充满后才能传出数据。
2.双缓冲:系统为其在主存中分配两个缓冲区,适用于用户进程连续从设备读取若干数据。
3.循环缓冲区:将多个大小相等的缓冲区链接成一个循环缓冲区。
4.缓冲池:由系统中共用的缓冲区组成,按使用情况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)
同时根据缓冲区的实际使用情况可以分为:用于收容输入数据的工作缓冲区(hin)、用于提取输出数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(out)、用于提取输出数据的工作缓冲区(sout)
缓冲池工作时,会从队列中取出合适的缓冲区,将其装载到缓冲池中,完成工作后再放回合适的队列中。