Presentation is loading. Please wait.

Presentation is loading. Please wait.

China’s Software Industry August 2006 Instructor: Hengming Zou, Ph.D.

Similar presentations


Presentation on theme: "China’s Software Industry August 2006 Instructor: Hengming Zou, Ph.D."— Presentation transcript:

1 China’s Software Industry August 2006 Instructor: Hengming Zou, Ph.D.
设备管理与I/O系统 Instructor: Hengming Zou, Ph.D. In Pursuit of Absolute Simplicity 求于至简,归于永恒

2 内容提要 1. 设备管理概述 2. I/O硬件特性 3. 设备管理的实现技术 4. I/O软件的结构 5. Windows I/O系统的结构

3 设备管理概述 I/O系统是操作系统的一个重要的组成部分,负责管理系统中所有的外部设备
在计算机系统中除CPU和内存储外所有的设备和装置统称为计算机外部设备(外围设备、I/O设备) 设备管理的意义 设备的分类 设备管理的任务和功能

4 设备管理的意义 操作系统复杂和庞大的主要原因是它所管理的资源的庞杂和并发技术的采用,而输入输出设备的庞杂正是操作系统所管理的资源庞杂的主要原因,输入输出设备的速度远低于处理器的速度正是导致并发技术产生的直接原因 所以,I/O系统的性能是操作系统总体性能的重要决定因素、重要表现指标和常见瓶颈之一,因此设备管理在操作系统中具有十分重要的地位

5 设备管理的意义 设备管理的意义表现在以下几方面:
输入输出设备的性能经常成为系统性能的瓶颈,CPU性能越高,输入输出设备性能同CPU性能不匹配的反差也越大。如何解决这一矛盾,而又尽量不降低处理机的性能,是设备管理的一项重要任务 输入输出设备千变万化,怎样对它们实现统一的管理,从而方便用户使用是设备管理的又一项重要任务 在应用中,输入输出设备能否及时将各种信息传送给计算机系统,计算机发出的各种命令能否通过输入输出设备及时传送给执行部件,对于实时处理和控制系统而言,是至关重要的 用户对输入输出设备的使用必须是安全的。如何保证安全正确地使用设备,也是设备管理的重要任务

6 设备的分类 按设备的使用特性分类:输入输出设备(狭义)和外存设备
按信息组织方式分类:字符设备(character device)和块设备(block device) 键盘、终端、打印机等以字符为单位组织和处理信息的设备被称为字符设备;磁盘、磁带等以字符块为单位组织和处理信息的设备被称为块设备

7 设备的分类 按设备使用可共享性分类:独占设备、共享设备和虚拟设备
独占设备是指在任一给定的时刻只能让一个进程使用,即必须保证一个进程对一个具体设备在可能相当长的时间内拥有唯一存取权 共享设备是指能够同时让许多进程使用的设备。磁盘是典型的共享设备,多个进程同时在同一磁盘上拥有打开的文件不会带来任何不良后果 虚拟设备是指设备本身是独占设备,而经过某种技术处理,可以把它改造成共享设备,同时分配给多个进程

8 设备的分类 按输入输出对象分类:人机通讯与机机通讯设备 按是否交互分类:非交互设备与交互设备
机机通讯设备、外存、卡带机等属于非交互设备,终端为交互设备 按数据传输率分类:高速设备和低速设备

9 设备管理的任务和功能 用户对I/O设备的使用要求是方便、高效、安全、正确,相应地,设备管理功能也就应该在计算机硬件结构提供的既定设备范围及其连接模式下,完成为用户对I/O设备的使用过程提供方便、提高效率、提供保护这三方面的任务

10 设备管理的任务和功能 1.方便性方面 用户总是希望方便地使用I/O设备,但是I/O设备种类繁多,处理过程非常复杂,涉及到大量I/O细节,如寄存器、中断、控制字符、设备字符集等。如果让用户直接使用设备硬件接口,是十分不便的 为了弥补硬件接口给用户带来的不便,操作系统的设备管理部分提供了两个主要的功能: 抽象接口 设备独立性

11 设备管理的任务和功能 1.方便性方面——抽象接口 提供简便易用的高级逻辑接口,这些接口由对逻辑设备的逻辑操作组成
实现抽象接口到物理接口的转化,即将高级逻辑操作转化为低级物理操作,将逻辑设备和逻辑性质转化为物理设备和物理性质,以便掩盖设备的硬件物理操作和组织的细节

12 设备管理的任务和功能 1.方便性方面——设备独立性 设备独立性是指用户在编写程序时所使用的设备与实际设备无关 两类设备独立性:
1.一个程序应独立于分配给它的某类设备的具体设备。即在用户程序中只指明I/O使用的设备类型即可。如在系统中配备了两台打印机,用户要打印时只要告诉系统要将信息送到打印机即可 2.程序要尽可能地与它使用的设备类型无关。即在用户程序中只要指出要输入或输出信息,至如信息I/O使用的设备不需用户指明

13 设备管理的任务和功能 1.方便性方面——设备独立性 设备独立性的优点 设备独立性的实现 1.方便用户编程
2.使用程序运行不受具体的机器环境的限制 3.便于程序移植 设备独立性的实现 把设备与文件统一处理,对于用户来说,并没有设备的概念

14 设备管理的任务和功能 2.效率方面 用户永远关心效率:非系统用户关心程序运行效率与操作效率;系统用户关心系统利用率、系统代价、系统工作效率
为了提高设备与CPU的效率,引入了大量的技术如中断、缓冲、DMA、通道等等,这些技术不仅需要相应的硬件,还需要相应的软件来配合,才能达到引入这些技术所预期的目标

15 设备管理的任务和功能 2.效率方面 操作系统的设备管理功能的第二大任务是采用各种纯软件或与硬件配合的软件技术来提高设备效率和与此相关的系统效率,提供物理I/O设备的共享并优化这些设备的使用,并借助抽象接口使得这些效率优化技术得以由系统在内部实施并对用户透明 操作系统设备管理功能要主要采用了以下技术: 设备共享技术 虚拟设备技术 缓冲技术

