设备管理与 i/o 系统

165
设设设设设 设设设设设 I/O I/O Instructor: Hengming Zou, Ph.D. In Pursuit of Absolute Simplicity 设设设设 设设设设

Upload: ivie

Post on 10-Jan-2016

94 views

Category:

Documents


5 download

DESCRIPTION

设备管理与 I/O 系统. Instructor: Hengming Zou, Ph.D. In Pursuit of Absolute Simplicity 求于至简,归于永恒. 内容提要. 1. 设备管理概述 2. I/O 硬件特性 3. 设备管理的实现技术 4. I/O 软件的结构 5. Windows I/O 系统的结构 6. Windows I/O 系统的核心数据结构 7. Windows 的 I/O 处理. 设备管理概述. I/O 系统是操作系统的一个重要的组成部分,负责管理系统中所有的外部设备 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 设备管理与 I/O 系统

设备管理与设备管理与 I/OI/O 系统系统Instructor: Hengming Zou, Ph.D.

In Pursuit of Absolute Simplicity 求于至简,归于永恒

Page 2: 设备管理与 I/O 系统

22

内容提要

1. 设备管理概述 2. I/O硬件特性 3. 设备管理的实现技术 4. I/O软件的结构 5. Windows I/O系统的结构 6. Windows I/O系统的核心数据结构 7. Windows的 I/O处理

Page 3: 设备管理与 I/O 系统

33

设备管理概述

I/O系统是操作系统的一个重要的组成部分,负责管理系统中所有的外部设备

在计算机系统中除 CPU和内存储外所有的设备和装置统称为计算机外部设备(外围设备、 I/O设备)– 设备管理的意义– 设备的分类– 设备管理的任务和功能

Page 4: 设备管理与 I/O 系统

44

设备管理的意义

操作系统复杂和庞大的主要原因是它所管理的资源的庞杂和并发技术的采用,而输入输出设备的庞杂正是操作系统所管理的资源庞杂的主要原因,输入输出设备的速度远低于处理器的速度正是导致并发技术产生的直接原因

所以, I/O系统的性能是操作系统总体性能的重要决定因素、重要表现指标和常见瓶颈之一,因此设备管理在操作系统中具有十分重要的地位

Page 5: 设备管理与 I/O 系统

55

设备管理的意义

设备管理的意义表现在以下几方面:– 输入输出设备的性能经常成为系统性能的瓶颈, CPU性能越

高,输入输出设备性能同 CPU性能不匹配的反差也越大。如何解决这一矛盾,而又尽量不降低处理机的性能,是设备管理的一项重要任务

– 输入输出设备千变万化,怎样对它们实现统一的管理,从而方便用户使用是设备管理的又一项重要任务

– 在应用中,输入输出设备能否及时将各种信息传送给计算机系统,计算机发出的各种命令能否通过输入输出设备及时传送给执行部件,对于实时处理和控制系统而言,是至关重要的

– 用户对输入输出设备的使用必须是安全的。如何保证安全正确地使用设备,也是设备管理的重要任务

Page 6: 设备管理与 I/O 系统

66

设备的分类

按设备的使用特性分类:输入输出设备(狭义)和外存设备 按信息组织方式分类:字符设备( character device)

和块设备( block device) 键盘、终端、打印机等以字符为单位组织和处理信息的设备

被称为字符设备;磁盘、磁带等以字符块为单位组织和处理信息的设备被称为块设备

Page 7: 设备管理与 I/O 系统

77

设备的分类

按设备使用可共享性分类:独占设备、共享设备和虚拟设备 独占设备是指在任一给定的时刻只能让一个进程使用,即必

须保证一个进程对一个具体设备在可能相当长的时间内拥有唯一存取权

共享设备是指能够同时让许多进程使用的设备。磁盘是典型的共享设备,多个进程同时在同一磁盘上拥有打开的文件不会带来任何不良后果

虚拟设备是指设备本身是独占设备,而经过某种技术处理,可以把它改造成共享设备,同时分配给多个进程

Page 8: 设备管理与 I/O 系统

88

设备的分类

按输入输出对象分类:人机通讯与机机通讯设备 按是否交互分类:非交互设备与交互设备 机机通讯设备、外存、卡带机等属于非交互设备,终端为交互设备

按数据传输率分类:高速设备和低速设备

Page 9: 设备管理与 I/O 系统

99

设备管理的任务和功能

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

Page 10: 设备管理与 I/O 系统

1010

设备管理的任务和功能

1 .方便性方面 用户总是希望方便地使用 I/O设备,但是 I/O设备种类繁多,

处理过程非常复杂,涉及到大量 I/O细节,如寄存器、中断、控制字符、设备字符集等。如果让用户直接使用设备硬件接口,是十分不便的

为了弥补硬件接口给用户带来的不便,操作系统的设备管理部分提供了两个主要的功能:– 抽象接口– 设备独立性

Page 11: 设备管理与 I/O 系统

1111

设备管理的任务和功能

1 .方便性方面——抽象接口 提供简便易用的高级逻辑接口,这些接口由对逻辑设备的逻辑操作组成

实现抽象接口到物理接口的转化,即将高级逻辑操作转化为低级物理操作,将逻辑设备和逻辑性质转化为物理设备和物理性质,以便掩盖设备的硬件物理操作和组织的细节

Page 12: 设备管理与 I/O 系统

1212

设备管理的任务和功能

1 .方便性方面——设备独立性 设备独立性是指用户在编写程序时所使用的设备与实际设备无关

两类设备独立性: 1.一个程序应独立于分配给它的某类设备的具体设备。即在

用户程序中只指明 I/O使用的设备类型即可。如在系统中配备了两台打印机,用户要打印时只要告诉系统要将信息送到打印机即可

2.程序要尽可能地与它使用的设备类型无关。即在用户程序中只要指出要输入或输出信息,至如信息 I/O使用的设备不需用户指明

Page 13: 设备管理与 I/O 系统

1313

设备管理的任务和功能

1 .方便性方面——设备独立性 设备独立性的优点

– 1. 方便用户编程– 2. 使用程序运行不受具体的机器环境的限制– 3. 便于程序移植

设备独立性的实现– 把设备与文件统一处理,对于用户来说,并没有设备的概念

Page 14: 设备管理与 I/O 系统

1414

设备管理的任务和功能

2 .效率方面 用户永远关心效率:非系统用户关心程序运行效率与操作效率;系统用户关心系统利用率、系统代价、系统工作效率

为了提高设备与 CPU的效率,引入了大量的技术如中断、缓冲、 DMA、通道等等,这些技术不仅需要相应的硬件,还需要相应的软件来配合,才能达到引入这些技术所预期的目标

