操作系统-设备管理
UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作
按使用特性分类
-
人机交互类外部设备:数据传输速度慢
-
存储设备:数据传输速度快
-
网络通信设备:数据传输速度中等
按传输速率分类
-
低速设备
-
中速设备
-
高速设备
按信息交换的单位分类
-
块设备:可寻址,传输速率较高
-
字符设备:不可寻址,传输速率较低,一般使用中断驱动方式运行
5.1 I/O控制器
I/O设备由机械部件和电子部件(I/O控制器、设备控制器)组成
I/O控制器的功能
CPU和机械部件的中介
-
接受和识别CPU发出的命令:会设置控制寄存器
-
向CPU报告设备的状态:状态寄存器
-
数据交换:数据寄存器,暂存数据
-
地址识别:CPU提供各寄存器的地址
I/O控制器的组成
一个I/O控制器可能会对应多个设备,因此数据、状态、控制寄存器也有多个,需要对应编址
-
内存映射I/O:控制器中的寄存器与内存地址统一编址
-
寄存器独立编址:控制器中的寄存器使用单独的地址
缺点:需要设置专门的指令来实现对控制器的操作,不仅要指明寄存器的地址,还要指明控制器的编号
5.2 I/O控制方式
程序直接控制方式
关键字:轮询
-
CPU干预的频率:很频繁,I/O操作开始之前、完成之后需要CPU介入,并且在等待I/O完成的过程中CPU需要不断地轮询检查
-
数据传送的单位:每次读/写一个字
-
数据流向:
读操作:I/O设备 -> CPU(寄存器) -> 内存
写操作:内存 -> CPU(寄存器) -> I/O设备
-
优点:实现简单
缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低
中断驱动方式
-
数据传送的单位:每次读/写一个字
-
优点:CPU和I/O设备可并行工作
缺点:每次只传送一个字,中断可能会比较频繁,消耗较多地CPU时间
DMA方式
直接存储器存取,主要用于块设备的I/O控制
-
数据的传送单位是“块”
-
不经过CPU
-
仅在传送一个或多个数据块开始或结束时,才需要CPU干预(中断信号)
DMA控制器
DMA控制器读写也是一个字一个字读写的
-
数据传送的单位:每次读/写一个或多个块(每次读写只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)
-
CPU干预的频率:仅在开始和结束时需要CPU干预
-
数据的流向:不需要经过CPU
-
缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块
通道控制方式
通道:一种硬件,可以理解为“弱鸡版的CPU”,只能识别较少的指令,与CPU共享内存
-
CPU干预的频率:开始结束时才请求CPU干预
-
数据传送的单位:每次读/写一组数据块
-
数据的流向:在通道的控制下进行
5.3 I/O软件层次结构
用户层软件
-
提供库函数,实现了与用户交互的接口
-
将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务
设备独立性软件
与设备的硬件特性无关的功能几乎都在这一层实现
-
向上层提供统一的调用接口(如read/write系统调用)
-
设备的保护:类似于文件保护,设备被看作一种特殊的文件
-
差错处理:对设备的错误进行处理
-
设备的分配与回收
-
数据缓冲区管理
-
建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序;通过逻辑设备表(LUT),并记录每个物理设备的驱动程序的入口地址
设备驱动程序
主要负责对硬件的具体控制,将上层发出的一系列命令转化为特定设备“能听得懂”的一系列操作
不同设备的内部硬件特性不同,这些特性只有厂家才知道,因此厂家必须提供与设备相应的驱动程序;驱动程序一般会以一个独立进程的方式存在
中断处理程序
当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行
硬件
执行I/O操作
I/O核心子系统
假脱机技术(SPOOLing技术):用户层软件
I/O调度、设备保护、设备分配与回收、缓冲区管理:设备独立性软件
假脱机技术
使用软件模拟脱机技术
设备的分配与回收
设备分配时应考虑的因素
-
设备的固有属性:独占设备、共享设备、虚拟设备
-
设备分配算法
-
设备分配中的安全性
安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒;破环请求和保持条件,不会死锁
不安全分配方式:进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求,只有某个I/O请求得不到满足时才将进程阻塞;一个进程可以同时使用多个设备
静态分配:进程运行前分配完所有的资源
动态分配
设备分配管理中的数据结构
设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况
控制器控制表(COCT):每个设备控制器都会对应一张COCT,操作系统根据COCT的信息对控制器进行操作和管理
通道控制表(CHCT):每个通道对应一张CHCT,操作系统根据CHCT的信息对通道进行操作和管理
系统设备表(SDT):记录系统中全部设备的情况,每个设备对应一个表目
设备分配的步骤
改进
缓冲区管理
硬件(速度高,成本高)或内存的一个存储区域
缓冲区的作用
-
缓和CPU和I/O设备之间速度不匹配的矛盾
-
减少对CPU的中断频率,放宽对CPU中断响应时间的限制
-
解决数据粒度不匹配的问题:输出进程每次可以生成一块数据
-
提高CPU和I/O设备的并行性
单缓冲
操作系统在主存中为其分配一个缓冲区(没有特别说明,一般一个块)
缓冲区非空时不能存,充满之后才能取;工作区未空也不能存
双缓冲
使用单/双缓冲在通信时的区别
两台机器之间通信时,可以配置两个缓冲区用于数据的发送和接受
循环缓冲区
橙色表示已充满数据缓冲区,绿色表示空
缓冲池
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)