16 设备管理的任务和功能 3.保护方面 用户希望能安全正确地使用设备,这种希望体现为由设备传送或管理的数据应该是安全的,不被破坏和泄密的;对设备拥有所有权的用户,这种希望体现为设备不能被破坏,系统在安全可靠方面的信誉应得到保证 操作系统的设备管理功能的另一任务是提供安全保护机制,用于保护设备,尤其是保护由设备传送或管理的数据

17 I/O硬件特性 I/O系统的结构 I/O设备接口 I/O设备的控制

18 I/O系统的结构

19 I/O设备接口 操作系统不是直接与设备打交道,而是与设备控制器打交道。每个设备控制器都有几个寄存器用来与CPU进行通信,包括控制寄存器、状态寄存器和数据寄存器。通过写入控制寄存器,操作系统可以控制设备发送数据、接收数据、开启或关闭;通过读取状态寄存器,操作系统可以获悉设备的状态,如是否准备好接受一个新的命令;数据寄存器通常作为操作系统可以读写的数据缓冲区

20 I/O设备的控制 输入输出设备的I/O控制方式有程序直接控制方式、中断控制方式、DMA方式和通道控制方式 1.程序直接控制方式
程序直接控制方式是指由用户进程直接控制内存或CPU和外围设备之间进行信息传送的方式,也称为“忙-等”方式、轮询方式或循环测试方式,这种方式的控制者是用户进程

21 I/O设备的控制 1.程序直接控制方式 当用户进程需要从外围设备输入数据时,它通过CPU发出启动设备准备数据的启动命令(通常是把一个启动位为1的控制字写入设备的控制寄存器中),然后,用户进程进入测试等待状态。在等待时间,CPU不断地用一条测试指令检查设备的状态寄存器是否为完成状态(通常是检测状态寄存器的完成位是否为1),而外围设备只有将输入数据送入数据缓冲寄存器之后,才将该寄存器置为完成状态。当CPU检测到设备的状态寄存器为完成状态,则从设备的数据缓冲寄存器读取数据到内存或CPU 用户进程需要向输出设备输出数据时,也必须同样发出启动命令和等待设备准备好之后才能输出数据

22 I/O设备的控制 1.程序直接控制方式 程序直接控制方式的优点是CPU 和外设的操作能通过状态信息得到同步,而且硬件结构比较简单;其缺点是CPU 效率较低,传输完全在CPU控制下完成,对外部出现的异常事件无实时响应能力 程序直接控制方式只适用于那些CPU执行速度较慢,而且外围设备较少的系统,如单片机系统

23 I/O设备的控制 2.中断控制方式 中断是一种在发生了一个异常事件时,调用相应处理程序(通常称为中断服务程序)进行服务的过程
中断源一旦需要CPU为其服务时,就向CPU发出请求,CPU一般在当前指令执行完,且状态为允许中断的情况下响应该请求。并由硬件自动关中断(防止在保留断点和程序转移过程中又有新的中断请求发生)、保留断点、转到相应的中断服务程序入口处。然后执行中断服务程序,由软件完成中断服务。中断服务程序结束,执行返回指令返回断点,继续执行原程序

24 I/O设备的控制 2.中断控制方式 如要采用中断方式进行数据传送,则相应CPU及接口就应具备中断机构 CPU 接口 ③ 外设 IR 中断
CPU IR INTA WE RD 接口 外设 完成 启动 数据 数据缓存 地址译码 命令寄存器 中断屏蔽 触发器 中断请求 数据寄 存器 地址寄 地址 中断判 优电路 中断 请求 寄存 允许 控制

25 I/O设备的控制 2.中断控制方式 中断控制方式的优点: 中断控制方式的局限: CPU与外设在大部分时间内并行工作,提高了计算机的效率
具有实时响应能力,可适用于实时控制场合 及时处理异常情况,提高计算机的可靠性 中断控制方式的局限: 用中断方式交换数据时,每处理一次I/O数据交换,都会耗去一定的CPU处理时间,对于一些高速的外围设备,以及成组交换数据的情况,仍然显得速度太慢

26 I/O设备的控制 3.DMA方式 DMA是直接内存访问(Direct Memory Access)的缩写,它是一种完全由硬件执行I/O数据交换的工作方式。在这种方式中,DMA控制器(DMAC)从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和I/O设备之间进行 采用DMA方式工作时,由DMA控制器向内存发出地址和控制信号,进行地址修改,对传送字的个数计数,并且以中断方式向CPU报告传送操作的结束

27 I/O设备的控制 3.DMA方式 DMA方式的传送结构 内存 CPU DMAC 外设 HOLD 总线请求 HLDA 总线响应 DMA 请求

28 I/O设备的控制 3.DMA方式 DMA方式的数据块传送过程可分为三个阶段:传送前预处理;数据传送;传送后处理
预处理阶段——由CPU执行I/O指令对DMAC进行初始化与启动 数据传送阶段——由DMAC控制总线进行数传。 后处理阶段——传送结束,DMAC向CPU发中断请求,报告DMA操作的结束

29 I/O设备的控制 3.DMA方式 DMA方式的优点: DMA方式的局限性: 操作均由硬件电路实现,传输速度快
CPU仅在初始化和结束时参与,对数据传送基本上不干预,可以减少大批量数据传输时CPU的开销; CPU与外设并行工作,效率高 DMA方式的局限性: 在初始化和结束时仍由CPU控制

30 I/O设备的控制 4.通道控制方式 通道(channel)是一个特殊功能的处理器,它有自己的指令和程序,可以实现对外围设备的统一管理和外围设备与内存之间的数据传送。引入通道的目的是为了进一步减少数据输入输出对整个系统运行效率的影响 与DMA方式相比,通道方式增加了CPU与通道操作的并行能力;增加了通道之间以及同一通道内各设备间的并行操作能力;为用户提供了灵活增加外设的可能性

31 I/O设备的控制 4.通道控制方式 一个系统中可以设立三种类型的通道: 选择通道 数组多路通道 字节多路通道

32 I/O设备的控制 4.通道控制方式 I/O 控制器 终端 ... 磁带 磁盘 总线 CPU 字节 多路通道 数组 选择通道

33 设备管理的实现技术 中断技术 缓冲技术 设备分配技术

34 中断技术 1.中断的基本概念 中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程 引起中断发生的事件被称为中断源。中断源向CPU发出的请求中断处理信号称为中断请求,而CPU收到中断请求后转到相应的事件处理程序称为中断响应