Page 15: 设备管理与 I/O 系统

1515

设备管理的任务和功能

2 .效率方面 操作系统的设备管理功能的第二大任务是采用各种纯软件或

与硬件配合的软件技术来提高设备效率和与此相关的系统效率,提供物理 I/O设备的共享并优化这些设备的使用,并借助抽象接口使得这些效率优化技术得以由系统在内部实施并对用户透明

操作系统设备管理功能要主要采用了以下技术:– 设备共享技术 – 虚拟设备技术 – 缓冲技术

Page 16: 设备管理与 I/O 系统

1616

设备管理的任务和功能

3 .保护方面 用户希望能安全正确地使用设备,这种希望体现为由设备传

送或管理的数据应该是安全的,不被破坏和泄密的;对设备拥有所有权的用户,这种希望体现为设备不能被破坏,系统在安全可靠方面的信誉应得到保证

操作系统的设备管理功能的另一任务是提供安全保护机制,用于保护设备,尤其是保护由设备传送或管理的数据

Page 17: 设备管理与 I/O 系统

1717

I/O硬件特性

I/O系统的结构 I/O设备接口 I/O设备的控制

Page 18: 设备管理与 I/O 系统

1818

I/O系统的结构

Page 19: 设备管理与 I/O 系统

1919

I/O设备接口

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

Page 20: 设备管理与 I/O 系统

2020

I/O设备的控制

输入输出设备的 I/O控制方式有程序直接控制方式、中断控制方式、 DMA方式和通道控制方式

1 .程序直接控制方式 程序直接控制方式是指由用户进程直接控制内存或 CPU和外

围设备之间进行信息传送的方式,也称为“忙 - 等”方式、轮询方式或循环测试方式,这种方式的控制者是用户进程

Page 21: 设备管理与 I/O 系统

2121

I/O设备的控制

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

用户进程需要向输出设备输出数据时,也必须同样发出启动命令和等待设备准备好之后才能输出数据

Page 22: 设备管理与 I/O 系统

2222

I/O设备的控制

1 .程序直接控制方式 程序直接控制方式的优点是 CPU 和外设的操作能通过状态

信息得到同步,而且硬件结构比较简单;其缺点是 CPU 效率较低,传输完全在 CPU控制下完成,对外部出现的异常事件无实时响应能力

程序直接控制方式只适用于那些 CPU执行速度较慢,而且外围设备较少的系统,如单片机系统

Page 23: 设备管理与 I/O 系统

2323

I/O设备的控制

2 .中断控制方式 中断是一种在发生了一个异常事件时,调用相应处理程序( 通常称为中断服务程序 ) 进行服务的过程

中断源一旦需要 CPU为其服务时,就向 CPU发出请求, CPU一般在当前指令执行完,且状态为允许中断的情况下响应该请求。并由硬件自动关中断(防止在保留断点和程序转移过程中又有新的中断请求发生)、保留断点、转到相应的中断服务程序入口处。然后执行中断服务程序,由软件完成中断服务。中断服务程序结束,执行返回指令返回断点,继续执行原程序

Page 24: 设备管理与 I/O 系统

2424

I/O设备的控制

2 .中断控制方式

如要采用中断方式进行数据传送,则相应 CPU及接口就应具备中断机构 ①

CPUIR

INTA

WE

RD

接口 外设

完成

启动

数据数据缓存

地址译码

命令寄存器

中断屏蔽触发器

中断请求触发器

数据寄存器

地址寄存器

数据

地址

中断判优电路

中断请求寄存器

中断允许寄存器

接口控制

Page 25: 设备管理与 I/O 系统

2525

I/O设备的控制

2 .中断控制方式 中断控制方式的优点:

– CPU与外设在大部分时间内并行工作,提高了计算机的效率– 具有实时响应能力,可适用于实时控制场合– 及时处理异常情况,提高计算机的可靠性

中断控制方式的局限:– 用中断方式交换数据时,每处理一次 I/O数据交换,都会耗去一定的 CPU处理时间,对于一些高速的外围设备,以及成组交换数据的情况,仍然显得速度太慢

Page 26: 设备管理与 I/O 系统

2626

I/O设备的控制

3 . DMA方式 DMA是直接内存访问( Direct Memory Access)的缩写,它是一种完全由硬件执行 I/O数据交换的工作方式。在这种方式中, DMA控制器( DMAC)从 CPU完全接管对总线的控制,数据交换不经过 CPU,而直接在内存和 I/O设备之间进行

采用 DMA方式工作时,由 DMA控制器向内存发出地址和控制信号,进行地址修改,对传送字的个数计数,并且以中断方式向 CPU报告传送操作的结束

Page 27: 设备管理与 I/O 系统

2727

I/O设备的控制

3 . DMA方式 DMA方式的传送结构

内存内存 CPUCPUDMACDMAC

外设外设

HOLDHOLD总线请求总线请求

HLDAHLDA总线响应总线响应

DMADMA请求请求

DMADMA响应响应

Page 28: 设备管理与 I/O 系统

2828

I/O设备的控制

3 . DMA方式 DMA方式的数据块传送过程可分为三个阶段:传送前预处理;

数据传送;传送后处理 预处理阶段——由 CPU执行 I/O指令对 DMAC进行初始化与启动

数据传送阶段——由 DMAC控制总线进行数传。 后处理阶段——传送结束, DMAC向 CPU发中断请求,报告

DMA操作的结束

Page 29: 设备管理与 I/O 系统

2929

I/O设备的控制

3 . DMA方式 DMA方式的优点:

– 操作均由硬件电路实现,传输速度快– CPU仅在初始化和结束时参与,对数据传送基本上不干预,可

以减少大批量数据传输时 CPU的开销;– CPU与外设并行工作,效率高

DMA方式的局限性:– 在初始化和结束时仍由 CPU控制

Page 30: 设备管理与 I/O 系统

3030

I/O设备的控制

4 .通道控制方式 通道( channel)是一个特殊功能的处理器,它有自己的

指令和程序,可以实现对外围设备的统一管理和外围设备与内存之间的数据传送。引入通道的目的是为了进一步减少数据输入输出对整个系统运行效率的影响

与 DMA方式相比,通道方式增加了 CPU与通道操作的并行能力;增加了通道之间以及同一通道内各设备间的并行操作能力;为用户提供了灵活增加外设的可能性

Page 31: 设备管理与 I/O 系统

3131

I/O设备的控制

4 .通道控制方式 一个系统中可以设立三种类型的通道:

– 选择通道– 数组多路通道– 字节多路通道

Page 32: 设备管理与 I/O 系统

3232

I/O设备的控制

