操作系统-I/O
I/O设备:将数据输入/输出计算机的外部设备。 - 按使用特性可分为人机交互类设备、存储设备、网络通信设备; - 按传输速率可分为低速设备、中速设备、高速设备; - 按信息交换的单位可分为块设备、字符设备; I/O分为软件层和硬件层,软件层次从上至下可分为用户层软件、设备独立性软件、设备驱动软件、中断处理程序,每层会利用下层提供的服务,实现某些功能,并屏蔽实现的具体细节,向高层提供服务(封装)。 ## 一、IO控制器 I/O设备的电子部分,用于实现对I/O设备的控制。 #### 1. 主要功能 - 接受和识别CPU发出的指令(控制寄存器); - 向CPU报告设备的状态(状态寄存器); - 数据交换,暂存输入/输出的数据(数据寄存器); - 地址识别(由I/O逻辑实现); #### 2. 组成 - CPU和控制器之间的接口(实现控制器和CPU之间的通信); - I/O逻辑(负责识别CPU发出的命令,并向设备发出命令); - 控制器和设备之间的接口(实现控制器和设备之间的通信); #### 3. 寄存器编址方式 内存映射I/O: - 控制器中的寄存器和内存统一编址; - 可以采用对内存进行操作的指令来对控制器进行操作; 寄存器独立编址: - 控制器中的寄存器独立编址; - 需要设置专门的指令来操作控制器; ## 二、I/O控制方式 用什么方式来控制I/O设备的数据读/写。 #### 1. 程序直接控制方式 - CPU干预频率高(等待IO完成过程需要不断轮询检查); - 每次数据传送单位为一个字; - 实现简单,但CPU利用率低; #### 2. 中断驱动方式 - CPU发出I/O命令后可以做其他事,本次I/O完成后设备控制器发出中断信号; - CPU干预频率较低; - 每次数据传送单位为一个字; - CPU利用率明显 提升,但频繁中断会消耗大量CPU时间; #### 3. DMA方式 直接存储器存取,主要用于块设备的I/O控制。 - 数据传送单位是“块”; - 仅在传送一个或多个连续数据块的开始和结束时,才需要CPU干预; - I/O设备和内存间的数据传输不需要经过CPU; #### 4. 通道控制方式 CPU发出I/O命令后可以做其他事,通道会执行通道程序以完成I/O,完成后通道向CPU发出中断信号。 - CPU干预频率极低; - 每次读写一组数据块; - 实现复杂,需要专门的硬件; ## 三、假脱机技术 用户层软件:实现与用户交互的接口,向上提供方便易用的库函数。 假脱机技术又称SPOOLing技术,在用户层软件实现,是用软件的方式模拟脱机技术,达成脱离主机控制进行输入/输出的目的。 - 输入井和输出井:在磁盘中申请的临时存放输入/输出数据的空间; - 输入进程和输出进程:设备数据与输入/输出井的数据交互进程; - 输入缓冲区和输出缓冲区:内存中的缓冲区,输入/输出时的中转站; ## 四、设备的分配与回收 设备独立性软件:负责I/O调度、设备保护、设备分配与回收、缓冲区管理等; #### 1. 设备分配时应考虑的因素 设备的固有属性 - 独占设备、共享设备、虚拟设备; 设备分配算法 - 先来先服务、优先级高者优先、短任务有限等等; 设备分配中的安全性 - 安全分配方式:为进程分配一个I/O设备后就将进程阻塞; - 不安全分配方式; #### 2. 静态分配和动态分配 静态分配:进程运行前为其分配全部所需资源,运行接收后归还; 动态分配:进程运行过程中动态申请资源; #### 3.设备分配管理中的数据结构 设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况; - 设备类型(打印机/扫描仪/键盘...); - 设备标识符(物理设备名); - 设备状态(空闲/忙碌/故障...); - 指向设备控制器的指针(每个设备由一个控制器控制); - 重复执行次数或时间(多次操作不成功后认为本次I/O失败); - 设备队列的队首指针(指向正在等待该设备的进程队列,队列由进程PCB组成); 控制器控制表(COCT):每个设备控制器对应一张COCT,操作系统根据COCT的信息对控制器进行操作和管理; - 控制器标识符、控制器状态、指向通道表的指针、控制器队列队首/尾指针; 通道控制板(CHCT):每个通道对应一张CHCT,操作系统根据CHCT的信息对通道进行操作和管理; - 标识符、状态、与通道连接的控制器表首址、通道队列队首/队尾指针; 系统设备表(SDT):记录了系统中全部设备情况,每个设备对应一个表目; #### 4. 设备分配的步骤 - 根据进程请求的物理设备名查找SDT; - 根据SAT找到DCT,若忙碌则将进程PCB挂到设备等待队列; - 根据DCT找到COCT,若控制器忙碌则挂到控制器等待队列; - 根据COCT找到CHCT,若通道忙碌则搞到通道等等队列; - 可以建立逻辑设备名和物理设备名的映射机制,用户编程时只需提高逻辑设备名。
五、缓冲区管理
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区(常用)。 作用: - 缓和CPU与I/O设备速度不匹配的矛盾; - 减少对CPU的中断频率,放宽对CPU中断响应时间的限制; - 解决数据粒度不匹配的问题; - 提高CPU与I/O设备之间的并行性; #### 1. 单缓冲 在主存中为用户进程分配一个缓冲区(一个块)。 - 缓冲区数据非空时不能冲入数据,缓冲区为空时,需要充满才能把数据传出; #### 2. 双缓冲 在主存中为用户进程分配两个缓冲区。 #### 3. 循环缓冲 多个缓冲区链接成循环队列,in指针指向第一个缓冲区,out指针指向第一个满缓冲区; #### 4. 缓冲池 由系统中共用的缓冲区组成。 - 按使用状况分为空缓存队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列; - 按实际功能不同设置四种工作缓冲区:用于收容输入数据的工作缓冲区(hin)、用于收容输出数据的工作缓冲区(hout)、用于提取输入数据的工作缓冲(cin)、用于提取输出数据的工作缓冲区(cout)