35 中断技术 1.中断的基本概念 在有些情况下,尽管产生了中断源和发出了中断请求,但CPU内部的处理机状态字PSW的中断允许位已被清除,从而不允许CPU响应中断。这种情况称为禁止中断,或称为关中断。PSW的中断允许位的设置也被称为开中断。开中断和关中断是为了保证某段程序执行的原子性 中断屏蔽是指在中断请求产生之后,系统有选择地封锁一部分中断而允许另一部分的中断仍能得到响应

36 中断技术 2.中断的分类与优先级 根据系统对中断处理的需要,操作系统一般对中断进行分类并对不同的中断赋予不同的处理优先级,以便在不同的中断同时发生时,按轻重缓急进行处理 根据中断源产生的条件,可把中断分为外中断和内中断

37 中断技术 2.中断的分类与优先级 中断和陷入的主要区别: 陷入通常由处理机正在执行的现行指令引起,而中断则是由与现行指令无关的中断源引起的
陷入处理程序提供的服务为当前进程所用,而中断处理程序提供的服务则不是为了当前进程的 CPU执行完一条指令之后,下一条指令开始之前响应中断,而在一条指令执行中也可以响应陷入。例如执行指令非法时,尽管被执行的非法指令不能执行结束,但CPU仍可对其进行处理

38 中断技术 2.中断的分类与优先级 为了按中断源的轻重缓急处理响应中断,计算机统为不同的中断赋予不同的优先级。为了禁止中断或屏蔽中断,CPU的处理机状态字PSW中也设有相应的优先级。如果中断源的优先级高于PSW的优先级,则CPU响应该中断源的请求,反之,CPU屏蔽该中断源的中断请求 各中断源的优先级在系统设计时给定,在系统运行时是固定的。而处理机的优先级则根据执行情况由系统程序动态设定

39 中断技术 3.Windows的中断处理 当处理器收到中断请求时,要通知相应设备的驱动程序进行处理。为此,设备驱动程序应该向I/O管理器注册一个ISR,可以通过调用IoConnectInterrupt来实现 IoConnectInterrupt初始化一个中断对象,来存放关于中断及其ISR的信息。同时使处理器的中断服务表的相应表项指向该中断对象

40 中断技术 外设控制器 中断控制器 中断服务表 中断对象 KiInterruptDispatch 驱动程序ISR 3.Windows的中断处理

41 缓冲技术 计算机系统中各个部件速度的差异是明显的。在不同时刻,系统各部分的负荷也常常很不均衡
虽然中断和通道技术为系统各部分并行工作提供了可能,但是由于中央处理机和外部设备速度不匹配以及工作不均衡,它们的并行程度并不能得到充分发挥 缓冲技术是解决这一问题的一种常用的技术

42 缓冲技术 进程 行式打印机 (a) 无缓冲存储区 进程 行式打印机 (b) 单缓冲 进程 buffer1 buffer2 行式打印机 (c)
Tc Tc2 Tc3 进程 行式打印机 Tlpt Tlpt2 Tlpt3 (a) 无缓冲存储区 Tc Tmv1 Tc Tmv2 Tc3 Tmv Tc4 进程 行式打印机 Tlpt Tlpt2 Tlpt3 (b) 单缓冲 Tc Tmv1 Tc2 Tmv2 Tc3 Tmv Tc Tmv4 进程 buffer1 buffer2 行式打印机 Tlpt Tlpt Tlpt3 (c) 双缓冲 进程在处理机上运行,行式打印机工作 进程睡眠等待,打印机空闲

43 缓冲技术 缓存技术是以空间换取时间,而且它只能在设备使用不均衡时起到平滑作用。如果在相当长的一段时间内,进程提出的输入/输出要求超出了相应设备不间断工作所能完成的总量,那么一旦缓存已全部存放了I/O信息后,多缓存的作用也就基本消失

44 设备分配技术 在计算机系统中,设备、控制器和通道等资源是有限的,并不是每个进程随时都可以得到这些资源,它首先需要向设备管理程序提出申请,然后由设备管理程序按照一定的分配算法给进程分配必要的资源