4 .通道控制方式

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控制器 磁盘

...

总线

CPU 内 存

字节多路通道

数组多路通道 选择通道

Page 33: 设备管理与 I/O 系统

3333

设备管理的实现技术

中断技术 缓冲技术 设备分配技术

Page 34: 设备管理与 I/O 系统

3434

中断技术

1 .中断的基本概念 中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得 CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程

引起中断发生的事件被称为中断源。中断源向 CPU发出的请求中断处理信号称为中断请求,而 CPU收到中断请求后转到相应的事件处理程序称为中断响应

Page 35: 设备管理与 I/O 系统

3535

中断技术

1 .中断的基本概念 在有些情况下,尽管产生了中断源和发出了中断请求,但CPU内部的处理机状态字 PSW的中断允许位已被清除,从而不允许 CPU响应中断。这种情况称为禁止中断,或称为关中断。 PSW的中断允许位的设置也被称为开中断。开中断和关中断是为了保证某段程序执行的原子性

中断屏蔽是指在中断请求产生之后,系统有选择地封锁一部分中断而允许另一部分的中断仍能得到响应

Page 36: 设备管理与 I/O 系统

3636

中断技术

2 .中断的分类与优先级 根据系统对中断处理的需要,操作系统一般对中断进行分类

并对不同的中断赋予不同的处理优先级,以便在不同的中断同时发生时,按轻重缓急进行处理

根据中断源产生的条件,可把中断分为外中断和内中断

Page 37: 设备管理与 I/O 系统

3737

中断技术

2 .中断的分类与优先级 中断和陷入的主要区别: 陷入通常由处理机正在执行的现行指令引起,而中断则是由

与现行指令无关的中断源引起的 陷入处理程序提供的服务为当前进程所用,而中断处理程序

提供的服务则不是为了当前进程的 CPU执行完一条指令之后,下一条指令开始之前响应中断,

而在一条指令执行中也可以响应陷入。例如执行指令非法时,尽管被执行的非法指令不能执行结束,但 CPU仍可对其进行处理

Page 38: 设备管理与 I/O 系统

3838

中断技术

2 .中断的分类与优先级 为了按中断源的轻重缓急处理响应中断,计算机统为不同的

中断赋予不同的优先级。为了禁止中断或屏蔽中断, CPU的处理机状态字 PSW中也设有相应的优先级。如果中断源的优先级高于 PSW的优先级,则 CPU响应该中断源的请求,反之,CPU屏蔽该中断源的中断请求

各中断源的优先级在系统设计时给定,在系统运行时是固定的。而处理机的优先级则根据执行情况由系统程序动态设定

Page 39: 设备管理与 I/O 系统

3939

中断技术

3 . Windows的中断处理 当处理器收到中断请求时,要通知相应设备的驱动程序进行

处理。为此,设备驱动程序应该向 I/O管理器注册一个 ISR,可以通过调用 IoConnectInterrupt来实现

IoConnectInterrupt初始化一个中断对象,来存放关于中断及其 ISR的信息。同时使处理器的中断服务表的相应表项指向该中断对象

Page 40: 设备管理与 I/O 系统

4040

中断技术

3 . Windows的中断处理

外设控制器 中断控制器

中断服务表

中断对象

KiInterruptDispatch驱动程序 ISR

Page 41: 设备管理与 I/O 系统

4141

缓冲技术

计算机系统中各个部件速度的差异是明显的。在不同时刻,系统各部分的负荷也常常很不均衡

虽然中断和通道技术为系统各部分并行工作提供了可能,但是由于中央处理机和外部设备速度不匹配以及工作不均衡,它们的并行程度并不能得到充分发挥

缓冲技术是解决这一问题的一种常用的技术

Page 42: 设备管理与 I/O 系统

4242

缓冲技术

进程

行式打印机

进程

行式打印机

进程

行式打印机

buffer1

buffer2

Tc1 Tc2 Tc3

Tlpt1 Tlpt2 Tlpt3

Tc1 Tmv1 Tc2 Tmv2 Tc3 Tmv3 Tc4

Tlpt1 Tlpt2 Tlpt3

Tc1 Tmv1 Tc2 Tmv2 Tc3 Tmv3 Tc4 Tmv4

Tlpt1 Tlpt2 Tlpt3

(a)无缓冲存储区

(b)单缓冲

(c)双缓冲

进程在处理机上运行,行式打印机工作 进程睡眠等待,打印机空闲

Page 43: 设备管理与 I/O 系统

4343

缓冲技术

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

Page 44: 设备管理与 I/O 系统

4444

设备分配技术

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

Page 45: 设备管理与 I/O 系统

4545

设备分配算法的数据结构

系统设备表(SDF) 表目 1

表目 i

设备类型 设备标识

获得设备的进程号 DCT 指针

设备控制表(DCT ) 设备类型 设备标识

设备忙/闲标记 COCT 指针

设备等待队列首指针 设备等待队列尾指针

控制器控制表(COCT ) 控制器标识

控制器忙/闲标记 CHCT 指针

控制器等待队列首指针 控制器等待队列尾指针

通道控制表(CHCT ) 通道标识

通道忙/闲标记 COCT 指针

通道等待队列首指针 通道等待队列尾指针

Page 46: 设备管理与 I/O 系统

4646

设备分配的原则

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

Page 47: 设备管理与 I/O 系统

4747

设备分配的原则

考虑设备的特性和安全性 设备的特性是设备本身固有的属性,一般分为独占、共享和

虚拟设备 从安全性方面考虑,有安全分配方式和不安全分配方式两种

Page 48: 设备管理与 I/O 系统

4848

设备分配的原则

设备分配策略 通常采用先来先服务( FIFO)和高优先级优先 先来先服务,就是当多个进程同时对一个设备提出 I/O请求

时,系统按照进程提出请求的先后次序,把它们排成一个设备请求队列,并且总是把设备首先分配给排在队首的进程使用

高优先级优先,就是给每个进程提出的 I/O请求分配一个优先级,在设备请求队列中把优先级高的排在前面,如果优先级相同则按照 FIFO的顺序排列。这里的优先级与进程调度中的优先级往往是一致的,这样有助于高优先级的进程优先执行、优先完成

Page 49: 设备管理与 I/O 系统

4949

独占设备的分配

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

用户使用独占设备的活动如下:– 申请,使用,使用,‥‥‥,使用,释放

Page 50: 设备管理与 I/O 系统

5050

独占设备的分配

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

Page 51: 设备管理与 I/O 系统

5151

独占设备的分配

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

Page 52: 设备管理与 I/O 系统

5252

共享设备的分配

