1 I/O硬件原理
设备管理的功能:
- 外围设备中断处理
- 缓冲区管理
- 外围设备的分配和去配
- 外围设备驱动调度
- 虚拟设备及其实现
I/O系统:I/O设备及其接口线路、控制部件、通道和管理软件的总称
I/O操作:计算机的内存和外围设备的介质之间的信息传送操作
I/O设备分类:
- 按特性:I/O型(输入输出型),存储型
- 按信息交换单位:字符设备,块设备
- 存储型外围设备一般为块设备
存储型外围设备:
- 顺序存取存储设备
- 严格依赖信息的物理位置进行定位和读写
- 直接存取存储设备
- 存取任何一个物理块所需事件几乎不依赖于此信息的位置
设备的物理特性差异:
- 数据传输率
- 数据表示方式
- 传输单位
- 出错条件
- 错误的性质
- 报错方法
- 应对措施
I/O控制方式:
- 轮询方式
- 中断方式
- DMA方式
- 通道方式
轮询方式:
- 使用查询指令测试设备控制器的忙闲状态位,决定内存和设备是否能交换数据
- 轮询方式使用:
- 1)查询指令:查询设备是否就绪;
- 2)读/写指令:当设备就绪时,执行数据交换;
- 3)转移指令:当设备未就绪时,执行转移指令转向查询指令继续查询
- 几个设备同时要求I/O,可对每个设备都编写I/O数据处理程序,轮流查询这些设备的状态位,当某个设备准备好允许I/O数据时,就调用这个设备的I/O程序处理数据传输,否则依次轮询下个设备是否准备好
- 缺点:
- CPU轮询设备当前的状态会终止原程序的执行,浪费时间
- I/O准备就绪后,需要CPU参与数据传输工作。CPU和设备之间只能串行工作,使得主机不能充分发挥功效,设备不能得到合理利用,整个系统效率很低
中断方式:
- 中断方式要求CPU与设备控制器及设备之间有中断请求线,控制器的状态寄存器有相应中断允许位
- CPU与设备间数据传输过程:
- 1)进程发出启动I/O指令,CPU加载控制信息到设备控制器的寄存器,然后,进程继续执行或放弃CPU等待设备操作完成;
- 2)设备控制器检查状态寄存器,按照I/O指令要求,执行相应I/O操作,一旦传输完成,设备控制器通过中断请求线发出I/O中断信号;
- 3)CPU收到并响应I/O中断后,转向处理该设备的I/O中断例程执行;
- 4)中断处理例程执行数据读取操作,将I/O缓冲寄存器的内容写入内存,操作结束后退出中断处理程序,返回中断前的执行状态;
- 5)进程调度程序在适当时刻恢复得到数据的进程执行
- 缺点:
- 如果设备控制器的数据缓冲区较小,当缓存区装满后便会发生中断,整个数据传输过程中2发生中断的次数较多,会耗用大量CPU时间
- 如果配置多个通过中断处理方式实现并行工作的设备,会使中断次数急剧增加,造成CPU来不及响应或丢失数据现象
- (响应中断请求后必须停止现行程序)
- 优点:
- 程序中断方式I/O由于不必忙式轮询设备情况,CPU和设备可实现部分并行操作
DMA方式:
- 如果I/O设备能直接与内存交换数据而不占用CPU,CPU的利用率还可提高,这就出现了直接存储器存取DMA方式
- 逻辑部件:
- 内存地址寄存器:存放内存中需要交换数据的地址,DMA传送之前由程序送入搜地址;传送过程中,每次交换数据地址寄存器内容加一
- 字计数器:记录传送数据的总字数,每次传送字计数器减一
- 数据缓冲寄存器(数据缓冲区):暂存每次传送的数据
- 设备地址寄存器:存放I/O信息的地址,如磁盘的柱面号
- 中断机制和控制逻辑:用于向CPU提出I/O中断请求及保存CPU发来的I/O命令,管理DMA的传送过程
- 特点:
- DMA与内存间采用字传送,DMA与设备间可能是字位或字节传送,所以,DMA中还要设置数据移位寄存器、字节计数器等硬件逻辑。
- DMA设有中断机制和DMA传输控制机制,若出现DMA与CPU同时经总线访问内存,CPU总把总线占有权让给DMA(称“周期窃用”),让设备和内存之间交换数据,不再需要CPU干预,减轻CPU的负担,每次传送数据时,不必进入中断系统,能进一步提高CPU资源的利用率
通道方式:
- 为获得CPU和外围设备间更高的并行工作能力,为让种类繁多,物理特性各异的外围设备能以标准的接口连接到系统中,计算机系统引入了自成独立体系的通道结构
- 操作过程:
- CPU在执行主程序时遇到I/O请求,它启动指定通道上选址的外围设备,一旦启动成功,通道开始控制外围设备进行操作。CPU就可执行其他任务并与通道并行工作,直到I/O操作完成。通道发出操作结束中断时,CPU才停止当前工作,转向处理I/O操作结束事件
- 又称I/O处理器
- 计算机的系统、通道、控制器和设备之间采用四级连接,实施三级控制
设备控制器
- I/O设备的电子部件称设备控制器或适配器,它是可插入主板扩充槽的印刷电路板,机械部件则是设备本身
- 操作系统与控制器打交道,微机和小型机采用单总线模型,实现CPU和控制器间的数据传送,中、大型机则采用多总线结构和多通道方式,以提高并行操作程度
- 如果没有控制器,复杂操作必须由操作系统来解决,引入控制器后,通过传递简单参数就可进行I/O操作,大大简化系统的设计,有利于计算机系统对各类控制器和设备的兼容性
- •设备控制器是CPU和设备之间的一个接口,它接收从CPU发来的命令,控制I/O设备操作,实现内存和设备之间的数据传输
- 设备控制器是一个可编址设备,当它连接多台设备时,则应具有多个设备地址
- 主要功能:
-
接收和识别CPU或通道发来的命令
-
实现数据交换,包括设备和控制器间的数据传输
-
发现和记录设备及自身的状态信息,供CPU处理
-
设备地址识别
-
- 组成部分:命令寄存器及译码器,数据寄存器,状态寄存器,地址译码器
2 I/O软件原理
I/O软件总体设计目标:
- 高效率
- 通用性
设计I/O软件总体要考虑的问题:
- 设备无关性
- 出错处理
- 同步(阻塞)——异步(中断驱动)传输
- 缓冲技术:让数据的到达率和离去率相匹配,以提高系统吞吐率
- 独占性外围设备和共享性外围设备
I/O软件层次(解决上述问题):
- I/O中断处理程序
- 中断处理程序处于操作系统底层
- I/O中断的类型和功能:
-
通知用户程序I/O操作沿链推进程度
- 通知用户程序I/O操作正常结束
- 通知用户程序发现的I/O操作异常
- 通知程序外围设备上重要的异步信号
-
- 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操作执行步骤 :
- 1)进程对已打开文件的文件描述符执行读库函数;
-
2) 独立设备I/O软件检查参数正确性。高速缓存中有要读的信息块,从缓冲区直接读到用户区,完成I/O请求;
-
3) 若数据不在缓冲区,执行物理I/O,实现将设备逻辑名转换成物理名,检查对设备操作的权限,将I/O请求排队,阻塞进程且等待I/O完成;
-
4) 内核启动设备驱动程序,分配存放读出块的缓冲区,准备接收数据,且向设备控制寄存器发启动命令,或建立DMA传输,启动I/O;
-
5) 设备控制器操作设备,执行数据传输;
-
6) DMA控制器控制一块传输完成,硬件产生I/O结束中断;
-
7) CPU响应中断,转向磁盘中断处理程序。
-
8) 当应用进程被再次调度执行时,从I/O系统调用的断点恢复执行
3 缓冲技术
缓冲技术的目的:
-
改善中央处理器与外围设备之间速度不配的矛盾,
-
协调逻辑记录大小与物理记录大小不一致,
- 提高CPU和I/O设备的并行性
基本思想:
- 进程执行写操作输出数据时,向系统申请一个缓冲区,若为顺序写请求,则不断把数据填到缓冲区,直到被装满。此后,进程继续它的计算,系统将缓冲区内容写到I/O设备上
- 进程执行操作输入数据时,向系统申请一个缓冲区,系统将一个物理记录的内容读到缓冲区,根据进程要求,把当前需要的逻辑记录从缓冲区中选出并传送给进程
- 在输出数据时,只有在系统还来不及腾空缓冲而进程又要写数据时,它才需要等待
- 在输入数据时,仅当缓冲区空而进程又要从中读取数据时,它才被迫等待。
1、单缓存
2、双缓存
- 输入数据时,首先填满缓冲区1,操作系统可从缓冲区1把数据送到用户进程区,用户进程便可对数据进行加工计算;与此同时,输入设备填充缓冲区2
- 当缓冲区1空出后,输入设备再次向缓冲区1输入。操作系统又可把缓冲区2的数据传送到用户进程区,用户进程开始加工缓冲2的数据
-
传输和处理一块的时间(1)
- 如果C<T,由于M远小于T,在将磁盘上的一块数据传送到缓冲区其间,计算机已完成将另一个缓冲区中的数据传送到用户区并对这块数据进行计算的工作,
- 一块数据的传输和处理时间为T、即max(C,T),显然,这种情况下可保证块设备连续工作
- 如果C>T,当上一块数据计算完毕后,需把一个缓冲区中的数据传送到用户区,花费时间为M,再对这块数据进行计算,花费时间为C, 所以,一块数据的传输和处理时间为C+M、即max(C,T)+M,这种情况下进程不必要等待I/O
缓冲区高速缓存 :
- 操作系统建立页高速缓存。每当应用进程打开、关闭或撤销文件时,激活高速缓存管理程序管理文件的数据块。其实现思想如下。
- (1)当请求从指定文件读写数据时,给定设备号和磁盘块号,快速查询所需数据块是否在页高速缓存中,如果在,是在哪个缓冲区并获得其内容。可设计散列表来快速访问缓冲区,散列数组的每个元素指向一个缓冲区链表,把具有相同散列值的磁盘块链接在一起。
- (2)高速缓存中的每个缓冲区链表都有一个缓冲控制块,包含如下信息:逻辑设备号、磁盘块号、高速缓存虚拟地址、数据所属文件的文件描述符、数据在文件内的位移、缓冲区链接指针、空闲缓冲区指针、活动计数 、状态字等
- (3)若数据块不在高速缓存中,就从磁盘读取数据,并将其缓存,系统要把尽可能多的数据保存在缓冲区高速缓存。向磁盘写入数据也暂存于数据缓冲区高速缓存中,供回写磁盘前再次使用。内核需判定数据是否需要回写,或是否很快就要被回写,采用延迟写减少I/O 操作。
- (4)当文件关闭或撤销时,需要解决缓冲区释放和重用问题,可采用一定策略 (如LRU) 把单独的缓冲区链接在一起,于是,最不可能被再次访问的缓冲区将被最先释放重用。
- (5)提供一组高速缓存操作,为文件驱动程序实现读写文件数据。这些操作通常有:写缓存、延迟写缓存、读缓存、预读缓存等
3、多缓存
4 驱动调度技术
驱动调度能减少为若干个I/O请求服务所需的总时间,提高系统效率、除了I/O请求的优化排序外,信息在辅助存储器上的排列方式,存储空间分配方法都能影响存取访问速度
存储设备的物理结构:
- 顺序存取存储设备是严格依赖信息的物理位置进行定位和读写的存储设备
- 具有存储容量大、稳定可靠、卷可装卸和便于保存等优点
- 直接存取存储设备
- 磁盘是一种直接(随机)存取存储设备。每个物理记录有确定的位置和唯一的地址,存取任何一个物理块所需的时间几乎不依赖于此信息的位置。
- 访问磁盘记录参数:柱面号、磁头号、块号
- 磁盘是一种直接(随机)存取存储设备。每个物理记录有确定的位置和唯一的地址,存取任何一个物理块所需的时间几乎不依赖于此信息的位置。
循环排序:
优化分布:
搜查定位:
- 先来先服务
- 最短查找时间优先
- 扫描:每次只往一个方向走到尽头,然后调头
- 分步扫描
- 进程重复请求访问同一柱面会垄断设备,造成“磁臂粘性”
- 将 I/O 请求分为长度为N的子队列,按FIFO算法依次处理每个子队列,而每个子队列采用扫描算法,处理完一个后再服务下一个子队列,以避免出现磁臂粘住现象
- 电梯调度(LOOK算法):
- 无访问请求时,移动臂停止不动,有访问时,移动臂按电梯规律移动(先往原先的移动方向移动,若向前无请求,则调转方向)。
- 与扫描算法的区别:扫描算法每次都会移动到尽头,而电梯调度在前方没有请求时,会立即调转方向。
- 循环扫描:
- 由0柱面向最大柱面顺序扫描,然后,从0柱面开始循环,在从最大柱面返回到0柱面时不提供任何服务
提高磁盘I/O速度的方法:
- 提前读:读磁盘当前块时,下一磁盘块也读入内存缓冲区
- 延迟写:仅在缓冲区首部设置延迟写标志,然后,释放此缓冲区,并把该缓冲区链入空闲缓冲区链表的尾部,当其他进程申请到该缓冲区时,才真正把缓冲区信息写回磁盘块
- 虚拟盘:
5 设备分配
设备独立性:
- 用户不指定特定设备,而是指定逻辑设备,使得用户作业和物理设备独立开来,再通过其它途径建立逻辑设备和物理设备之间对应关系,这种特性为“设备独立性”
- 好处:用户与物理的外围设备无关,系统增减或变更外围设备时程序不必修改;易于对付输入输出设备的故障
从设备的特性来看,可以把设备分成独占设备、共享设备和虚拟设备三类;相应的管理和分配外围设备的技术可分成:独占方式、共享方式和虚拟方式
设备分配的实现:
- 设备分配的数据结构:设备类表和设备表
- 系统中拥有一张设备类表,每类设备对应于表中一栏,包括内容有:设备类、总台数、空闲台数和设备表起始地址等
- 每一类设备都有各自的设备表,用来登记这类设备中每一台设备的状态,包含的内容有:物理设备名、逻辑设备名、占有设备的进程号、已分配/未分配、好/坏等
- 采用通道结构的系统中,设备分配的数据结构设置:系统设备表、通道控制表、控制器控制表和设备控制表。
- 系统建立一张系统设备表,记录配置在系统中的所有物理设备的情况。
- 每个通道、控制器、设备各设置一张表,记录各自的地址(标识符)、状态(忙/闲)、等待获得此部件的进程队列指针、及一次分配后相互勾链的指针,以备分配和执行I/O时使用
6 虚拟设备
SPOOLing系统的设计与实现
- “井”是用作缓冲的存储区域,采用井的技术能调节供求之间的矛盾,消除人工干预带来的损失
- 预输入程序
- 缓输出程序
- 井管理程序
- 组成与结构:
- 输入井中的状态
- 输入状态
- 收容状态
- 执行状态
- 完成状态
- 数据结构
- 作业表 登记进入系统的所有作业的作业名、状态、预输入表位置等信息
- 预输入表 每个用户作业有一张用来登记该作业的各个文件的情况,包括设备类、信息长度及存放位置等
- 缓输出表 每个用户作业拥有一张包括作业名、作业状态、文件名、设备类、数据起始位置、数据当前位置等
- 井文件空间管理
- 连接方式,输入的信息被组织成连接文件,这种方式的优点是数据信息可以不连续存放,文件空间利用率高
- 计算方式,假定磁盘井文件空间,每个磁道存放100个80字节记录,每张卡片为80个字节,若每个柱面有20个磁道,则一个柱面可存放2000张卡片信息。第n张卡片信息被存放在:
- 磁道号=卡片号n /100
- 记录号=(卡片号n)% 100
- 用卡片号n除以100的整数和余数部分分别为其存放的磁道号和记录号