45 设备分配算法的数据结构 系统设备表 ( SDF ) 表目 1 … i 设备类型 设备标识 获得设备的进程号 DCT 指针 设备控制表(
设备忙 / 闲标记 COCT 设备等待队列首指针 设备等待队列尾指针 控制器控制表( 控制器标识 控制器忙 CHCT 控制器等待队列首指针 控制器等待队列尾指针 通道控制表( 通道标识 通道忙 通道等待队列首指针 通道等待队列尾指针

46 设备分配的原则 要充分发挥设备的使用效率 避免不合理的分配方式造成死锁、系统工作紊乱等现象 使用户在逻辑层面上能够合理方便地使用设备

47 设备分配的原则 考虑设备的特性和安全性 设备的特性是设备本身固有的属性,一般分为独占、共享和虚拟设备
从安全性方面考虑,有安全分配方式和不安全分配方式两种

48 设备分配的原则 设备分配策略 通常采用先来先服务(FIFO)和高优先级优先
先来先服务,就是当多个进程同时对一个设备提出I/O请求时,系统按照进程提出请求的先后次序,把它们排成一个设备请求队列,并且总是把设备首先分配给排在队首的进程使用 高优先级优先,就是给每个进程提出的I/O请求分配一个优先级,在设备请求队列中把优先级高的排在前面,如果优先级相同则按照FIFO的顺序排列。这里的优先级与进程调度中的优先级往往是一致的,这样有助于高优先级的进程优先执行、优先完成

49 独占设备的分配 独占设备每次只能分配给一个进程使用,这种使用特性隐含着死锁的必要条件,所以在考虑独占设备的分配时,一定要结合有关防止和避免死锁的安全算法 用户使用独占设备的活动如下: 申请,使用,使用,‥‥‥,使用,释放

50 独占设备的分配 对于申请命令,系统将设备分配给申请者,具体方法如下: ① 根据申请的设备类型查询系统设备表,找到对应入口 ② P(Sm)
③ 查对应的设备表,找一空闲设备并分配

51 独占设备的分配 对于释放命令,系统将设备从占有者手中收回,具体方法如下: ① 根据释放设备类型查询系统设备表,找到对应入口
② 查对应的设备表,找到要释放的设备去配 ③ V(Sm)

52 共享设备的分配 共享设备是可由若干个进程同时共享的设备。用户使用独占设备的活动如下:
使用,使用,‥‥‥,使用 与独占型设备不同,用户在使用共享设备时并没有明显的申请和释放活动。但是,在每一个使用命令之前都隐含有一个申请命令,在每一个使用命令之后都隐含有一个释放命令,在此隐含的申请命令和隐含的释放命令之间,执行了一次I/O传输

53 虚拟设备 系统中的独占设备是有限的,往往不能满足诸多进程的要求,因而会引起大量进程由于等待某些独占设备而阻塞,成为系统中的“瓶颈”;另一方面,申请到独占设备的进程在其整个运行期间虽然占有设备,利用率却常常很低,设备还是经常处于空闲状态

54 虚拟设备 为了解决上述矛盾,最常用的方法就是用共享设备来模拟独占设备的操作,从而提高系统效率和设备利用率。这种技术就称为虚拟设备技术,实现这一技术的软、硬件系统被称为SPOOLing系统 SPOOLing系统通常分为输入SPOOLing和输出SPOOLing,二者工作原理类似

55 虚拟设备 输出SPOOLing的基本原理(以常见的共享打印机为例):
打印机是一种典型的独占设备,引入SPOOLing技术后,用户的打印请求传递给SPOOLing系统,而并不是真正把打印机分配给用户。SPOOLing系统的输出进程在磁盘上申请一个空闲区,把需要打印的数据传送到里面,再把用户的打印请求挂到打印队列上。如果打印机空闲,就会从打印队列中取出一个请求,再从磁盘上的指定区域取出数据,执行打印操作。由于磁盘是共享的,SPOOLing系统可以随时响应打印请求并把数据缓存起来,这样就把独占设备改造成了共享设备,从而提高了设备的利用率和系统效率

56 小测验 1.()是操作系统中采用的以空间换时间的技术。
A、缓冲技术 B、并行技术 C、通道技术 D、虚拟存储技术 2.通过硬件和软件的功能扩充,把原来独占的设备改造成若干用户共享的设备,这种设备称为()。 A、存储设备 B、系统设备 C、虚拟设备 D、用户设备

57 小测验 3.对于磁盘来说,输入输出操作的信息传送单位为()。 4.CPU输出数据的速度远远高于打印机的打印速度,为解决这一矛盾,可采用()。
A、字节 B、字 C、文件 D、块 4.CPU输出数据的速度远远高于打印机的打印速度,为解决这一矛盾,可采用()。 A、并行技术 B、通道技术 C、缓冲技术 D、虚拟存储技术

58 小测验 5.通道又称I/O处理机,它用于实现()之间的信息传输。
A、主存与外设 B、CPU与外设 C、主存与外存 D、CPU与外存 6.如果I/O设备与存储设备进行数据交换不经过CPU来完成,这种数据交换方式是()。 A、中断方式 B、无条件存取方式 C、DMA方式 D、程序查询方式

59 习题 I/O系统在整个操作系统中所起的作用和地位是什么? 在I/O系统中引入缓冲的主要原因是什么?
说明SPOOLing系统的特点以及其工作方式。 设备分配算法有哪些?

60 4.I/O软件的结构 I/O软件的结构,其基本思想是分层构造,即在于把设备管理软件组织成为一系列的层次,其中低层与硬件相关,它把硬件与较高层次的软件隔离开来。而最高层的软件则向应用提供一个友好的,清晰而统一的接口 I/O软件一般可以分为四层: 中断处理程序 设备驱动程序 与设备无关的操作系统软 用户级软件

61 设备驱动程序 设备驱动程序是直接同硬件打交道的软件模块。设备驱动程序的任务是接受来自与设备无关的上层软件的抽象请求,进行与设备相关的处理

62 设备驱动程序 设备驱动程序的功能 设备驱动程序主要有以下四个方面的处理工作:
向有关的输入输出设备的各种控制器发出控制命令,并且监督它们的正确执行,进行必要的错误处理 对各种可能的有关设备排队、挂起、唤醒等操作进行处理 执行确定的缓冲区策略 进行比寄存器接口级别层次更高的一些特殊处理

63 设备驱动程序 设备驱动程序的特性 设备驱动程序与I/O设备的硬件结构密切联系 设备驱动程序中全部是依赖于设备的代码
设备驱动程序是操作系统底层中唯一知道各种输入输出设备的控制器细节以及其用途的部分

64 设备驱动程序 设备驱动程序的结构 不同的操作系统对设备驱动程序的结构的要求是不同的。一般在操作系统的相关文档中,都有对设备驱动程序结构方面的统一要求 设备驱动程序的结构同输入输出设备的硬件特性有关

65 设备驱动程序 设备驱动程序层的内部策略 设备驱动程序层的内部策略包括以下几方面 : (1)确定是否发请求 (2)确定发什么 (3)发布命令
(4)发后处理 (5)中断时被调用的驱动程序的事后处理

66 与设备无关的系统软件 设备驱动程序与设备无关的软件之间的界限如何划分,随操作系统的不同而变化。具体划分原则取决于系统的设计者怎样考虑系统与设备的独立性、驱动程序的运行效率等诸多因素的平衡

67 与设备无关的系统软件 与设备无关I/O软件的功能 设备驱动程序的统一接口 设备命名 设备保护 提供一个与设备无关的逻辑块 缓冲
存储设备的块分配 独占设备的分配和释放 错误处理

68 用户空间的I/O软件 大部分I/O软件都包含在操作系统中,但是用户程序仍有一小部分是与库函数连接在一起的,通常的系统调用,包括I/O系统调用,是由库函数实现。例如: count=write(fd,buffer,nbytes); 标准的I/O库包含了许多涉及I/O的过程,它们都是作为用户程序的一部分运行的

69 I/O软件的层次

70 5. Windows I/O系统的结构 I/O系统是Windows执行体的组件,主要存在于NTOSKRNL.EXE文件中。它接受I/O请求(来自用户态和核心态的调用程序),并且以不同的形式把它们传送到I/O设备 在用户态I/O函数和实际的I/O硬件之间有几个分立的系统组件,包括文件系统驱动程序、过滤器驱动程序和低层设备驱动程序

71 Windows I/O系统的设计目标 在单处理器或多处理器系统中都可以快速进行I/O处理
使用标准的Windows 2000/XP安全机制保护共享的资源 满足Microsoft Win32、OS/2和POSIX子系统指定的I/O服务的需要 提供服务,使设备驱动程序的开发尽可能地简单,并且允许用高级语言编写驱动程序

72 Windows I/O系统的设计目标 根据用户的配置或者系统中硬件设备的添加和删除,允许在系统中动态地添加或删除相应的设备驱动程序
通过添加驱动程序透明地修改其他驱动程序或设备的行为 为包括FAT、CD-ROM文件系统(CDFS)、UDF(Universal Disk Format)文件系统和Windows 2000/XP文件系统(NTFS)的多种可安排的文件系统提供支持 允许整个系统或者单个硬件设备进入和离开低功耗状态,这样可以节约能源

73 Windows I/O系统组件

74 一个典型的I/O请求流程 用户模式API I/O系统服务 API(NtXXX) 驱动程序支持例程 I/O管理器 核心模式设备驱动程序
HAL I/O服务例程 驱动程序支持例程 I/O端口和寄存器

75 I/O管理器 I/O管理器定义有序的工作框架,在该框架里,I/O请求被提交给设备驱动程序。在Windows中,整个I/O系统是由包驱动的,大多数I/O请求用I/O请求包(IRP)表示,它从一个I/O系统组件移动到另一个I/O系统组件(快速I/O是一个特例,它不使用IRP)

76 I/O管理器 I/O管理器创建代表每个I/O操作的IRP,传递IRP给正确的驱动程序,并且当此I/O操作完成后,处理这个数据包
驱动程序接受IRP,执行IRP指定的操作,并且在完成操作后把IRP送回I/O管理器或为下一步的处理而通过I/O管理器把它送到另一个驱动程序

77 I/O管理器 除了创建并处理IRP以外,I/O管理器还为不同的驱动程序提供了公共的代码,驱动程序调用这些代码来执行它们的I/O处理

78 I/O管理器 I/O管理器也提供灵活的I/O服务,允许环境子系统(Win32和POSIX)执行它们各自的I/O函数。这些服务包括用于异步I/O的高级服务,它们允许开发者建立可升级的高性能的服务器应用程序

79 I/O管理器 驱动程序呈现的统一的、模块化的接口允许I/O管理器调用任何驱动程序而不需要与它的结构和内部细节有关的任何特殊的知识

80 PnP管理器 由于一个系统可以配置多种外部设备,设备也经常变动和更换,它们都要占有一定的系统资源,彼此间在硬件和软件上可能会产生冲突。因此在系统中要正确地对它们进行配置和资源匹配;当设备撤除、添置和进行系统升级时,配置过程往往是一个困难的过程。为了改变这种状况,出现了PnP 技术

81 PnP管理器 PnP 技术主要有以下特点: PnP 技术支持I/O设备及部件的自动配置,使用户能够简单方便地使用系统扩充设备

82 PnP管理器 PnP 技术主要有以下特点: PnP管理器为Windows 提供了识别并适应计算机系统硬件配置变化的能力。

83 PnP管理器 为了支持PnP,设备驱动程序必须支持PnP调度例程和添加设备的例程,总线驱动程序必须支持不同类型的PnP请求

84 PnP管理器 PnP状态转换 未启动 启动 悬而未决 停止 意外拆卸 拆卸 remove Start device Query remove
command Query stop Stop Query remove Surprise remove remove PnP状态转换

85 电源管理器 电源管理也需要底层硬件的支持,底层的硬件需要符合高级配置与电源接口ACPI(Advanced Configuration and Power Interface)标准 支持电源管理的计算机系统的BIOS必须符合ACPI标准

86 电源管理器 ACPI为系统和设备定义了不同的能耗状态,目前共有六种,从S0(正常工作)到S5(完全关闭)。每一种状态都有如下指标:
电源消耗:计算机系统消耗的能源 软件运行恢复:计算机系统回复到正常工作状态时软件能否恢复运行 硬件延迟:计算机系统回复到正常工作状态的时间延迟

87 电源管理器

88 电源管理器 计算机系统在从S1到S4的状态之间互相转换,转换必须先通过状态S0。从S1到S5的状态转换到S0称作唤醒,从S0转换到S1到S5称作睡眠

89 电源管理器 系统能耗状态 设备能耗状态 S0 D0(正常工作) S1 D2 S2 S3 S4 D2(关闭) S5 D3(关闭)

90 电源管理器 Windows 的电源管理策略由两部分组成:电源管理器和设备驱动程序
电源管理器是系统电源策略的所有者,整个系统的能耗状态转换由电源管理器决定,并调用相应设备的驱动程序完成。电源管理器根据以下因素决定当前相同的能耗状态: 系统活动状况 系统电源状况 应用程序的关机、休眠请求 用户的操作,例如用户按电源按钮 控制面板的电源设置

91 电源管理器 设备驱动程序可以独立地控制设备的能耗状态。在一些情况下,当设备长时间不用时,设备驱动程序就可以减小该设备的能耗
设备驱动程序可以自己检测设备的闲置时间,也可以通过电源管理器检测

92 电源管理器 系统电源管理策略

93 设备驱动程序 Windows支持多种类型的设备驱动程序和编程环境,在同一种驱动程序中也存在不同的编程环境,具体取决于硬件设备

94 设备驱动程序 核心驱动程序的种类主要分为以下几种: 文件系统驱动程序 同Windows 的PnP管理器和电源管理器有关的设备驱动程序
为Windows NT编写的设备驱动程序 Win32子系统显示驱动程序和打印驱动程序 符合Windows驱动程序模型的WDM驱动程序

95 设备驱动程序 WDM驱动程序有三种类型: 总线驱动程序管理逻辑的或物理的总线,总线驱动程序需要检测并向PnP管理器通知总线上的设备,并且能够管理电源 功能驱动程序管理具体的一种设备,对硬件设备进行的操作都是通过功能驱动程序进行的 过滤驱动程序与功能驱动程序协同工作,用于增加或改变功能驱动程序的行为

96 设备驱动程序 硬件支持驱动程序可以分为以下类型: 类驱动程序(class drivers)为某一类设备执行I/O处理,例如磁盘、磁带或光盘
端口驱动程序(port drivers)实现了对特定于某一种类型的I/O端口的I/O请求的处理,例如SCSI 小端口驱动程序(miniport drivers)把对端口类型的一般的I/O请求映射到适配器类型。例如,一个特定的SCSI适配器

97 设备驱动程序 用户模式的驱动程序 : 虚拟设备驱动程序(VDD)通常用于模拟16位MS-DOS应用程序。它们捕获MS-DOS应用程序对I/O端口的引用,并将其转化为本机Win32 I/O函数 Win32子系统的打印驱动程序将与设备无关的图形请求转换为打印机相关的命令,这些命令再发给核心模式的驱动程序例如并口驱动(Parport.sys)、USB打印机驱动(Usbprint.sys)等

98 设备驱动程序 文件系统驱动和磁盘驱动的层次:

99 设备驱动程序 因为所有的驱动程序对于操作系统来说都呈现相同的结构,一个驱动程序可以不经过转换当前的驱动程序或I/O系统,就能容易地被插入到分层结构中

100 小测验 1( )把应用程序和系统组件连接到各种虚拟的、逻辑的和物理的设备上,且定义了一个支持设备驱动程序的基本构架
A、设备驱动程序 B、I/O管理器 C、WMI D、PnP管理器 2.在Windows 中,所有I/O操作都通过()执行,隐藏了I/O操作目标的实现细节,为应用程序提供了一个统一的到设备的接口界面。 A、中断方式 B、虚拟文件 C、设备驱动程序 D、 I/O管理器

101 小测验 3.( )为Windows 2000/XP提供了识别并适应计算机系统硬件配置变化的能力。
A、设备驱动程序 B、I/O管理器 C、WMI D、PnP管理器 4.Windows 的电源管理需要底层硬件的支持,底层的硬件需要符合()标准 A、PnP B、ACPI C、PCI D、 USB

102 习题 什么是设备驱动程序?设备驱动程序的主要功能是什么? 说明Windows I/O系统的设计目标和结构特点。
Windows是如何实现对PnP的支持的? 什么是IRP,它在Windows I/O系统中起什么作用?

103 6. Windows I/O系统的核心数据结构 文件对象 驱动程序对象 设备对象 I/O请求包(IRP)

104 文件对象 提供了基于内存的共享物理资源的表示法 表示文件的哪一部分由高速缓存管理器管理高速缓存,以及它们驻留在高速缓存的什么地方。
指向专用高速缓存映射的指针 表示描述一个映射文件的根结构 指向区域对象指针的指针 表示文件在其上驻留的卷或分区。 指向卷参数块的指针 表示文件在其上驻留的设备的类型。 指向设备对象的指针 表示I/O是否将被同步或异步、高速缓存或不高速缓存、连续或随机等等。 打开模式 表示当调用者正在使用文件时,其他的调用者是否可以打开文件来做读取、写入或删除操作。 共享模式 在文件中标识当前位置(只对同步I/O有效)。 字节偏移量 标识文件对象指向的物理文件。 文件名 目的 属性

105 文件对象

106 China’s Software Industry August 2006
文件对象 当调用者打开文件或一个设备时,I/O管理器将返回一个文件对象句柄 在这个例子中,C程序调用库函数fopen,由它去调用Win32的CreateFile函数,然后Win32子系统 DLL(在这里是KERNEL32.DLL)在NTDLL.DLL中调用本地NtCreateFile函数,在NTDLL.DLL中的 例程包含引发到核心态系统服务调度程序转换的适当指令,最后系统服务调度程序在 NTOSKRNL.EXE中调用真正的NtCreateFile例程。

107 驱动程序对象 驱动程序对象在系统中代表一个独立的驱动程序,并且为I/O记录每个驱动程序的调度例程的地址(入口点)

108 驱动程序对象

109 驱动程序对象 DeviceObject DriverExtension
指向一个子结构,该结构只有AddDevice成员可以直接访问。AddDevice是一个指针,它指向驱动程序中创建设备对象的AddDevice例程

110 驱动程序对象 HardwareDatabase FastIoDispatch
指向一个串,该串为设备的硬件数据库键名。这个注册表键保存着该设备的资源分配信息 FastIoDispatch 指向一个函数指针表,这些函数是由文件系统和网络驱动程序输出的

111 驱动程序对象 DriverStartIo DriverUnload MajorFunction 指向驱动程序中处理I/O请求的函数
指向驱动程序中的清除函数 MajorFunction 为一个函数指针表,指向存在于驱动程序中的各个IRP处理函数,它定义了I/O请求如何进入驱动程序

112 驱动程序对象

113 驱动程序对象

114 设备对象 设备对象在系统中代表一个物理的、逻辑的或虚拟的设备并描述了它的特征,例如它所需要的缓冲区的对齐方式和它用来保存即将到来的I/O请求包的设备队列的位置 设备对象以DEVICE_OBJECT结构来描述

115 设备对象 CSHORT Type CSHORT Size LONG ReferenceCount
PDRIVER_OBJECT DriverObject PDEVICE_Object NextDevice PDEVICE_OBJECT AttachedDevice PIRP CurrentTlrp PIO_TIMER Timer ULONG Flags ULONG Characteristics …… PVOID DeviceExtension PDEVICE_TYPE DeviceType CCHAR StackSize SIZE_T AlignmentRequirement

116 设备对象 DriverObject NextDevice
指向与该设备对象相关的驱动程序对象,通常调用IoCreateDevice函数创建该设备对象的驱动程序对象。过滤器驱动程序有时需要用这个指针来寻找被过滤设备的驱动程序对象,然后查看其MajorFunction表项 NextDevice 指向属于同一个驱动程序的下一个设备对象。这个域把多个设备对象连接起来,起始点就是驱动程序对象中的DeviceObject成员

117 设备对象 CurrentIrp 指向最近发往驱动程序StartIo函数的I/O请求包 Flags 包含一组标志位

118 设备对象 Characteristics DeviceExtension 包含另一组标志位,描述设备的可选特征

119 设备对象 DeviceType StackSize AlignmentRequirement 是一个枚举常量,描述设备类型
统计从该设备对象开始向下直到PDO之间的设备对象个数。该域的目的是告诉其他代码,如果把该设备对象的驱动程序作为其IRP的第一发送对象,那么应在这个IRP中创建多少个堆栈单元 AlignmentRequirement 是一个位掩码。执行DMA传输的设备直接使用内存中的数据缓冲区工作

120 观察与体验 设备对象

121 观察与体验 设备对象

122 驱动程序对象与设备对象的关系 一方面,驱动程序对象通常有多个与它相关的设备对象,因此它利用DeviceObject指针指向指向一个设备对象列表,该列表代表驱动程序可以控制的物理设备、逻辑设备和虚拟设备 另一方面,设备对象反过来指向它自己的驱动程序对象,这样I/O管理器就知道在接收一个I/O请求时应该调用哪个驱动程序。它使用设备对象找到代表服务于该设备驱动程序的驱动程序对象,然后利用在初始请求中提供的功能码来索引驱动程序对象。每个功能码都对应于一个驱动程序的入口点

123 驱动程序对象与设备对象的关系

124 驱动程序对象、设备对象、设备扩展之间的关系
DeviceObject 设备对象 DriverObject NextDevice DeviceExtension 设备扩展

125 I/O请求包(IRP) IRP是I/O系统用来存储处理I/O请求所需信息的地方。当线程调用I/O服务时,I/O管理器就构造一个IRP来表示在整个系统I/O进展中要进行的操作。I/O管理器在IRP中保存一个指向调用者文件对象的指针

126 I/O请求包(IRP) 单层驱动程序中一个I/O请求涉及的数据结构

127 I/O请求包(IRP) 从编程的角度看,IRP是I/O管理器在响应一个I/O请求时从非分页系统内存中分配的一块可变大小的数据结构内存,I/O管理器每收到一个来自用户的请求就创建一个该结构,并将其作为参数传给驱动程序的DispatchXxx、StartIo等例程

128 I/O请求包(IRP) 每一个IRP可以被看成由两部分组成:固定部分和一个I/O堆栈

129 IRP固定部分的域

130 IRP固定部分的域 MdlAddress Flags AssociatedIrp
指向一个内存描述符表(MDL,memory descriptor list)。当驱动程序使用直接I/O时,MDL用来描述一个与该请求相关联的用户模式缓冲区 Flags 包含一些对驱动程序只读的标志 AssociatedIrp 该域是一个三指针联合,其中,如果设备执行缓冲I/O ,则AssociatedIrp.SystemBuffer指针指向系统空间缓冲区,否则为NULL

131 IRP固定部分的域 IoStatus RequestorMode
是一个仅包含两个域的结构,驱动程序在最终完成请求时设置这个结构。IoStatus.Status域将收到一个NTSTATUS代码,而IoStatus.Information的类型为ULONG_PTR,它将收到一个信息值,该信息值的确切含义取决于具体的IRP类型和请求完成的状态 RequestorMode 取值为一个枚举常量UserMode或KernelMode,指定请求初始化的模式为用户模式或核心模式

132 IRP固定部分的域 PendingReturned Cancel
该域为一个BOOLEAN类型,如果为TRUE,则表明处理该IRP的最低级分发例程返回了STATUS_PENDING。完成例程通过参考该域来避免自己与分发例程间的潜在竞争 Cancel 该域为BOOLEAN类型。如果为TRUE,则表明IoCancelIrp已被调用,该函数用于取消这个请求。如果为FALSE,则表明没有调用IoCancelIrp函数

133 IRP固定部分的域 CancelIrql CancelRoutine
是一个IRQL值,表明那个专用的取消自旋锁是在这个IRQL上获取的。当驱动程序在取消例程中释放自旋锁时应参考这个域 CancelRoutine 指向驱动程序取消例程的地址。应该使用IoSetCancelRoutine函数设置CancelRoutine域而不是直接修改该域

134 观察与体验 IRP固定部分的域

135 I/O堆栈单元 任何内核模式程序在创建一个IRP时,同时还创建了一个与之关联的I/O堆栈。堆栈中的I/O每个堆栈单元都对应一个将处理该IRP的驱动程序

136 驱动程序和I/O堆栈之间的平行关系

137 I/O堆栈单元中的域

138 I/O堆栈单元中的域 MajorFunction MinorFunction
是该IRP的主功能代码,它指出所要执行的I/O操作类型。主功能代码与驱动程序对象的MajorFunction表中的某个分发函数指针相对应 MinorFunction 是该IRP的副功能代码,它进一步指出该IRP属于哪个主功能类

139 I/O堆栈单元中的域 Parameters DeviceObject
它是几个子结构的联合,每个请求类型都有自己专用的参数。这些子结构包括Create(对应IRP_MJ_CREATE请求)、Read(对应IRP_MJ_READ请求)、StartDevice(对应IRP_MJ_PNP的IRP_MN_START_DEVICE子类型)等 DeviceObject 指向该堆栈单元对应的设备对象的地址,该域由IoCallDriver函数负责填写

140 I/O堆栈单元中的域 FileObject CompletionRoutine Context 指向与一个I/O请求有关的文件对象的地址
是一个任意的与上下文相关的值,将作为参数传递给完成例程

141 观察与体验 I/O堆栈单元中的域

142 I/O功能代码 Windows 使用I/O功能代码辨别将要发生在特定文件对象上的特定I/O操作。I/O功能代码被分为主功能代码和副功能代码,每个I/O请求有一个主功能代码并可能有几个副功能代码,主功能代码以IRP_MJ_开头的符号定义,副功能代码以IRP_MN_开头的符号定义,它们都出现在IRP当前I/O堆栈单元中

143 I/O功能代码

144 7. Windows的I/O处理 I/O的类型 对单层驱动程序I/O请求的处理 对多层驱动程序I/O请求的处理

145 I/O的类型 同步I/O和异步I/O 同步I/O:设备执行数据传输并在I/O完成时返回一个状态码,然后程序就可以立即访问被传输的数据

146 I/O的类型 同步I/O和异步I/O 异步I/O能够提高应用程序的吞吐率,因为它允许在I/O操作进行期间,应用程序继续其他的工作。要使用异步I/O,必须在Win32的CreateFile函数中指定FILE_FLAG_OVERLAPPED标志 在发出异步I/O操作请求之后,线程必须小心地不访问任何来自I/O操作的数据,直到设备驱动程序完成数据传输。线程必须通过等待一些同步对象的句柄,使它的执行与I/O请求的完成同步

147 I/O的类型 快速I/O 快速I/O是一个特殊的机制,它允许I/O系统不产生IRP而直接到文件系统驱动程序或高速缓存管理器去执行I/O请求

148 I/O的类型 映射文件I/O 映射文件I/O是指把磁盘中的文件视为进程的虚拟内存的一部分。程序可以把文件作为一个大的数组来访问,而无需做缓冲数据或执行磁盘I/O的工作

149 I/O的类型 分散/集中I/O 分散/集中(scatter/gather)I/O可通过Win32的ReadFileScatter和WriteFileGather函数来实现。这些函数允许应用程序执行一个读取或写入操作,从虚拟内存中的多个缓冲区读取数据并写到磁盘上文件的一个连续区域里

150 对单层驱动程序I/O请求的处理 处理对单层驱动程序的同步I/O包括七个步骤: (1)I/O请求经过子系统DLL
(2)子系统DLL调用I/O管理器的NtWriteFile服务 (3)I/O管理器分配一个描述该请求的IRP,并通过调用IoCallDriver函数给驱动程序(这里指设备驱动程序)发送请求 (4)驱动程序将IRP中的数据传输到设备并启动I/O操作

151 对单层驱动程序I/O请求的处理 处理对单层驱动程序的同步I/O包括七个步骤: (5)通过中断CPU,驱动程序发信号进行I/O完成操作
(7)驱动程序调用IoCompleteRequest函数表明它已经处理完了IRP请求,接着I/O管理器完成I/O请求

152 对单层驱动程序I/O请求的处理

153 处理中断 在I/O设备完成数据传输之后,它将产生中断并请求服务
当I/O设备中断发生时,处理器将控制转交给内核陷阱处理程序,内核陷阱处理程序将在它的中断向量表中搜索定位用于设备的ISR。Windows 上的ISR用两个步骤来典型地处理设备中断 当ISR被首次调用时,它通常只在设备IRQL上停留获得设备状态所必需的一段时间,最后停止设备的中断。然后它使一个DPC排除并退出操作,清除中断 过一段时间,在DPC例程被调用时,设备完成对中断的处理。完成之后,设备将调用I/O管理器来完成I/O并处理IRP

154 处理中断 使用DPC来执行大多数设备服务的优点是,任何优先级位于设备IRQL和Dispatch/DPC IRQL之间被阻塞的中断允许在低优先级的DPC处理发生之前发生。因而中间优先级的中断就可以更快地得到服务

155 处理中断 ISR 处理器控制块 DPC例程

156 完成I/O请求 I/O处理的第三阶段称作I/O完成
I/O系统必须把一些存储在系统内存中的数据复制到调用者的虚拟地址空间中。要获得调用者的虚拟地址,I/O管理器必须在调用者线程的上下文中进行数据传输,而此时调用者进程是当前处理器上活动的进程,调用者线程正在处理器上执行。I/O管理器通过在线程中执行一个核心态的异步过程调用(APC)来完成这一操作

157 对多层驱动程序I/O请求的处理 对多层驱动程序I/O请求的处理是在单层I/O处理的基础上变化而来 以由文件系统控制的磁盘作为例子
首先,I/O管理器收到I/O请求并且创建IRP来代表它,这一次I/O管理器将IRP发送给文件系统驱动程序 根据调用程序发出的请求类型,文件系统驱动程序可以把同一个IRP发送给磁盘驱动程序,或者也可以生成另外的IRP并其发送给磁盘驱动程序

158 对多层驱动程序I/O请求的处理 为了在对分层驱动程序的请求中容纳多个驱动程序对IRP的重用,IRP必须包含一系列IO堆栈单元。每一个将被调用的驱动程序都有一个这样的IO堆栈单元,其中包含了每个驱动程序为了执行它自己的那部分请求所需要的信息,例如I/O功能代码、参数和驱动程序的环境信息

159 China’s Software Industry August 2006
对多层驱动程序I/O请求的处理 这里使用有一个由文件系统控制的磁盘作为例子

160 对多层驱动程序I/O请求的处理 作为对IRP重用的替代方式,文件系统驱动程序也可以建立一组关联的IRP,这些IRP在单次I/O请求中并行工作。例如,如果要从文件中读取的数据分散在磁盘上,那么文件系统驱动程序就可以创建几个IRP,每个IRP从不同的扇区读取所请求数据的一部分。文件系统驱动程序将这些关联的IRP发送给磁盘驱动程序,磁盘驱动程序将它们排入设备队列中,每次处理一个IRP。文件系统驱动程序跟踪返回的数据,当所有关联的IRP都完成后,I/O管理器完成最初的IRP并返回调用程序

161 对多层驱动程序I/O请求的处理 完成分层I/O请求

162 小测验 1.Windows 使用()辨别将要发生在特定文件对象上的特定I/O操作。 A、I/O功能代码 B、IO请求包
C、设备驱动程序 D、I/O管理器 2.在Windows 中,用于存储处理I/O请求所需信息的是()。 C、设备驱动程序 D、内存

163 小测验 3.()在系统中代表一个物理的、逻辑的或虚拟的设备并描述了它的特征,例如它所需要的缓冲区的对齐方式和它用来保存即将到来的I/O请求包的设备队列的位置。 A、I/O功能代码 B、IO请求包 C、设备驱动程序 D、设备对象 4.对硬件设备进行的操作都是通过()进行的。 A、功能驱动程序 B、总线驱动程序 C、过滤器驱动程序 D、类驱动程序

164 实验 编写一个PC机串行接口测试程序,要求:
用户能够用该程序打开一个串行口,由程序负责将用户从键盘输入的字符发送到串行口,并且把从串行口接收到的字符显示在一个窗口中 能够设置串行口、包括波特率、校验、停止位和数据位 采用异步I/O

165 Thoughts Change Life 意念改变生活


Download ppt "China’s Software Industry August 2006 Instructor: Hengming Zou, Ph.D."

Similar presentations


Ads by Google