共享设备是可由若干个进程同时共享的设备。用户使用独占设备的活动如下:– 使用,使用,‥‥‥,使用

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

Page 53: 设备管理与 I/O 系统

5353

虚拟设备

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

Page 54: 设备管理与 I/O 系统

5454

虚拟设备

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

SPOOLing系统通常分为输入 SPOOLing和输出 SPOOLing,二者工作原理类似

Page 55: 设备管理与 I/O 系统

5555

虚拟设备

输出 SPOOLing的基本原理(以常见的共享打印机为例): 打印机是一种典型的独占设备,引入 SPOOLing技术后,用

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

Page 56: 设备管理与 I/O 系统

5656

小测验

1 .()是操作系统中采用的以空间换时间的技术。– A 、缓冲技术 B 、并行技术– C 、通道技术 D 、虚拟存储技术

2 .通过硬件和软件的功能扩充,把原来独占的设备改造成若干用户共享的设备,这种设备称为()。– A 、存储设备 B 、系统设备– C 、虚拟设备 D 、用户设备

Page 57: 设备管理与 I/O 系统

5757

小测验

3 .对于磁盘来说,输入输出操作的信息传送单位为()。– A 、字节 B 、字– C 、文件 D 、块

4 . CPU输出数据的速度远远高于打印机的打印速度,为解决这一矛盾,可采用()。– A 、并行技术 B 、通道技术– C 、缓冲技术 D 、虚拟存储技术

Page 58: 设备管理与 I/O 系统

5858

小测验

5 .通道又称 I/O处理机,它用于实现()之间的信息传输。– A 、主存与外设 B 、 CPU与外设– C 、主存与外存 D 、 CPU与外存

6 .如果 I/O设备与存储设备进行数据交换不经过 CPU来完成,这种数据交换方式是()。– A 、中断方式 B 、无条件存取方式– C 、 DMA方式 D 、程序查询方式

Page 59: 设备管理与 I/O 系统

5959

习题

I/O 系统在整个操作系统中所起的作用和地位是什么?

在 I/O 系统中引入缓冲的主要原因是什么?

说明 SPOOLing 系统的特点以及其工作方式。

设备分配算法有哪些?

Page 60: 设备管理与 I/O 系统

6060

4.I/O软件的结构

I/O软件的结构,其基本思想是分层构造,即在于把设备管理软件组织成为一系列的层次,其中低层与硬件相关,它把硬件与较高层次的软件隔离开来。而最高层的软件则向应用提供一个友好的,清晰而统一的接口

I/O软件一般可以分为四层:– 中断处理程序– 设备驱动程序– 与设备无关的操作系统软– 用户级软件

Page 61: 设备管理与 I/O 系统

6161

设备驱动程序

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

Page 62: 设备管理与 I/O 系统

6262

设备驱动程序

设备驱动程序的功能 设备驱动程序主要有以下四个方面的处理工作:

– 向有关的输入输出设备的各种控制器发出控制命令,并且监督它们的正确执行,进行必要的错误处理

– 对各种可能的有关设备排队、挂起、唤醒等操作进行处理– 执行确定的缓冲区策略– 进行比寄存器接口级别层次更高的一些特殊处理

Page 63: 设备管理与 I/O 系统

6363

设备驱动程序

设备驱动程序的特性 设备驱动程序与 I/O设备的硬件结构密切联系 设备驱动程序中全部是依赖于设备的代码 设备驱动程序是操作系统底层中唯一知道各种输入输出设备

的控制器细节以及其用途的部分

Page 64: 设备管理与 I/O 系统

6464

设备驱动程序

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

设备驱动程序的结构同输入输出设备的硬件特性有关

Page 65: 设备管理与 I/O 系统

6565

设备驱动程序

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

Page 66: 设备管理与 I/O 系统

6666

与设备无关的系统软件

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

Page 67: 设备管理与 I/O 系统

6767

与设备无关的系统软件

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

Page 68: 设备管理与 I/O 系统

6868

用户空间的 I/O软件

大部分 I/O软件都包含在操作系统中,但是用户程序仍有一小部分是与库函数连接在一起的,通常的系统调用,包括I/O系统调用,是由库函数实现。例如:– count= write( fd, buffer, nbytes);

标准的 I/O库包含了许多涉及 I/O的过程,它们都是作为用户程序的一部分运行的

Page 69: 设备管理与 I/O 系统

6969

I/O软件的层次

Page 70: 设备管理与 I/O 系统

7070

5. Windows I/O系统的结构

I/O系统是 Windows执行体的组件,主要存在于NTOSKRNL.EXE文件中。它接受 I/O请求(来自用户态和核心态的调用程序),并且以不同的形式把它们传送到 I/O设备

在用户态 I/O函数和实际的 I/O硬件之间有几个分立的系统组件,包括文件系统驱动程序、过滤器驱动程序和低层设备驱动程序

Page 71: 设备管理与 I/O 系统

7171

Windows I/O系统的设计目标

在单处理器或多处理器系统中都可以快速进行 I/O处理 使用标准的 Windows 2000/XP安全机制保护共享的资源 满足 Microsoft Win32、 OS/2和 POSIX子系统指定的I/O服务的需要

提供服务,使设备驱动程序的开发尽可能地简单,并且允许用高级语言编写驱动程序

Page 72: 设备管理与 I/O 系统

7272

Windows I/O系统的设计目标

根据用户的配置或者系统中硬件设备的添加和删除,允许在系统中动态地添加或删除相应的设备驱动程序

通过添加驱动程序透明地修改其他驱动程序或设备的行为 为包括 FAT、 CD- ROM文件系统

( CDFS)、 UDF( Universal Disk Format)文件系统和 Windows 2000/XP文件系统( NTFS)的多种可安排的文件系统提供支持

允许整个系统或者单个硬件设备进入和离开低功耗状态,这样可以节约能源

Page 73: 设备管理与 I/O 系统

7373

Windows I/O系统组件

Page 74: 设备管理与 I/O 系统

7474

一个典型的 I/O请求流程

用户模式 API

I/O系统服务API(NtXXX)

I/O管理器

核心模式设备驱动程序

HAL I/O服务例程

驱动程序支持例程

I/O端口和寄存器

Page 75: 设备管理与 I/O 系统

7575

I/O管理器

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

Page 76: 设备管理与 I/O 系统

7676

I/O管理器

I/O管理器创建代表每个 I/O操作的 IRP,传递 IRP给正确的驱动程序,并且当此 I/O操作完成后,处理这个数据包

驱动程序接受 IRP,执行 IRP指定的操作,并且在完成操作后把 IRP送回 I/O管理器或为下一步的处理而通过 I/O管理器把它送到另一个驱动程序

