这一节主要记录的是操作系统设备管理的知识
I/O设备
现代计算机系统通常配备大量的I/O设备,用于计算机系统与外部世界(如用户、其它计算机或电子设备等)进行信息交换或存储
I/O设备又称为外围设备或外部设备,简称外设
I/O操作:内存和I/O设备之间的信息传送操作
- 不仅影响计算机的通用性和可扩充性,也是计算机
系统综合处理能力和性价比的重要因素
分类
按信息传输方式分:
输入设备,输出设备,输入输出设备
按交互功能分:
人机交互设备,存储设备,机机通信设备
按设备管理分配:
字符设备
块设备:以固定大小的数据块进行信息交换
网络设备:用于与远程设备通信
设备管理的目标
克服设备和CPU速度的不匹配所引起的问题,使主机和设备并行工作,提高设备使用效率。
对设备进行抽象,屏蔽设备的物理细节和操作过程,配置驱动程序,提供统一界面,供用户或高层软件使用。
- 抽象位文件系统的结点,统一管理
- 裸设备:不被操作系统直接管理,由应用程序读写,I/O效率更高
设备管理的功能
- 设备中断处理
- 缓冲区管理
- 设备的分配和去配
- 设备驱动调度
- 实现虚拟设备
设备管理的层次
- I/O硬件 I/O设备及其接口线路,控制部件,通道
- I/O软件 系统I/O软件 用户空间I/O软件
设备控制器
为达到模块化和通用性的设计目标,通常将I/O设备中的机械部件和电子部件分开处理。
其中,电子部件称为设备控制器。
设备控制器又称为设备适配器、I/O控制器、I/O
控制接口,简称I/O模块或I/O接口。
操作系统与控制器交互,而非与设备交互。
设备控制器的功能
设备控制器是CPU与设备之间的接口,功能如下:
- 接受和识别CPU或通道发来的命令
- 实现数据交换
- 发现和记录设备及自身的状态信息,供CPU处理使用
- 当连接多台设备时,设备地址识别。
设备控制器的组成 设备控制器的组成部分.png
轮询方式
- 处理器向控制器发送一个I/O命令。
- 如果设备未就绪,则重复测试过程,直至设备就绪。
- 执行数据交换。
-
等待I/O操作完成后,才可以继续其它操作。
轮询方式.png
特点:
- 处理I/O请求会终止原程序的执行
- CPU需要等待I/O设备就绪
- CPU需要参与数据传送
- CPU和设备只能串行工作,效率低下。
中断方式
流程:
- 处理器向控制器发出一个I/O命令,然后继续执行后续指令
- 如果该进程不需要等待I/O完成,后续指令可以仍是该进程中的指令
- 否则,该进程在这个中断上挂起,处理器执行其他工作
- 控制器检查设备状态,就绪后发起中断
- CPU响应中断,转向中断处理程序
- 中断处理程序执行数据读写操作
-
恢复执行原先程序
中断方式.png
特点:
- 响应终端后会终止源程序的执行
- CPU不需要等待I/O设备就绪
- CPU需要参与数据传送
- CPU与设备部分并行操作,效率有所提高
直接存储器访问(DMA)方式
DMA模块:模拟处理器来访问主存和设备控制器之间的数据交换。
流程:
- 处理器向DMA模块发出I/O命令
- 处理器继续执行其它工作,DMA模块负责传送
全部数据 -
数据传送结束后,DMA中断处理器。
DMA.png
特点:
- CPU不会终止源程序的执行
- CPU只在数据传送的开始和结束时参与
- 开始时,CPU需要对DMA模块进行初始化
- 结束时,CPU响应中断,但不必保存现场
DMA方式中的周期窃取
当DMA和CPU同时经总线访问内存时,CPU总是将总线的占有权让给DMA一个或几个主存周期
周期窃取对延迟CPU与主存的数据交换影响不大
- 数据传送过程是不连续的和不规则的
-
CPU大部分情况下与Cache进行数据交换,直接访
问内存较少。 CPU在IO控制中的作用.png
I/O通道
又称为通道控制器、I/O处理器
设备控制器包含自身专用的处理器和通道程序
- I/O指令不再由处理器执行,而是存在主存中,由I/O通道所包含的处理器执行
- 采用四级连接:处理器,通道,控制器,设备
可控制多台同类或不同类的设备
流程:
- CPU在遇到I/O请求的时候启动制定通道。
- 一旦启动成功,通道开始控制I/O设备进行操作,CPU执行其他任务
- I/O操作完成后,I/O通道发出中断,CPU停止当前工作,转向处理I/O操作结束事件
CPU与通道并行工作。
带有局部存储器的I/O通道
总线
解决I/O设备速度不匹配的问题。
要使得主机和设备充分并行,提高系统效率。
单总线结构模型
将CPU、主存和I/O模块连接到同一组总线上
优点:结构简单,易于扩充
缺点:主存需要和I/O模块共用总线;设备增多会造成总线变长,进而增加传输时延;无法适用于大量高速设备。
三级总线
主存和Cache通过主存总线传送数据,主存总线和扩展总线上的I/O设备之间传送数据通过扩展总线接口缓冲。
优点:主存与I/O之间的数据传送与处理器的活动分离;
可以支持更多的I/O设备。
缺点:不适用于I/O设备数据速率相差太大的情形。
三级总线.png
采用南北桥的多级总线
通过存储总线、PCI总线、E(ISA)总线分别连接主存、高速I/O设备和低速I/O设备
优点:可以支持不同数据速率的I/O设备
南北桥.png
采用I/O通道的多级总线
支持CPU、主存和多个I/O通道之间的数据传送
下面介绍I/O软件
I/O软件
设计目标:
- 高效率:改善设备效率,尤其是磁盘I/O操作的效率
- 通用性: 用统一的标准来管理所有设备
设计思路:把软件组织成层次结构,低层软件用来屏蔽硬件细节,高层软件向用户提供简洁友善的界面。
主要考虑的问题:
- 设备无关性:编写访问文件的程序与具体设备无关。
- 出错处理:低层软件能处理的错误不让高层软件感知。
- 同步/异步传输: 支持阻塞和中断驱动两种工作方式。
- 缓冲技术:建立数据缓冲区,提高吞吐率。
I/O软件的层次结构
IO软件的层次结构.pngI/O中断处理程序
位于操作系统底层,与硬件设备密切相关,与系统其余部分尽可能少地发生联系。
进程请求I/O操作时,通常被挂起,直到数据传输结束后并产生I/O中断时,操作系统接管CPU后转向中断处理程序。
当设备向CPU提出中断请求时,CPU响应请求并转入中断处理程序。
功能:
检查设备状态寄存器的内容,判断中断产生的原因,根据I/O操作的完成情况进行相应的处理。
- 若数据传输有错,向上层软件报告设备的出错信息,实施重新执行。
- 若正常结束,唤醒等待传输的进程,使其转换为就绪态。
- 若有等待传输的I/O命令,通知相关软件启动下一个I/O请求。
设备驱动程序
包括与设备密切相关的所有代码。
从独立于设备的软件中接收并执行I/O请求
- 把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行。
- 监督设备是否正确执行,管理数据缓冲区,进行必要的纠错处理。
功能:
- 设备初始化:在系统初次启动或设备传输数据时,预置设备和控制器以及通道状态。
- 执行设备驱动例程:负责启动设备,进行数据传送。对于具有通道方式,还负责生成通道指令和通道程序,启动通道工作。
- 调用和执行中断处理程序。负责处理设备和控制器及通道所发出的各种中断。
设备驱动程序的层次
每个设备驱动程序只处理一种设备,或者一类紧密相关的设备。
设备驱动程序分为整体驱动程序和分层驱动程序
- 整体驱动程序直接向操作系统提供接口和控制硬件
:适用于功能简单的驱动程序,效率较高,但较难迁移 - 分层驱动程序将驱动程序分成多层,放在栈中,系统接到I/O请求时先调用栈顶的驱动程序,栈顶的驱动程序可以直接处理请求或向下调用更低层的驱动程序,直至请求被处理。适用于功能复杂、重用性要求较高的驱动程序,结构清晰且便于移植,会增加部分系统开销。
独立于设备的I/O软件
执行适用于所有设备的常用I/O功能,并向用户层软件提供一致性接口。
功能:
- 设备命名:通过路径名寻址设备
- 设备保护:检查用户是否有权访问所申请设备
- 提供与设备无关的数据单位:字符数量,块尺寸
- 缓冲技术:传输速率,时间约束,不能直接送达目的地
- 设备分配和状态跟踪:分配不同类型的设备错误
- 错误处理和报告:驱动程序无法处理的错误
用户空间的I/O软件
库函数
- 一小部分I/O软件不在操作系统中,是与应用程序链接在一起的库函数,甚至完全由运行于用户态的程序组成。
- 系统调用通常由库函数封装后供用户使用,封装函数只是将系统调用所用的参数放在合适位置,然后执行访管指令来陷入内核,再由内核函数实现真正的I/O操作。
** SPOOLing软件**
在内核外运行的系统I/O软件,采用预输入、缓输出和井管理技术,通过创建守护进程和特殊目录解决独占型设备的空占问题。
网友评论