操作系统教程(第3版) 第五章 设备管理 面向21世纪课程教材 高等教育出版社 2003年8月
第五章 设备管理(1) 5.1 I/O硬件原理 5.2 I/O软件原理 5.3 具有通道的I/O系统管理 5.4 缓冲技术 5.5 驱动调度技术
CH5 设备管理(2) 5.6 设备分配 5.7 虚拟设备 5.8 实例研究:Windows2000/XP的设备管理 5.9 实例研究:Linux的设备管理
设备管理具有以下功能 •外围设备中断处理 •缓冲区管理 •外围设备的分配 •外围设备驱动调度 •虚拟设备及其实现
5.1 I/O硬件原理 5.1.1 I/O系统 5.1.2 I/O控制方式 5.1.3设备控制器
5.1.1 I/O系统(1) I/O系统:I/O设备及其接口线路、控制部件、通道和管理软件的总称。
I/O系统(2) 按照I/O特性,I/O设备可以划分为I/O型和存储型外围设备三类。 输入型外围设备和输出型外围设备一般为字符设备,与内存进行信息交换的单位是字节。存储型外围设备一般为块设备。
I/O系统(3) 存储型外围设备可以划分为顺序存取存储设备和直接存取存储设备。 顺序存取存储设备严格依赖信息的物理位置进行定位和读写,如磁带。 直接存取存储设备的重要特性是存取任何一个物理块所需的事件几乎不依赖于此信息的位置,如磁盘。
设备的物理特性差异 • 数据传输率 • 数据表示方式 • 传输单位 • 出错条件
5.1.2 I/O控制方式 按照I/O控制器功能的强弱,以及和CPU之间联系方式的不同,对I/O设备的控制方式分类, 主要差别在于:中央处理器和外围设备并行工作的方式不同,并行工作的程度不同。 四种I/O方式: (1)询问方式 (2)中断方式 (3) DMA方式 (4) 通道方式
1 询问方式 设置计数值 设置内存缓冲首址 启动外设 就绪 传送一个字 修改内存地址 修改计数值 完 是 结束I/O
2 中断方式 返回断点 CPU读 I/O状态 <有错> 出错 处理 无 正常结束处理 I/O中断处理程序 启动I/O(读操作) 继续执行 第K条指令 第K+1条指令 现行程序 启动命令 返回 源程序 I/O控制器工作 I/O设备就绪 发I/O中断 响应中断 程序中断方式I/O 传输数据
3 DMA方式(1) 如果I/O设备能直接与主存交换数据而不占用CPU,CPU的利用率还可提高,这就出现了直接存储器存取DMA方式。DMA方式需以下设施: (1)主存地址寄存器 (2)字计数器 (3)数据缓冲寄存器或数据缓冲区 (4)设备地址寄存器 (5)中断机制和控制逻辑
DMA方式(2) 现行程序 启动命令 继续执行 处理DMA I/O结束中断 第K条指令 DMA工作 DMA向内存发出询问 (读操作) 继续执行 第K条指令 第K+1条指令 启动命令 返回原程序 响应中断 返回断点 DMA工作 传输准备 DMA向内存发出询问 挪用内存周期读/写操作 修改内存地址和计数 <块结束> 发I/O结束 未
4 通道方式 为获得CPU和外围设备间更高的并行工作能力,也为了让种类繁多,物理特性各异的外围设备能以标准的接口连接到系统中,计算机系统引入了自成独立体系的通道结构。 采用通道后的I/O操作过程 CPU在执行主程序时遇到I/O请求,它启动指定通道上选址的外围设备,一旦启动成功,通道开始控制外围设备进行操作。CPU就可执行其他任务并与通道并行工作,直到I/O操作完成。通道发出操作结束中断时,CPU才停止当前工作,转向处理I/O操作结束事件。
5.1.3设备控制器 •什么是控制器 •引入控制器的原因 •控制器的功能 •设备控制器组成部分
设备控制器功能和结构小结 设备控制器是CPU和设备之间的一个接口,它接收从CPU发来的命令,控制I/O设备操作,实现主存和设备之间的数据传输 设备控制器是一个可编址设备,当它连接多台设备时,则应具有多个设备地址 设备控制器主要功能: ①接收和识别CPU或通道发来的命令 ②实现数据交换,包括设备和控制器间的数据传输 ③发现和记录设备及自身的状态信息,供CPU处理 ④设备地址识别 设备控制器组成部分:命令寄存器及译码器,数据寄存器,状态寄存器,地址译码器.
5.2 I/O软件原理 5.2.1 I/O软件的设计目标和原则 5.2.2 I/O中断处理程序 5.2.3 设备驱动程序
5.2.1 I/O软件的设计目标和原则 I/O软件总体设计目标: 高效率。 通用性 。 I/O软件总体设计要考虑的问题: 设备无关性。 出错处理。 同步(阻塞)—异步(中断驱动)传输。 独占性外围设备和共享性外围设备。
I/O软件组织成四个层次 • I/O中断处理程序。 • 设备驱动程序。 •与设备无关的操作系统I/O软件。 •用户层I/O软件。
5.2.2 I/O中断处理程序 •通知用户程序I/O操作沿链推进程度 •通知用户程序I/O操作正常结束 •通知用户程序发现的I/O操作异常 •通知程序外围设备上重要的异步信号 I/O中断的处理原则 操作正常结束处理 操作发生故障或特殊事件的中断处理 人为要求而产生的中断处理 外围设备的异步信号处理
5.2.3 设备驱动程序 设备驱动程序包括与设备相关的代码,它的工作是: 把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行,如设备名转化为端口地址、逻辑记录转化为物理记录、逻辑操作转化为物理操作等。 设备驱动程序从与设备无关的软件中接收抽象的I/O请求,一条典型的请求是读第n块。 如果请求到来时驱动程序空闲,则立即执行。如果它正在处理另一条请求,它将该请求挂在等待队列中。
5.2.4 与硬件无关的操作系统I/O软件(1) 设备无关软件完成的功能: •对设备驱动程序的统一接口 •设备命名 •设备保护 •对设备驱动程序的统一接口 •设备命名 •设备保护 •提供独立于设备的块大小 •缓冲区管理 •块设备的存储分配 •独占性外围设备的分配和释放 •错误报告
与硬件无关的操作系统I/O软件(2) 文件和I/O设备的命名方式 如何保护对设备的未授权访问 屏蔽不同磁盘扇区大小并向高层软件提供统一大小的逻辑块 块设备和字符设备需要缓冲技术 错误处理多数由驱动程序完成
5.2.5 用户空间的I/O软件 库例程实现的 I/O系统调用 I/O系统调用通常先是库例程调用 非库例程实现的 I/O系统调用 spooling系统
I/O系统各层软件及其功能 用户进程 进行I/O调用;格式化I/O;SPOOLING 设备无关软件 命名;保护;阻塞;缓冲;分配 设备驱动程序 建立设备寄存器;检查状态 硬件 执行I/O操作 中断处理程序 当I/O结束时,唤醒驱动程序 层次 I/O应答 I/O功能 I/O请求
5.3 具有通道的I/O系统管理(1) 5.3.1通道命令和通道程序 5.3.2I/O指令和主机I/O程序
具有通道的I/O系统管理(2) 具有通道的计算机系统,I/O程序设计涉及:CPU执行I/O指令,通道执行通道命令,以及CPU和通道之间的通信。
5.3.1 通道命令和通道程序(1) 通道命令 通道,具有自己的指令系统,它的指令常称通道命令。 5.3.1 通道命令和通道程序(1) 通道命令 通道,具有自己的指令系统,它的指令常称通道命令。 通道命令CCW是通道从主存取出并控制I/O设备执行I/O操作的命令字,用ccw编写的程序称通道程序,通道程序由多条通道命令组成,每次启动可以完成复杂的I/O控制。
通道命令和通道程序(2) IBM370系统的通道命令 命令码 数据主存地址 标志码 传送字节个数 •命令码 •数据主存地址 •标志码 •传送字节个数
汇编格式通道程序例子 CCW X’02’ ,inarea , X’40’ , 80 CCW X’02’ , * , X’50’ , 80 . . inarea DS CL240
通道地址字和通道状态字(1) •通道地址字CAW(Channel Address Word) 通道方式I/O时,要使用两个固定存储单元: •通道地址字CAW(Channel Address Word) •通道状态字CSW(Channel Status Word) 。
5.3.2 I/O指令和主机I/O程序(1) I/O指令有: 启动I/O(Start I/O,SIO) IBM系统主机提供一组完成I/O操作的I/O指令。 I/O指令有: 启动I/O(Start I/O,SIO) 查询I/O(Test I/O,TIO) 查询通道(Test Channel,TCH) 停止I/O(Halt I/O,HIO) 停止设备(Halt Device,HDV) SIO X’00E’
I/O指令和主机I/O程序(2) 执行一次I/O操作的步骤 •确定算法,决定例外情况处理方法。 •编写通道程序,完成相应I/O操作。 •编写主机I/O程序,对不同条件码进行不同处理。
I/O指令和主机I/O程序(3) 采用双缓冲把磁带上的记录在打印机上输出。 START BALR 11,0 USING *,11 SSM = X’00’ /*开中断*/ LA 8,READ0 ST 8,CAW SIO X’0182’ /*启动磁带机反绕*/ BC 7,*-4 /*循环直到启动*/ TIO X’0182’ BC 7,*-4 /*测试直到磁带完成反绕*/ LOOP LA 8,READ1 SIO X’0182’ /*启动磁带读入缓冲1*/ BC 7,*-4 BC 7,*-4 /*测试直到磁带完成*/ LA 8,PRINT1
I/O指令和主机I/O程序(4) LA 8,READ2 B LOOP ST 8,CAW TIO X’00E’ BC 7,*-4 /*测试直到缓冲2打印完*/ SIO X’00E’ /*启动行印机印缓冲1的内容*/ LA 8,READ2 SIO X’0182’ /*启动磁带读入缓冲2*/ BC 7,*-4 TIO X’0182’ BC 7,*-4 /*测试直到磁带完成*/ LA 8,PRINT2 TIO X’00E’ /*查询行印机*/ BC 7,*-4 /*测试直到缓冲1打印完*/ SIO X’00E’ /*启动行印机印缓冲1的内容*/ B LOOP I/O指令和主机I/O程序(4)
I/O指令和主机I/O程序(5) READ1 CCW X’02’ ,BUFFER1, X’00’ ,512 READ0 CCW X’07’ , * , X’20’ ,1 READ1 CCW X’02’ ,BUFFER1, X’00’ ,512 READ2 CCW X’02’ ,BUFFER2, X’00’ ,512 PRINT1 CCW X’01’ , BUFFER1, X’A0’, 120 CCW X’01’ , BUFFER1+120, X’A0’, 120 CCW X’01’ , BUFFER1+240, X’A0’, 120 CCW X’01’ , BUFFER1+360, X’A0’, 120 CCW X’09’ , BUFFER1+480, X’00’, 32
I/O指令和主机I/O程序(5) PRINT2 CCW X’01’ , BUFFER2, X’A0’, 120 BUFFER1 DS CL512 BUFFER2 DS CL512 CAW EQU 72 END 注:书上的这个通道程序作了简化。
5.3.3 通道启动和I/O操作过程 CPU是主设备,通道是从设备,CPU和设备之间是主从关系,需要相互配合协调才能完成I/O操作。
通道方式I/O过程三个阶段 l I/O启动阶段 2 I/O操作阶段 3 I/O结束阶段
通道方式I/O 中央处理器 用户程序 操作系统 保护进程j现场 组织CCW CCW首址送CAW 发SIO 分析条件码 出错进行处理 选进程K运行 保护进程K现场 分析中断文件 处理I/O中断 选择进程运行 判断状态形成 条件码 执行CCW 控制设备操作 记录操作状态 到CSW 产生中断事件 CSW存入主存 通道号、设备号 存入主存特定 单元 发I/O中断 执行规定 I/O操作 控制器和 设备结束 中断 通道 I/O控制器和设备 请求I/O 进程j 进程k 进程j或k
5.4缓冲技术 5.4.1 单缓冲 5.4.2 双缓冲 5.4.3 多缓冲
5.4缓冲技术(1) •改善中央处理器与外围设备之间速度不配的矛盾, •协调逻辑记录大小与物理记录大小不一致, 引入缓冲技术的目的 •改善中央处理器与外围设备之间速度不配的矛盾, •协调逻辑记录大小与物理记录大小不一致, •提高CPU和I/O设备的并行性。
缓冲技术(2) 缓冲技术实现基本思想 进程执行写操作输出数据时,向系统申请一个缓冲区,若为顺序写请求,则不断把数据填到缓冲区,直到被装满。此后,进程继续它的计算,系统将缓冲区内容写到I/O设备上。 进程执行操作输入数据时,向系统申请一个缓冲区,系统将一个物理记录的内容读到缓冲区,根据进程要求,把当前需要的逻辑记录从缓冲区中选出并传送给进程。 在输出数据时,只有在系统还来不及腾空缓冲而进程又要写数据时,它才需要等待; 在输入数据时,仅当缓冲区空而进程又要从中读取数据时,它才被迫等待。
5.4.1 单缓冲 对于块设备,单缓冲机制如下工作: 数据处理过程 数据处理时间约为max[C,T]+M, 对于字符设备,单缓冲机制如下工作:
5.4.2 双缓冲(1) 输入数据时,首先填满缓冲区1,操作系统可从缓冲区1把数据送到用户进程区,用户进程便可对数据进行加工计算;与此同时,输入设备填充缓冲区2 当缓冲区1空出后,输入设备再次向缓冲区1输入。操作系统又可把缓冲区2的数据传送到用户进程区,用户进程开始加工缓冲2的数据。
双缓冲(2) 传输和处理一块的时间(1) 如果C<T,由于M远小于T,在将磁盘上的一块数据传送到缓冲区其间,计算机已完成将另一个缓冲区中的数据传送到用户区并对这块数据进行计算的工作,一块数据的传输和处理时间为T、即max(C,T),显然,这种情况下可保证块设备连续工作;
双缓冲(3) 传输和处理一块的时间(2) 如果C>T,当上一块数据计算完毕后,需把一个缓冲区中的数据传送到用户区,花费时间为M,再对这块数据进行计算,花费时间为C,所以,一块数据的传输和处理时间为C+M、即max(C,T)+M,这种情况下进程不必要等待I/O。
5.4.3 多缓冲(1) 操作系统从自由主存区域中分配一组缓冲区组成循环缓冲,每个缓冲区的大小等于物理记录的大小。多缓冲的缓冲区是系统的公共资源,可供各个进程共享,并由系统统一分配和管理。 缓冲区可用途分为:输入缓冲区,处理缓冲区和输出缓冲区。
多缓冲(2) Unix I/O字符缓存队列
5.5 驱动调度技术(1) 5.5.1 存储设备的物理结构 5.5.2 循环排序 5.5.3 优化分布 5.5.4 交替地址 5.5.5 搜查定位 5.5.6 独立磁盘冗余阵列 5.5.7 提高磁盘I/O速度的一些方法
驱动调度技术(2) 驱动调度和驱动调度算法。 驱动调度能减少为若干个I/O请求服务所需的总时间,提高系统效率、除了I/O请求的优化排序外,信息在辅助存储器上的排列方式,存储空间分配方法都能影响存取访问速度。
5.5.1 存储设备的物理结构(1) 顺序存取存储设备是严格依赖信息的物理位置进行定位和读写的存储设备 具有存储容量大、稳定可靠、卷可装卸和便于保存等优点 ■ 始点 块 1 间 隙 2 3 i i+1 末点 … … 磁头(正走,反走,正读,反读,正写,反写,倒带)
存储设备的物理结构(2) 直接存取存储设备 磁盘是一种直接(随机)存取存储设备。每个物理记录有确定的位置和唯一的地址,存取任何一个物理块所需的时间几乎不依赖于此信息的位置。 访问磁盘记录参数:柱面号、磁头号、块号
5.5.2循环排序(1) 考虑磁道保存4个记录的旋转型设备,假定收到四个I/O请求。 请求次序 记录号 (1) 读记录4 (2) 读记录3 请求次序 记录号 (1) 读记录4 (2) 读记录3 (3) 读记录2 (4) 读记录1
循环排序(2) 多种I/O请求排序方法 •方法1:按照I/O请求次序读记录4、3、2、1,平均用1/2周定位,再加上1/4周读出记录,总处理时间等于3周,即60毫秒。 •方法2:如果次序为读记录1、2、3、4。总处理时间等于1.5周,即30毫秒。 •方法3:如果知道当前读位置是记录3,则采用次序为读记录4、1、2、3。总处理时间等于1周,即20毫秒。
5.5.3 优化分布(1) 信息在存储空间的排列方式会影响存取等待时间。考虑10个逻辑记录A,B……,J被存于旋转型设备上,每道存放10个记录,安排如下: 物理块 逻辑纪录 1-10 A-J 处理10个记录的总时间 10毫秒(移动到记录A的平均时间)+ 2毫秒(读记录A)+4毫秒(处理记录A)+9×[16毫秒(访问下一记录) +2毫秒(读记录)+4毫秒(处理记录)] =214毫秒
优化分布(2) 按照下面方式对信息优化分布 物理块 逻辑纪录 1 A 2 H 3 E 4 B 5 I 6 F 7 C 8 J 9 G 物理块 逻辑纪录 1 A 2 H 3 E 4 B 5 I 6 F 7 C 8 J 9 G 10 D
优化分布(3) 处理10个记录的总时间为 10毫秒(移动到记录A的平均时间)+10×[2毫秒(读记录)×4毫秒(处理记录)] =70毫秒
5.5.4 交替地址 每个记录重复记录在设备的多个区域,读相同的数据,有几个交替地址,也称为多重副本或折迭。 成功与否取决于下列因素:数据记录总是读出使用,不需修改写入;数据记录占用的存储空间总量不太大;数据使用极为频繁。
5.5.5 搜查定位(1) 移臂调度有若干策略 (1) “电梯调度”算法 (2)“最短查找时间优先”算法 (3)“扫描”算法 (4)“分步扫描”算法 (5)“单向扫描”算法
搜查定位(2) “电梯调度”算法 B 电梯调 度算法 否 结束 处理有最近块号的请求 改变移动方向 移动磁头到指定柱面,登记当前位置 有等待 搜查定位(2) “电梯调度”算法 电梯调 度算法 有等待 请求? 结束 请求与当前 柱面相同? 处理有最近块号的请求 启动 C 是 向里或 向外移? 否 向外 向里 有比当前柱 面小的请求? 改变移动方向 A 面大的请求? 处理大于当前柱面号请求中柱面号最小的请求 B 处理小于当前柱面号请求中的柱面号最大的请求 移动磁头到指定柱面,登记当前位置
搜查定位(4) “最短查找时间优先”算法 本算法考虑了各个请求之间的区别,总是先执行查找时间最短的那个磁盘请求,从而,较“先来先服务”算法有较好的寻道性能。
搜查定位(5) “扫描”算法 磁盘臂每次沿一个方向移动,扫过所有柱面,遇到最近的I/O请求便进行处理,直到最后一个柱面后,再向相反方向移动回来。
搜查定位(6) “分步扫描 ”算法 将I/O请求分成组,每组不超过N个请求,每次选一个组进行扫描,处理完一组后再选下一组。
搜查定位(7) “循环扫描”算法 移动臂总从0号柱面至最大号柱面顺序扫描,然后,直接返回0号柱面重复进行,归途中不再服务,构成了一个循环。
搜查定位(8) 算法比较 • (1)(2)两种算法,单位时间内处理的I/O请求多即吞吐量大,但请求的等待时间较长。 搜查定位(8) 算法比较 • (1)(2)两种算法,单位时间内处理的I/O请求多即吞吐量大,但请求的等待时间较长。 •“扫描”算法适宜于磁盘负载重的系统,它不分具体情况扫过所有柱面造成性能不够好。 •“分步扫描”算法使得I/O请求等待时间之间的差距最小,吞吐量适中。 “电梯调度”算法杜绝饥饿,性能适中。 •“循环扫描”算法适应不断有大批量柱面均匀分布的I/O请求,且磁道上存放记录数量较大的情况。
5.5.6 独立磁盘冗余阵列(1) 独立磁盘冗余阵列是利用一台磁盘阵列控制器统一管理和控制一组磁盘驱动器,组成一个速度快 、可靠性高、性能价格比好的大容量磁盘系统。 RAID填补了CPU速度快与磁盘设备速度慢之间的间隙,其策略是:
独立磁盘冗余阵列(2) RAID共同特性 ②数据被分布存储在阵列横跨的物理驱动器上; ③冗余磁盘的作用是保存奇偶校验信息,当磁盘出现失误时它能确保数据的恢复。
独立磁盘冗余阵列(3) RAID Level 0(1) Strip0 Strip4 Strip8 Strip12 Strip1 Strip5
独立磁盘冗余阵列(4) RAID level 0(2) . Data mapping for a RAID Level0 Array Strip0 Strip4 Strip8 Strip12 Strip1 Strip5 Strip9 Strip13 Strip10 Strip3 Strip7 Strip15 Strip11 Strip2 Strip6 Strip14 Data mapping for a RAID Level0 Array . Array Management software
独立磁盘冗余阵列(5) RAID level 1 RAID Level 1 (Mirrored) Strip0 Strip4 Strip8
独立磁盘冗余阵列(6) RAID level 2 b0 b1 b2 b3 f0(b) f1(b) f2(b) RAID Level 2 (Redundancy through Hamming Code)
独立磁盘冗余阵列(7) RAID level 3 RAID Level 3 (Bit interleaved Parity) b0 b1 P(b) RAID Level 3 (Bit interleaved Parity)
独立磁盘冗余阵列(8) RAID level 4 RAID Level 4 (Block level Parity) block0 90 P(8-11) P(12-15) RAID Level 4 (Block level Parity)
独立磁盘冗余阵列(9) RAID level 5 RAID Level 5 (Block level Distributed parity)
5.5.7提高磁盘I/O速度的方法 提前读。 延迟写。 虚拟盘。
5.6 设备分配 5.6.1 设备独立性 5.6.2 设备分配
5.6.1 设备独立性 通常用户不指定特定的设备,而指定逻辑设备,使得用户作业和物理设备独立开来,再通过其它途径建立逻辑设备和物理设备之间的对应关系,称这种特性为“设备独立性”。 设备独立性带来的好处 用户与物理的外围设备无关,系统增减或变更外围设备时程序不必修改;易于对付输入输出设备的故障。
5.6.2 设备分配(1) 从设备的特性来看,可以把设备分成独占设备、共享设备和虚拟设备三类: 相应的管理和分配外围设备的技术可分成:独占方式、共享方式和虚拟方式 。 常用的I/O设备分配算法 先请求先服务,优先级高者先服务等。此外,在多进程请求I/O设备分配时,应防止因循环等待对方所占用的设备而产生死锁,应预先进行性检查。
设备分配(2) I/O设备分配的实现(1) 设备分配的数据结构:设备类表和设备表。 系统中拥有一张设备类表,每类设备对应于表中一栏,包括内容有:设备类、总台数、空闲台数和设备表起始地址等。 每一类设备都有各自的设备表,用来登记这类设备中每一台设备的状态,包含的内容有:物理设备名、逻辑设备名、占有设备的进程号、已分配/未分配、好/坏等。
设备分配(3) I/O设备分配的实现(2) 采用通道结构的系统中,设备分配的数据结构设置:系统设备表、通道控制表、控制器控制表和设备控制表。 系统建立一张系统设备表,记录配置在系统中的所有物理设备的情况。 每个通道、控制器、设备各设置一张表,记录各自的地址(标识符)、状态(忙/闲)、等待获得此部件的进程队列指针、及一次分配后相互勾链的指针,以备分配和执行I/O时使用。
5.7 虚拟设备 5.7.1 问题的提出 5.7.2 SPOOLING的设计和实现 5.7.3 SPOOLING应用例子
5.7.1问题的提出 静态分配方式是不利于提高系统效率 采用脱机外围设备操作 联机同时外围设备操作(又称作假脱机操作)
5.7.2 斯普林系统的设计和实现(1) “井”是用作缓冲的存储区域,采用井的技术能调节供求之间的矛盾,消除人工干预带来的损失。 “预输入程序” “缓输出程序” “井管理程序”
斯普林系统的设计和实现(2) SPOOLING组成和结构 预输入程序 输入井 输出井 缓输出程序 井管理 程序 运行作业 输入设备 输出设备 作业1信息 … 作业n信息 输入井 作业1结果 作业n结果 输出井 缓输出程序 井管理 程序 运行作业 输入设备 输出设备 作业调度程序
斯普林系统的设计和实现(3) 输入井中作业状态 • 输入状态: • 收容收态: • 执行状态: • 完成状态:
斯普林系统的设计和实现(4) SPOOLING数据结构 • 作业表 登记进入系统的所有作业的作业名、状态、预输入表位置等信息。 预输入表 每个用户作业有一张用来登记该作业的各个文件的情况,包括设备类、信息长度及存放位置等。 缓输出表 每个用户作业拥有一张包括作业名、作业状态、文件名、设备类、数据起始位置、数据当前位置等。
斯普林系统的设计和实现(5) 井文件空间的管理(1) 第一种是连接方式,输入的信息被组织成连接文件,这种方式的优点是数据信息可以不连续存放,文件空间利用率高。
斯普林系统的设计和实现(6) 井文件空间的管理(2) 第二种是计算方式,假定磁盘井文件空间,每个磁道存放100个80字节记录,每张卡片为80个字节,若每个柱面有20个磁道,则一个柱面可存放2000张卡片信息。第n张卡片信息被存放在: 磁道号=卡片号n /100 记录号=(卡片号n)mod100 用卡片号n除以100的整数和余数部分分别为其存放的磁道号和记录号。
斯普林系统的设计和实现(7) Spooling应用例子
5.8实例研究 :Windows 2000/XP的I/O系统
5.8.1Windows 2000/XP I/O系统结构和组件 Windows I/O系统是执行体的组件,存在于 NTOSKRNL.EXE文件中。 它接受来自用户态和核心态的I/O请求,并以不同形式把它们传送到I/O设备。
I/O系统的结构和组件 应用 程序 硬件抽象层HAL WIN32 系统服务 安装组件 用户模式即 插即用管理器 用户态 核心态 I/O管理器 即插即用管理器 电源管理器 WDM WMI例程 WDM接口 WDM即插即用总线驱动器 ACPI PC卡 USB PCI WDM设备驱动程序 即插即用驱动程序 硬件抽象层HAL WIN32 系统服务 WMI服务 安装组件 .inf .cat 注册表 I/O接口 电源管理器接口 即插即用接口 执行体其它接口
一个典型的I/O请求流程 I/O系统服务API(NtXXX) 用户模式API I/O管理器 驱动程序支持例程 核心态设备驱动程序 HAL I/O服务例程 I/O端口和寄存器 驱动程序支持例程 用户模式API
1、I/O管理器 I/O请求包IRP(I/O Request Packet) I/O管理器创建代表每个I/O操作的IRP,传递IRP给正确的驱动程序,且当此I/O操作完成后,处理这个数据包。 I/O管理器为不同驱动程序提供公共代码,驱动程序调用这些代码来执行它们的I/O处理。 I/O管理器提供I/O服务,允许环境子系统执行各自的I/O函数。
2.PnP管理器 自动识别已经安装的硬件设备。 通过资源仲裁(resource arbitrating)进程收集硬件资源需求(中断,I/O地址等)来实现硬件资源的优化分配; • 可在启动后根据系统中硬件配置的变化对硬件资源重新进行分配。 • 通过硬件标识选择应该加载的设备驱动程序。 • 为检测硬件配置变化提供应用程序和驱动程序的接口。
3、电源管理器 • 电源消耗:计算机系统消耗的能源。 • 软件运行恢复:计算机系统回复到正常工作状态时软件能否恢复运行。 底层硬件要符合ACPI(Advanced Configuration and PowerInterface)标准。 支持电源管理的计算机系统的BIOS(BasiclnputandOutputSystem)必须符合ACPI标准。 • 电源消耗:计算机系统消耗的能源。 • 软件运行恢复:计算机系统回复到正常工作状态时软件能否恢复运行。 • 硬件延迟:计算机系统回复到正常工作状态的时间延迟。
5.8.2Windows 2000/XP I/O系统的数据结构 文件对象、 驱动程序对象、 设备对象、 I/O请求包(IRP)。
1、文件对象 文件作为对象来管理,它们是两个或两上以上用户态进程的线程可以共享的系统资源,可以有名称,被基于对象的安全性所保护,并且它们支持同步。 当调用者打开文件或单一设备时,I/O管理器为文件对象返回句柄。 文件对象由包含访问控制表(ACL)的安全描述体保护。 I/0管理器查看安全子系统来决定文件的ACL是否允许进程去访问它的线程正在请求的文件。
2、驱动程序对象和设备对象(1) 线程为文件对象打开句柄时,I/O管理器根据文件对象名称来决定将调用哪个或哪些驱动程序来处理请求。下面的系统对象满足这些要求: 驱动程序对象,I/O管理器从驱动程序对象中获得并且为I/O记录每个驱动程序的调度例程的地址。 设备对象在系统中代表一个物理的、逻辑的设备并描述它的特征,例如,所需要的缓冲区的对齐方式和用来保存I/O请求包的设备队列位置。
驱动程序对象和设备对象(2) 驱动程序对象 功能码1 功能码2 功能码n 设备 对象 读 写 设备控制 启动I/O 卸载 该驱动程序 取消 设备 对象 该驱动程序 操作的设备
3、I/O请求包 (1) IRP是I/O系统用来存储处理I/O请求所需信息的数据结构。 线程调用I/O服务时,I/O管理器就构造一个IRP来表示在整个系统I/O进展中要进行的操作。 I/O管理器在IRP中保存一个指向调用者文件对象的指针。
I/O请求包 (2) IRP由两部分组成 固定部分(标题)和一个或多个堆栈单元。
5.8.3Windows2000/XP 设备驱动程序(1) Windows 2000/XP支持多种类型的设备驱动程序和编程环境,在同一种驱动程序中也存在不同的编程环境,具体取决于硬件设备。
设备驱动程序(2) 核心模式的驱动程序 文件系统驱动程序: PnP管理器和电源管理器设备驱动程序: Windows NT设备驱动程序: 符合Windows驱动程序模型的WDM驱动程序:
设备驱动程序(3) 用户模式驱动程序 虚拟设备驱动程序(VDD) Win32子系统驱动程序 类驱动程序 端口驱动程序 小端口驱动程序
设备驱动程序(4) 一个例子:文件系统驱动和磁盘驱动 环境子系统或 动态链接库 用户态 核心态 ①NtWriteFile(file-handle,char-buffer) 系统服务 ②在文件指定的偏移量处写数据 ③将文件中字节偏移量转换为盘上的字节偏移量,并通过I/O管理器调用下一个驱动程序 ④调用驱动程序在相对地址处写数据 ⑤把相对地址转换为物理地址,并写数据 I/O管 理器 文件系统 驱动程序
1、驱动程序结构(1) 初始化例程 添加设备例程 启动I/O例程 中断服务例程 中断服务DPC例程
驱动程序结构(2) 主要的设备驱动例程 调度 例程 启动I/O 添加设备例程 中断服务例程 初始化例程 DPC I/O 系统
2、同步(1) 驱动程序的执行可被高优先级线程抢先,或时间片到时被中断,或被其他中断所中断。 驱动程序必须同步执行对全局驱动程序数据的访问,主要原因: 驱动程序的执行可被高优先级线程抢先,或时间片到时被中断,或被其他中断所中断。 在多处理器系统中,Windows 2000/XP能同时在多CPU上运行驱动程序代码。
同步(2) • 设备驱动程序访问其ISR也要访问的数据时,内核提供设备驱动程序必须调用的特殊同步例程。当共享数据被访问时,内核同步例程将禁止ISR的执行。 • 单CPU系统中,这些例程将IRQL提高到一个指定的级别。 • 多CPU系统中,一种称为“自旋锁”的机制用来锁定来自指定CPU的独占访问的结构。
5.8.4Windows 2000/XP I/O处理 一个I/O请求会经过若干个处理阶段,且根据请求是指向由单层驱动程序操作的设备还是一个经过多层驱动程序才能到达的设备,它经过的阶段不同。 处理的不同进一步依赖于调用者是指定了同步I/O还是异步I/0。
1、I/O的类型 (1)同步I/O和异步I/O (2)快速I/O (3)映射文件I/O和文件高速缓存 (4)分散/集中I/O
2、对单层驱动程序的I/O请求 I/O请求经过子系统DLL。 子系统DLL调用I/0管理器的NtWriteFile服务。 I/O管理器以IRP形式给设备驱动程序发请求。 驱动程序启动I/O操作。 在设备完成了操作并且中断CPU时,设备驱动程序服务于中断。 I/O管理器完成I/O请求。
中断处理和I/0完成(1) I/O设备中断发生时,将控制转交给内核陷阱处理程序,内核将在它的中断向量表中搜索定位用于设备的ISR。 ISR被首次调用时,只在设备IRQL上停留获得设备状态所必需的一段时间,最后停止设备的中断。它使一个DPC排入队列,并退出服务例程,清除中断。
中断处理和I/0完成(2) I/O处理的第三阶段称作“I/O完成”,它因I/0操作的不同而不同。例如,全部的I/O服务都把操作的结果记录在由调用者提供的数据结构“I/O状态块”中。一些执行缓冲I/O的服务要求I/O系统返回数据给调用线程。
5.8.5Windows 2000/XP 高速缓存管理 1高速缓存管理器主要特征 (1)单一集中式系统高速缓存 (2)与内存管理器结合 (3)高速缓存的一致性 (4)虚拟块缓存 (5)基于流的缓存 (6)可恢复文件系统支持
2、高速缓存的结构(1) Windows 2000/XP系统高速缓存管理器基于虚拟空间缓存数据,它管理一块系统虚拟地址空间区域,而不是一块物理内存区域。 高速缓存管理器把每个地址空间区域分成256KB的槽(slot),被称为视图(view)。
高速缓存的结构(2) 系统高速缓存 文件A(500KB) 视图0 区域0 区域1 视图1 视图2 文件B(750KB) 视图3 视图4 … 视图n 区域0 区域1 视图5 区域2 系统高速缓存 文件A(500KB) 文件B(750KB) 文件C(100KB)
3、高速缓存的数据结构 (1)系统范围高速缓存数据结构 3、高速缓存的数据结构 (1)系统范围高速缓存数据结构 高速缓存管理器通过用虚拟地址控制块VACB(virtualaddresscontrolblock)在系统缓存中追踪视图的状态。 系统高速缓存中数据的虚地址 指向共享高速缓存映射的指针 文件偏移 活动计数 VACB结构
(2)单文件的缓存区数据结构 文件对象 私有缓存映射 预读信表息 共享缓存映射 私有缓存映射表 打开计数 文件大小 有效数据长度 入口0 入口1 入口2 入口3 额外的VACB 此文件的下一缓存映射 下一共享 缓存映射 VACB VACB索引组
4、高速缓存的操作 (1)回写缓存和延迟写 (2)计算脏页阈值 (3)屏蔽对文件延迟写 (4)强制写缓存到磁盘 (5)刷新被映射的文件 (6)智能预读 (7)虚拟地址预读 (8)带历史信息的异步预读
快速I/O(1) 读写被缓存文件可用被称为快速I/O的高速机制来处理。快速I/O读写一个缓存的文件不要产生I/O请求包(1RP)。 有了快速I/O机制,I/O管理器可以调用文件系统驱动程序的快速I/O例程来查看是否能够直接从高速缓存管理器得到所需的数据,而不需产生IRP。
快速I/O(2) 快速I/O的决策树 生成IRP 高速缓存结束 同步方式且缓存数据 高速缓存管理器与进程缓存区间拷贝数据 快速I/O 可能? 高速缓存管理器初始化缓存 生成IRP 高速缓存结束 同步方式且缓存数据 快速I/O 可能? 已经缓存了文件? 是 否
5、高速缓存支持例程 三种基本的访问缓存数据的方法 (1)“拷贝读取”方法,在系统空间中的高速缓存数据缓冲区和用户空间中的进程数据缓冲区之间拷贝用户数据。 (2)“映射暂留”方法,使用虚拟地址直接读写高速缓存的数据缓冲区。 (3)“物理内存访问”方法,使用物理地址直接读写高速缓存的数据缓冲区。
6、写阻塞(1) Windows 2000/XP必须确认调度写操作是否会影响系统的性能,然后,再安排各项延迟写操作。 它询问现在立刻写入一定数量的字节是否会损害性能,如果必要阻塞该项写操作。 它设置当写操作再次被允许时自动写入字节的回调。一旦获悉将要进行的写操作,便会判断高速缓存中有多少脏页和有多少可以使用的物理内存。如果空闲的物理内存页不足,立即阻塞请求向高速缓存中写数据的文件系统线程。
写阻塞(2) 高速缓存管理器的延迟写器会将一些脏页刷新到磁盘,然后允许被阻塞的文件系统线程继续。当文件系统或网络服务器进行大量写操作时,这种写阻塞机制防止了系统的性能由于缺少内存而下降。
5.9实例研究:Linux的设备管理 5.9.1 Linux设备管理概述 5.9.2 Linux硬盘管理 5.9.3 Linux网络设备
5.9.1 Linux的设备管理(1) •Linux操作系统中,I/O设备分为字符设备、块设备和网络设备。 •块设备把信息存储在可寻址的固定大小的数据块中,数据块均可以被独立地读写,建立块缓冲,能随机访问数据块。
Linux的设备管理(2) •网络设备是一种独立的设备类型,有特殊的处理方法。也有一些设备无法利用上述方法分类,如时钟,也需要特殊的处理。 •字符设备可以发送或接收字符流,通常无法编址,也不存在任何寻址操作。 •网络设备是一种独立的设备类型,有特殊的处理方法。也有一些设备无法利用上述方法分类,如时钟,也需要特殊的处理。
Linux的设备管理概述 (3) •硬件设备均当作特殊设备文件处理,使用标准的文件操作。 对字符设备和块设备,设备文件用mknod命令创建,用主设备号和次设备号标识,同一个设备驱动程序控制的所有设备具有相同的主设备号,并用不同的次设备号加以区别。 网络设备也当作设备文件来处理,不同的是这类设备由Linux创建,并由网络控制器初始化。
Linux核心负责I/O设备的操作,管理和控制硬件设备控制器的程序代码称设备驱动程序,具体控制和管理I/O设备。设备驱动程序有以下共同特性: • 核心代码。 • 核心接口。 • 核心机制和服务。 • 可装载性。 • 可配置性。 • 动态性。
设备输入输出(1) Linux的设备驱动程序可以通过多种形式来控制设备进行I/O: 查询(polling)、 中断 直接内存访问
设备输入输出(2) 查询方式 Linux专门引入了系统定时器,以便每隔一段时间才查询一次设备的状态,从而解决忙式查询带来的效率下降问题。
设备输入输出(3) 中断方式 在中断方式下,核心能够把中断传递到发出I/O命令的设备驱动程序。 设备驱动程序在初始化时向核心注册所使用的中断编号和中断处理子程序入口地址,/proc/interrupts文件列出了设备驱动程序所使用的中断编号。
设备输入输出(4) DMA方式(1) 硬盘设备、SCSI设备等高速设备,采用DMA方式进行I/O控制。 DMA控制器不能使用虚拟内存,且由于其地址寄存器只有16位,它只能访问系统最低端的16M内存。
设备输入输出(5) DMA方式(2) DMA不能被不同的设备驱动程序共享,一些设备独占专用的DMA,另一些设备互斥使用DMA。 Linux使用dma_chan数据结构跟踪DMA的使用情况,它包括拥有者的名字和分配标志两个字段,可使用cat /proc/dma命令列出dma_chan的内容。
5.9.2 Linux的硬盘管理(1) 一个典型的Linux系统一般包括 一个DOS分区、 一个EXT2分区(Linux主分区)、 以及零个或多个扩展用户分区。
Linux的硬盘管理(2) IDE系统(一种磁盘接口)和SCSI系统(一种I/O总线)的管理有所不同。系统多数使用IDE硬盘,每个IDE控制器可挂接两个IDE硬盘,一个称为主硬盘,一个称从硬盘。 系统可有多个IDE控制器,第一个称为主IDE控制器,第二个称为从IDE控制器。最多支持4个IDE控制器, 每一个控制器用ide_hwif_t数据结构描述,所有这些描述集中存放在ide_hwifs向量中。每一个ide_hwif_t包括两个ide_drive_t数据结构,分别用于描述主IDE硬盘和从IDE硬盘。
Linux的硬盘管理(3) SCSI总线是一种高效率数据总线,每条最多可以挂接八个SCSI设备。每个设备有唯一的标识符。 总线上的任意两个设备之间可以同步或异步地传输数据,在数据线为32位时数据传输率可以达到40MB/秒。SCSI总线可以在设备间同时传输数据与状态信息。
5.9.3 Linux的网络设备(1) 网络设备文件在网络设备被检测到和初始化时由系统动态产生。 网络设备用device数据结构描述,该数据结构包含一些设备信息以及一些操作例程,这些例程用来支持各种网络协议,可以用于传送和接收数据包。
Linux的网络设备(2) 网络设备数据结构 1) 名称 2)总线信息 3)接口标志 4)协议信息 5)包队列 6)支持函数
5.9.4Linux设备驱动程序(1) 设备驱动程序是内核的一部分,有许多种,为了协调设备驱动程序和内核的开发,必须有严格定义和管理的接口。Linux的设备驱动程序与外界的接口分为三部分:(1)驱动程序与系统内核的接口;(2)驱动程序与系统引导的接口;(3)驱动程序与设备的接口。
Linux设备驱动程序(2) 驱动程序的注册与注销。 设备的打开与释放。 设备的读写操作。 设备的控制操作。 设备的中断和轮询处理。 按照功能,设备驱动程序代码可分为: 驱动程序的注册与注销。 设备的打开与释放。 设备的读写操作。 设备的控制操作。 设备的中断和轮询处理。