Page 77: 设备管理与 I/O 系统

7777

I/O管理器

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

通过在 I/O管理器中合并公共的任务,驱动程序将变得更加简洁和更加紧凑

Page 78: 设备管理与 I/O 系统

7878

I/O管理器

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

Page 79: 设备管理与 I/O 系统

7979

I/O管理器

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

驱动程序也可以通过 I/O管理器相互调用来完成 I/O请求的分层的、独立的处理

Page 80: 设备管理与 I/O 系统

8080

PnP管理器

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

Page 81: 设备管理与 I/O 系统

8181

PnP管理器

PnP 技术主要有以下特点: PnP 技术支持 I/O设备及部件的自动配置,使用户能够简单

方便地使用系统扩充设备 PnP 技术减少了由制造商造成的种种用户限制,简化了部件

的硬件跳线设置,使 I/O附加卡和部件不再具有人工跳线设置电路

利用 PnP 技术可以在主机板和附加卡上保存系统资源的配置参数和分配状态,有利于系统对整个 I/O资源的分配和控制

PnP技术支持和兼容各种操作系统平台,具有很强的扩展性和可移植性; PnP技术在一定程度上具有热插入、热拼接功能

Page 82: 设备管理与 I/O 系统

8282

PnP管理器

PnP 技术主要有以下特点: PnP管理器为 Windows 提供了识别并适应计算机系统硬件

配置变化的能力。 PnP支持需要硬件、设备驱动程序和操作系统的协同工作才

能实现

Page 83: 设备管理与 I/O 系统

8383

PnP管理器

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

在系统启动的过程中, PnP管理器向总线驱动程序询问得到不同设备的描述信息,包括设备标识、资源分配需求等,然后 PnP管理器就加载相应的设备驱动程序并调用每一个设备驱动程序的添加设备例程

Page 84: 设备管理与 I/O 系统

8484

PnP管理器

PnP状态转换

未启动

启动

悬而未决

停止

悬而未决

意外拆卸

拆卸

Start devicecommand

Query stopcommand

Stopcommand

Query removecommand

Surprise removecommand

removecommand

removecommand

Page 85: 设备管理与 I/O 系统

8585

电源管理器

电源管理也需要底层硬件的支持,底层的硬件需要符合高级配置与电源接口 ACPI( Advanced Configuration and Power Interface)标准

支持电源管理的计算机系统的 BIOS必须符合 ACPI标准

Page 86: 设备管理与 I/O 系统

8686

电源管理器

ACPI为系统和设备定义了不同的能耗状态,目前共有六种,从 S0(正常工作)到 S5(完全关闭)。每一种状态都有如下指标:

电源消耗:计算机系统消耗的能源 软件运行恢复:计算机系统回复到正常工作状态时软件能否恢复运行

硬件延迟:计算机系统回复到正常工作状态的时间延迟

Page 87: 设备管理与 I/O 系统

8787

电源管理器

状态 能耗 软件恢复 硬件延迟

S0 (正常工作) 最大 无 无

S1 (睡眠) 比 S0小,比 S2大 恢复运行 小于 2秒

S2 (睡眠) 比 S1小,比 S3大 恢复运行 2秒或更多

S3 (睡眠) 比 S2小,比 S4大 恢复运行 2秒或更多

S4 (休眠) 电源按钮保持微弱电流,系统保持唤醒电流 恢复运行 长

S5 (完全关闭) 电源按钮一直保持微弱电流 系统引导 长

Page 88: 设备管理与 I/O 系统

8888

电源管理器

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

Page 89: 设备管理与 I/O 系统

8989

电源管理器

系统能耗状态 设备能耗状态S0 D0(正常工作)S1 D2

S2 D2

S3 D2

S4 D2(关闭)S5 D3(关闭)

Page 90: 设备管理与 I/O 系统

9090

电源管理器

Windows 的电源管理策略由两部分组成:电源管理器和设备驱动程序

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

Page 91: 设备管理与 I/O 系统

9191

电源管理器

设备驱动程序可以独立地控制设备的能耗状态。在一些情况下,当设备长时间不用时,设备驱动程序就可以减小该设备的能耗

设备驱动程序可以自己检测设备的闲置时间,也可以通过电源管理器检测

Page 92: 设备管理与 I/O 系统

9292

电源管理器

系统电源管理策略

Page 93: 设备管理与 I/O 系统

9393

设备驱动程序

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

Windows 支持的驱动程序可以分为用户模式驱动程序和核心模式驱动程序两大类

Page 94: 设备管理与 I/O 系统

9494

设备驱动程序

核心驱动程序的种类主要分为以下几种: 文件系统驱动程序 同 Windows 的 PnP管理器和电源管理器有关的设备驱动程序

为 Windows NT编写的设备驱动程序 Win32子系统显示驱动程序和打印驱动程序 符合 Windows驱动程序模型的 WDM驱动程序

Page 95: 设备管理与 I/O 系统

9595

设备驱动程序

WDM驱动程序有三种类型: 总线驱动程序管理逻辑的或物理的总线,总线驱动程序需要检测并向 PnP管理器通知总线上的设备,并且能够管理电源

功能驱动程序管理具体的一种设备,对硬件设备进行的操作都是通过功能驱动程序进行的

过滤驱动程序与功能驱动程序协同工作,用于增加或改变功能驱动程序的行为

Page 96: 设备管理与 I/O 系统

9696

设备驱动程序

硬件支持驱动程序可以分为以下类型: 类驱动程序( class drivers)为某一类设备执行 I/O处

理,例如磁盘、磁带或光盘 端口驱动程序( port drivers)实现了对特定于某一种类

型的 I/O端口的 I/O请求的处理,例如 SCSI

小端口驱动程序( miniport drivers)把对端口类型的一般的 I/O请求映射到适配器类型。例如,一个特定的SCSI适配器

Page 97: 设备管理与 I/O 系统

9797

设备驱动程序

用户模式的驱动程序 : 虚拟设备驱动程序( VDD)通常用于模拟 16位 MS- DOS

应用程序。它们捕获 MS- DOS应用程序对 I/O端口的引用,并将其转化为本机 Win32 I/O函数

Win32子系统的打印驱动程序将与设备无关的图形请求转换为打印机相关的命令,这些命令再发给核心模式的驱动程序例如并口驱动 (Parport.sys)、 USB打印机驱动(Usbprint.sys)等

Page 98: 设备管理与 I/O 系统

9898

设备驱动程序

文件系统驱动和磁盘驱动的层次:

Page 99: 设备管理与 I/O 系统

9999

设备驱动程序

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

Page 100: 设备管理与 I/O 系统

100100

小测验

1 ( )把应用程序和系统组件连接到各种虚拟的、逻辑的和物理的设备上,且定义了一个支持设备驱动程序的基本构架– A 、设备驱动程序 B 、 I/O管理器– C 、 WMI D 、 PnP管理器

2.在 Windows 中,所有 I/O操作都通过()执行,隐藏了 I/O操作目标的实现细节,为应用程序提供了一个统一的到设备的接口界面。– A 、中断方式 B 、虚拟文件– C 、设备驱动程序 D 、 I/O管理器

Page 101: 设备管理与 I/O 系统

101101

小测验

3 .( )为 Windows 2000/XP提供了识别并适应计算机系统硬件配置变化的能力。 – A 、设备驱动程序 B 、 I/O管理器– C 、 WMI D 、 PnP管理器

4 . Windows 的电源管理需要底层硬件的支持,底层的硬件需要符合()标准 – A 、 PnP B 、 ACPI

– C 、 PCI D、 USB

Page 102: 设备管理与 I/O 系统

102102

习题

什么是设备驱动程序?设备驱动程序的主要功能是什么?

说明Windows I/O 系统的设计目标和结构特点。

Windows 是如何实现对 PnP 的支持的?

什么是 IRP ,它在 Windows I/O 系统中起什么作用 ?

Page 103: 设备管理与 I/O 系统

103103

6. Windows I/O系统的核心数据结构

文件对象 驱动程序对象 设备对象 I/O请求包( IRP)

Page 104: 设备管理与 I/O 系统

104104

文件对象

提供了基于内存的共享物理资源的表示法

表示文件的哪一部分由高速缓存管理器管理高速缓存,以及它们驻留在高速缓存的什么地方。

指向专用高速缓存映射的指针

表示描述一个映射文件的根结构指向区域对象指针的指针

表示文件在其上驻留的卷或分区。指向卷参数块的指针

表示文件在其上驻留的设备的类型。指向设备对象的指针

表示 I/O是否将被同步或异步、高速缓存或不高速缓存、连续或随机等等。

打开模式

表示当调用者正在使用文件时,其他的调用者是否可以打开文件来做读取、写入或删除操作。

共享模式

在文件中标识当前位置(只对同步 I/O有效)。字节偏移量

标识文件对象指向的物理文件。文件名

目的属性

Page 105: 设备管理与 I/O 系统

105105

文件对象

Page 106: 设备管理与 I/O 系统

106106

文件对象

当调用者打开文件或一个设备时, I/O管理器将返回一个文件对象句柄

Page 107: 设备管理与 I/O 系统

107107

驱动程序对象

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

当驱动程序被加载到系统中时, I/O管理器将创建一个驱动程序对象,然后它调用驱动程序的初始化例程,该例程把驱动程序的入口点填放到该驱动程序对象中

Page 108: 设备管理与 I/O 系统

108108

驱动程序对象CSHORT Type CSHORT Size

PDEVICE_OBJECT DeviceObject

ULONG Flags

PVOID DriverStart

ULONG DriverSize

PVOID DriverSection

PDRIVER_EXTENSION DriverExtension

UNICODE_STRING DriverName

PUNICODE_STRING HardwareDatabase

PFAST_IO_DISPATCH FastIoDispatch

PDRIVER_INITIALIZE DriverInit

PDRIVER_STARTIO DriverStartIo

PDRIVER_UNLOAD DriverUnload

PDRIVER_DISPATCH

MajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1]

Page 109: 设备管理与 I/O 系统

109109

驱动程序对象

DeviceObject – 指向一个设备对象链表,每个设备对象代表一个设备。 I/O管

理器把多个设备对象连接起来并维护这个域 DriverExtension

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

PDRIVER_OBJECT DriverObject

PDRIVER_ADD_DEVICE AddDevice

ULONG Count

UNICODE_STRING ServiceKeyName

Page 110: 设备管理与 I/O 系统

110110

驱动程序对象

HardwareDatabase– 指向一个串,该串为设备的硬件数据库键名。这个注册表键保

存着该设备的资源分配信息 FastIoDispatch

– 指向一个函数指针表,这些函数是由文件系统和网络驱动程序输出的

Page 111: 设备管理与 I/O 系统

111111

驱动程序对象

DriverStartIo– 指向驱动程序中处理 I/O请求的函数

DriverUnload– 指向驱动程序中的清除函数

MajorFunction– 为一个函数指针表,指向存在于驱动程序中的各个 IRP处理函

数,它定义了 I/O请求如何进入驱动程序

Page 112: 设备管理与 I/O 系统

112112

驱动程序对象

Page 113: 设备管理与 I/O 系统

113113

驱动程序对象

Page 114: 设备管理与 I/O 系统

114114

设备对象

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

设备对象以 DEVICE_OBJECT结构来描述

Page 115: 设备管理与 I/O 系统

115115

设备对象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

……

Page 116: 设备管理与 I/O 系统

116116

设备对象

DriverObject– 指向与该设备对象相关的驱动程序对象,通常调用IoCreateDevice函数创建该设备对象的驱动程序对象。过滤器驱动程序有时需要用这个指针来寻找被过滤设备的驱动程序对象,然后查看其 MajorFunction表项

NextDevice– 指向属于同一个驱动程序的下一个设备对象。这个域把多个设

备对象连接起来,起始点就是驱动程序对象中的DeviceObject成员

Page 117: 设备管理与 I/O 系统

117117

设备对象

CurrentIrp– 指向最近发往驱动程序 StartIo函数的 I/O请求包

Flags– 包含一组标志位

Page 118: 设备管理与 I/O 系统

118118

设备对象

Characteristics– 包含另一组标志位,描述设备的可选特征

DeviceExtension– 指向一个由用户定义的数据结构,驱动程序可以使用该结构保

存每个设备实例的信息,一般把该结构称为设备扩展( device extension)

Page 119: 设备管理与 I/O 系统

119119

设备对象

DeviceType– 是一个枚举常量,描述设备类型

StackSize– 统计从该设备对象开始向下直到 PDO之间的设备对象个数。该域的目的是告诉其他代码,如果把该设备对象的驱动程序作为其 IRP的第一发送对象,那么应在这个 IRP中创建多少个堆栈单元

AlignmentRequirement– 是一个位掩码。执行 DMA传输的设备直接使用内存中的数据缓冲区工作

Page 120: 设备管理与 I/O 系统

120120

设备对象 观察与体验

Page 121: 设备管理与 I/O 系统

121121

设备对象 观察与体验

Page 122: 设备管理与 I/O 系统

122122

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

一方面,驱动程序对象通常有多个与它相关的设备对象,因此它利用 DeviceObject指针指向指向一个设备对象列表,该列表代表驱动程序可以控制的物理设备、逻辑设备和虚拟设备

另一方面,设备对象反过来指向它自己的驱动程序对象,这样 I/O管理器就知道在接收一个 I/O请求时应该调用哪个驱动程序。它使用设备对象找到代表服务于该设备驱动程序的驱动程序对象,然后利用在初始请求中提供的功能码来索引驱动程序对象。每个功能码都对应于一个驱动程序的入口点

Page 123: 设备管理与 I/O 系统

123123

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

Page 124: 设备管理与 I/O 系统

124124

驱动程序对象、设备对象、设备扩展之间的关系

驱动程序对象

DeviceObject

设备对象

DriverObject

NextDevice

DeviceExtension

设备对象

DriverObject

NextDevice

DeviceExtension

设备扩展DriverObject

设备扩展DriverObject

Page 125: 设备管理与 I/O 系统

125125

I/O请求包 (IRP)

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

Page 126: 设备管理与 I/O 系统

126126

I/O 请求包 (IRP)

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

Page 127: 设备管理与 I/O 系统

127127

I/O请求包 (IRP)

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

Page 128: 设备管理与 I/O 系统

128128

I/O请求包 (IRP)

每一个 IRP可以被看成由两部分组成:固定部分和一个 I/O堆栈

Page 129: 设备管理与 I/O 系统

129129

IRP 固定部分的域 CSHORT Type CSHORT Size

PMDL MdlAddress

ULONG Flags

union AssociatedIrp

LIST_ENTRY ThreadListEntry

IO_STATUS_BLOCK IoStatus

KPROCESSOR_

MODE

RequestorMode

BOOLEAN

PendingReturne

d

CHAR

StackCount

CHAR

CurrentLocation

BOOLEAN

Cancell

KIRQL

CancelIrql

CHAR

ApcEnvironmen

t

UCHAR

AllocationFlags

PIO_STATUS_BLOCK UserIosb

PKEVENT UserEvent

union Overlay

PDRIVER_CANCEL CancelRoutine

IO_STATUS_BLOCK UserBuffer

union Tail

Page 130: 设备管理与 I/O 系统

130130

IRP固定部分的域

MdlAddress– 指向一个内存描述符表( MDL, memory descriptor list)。当驱动程序使用直接 I/O时, MDL用来描述一个与该请求相关联的用户模式缓冲区

Flags– 包含一些对驱动程序只读的标志

AssociatedIrp– 该域是一个三指针联合,其中,如果设备执行缓冲 I/O ,则AssociatedIrp.SystemBuffer指针指向系统空间缓冲区,否则为 NULL

Page 131: 设备管理与 I/O 系统

131131

IRP固定部分的域

IoStatus– 是一个仅包含两个域的结构,驱动程序在最终完成请求时设置

这个结构。 IoStatus.Status域将收到一个 NTSTATUS代码,而 IoStatus.Information的类型为 ULONG_PTR,它将收到一个信息值,该信息值的确切含义取决于具体的 IRP类型和请求完成的状态

RequestorMode– 取值为一个枚举常量 UserMode或 KernelMode,指定请求初始化的模式为用户模式或核心模式

Page 132: 设备管理与 I/O 系统

132132

IRP固定部分的域

PendingReturned– 该域为一个 BOOLEAN类型,如果为 TRUE,则表明处理该IRP的最低级分发例程返回了 STATUS_PENDING。完成例程通过参考该域来避免自己与分发例程间的潜在竞争

Cancel– 该域为 BOOLEAN类型。如果为 TRUE,则表明 IoCancelIrp已被调用,该函数用于取消这个请求。如果为 FALSE,则表明没有调用 IoCancelIrp函数

Page 133: 设备管理与 I/O 系统

133133

IRP固定部分的域

CancelIrql– 是一个 IRQL值,表明那个专用的取消自旋锁是在这个 IRQL

上获取的。当驱动程序在取消例程中释放自旋锁时应参考这个域

CancelRoutine– 指向驱动程序取消例程的地址。应该使用IoSetCancelRoutine函数设置 CancelRoutine域而不是直接修改该域

Page 134: 设备管理与 I/O 系统

134134

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

Page 135: 设备管理与 I/O 系统

135135

I/O堆栈单元

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

Page 136: 设备管理与 I/O 系统

136136

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

Page 137: 设备管理与 I/O 系统

137137

I/O 堆栈单元中的域UCHAR

MajorFunction

UCHAR

MinorFunction

UCHAR Flags UCHAR

Control

union Parameters

PDEVICE_OBJECT DeviceObject

PFILE_OBJECT FileObject

PIO_COMPLETION_ROUTINE CompletionRoutine

PVOID Context

Page 138: 设备管理与 I/O 系统

138138

I/O堆栈单元中的域

MajorFunction– 是该 IRP的主功能代码,它指出所要执行的 I/O操作类型。

主功能代码与驱动程序对象的 MajorFunction表中的某个分发函数指针相对应

MinorFunction– 是该 IRP的副功能代码,它进一步指出该 IRP属于哪个主功

能类

Page 139: 设备管理与 I/O 系统

139139

I/O堆栈单元中的域

Parameters– 它是几个子结构的联合,每个请求类型都有自己专用的参数。

这些子结构包括 Create(对应 IRP_MJ_CREATE请求)、 Read(对应 IRP_MJ_READ请求)、 StartDevice(对应 IRP_MJ_PNP 的 IRP_MN_START_DEVICE子类型)等

DeviceObject– 指向该堆栈单元对应的设备对象的地址,该域由IoCallDriver函数负责填写

Page 140: 设备管理与 I/O 系统

140140

I/O堆栈单元中的域

FileObject– 指向与一个 I/O请求有关的文件对象的地址

CompletionRoutine– 是一个 I/O完成例程的地址。该地址是由与这个堆栈单元对应

的驱动程序的更上一层驱动程序设置的,驱动程序不应直接设置这个域

Context– 是一个任意的与上下文相关的值,将作为参数传递给完成例程

Page 141: 设备管理与 I/O 系统

141141

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

Page 142: 设备管理与 I/O 系统

142142

I/O功能代码

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

Page 143: 设备管理与 I/O 系统

143143

功能代码 说明 对应的Win32 API函数

IRP_MJ_CREATE 打开设备 CreateFile

IRP_MJ_CLEANUP 在关闭设备时,取消挂起的 I/O请求

CloseHandle

IRP_MJ_CLOSE 关闭设备 CloseHandle

IRP_MJ_READ 从设备获得数据 ReadFile

IRP_MJ_WRITE 向设备发送数据 WriteFile

IRP_MJ_DEVICE_CONTROL 对用户模式或内核模式客户程序可用的控制操作

DeviceIoControl

IRP_MJ_INTERNAL_DEVICE_CONTR

OL

只对内核模式客户程序可用的控制操作

没有对应的Win32 API

IRP_MJ_QUERY_INFORMATION 得到文件的长度 GetFileLength

IRP_MJ_SET_INFORMATION 设置文件的长度 SetFileLength

IRP_MJ_FLUSH_BUFFERS 写输出缓冲区或丢弃输入缓冲区

FlushFileBuffers

FlushConsoleInputBuff

er

PurgeComm

IRP_MJ_SHUTDOWN 系统关闭 InitialSystemShutdown

I/O 功能代码

Page 144: 设备管理与 I/O 系统

144144

7. Windows的 I/O处理

I/O 的类型

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

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

Page 145: 设备管理与 I/O 系统

145145

I/O的类型

同步 I/O和异步 I/O

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

异步 I/O :允许应用程序发布 I/O请求,然后当设备传输数据的同时,应用程序继续执

Page 146: 设备管理与 I/O 系统

146146

I/O的类型

同步 I/O和异步 I/O

异步 I/O能够提高应用程序的吞吐率,因为它允许在 I/O操作进行期间,应用程序继续其他的工作。要使用异步 I/O,必须在 Win32的 CreateFile函数中指定FILE_FLAG_OVERLAPPED标志

在发出异步 I/O操作请求之后,线程必须小心地不访问任何来自 I/O操作的数据,直到设备驱动程序完成数据传输。线程必须通过等待一些同步对象的句柄,使它的执行与 I/O请求的完成同步

Page 147: 设备管理与 I/O 系统

147147

I/O的类型

快速 I/O

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

Page 148: 设备管理与 I/O 系统

148148

I/O的类型

映射文件 I/O

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

Page 149: 设备管理与 I/O 系统

149149

I/O的类型

分散 / 集中 I/O

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

Page 150: 设备管理与 I/O 系统

150150

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

处理对单层驱动程序的同步 I/O包括七个步骤: ( 1 ) I/O请求经过子系统 DLL

( 2 )子系统 DLL调用 I/O管理器的 NtWriteFile服务 ( 3 ) I/O管理器分配一个描述该请求的 IRP,并通过调用IoCallDriver函数给驱动程序(这里指设备驱动程序)发送请求

( 4 )驱动程序将 IRP中的数据传输到设备并启动 I/O操作

Page 151: 设备管理与 I/O 系统

151151

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

处理对单层驱动程序的同步 I/O包括七个步骤: ( 5 )通过中断 CPU,驱动程序发信号进行 I/O完成操作 ( 6 )在设备完成了操作并且中断 CPU时,设备驱动程序服

务于中断 ( 7 )驱动程序调用 IoCompleteRequest函数表明它已经

处理完了 IRP请求,接着 I/O管理器完成 I/O请求

Page 152: 设备管理与 I/O 系统

152152

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

Page 153: 设备管理与 I/O 系统

153153

处理中断

在 I/O设备完成数据传输之后,它将产生中断并请求服务 当 I/O设备中断发生时,处理器将控制转交给内核陷阱处理

程序,内核陷阱处理程序将在它的中断向量表中搜索定位用于设备的 ISR。 Windows 上的 ISR用两个步骤来典型地处理设备中断

当 ISR被首次调用时,它通常只在设备 IRQL上停留获得设备状态所必需的一段时间,最后停止设备的中断。然后它使一个 DPC排除并退出操作,清除中断

过一段时间,在 DPC例程被调用时,设备完成对中断的处理。完成之后,设备将调用 I/O管理器来完成 I/O并处理 IRP

Page 154: 设备管理与 I/O 系统

154154

处理中断

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

Page 155: 设备管理与 I/O 系统

155155

处理中断

ISR

处理器控制块 DPC 例程

Page 156: 设备管理与 I/O 系统

156156

完成 I/O请求

I/O处理的第三阶段称作 I/O完成 I/O系统必须把一些存储在系统内存中的数据复制到调用者

的虚拟地址空间中。要获得调用者的虚拟地址, I/O管理器必须在调用者线程的上下文中进行数据传输,而此时调用者进程是当前处理器上活动的进程,调用者线程正在处理器上执行。 I/O管理器通过在线程中执行一个核心态的异步过程调用( APC)来完成这一操作

Page 157: 设备管理与 I/O 系统

157157

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

对多层驱动程序 I/O请求的处理是在单层 I/O处理的基础上变化而来

以由文件系统控制的磁盘作为例子 首先, I/O管理器收到 I/O请求并且创建 IRP来代表它,这

一次 I/O管理器将 IRP发送给文件系统驱动程序 根据调用程序发出的请求类型,文件系统驱动程序可以把同

一个 IRP发送给磁盘驱动程序,或者也可以生成另外的 IRP并其发送给磁盘驱动程序

Page 158: 设备管理与 I/O 系统

158158

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

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

Page 159: 设备管理与 I/O 系统

159159

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

Page 160: 设备管理与 I/O 系统

160160

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

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

Page 161: 设备管理与 I/O 系统

161161

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

完成分层 I/O 请求

Page 162: 设备管理与 I/O 系统

162162

小测验

1.Windows 使用()辨别将要发生在特定文件对象上的特定 I/O 操作。 A、 I/O 功能代码 B、 IO 请求包C 、设备驱动程序 D、 I/O 管理器

2 .在 Windows 中,用于中,用于存储处理 I/O 请求所需信息的是()。A 、 I/O 功能代码 B 、 IO 请求包C 、设备驱动程序 D 、内存

Page 163: 设备管理与 I/O 系统

163163

小测验

3 .()在系统中代表一个物理的、逻辑的或虚拟的设备并描述了它的特征,例如它所需要的缓冲区的对齐方式和它用来保存即将到来的 I/O 请求包的设备队列的位置。 A、 I/O 功能代码 B、 IO 请求包C 、设备驱动程序 D 、设备对象

4 .对硬件设备进行的操作都是通过()进行的。 A 、功能驱动程序 B 、总线驱动程序C 、过滤器驱动程序 D 、类驱动程序

Page 164: 设备管理与 I/O 系统

164164

实验

编写一个 PC 机串行接口测试程序,要求:1.用户能够用该程序打开一个串行口,由程

序负责将用户从键盘输入的字符发送到串行口,并且把从串行口接收到的字符显示在一个窗口中

2.能够设置串行口、包括波特率、校验、停止位和数据位

3.采用异步 I/O

Page 165: 设备管理与 I/O 系统

Thoughts Change Life意念改变生活