第六章 输入 / 输出系统

93
1 第第第 第第 / 第第第第第第 第第 / 第第第6.1 I/O 第第第第第第 6.2 第第第第第第第 I/O 第6.3 I/O 第 第第第第第 6.4 第第第第 6.5 第第第第第第第 6.6 第第第第第第 6.7 WindowsNT 第 I/O 第

description

第六章 输入 / 输出系统. 6.1 I/O 设备管理概述 6.2 采用通道模型的 I/O 系统 6.3 I/O 系统的软件组织 6.4 缓冲技术 6.5 磁盘的驱动调度 6.6 设备分配程序 6.7 WindowsNT 的 I/O 系统. 6.1 I/O 设备管理概述. 6.1.1 I/O 设备类型. 1. 按使用特性分类. 2. 按所属关系分类  外部设备按其所属关系可分为系统设备和用户设备。  - PowerPoint PPT Presentation

Transcript of 第六章 输入 / 输出系统

Page 1: 第六章 输入 / 输出系统

1

第六章 输入 / 输出系统

第六章 输入 / 输出系统 6.1 I/O 设备管理概述

6.2 采用通道模型的 I/O 系统

6.3 I/O 系统的软件组织

6.4 缓冲技术

6.5 磁盘的驱动调度

6.6 设备分配程序

6.7 WindowsNT 的 I/O 系统

Page 2: 第六章 输入 / 输出系统

2

第六章 输入 / 输出系统

6.1 I/O 设备管理概述6.1.1 I/O 设备类型

1. 按使用特性分类

Page 3: 第六章 输入 / 输出系统

3

第六章 输入 / 输出系统

2. 按所属关系分类

外部设备按其所属关系可分为系统设备和用户设备。

(1) 系统设备。这是指在操作系统生成时已经登记在系统中的标准设备, 如打印机、磁盘等。时钟也是一个特殊的系统设备,它的全部功能就是按事先定义的时间间隔发出中断。

(2) 用户设备。这是指在系统生成时未登记在系统中的非标准设备。这类设备通常是由用户提供的,因此该类设备的处理程序也应该由用户提供, 并通过适当的手段把这类设备登记在系统中,以便系统能对它实施统一管理。

Page 4: 第六章 输入 / 输出系统

4

第六章 输入 / 输出系统

3. 按资源分配角度分类

(1)独占设备。 只能为某一进程所独占。

(2) 共享设备。 允许若干个进程同时使用。

(3) 虚拟设备。通过假脱机 (Spooling) 技术把原来的独占

设备改造可为若干个进程所共享的设备,以提高设备

的利用率。

Page 5: 第六章 输入 / 输出系统

5

第六章 输入 / 输出系统

4. 按传输数据数量分类

外部设备按传输数据的数量,分为字符设备和块设备。

(1) 字符设备。每次传输数据以字节为单位的设备称为字

符设备,如打印机、终端、键盘等低速设备。

(2) 块设备。传输以数据块为单位进行的设备称为块设

备。 如磁盘、磁带等高速外存储器等。

Page 6: 第六章 输入 / 输出系统

6

第六章 输入 / 输出系统

6.1.2 目标 1. 方便性向用户提供使用外部设备的方便接口,使用户摆脱繁琐的编程负担。2. 并行性充分利用各种技术(通道,中断,缓冲等)提高 CPU与设备、设备与设备之间的并行工作能力。3. 均衡性充分利用资源,提高资源利用率。4. 独立性与设备无关性。用户在编制程序时,使用逻辑设备名,由系统实现从逻辑设备到物理设备的转换。用户能独立于具体物理设备而方便的使用设备。统一性:对不同的设备采取统一的操作方式,在用户程序中使用的是逻辑设备。

Page 7: 第六章 输入 / 输出系统

7

第六章 输入 / 输出系统

6.1.3 设备管理的基本功能1. 外设的分配和回收 记录设备的状态。根据用户的请求和设备的类型,采 用一定的分配算法,选择一条数据通路。2. 实现外设的启动 特权指令完成3. 实现对磁盘的驱动调度4. 处理外部设备的中断处理5. 实现虚拟设备6. 按一定算法在进程间分配设备 先来先服务

Page 8: 第六章 输入 / 输出系统

8

第六章 输入 / 输出系统

6.1.4 I/O 设备的物理特性

1. 磁盘 存取臂0

12

34

56

78

9SV

1112

1314

1516

1718

19

磁头定位部件

旋转方向

盘面

SV -伺服磁头臂移动方向

图 6.2

磁盘物理结构概念

Page 9: 第六章 输入 / 输出系统

9

第六章 输入 / 输出系统

表 6-1 典型的软盘和硬盘的技术参数

Page 10: 第六章 输入 / 输出系统

10

第六章 输入 / 输出系统

2. 时钟 晶振

每个脉冲减少一次计数器

使用保持寄存器装载计数器

图 6.3 可编程时钟

可编程时钟的优点是它的中断频率可由软件控制。 如果使用振荡频率为 1 MHz 的晶体,那么计数器每一微秒接收到一个脉冲, 对于 16 位的寄存器, 中断可编程为按 1μs 至 65536μs

的间隔发生。

Page 11: 第六章 输入 / 输出系统

11

第六章 输入 / 输出系统

时钟硬件所做的工作仅仅是按给定的时间间隔产生中断, 其它和时间有关的工作必须由软件 ( 时钟驱动程序 ) 来做。 时钟软件的任务包括:

① 维护日期和时间;

② 防止进程运行时间超过允许界限;

③ 对 CPU 使用进行记帐;

④ 处理用户进程提出的时间闹钟系统调用;

⑤ 对系统某些部分提供监视定时器;

⑥ 支持直方图监视和统计信息搜集。

Page 12: 第六章 输入 / 输出系统

12

第六章 输入 / 输出系统

3. 终端(1) 存储映像终端

图 6.4 存储映像终端直接写入视频 RAM

CPU 存储器

并行口

总线

视频 RAM 卡

视频控制器

监视器

模拟视频信号(例如 16 MHz )

键盘

Page 13: 第六章 输入 / 输出系统

13

第六章 输入 / 输出系统

视频存储卡上有一个芯片称为视频控制器 (Video Controll

er) 。 这个芯片从视频 RAM 中取出字符,产生用于驱动显示

器 (监视器 ) 的视频信号。监视器产生水平扫描屏幕的电子束。

典型的屏幕有 480 至 1024 行, 每行 640 至 1200 点。 这

些点称为像素 (Pixel) 。视频控制器调节电子束,决定一个像

素是亮的还是黑的。彩色监视器有三个电子束,分别对应红

色、 绿色和蓝色。

Page 14: 第六章 输入 / 输出系统

14

第六章 输入 / 输出系统

一个简单的单色显示器可显示 25 行,每行 80 个字符。每个字符的宽度为 9 个像素,高度为 14 个像素 ( 包括字符间的空白 ) 。 这种显示器有 350 行扫描线,每行扫描线有 720

个点,每帧每秒重画 45 至 70 次。视频控制器被设计成首先从视频 RAM 中取出 80 个字符,产生 14 行扫描线,再取 80

个字符, 再产生 14 行扫描线, 这样一直工作下去。事实上,大多数视频控制器显示每个字符的每行扫描线时,都取一次字符以便在控制器中不需要缓冲。每个字符的 9 列宽 14 行高的位模保存在视频控制器的视频 ROM 中 ( 也可以使用 RAM ,以支持用户字体 ) 。 ROM 按 12 位编址, 8 位来自字符代码, 4

位指定扫描线。 ROM 中每个字节的 8 位控制 8 个像素,字符间的第 9 个像素总是为空。因此屏幕上的每行文本需 14×80

次存储器访问,也需访问相同次数的字符发生器。

Page 15: 第六章 输入 / 输出系统

15

第六章 输入 / 输出系统

对于存储映像显示器,键盘是与显示器分开的,它可能通过一个串行口或并行口和计算机相连。 对于每一个键动作,产生 CPU 中断,键盘中断程序通过读 I/O 口取得键入的字符。

在 IBM-PC 中,键盘包括一个内嵌的微处理器,通过特殊的串行口和主板上的一个控制芯片通信。任何时刻击键或释放键, 都产生一个中断,而且键盘仅仅提供键码,而不是ASCII码。 当击 A 键时,键码 (30)被存放于 I/O 寄存器。输入字符是大写、 小写、 CTRL-A 、 ALT-A 、 -ALT-A ,还是其它的组合,则由驱动程序确定。因为驱动程序知道哪些键被按下还没有释放, 因此它有足够的信息完成这项工作。虽然键盘接口把全部工作交给了软件,但这提供了很大的灵活性。

Page 16: 第六章 输入 / 输出系统

16

第六章 输入 / 输出系统

(2) RS-232 终端

图 6.5 RS-232 终端与计算机通信

CPU 存储器 接口卡RS - 232

总线 UART

计算机

UART

终端接收线

传输线

Page 17: 第六章 输入 / 输出系统

17

第六章 输入 / 输出系统

图 6.6 X-Window 系统中的客户和服务器

(3) X 终端

Page 18: 第六章 输入 / 输出系统

18

第六章 输入 / 输出系统

6.1.5 I/O 系统的硬件组织 1. I/O 控制方式(1) 循环 I/O 测试方式思想:用软件测试设备的状态,以决定是否进行下一 I/O 操

作 。特点: CPU效率低。

(2) 程序中断 I/O 方式思想: I/O 完成(正常结束或异常终止)时以中断向 CPU汇报,新的 I/O执行时, CPU 改作它用。

特点:外设、 CPU 并行操作。

Page 19: 第六章 输入 / 输出系统

19

第六章 输入 / 输出系统

(3) DMA 方式 特点 : ① 数据传输的基本单位是数据块,即在 CPU 与 I/O 设备

之间,每次传送至少一个数据块; ② 所传送的数据是从设备直接送入内存的,或者相反; ③ 仅在传送一个或多个数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在控制器的控制下完成的。可见, DMA 方式较之中断驱动方式,又是成百倍地减少了 CPU 对 I/O 的干预,进一步提高了 CPU 与 I/O 设备的并行操作程度。

Page 20: 第六章 输入 / 输出系统

20

第六章 输入 / 输出系统

为了实现在主机与控制器之间成块数据的直接交换, 必须在 DMA 控制器中设置如下四类寄存器:

(1) 命令 / 状态寄存器 CR 。用于接收从 CPU 发来的 I/O命令或有关控制信息, 或设备的状态。

(2) 内存地址寄存器 MAR 。在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。

(3) 数据寄存器 DR 。用于暂存从设备到内存,或从内存到设备的数据。

(4) 数据计数器 DC 。 存放本次 CPU要读或写的字( 节 ) 数。

Page 21: 第六章 输入 / 输出系统

21

第六章 输入 / 输出系统

图 6.7 DMA 方式下的数据传输

CPU 内存

计数

系统总线

内存地址计数

磁盘控制器

驱动器

缓冲器

DMA 寄存器

Page 22: 第六章 输入 / 输出系统

22

第六章 输入 / 输出系统

采用 DMA 方式的数据传输处理过程如下: ① 当进程要求设备输入数据时, CPU 把准备存放输入数据的内存始址及要传输的字节数分别送入 DMA 控制器中的内存地址寄存器和传送字节计数器;另外,还要把控制 / 状态寄存器中的中断允许位和启动位置 1 ,从而启动设备,开始数据输入。 ② 发出数据输入要求的进程进入阻塞状态, 进程调度程序调度其它进程占有 CPU 。 ③ 输入设备不断地挪用 CPU 工作周期, 将数据从内部缓冲区源源不断地送入内存,直至所要求的字节数全部传送完毕。 ④ DMA 控制器在传输完成时通过中断请求线发出中断信号, CPU 接到中断信号后转中断处理程序进行相应处理。 ⑤ 中断处理结束后, CPU返回被中断的进程或去运行重新被调度的进程。

Page 23: 第六章 输入 / 输出系统

23

第六章 输入 / 输出系统

工作过程 :

设置 AR 和 DC 初值

启动 DMA 传送命令

挪用存储器周期传送数据字

存储器地址增 1字计数寄存器减 1

DC£½0?

请求中断

在继续执行用户,程序的同时准

备又一次传送

Page 24: 第六章 输入 / 输出系统

24

第六章 输入 / 输出系统

向 I/O 控制器发读命令

读 I/O 控制器的状态

检查状态?

从 I/O 控制器中读入字

向存储器中写字

传送完成?

未就绪

就绪

出错

CPU¡úI/O

I/O¡úCPU

I/O¡úCPU

CPU¡ú 内存

下条指令

完成

未完

向 I/O 控制器发读命令

读 I/O 控制器的状态

检查状态?

从 I/O 控制器中读字

向内存中写字

传送完成?

就绪

出错

CPU¡úI/O

I/O¡úCPU

I/O¡úCPU

CPU¡ú 内存

下条指令

完成

未完

中断

CPU 做其它事 向 I/O 控制器发布读块命令

CPU¡úDMA

CPU 做其它事

读 D MA 控制器的状态

中断

DMA¡úCPU

下条指令

(a ) 程序 I/O 方式 (b ) 中断驱动方式

(c ) DMA 方式

Page 25: 第六章 输入 / 输出系统

25

第六章 输入 / 输出系统

(4) 通道方式

通道 : 专门用于执行 I/O 的处理机。

I/O 通道方式是 DMA 方式的发展,它可进一步减少 CPU的干预,即把对一个数据块的读 (或写 ) 为单位的干预,减少为对一组数据块的读 (或写 )及有关的控制和管理为单位的干预。同时,又可实现 CPU 、通道和 I/O 设备三者的并行操作,从而更有效地提高整个系统的资源利用率。例如,当 CPU要完成一组相关的读 (或写 ) 操作及有关控制时,只需向 I/O 通道发送一条 I/O 指令,以给出其所要执行的通道程序的首址和要访问的 I/O 设备,通道接到该指令后,通过执行通道程序便可完成 CPU 指定的 I/O 任务。

特点:通道与通道并行; 通道与 CPU 并行。

Page 26: 第六章 输入 / 输出系统

26

第六章 输入 / 输出系统

2. 设备控制器

现有大多数的设备控制器由以下三部分组成:

(1) 设备控制器与 CPU 的接口。该接口用于实现设备控制器与 CPU 之间的通信。在该接口中有三类信号线:数据线、地址线、 控制线。 数据线通常与两类寄存器相连接:

① 数据寄存器。设备控制器中可以有一个或多个数据寄存器, 用于存放从设备送来的数据 ( 输入 )或从 CPU送来的数据( 输出 ) 。

② 控制 / 状态寄存器。在控制器中同样可以有一个或多个控制 / 状态寄存器,用于存放从 CPU送来的控制信息或由设备产生的状态信息。

Page 27: 第六章 输入 / 输出系统

27

第六章 输入 / 输出系统

(2) 设备控制器与设备的接口。在一个设备控制器上, 可

以连接一台或多台设备。相应地,在控制器中就有一个或多个

设备接口, 一个接口连接一台设备, 在每个接口中都有数据、

控制和状态三种类型的信号。

① 数据信号。

② 控制信号。

③ 状态信号。

Page 28: 第六章 输入 / 输出系统

28

第六章 输入 / 输出系统

(3) I/O 逻辑。

图 6.8 设备控制器的组成

数据寄存器

/控制 状态寄存器

CPU 与控制器接口

数据线

地址线

控制线I/O 逻辑

控制器与设备接口 1

控制器与设备接口 i

数据状态控制

数据状态控制

控制器与设备接口

Page 29: 第六章 输入 / 输出系统

29

第六章 输入 / 输出系统

作业

P200 1

Page 30: 第六章 输入 / 输出系统

30

第六章 输入 / 输出系统

6.2 采用通道模型的 I/O 系统 6.2.1 通道类型 1. 字节多路通道 ( Byte Multiplexor Channel )思想:完成一个字节数据的传送立即转去为另一设备传送一个字节。

特点:用于慢速设备。

控制器 A

控制器 B

控制器 C

控制器 D

控制器 N

A1

A2

A3…子通道 A

B1

B2

B3…子通道 B

C1

C2

C3…子通道 C

N1

N2

N3…子通道 N

A1

B1

C1… A

2B

2C

É豸

Page 31: 第六章 输入 / 输出系统

31

第六章 输入 / 输出系统

2. 选择通道 (Block Selector Channel)

思想:为一设备传送完一组数据,释放通道后,即刻转去为另一设备传送一组数据。

特点:用于快速设备。磁带、磁鼓、磁盘等。 主动释放通道后,其它设备方可使用。 通道利用率低。3. 数组多路通道 (Block Multiplexor Channel)

思想:先为一台设备执行一条通道命令,然后自动转换,为另一设备执行一条通道命令。

实质:对通道程序采用多道程序设计技术的硬件实现。

Page 32: 第六章 输入 / 输出系统

32

第六章 输入 / 输出系统

6.2.2 通道、控制器、设备的连接方式1. 单通路方式思想:从设备到控制器,从控制器到通道的路径是惟一的。缺点:通道忙闲不均时难以协调,易产生“瓶颈”现象。2. 多通路方式从设备到控制器、从控制器到通道的路径不惟一。 特点:通道忙闲可协调,可靠性高。

Page 33: 第六章 输入 / 输出系统

33

第六章 输入 / 输出系统

6.2.3 通道命令和通道程序

1. 通道命令及其格式通常,计算机系统的 I/O 处理机具有如下三类基本通道操作: (1) 数据传送类, 如读、 写、 反读、 断定 (检验设备状态 ); (2) 设备控制类, 如控制换页、 磁带反绕等; (3) 转移类, 即通道程序内部的控制转移。 例如, 某系统中通道命令的格式如下:

操作码 数据主存始址 特 征 字节计数

0 7 8 31 32 47 48 63

Page 34: 第六章 输入 / 输出系统

34

第六章 输入 / 输出系统

每条通道命令由四个字段组成:

(1) 操作码 (0~ 7) : 表示通道要执行的命令;

(2) 数据主存始址: 表示本命令要访问的主存数据区的

起始地址;

(3) 特征位 (32~ 47 , 只使用了 32~ 36 位, 其余未

用 ) : 37~ 39 位必须置 0 ,否则认为通道命令错。

Page 35: 第六章 输入 / 输出系统

35

第六章 输入 / 输出系统

特征位进一步规定了本通道命令的意义, 其各特征如下:

数据链特征 (32 位 ) :当该位为“ 1” 时, 在执行本命令后, 使计数值为 0 并取下一条 CCW ,下一条 CCW( 它规定了新的数据主存始址、 特征和计数 )继续执行原来的操作。

命令链特征 (33 位 ) :该位为“ 1” 时, 当前命令正常结束后, 顺序执行下一条 CCW 。

在通道程序中,除最后一条 CCW 外, 每条 CCW 应指定 32 位为“ 1” , 或 33 位为“ 1” 。最后一条 CCW 的所有特征位为“ 0” 时, 表示通道在完成当前命令后自动停止。

禁发长度错特征 (34 位 ) :表示对不正确的数据长度不发出错信号。一般地说,如果通道命令给出的字节数与 I/O 设备所用的字节数不一致,就发出错信号。如果该位置为“ 1” ,则禁止发出出错信号。

Page 36: 第六章 输入 / 输出系统

36

第六章 输入 / 输出系统

跳读特征 (35 位 ) : 表示禁止数据传送到内存。 当该位

为“ 1” 时,从 I/O 设备上读出的数据不写入内存,这样就可

以跳过一些数据。

程序控制中断特征 (36 位 ) :如果该位为“ 1” , 只要

取出 CCW 并开始操作,则通道就向 CPU 发中断信号。

(4) 字节计数 (48~ 63 位 ) :规定了数据区的字节数。

数据主存始址和字节计数这两个字段主要用于数据传送类命

令。

Page 37: 第六章 输入 / 输出系统

37

第六章 输入 / 输出系统

2. 通道地址字和通道状态字

在通道进行输入 / 输出操作期间,要访问两个固定内存单元:通道地址字 (CAW) 和通道状态字 (CSW) 。

通道地址字的格式如下:

钥 0 0 0 0 通道程序首地址

0 3 4 7 8 31

Page 38: 第六章 输入 / 输出系统

38

第六章 输入 / 输出系统

通道状态字的格式如下:

钥 0 0 0 0 下一条 CCW地

址 设备状态 通道状态 剩余计数

0 3 4 7 8 31 32 39 40 47 48 63

其中:钥——通道访问主存时所用的保护钥, 它由 CAW 的前 4 位送来; 下一条 CCW 地址——通道命令计数,每当一条 CCW执行完毕,该地址自动加“ 8” ,指向下一条 CCW;设备状态——记录设备状态的字节; 通道状态——记录通道状态的字节; 剩余计数——上一条 CCW执行结束后, 剩余数据的字节数。

Page 39: 第六章 输入 / 输出系统

39

第六章 输入 / 输出系统

图 6.10 设备状态字节和通道状态字节

(a) 设备状态字节; (b) 通道状态字节

32 33 34 35 36 37 38 39

注意

状态修正

控制器结束

忙碌

通道结束

设备结束

设备出错

设备例外

(a )

40 41 42 43 44 45 46 47

程序控制中断

传送长度错

程序出错

存储保护错

通道数据错

通道控制错

接口操作错

链出错

(b )

Page 40: 第六章 输入 / 输出系统

40

第六章 输入 / 输出系统

6.2.4 CPU 和通道间的通讯 1. 输入 / 输出指令

例如, 某系统中输入输出类指令主要有: SIO , TIO , HIO , TCH 。 所有 I/O 指令都具有如下格式:

操作码 B1 D1

由 (B1)+D1形成的地址指出通道号和设备号的存放单元,该单元的内容为:

通道号 设备号

Page 41: 第六章 输入 / 输出系统

41

第六章 输入 / 输出系统

SIO(START I/O) :用于启动指定通道和设备开始工作, S

IO 指令发出后,根据通道和设备状态建立结果特 征,即条件码。 CPU 根据执行结果 建立的条件码得知此次启动是否成功,再确定下一步的动作。

TIO(TEST I/O) :用以检查 I/O 操作是否完成,建立相应的条件码。

HIO(HALT I/O) :强行停止通道和 I/O 设备正在执行的操作。

TCH(TEST CHANNEL) :测试通道,根据对通道测试的结果 建立相应的条件码。

Page 42: 第六章 输入 / 输出系统

42

第六章 输入 / 输出系统

2. CPU 和通道间的通讯( 1 )通讯方式

①CPU 向通道发出命令,通道工作。 ②通道以中断方式向 CPU汇报,等候 CPU 处理。

( 2 ) CPU 启动通道完成 I/O 过程

①组织好程序并将其首址送入通道地址寄存器。 ②CPU执行“启动 I/O 指令”,启动成功,便逐条解释指令,完成 I/O 工作。 ③通道完成 I/O 操作后,以中断方式通过通道状态字向CPU汇报, CPU 分析后决定后续的操作。

Page 43: 第六章 输入 / 输出系统

43

第六章 输入 / 输出系统

中央处理机

用户进程 操作系统

进程 i

系统调用( I/O )请求

……

保护进程 i的现场组织通道程序存 CAW 到固定单元执行 SIO 指令检查条件码启动 成功

i进程阻塞重新调度进程 j运行

进程 j

中断进程 j保护现场

分析中断事件I/O处理 中断

i激活进程重新调度

通道

判断状态形成条件码

执行通道程序控制设备操作执行情况登记在 CSW 中

出现中断事件CSW 送固定单元通道号、设备号送入特定寄存器

设备和设备控制器

执行规定操作

图 6.11 CPU启动通道的工作流程

Page 44: 第六章 输入 / 输出系统

44

第六章 输入 / 输出系统

6.3 I/O 系统的软件组织 6.3.1 I/O 软件设计的目标

I/O 软件设计的第一个目标是设备无关性。其含义就是使程序员写出的软件无需任何修改便能读出软盘、硬盘以及 CD-ROM 等不同设备上的文件, 而与具体设备无关。 例如,用户可以简单地输入如下命令:

sort<input>output

就能够从各种设备上获得输入,包括软盘、硬盘或键盘,同时将输出送到各种不同的设备上,例如,软盘、硬盘甚至是屏幕。 不同设备之间的差异由操作系统去处理,操作系统会调用不同的设备驱动程序来真正地将输入数据写到输出设备上。

Page 45: 第六章 输入 / 输出系统

45

第六章 输入 / 输出系统

I/O 软件设计的第二个目标是错误处理。

I/O 软件设计的第三个目标是同步 / 异步传输。

I/O 软件设计的第四个目标是必须能处理独占设备和共享设

备的 I/O 操作。

为实现以上四个目标, I/O 系统应组织成以下四个层次:

(1) 中断处理程序;

(2) 设备驱动程序;

(3) 与设备无关的 I/O 软件;

(4) 用户空间的 I/O 软件。

Page 46: 第六章 输入 / 输出系统

46

第六章 输入 / 输出系统

6.3.2 中断处理程序

中断处理程序位于 I/O 系统的最低层。当进程需要进行

I/O 操作时,操作系统应将该进程挂起,即进入阻塞,直至 I

/O 操作结束并发生中断。 当中断发生时,中断处理程序执

行相应的操作,以解除相应进程的阻塞状态。

Page 47: 第六章 输入 / 输出系统

47

第六章 输入 / 输出系统

6.3.3 设备驱动程序

设备驱动程序包括了所有与设备有关的代码。每一个设备驱动程序只处理一种设备或者一类密切相关的设备。

设备驱动程序的功能是从与设备无关的软件中接收抽象的请求,并执行该请求。例如,读磁盘上的第 n 块。如果请求到来时,驱动程序空闲,则它立即执行该请求; 但如果它正在处理另一请求, 则它将该请求挂在一个等待队列中。

Page 48: 第六章 输入 / 输出系统

48

第六章 输入 / 输出系统

执行一条 I/O 请求的第一步,是将该请求转换成更具体

的形式。例如,对磁盘驱动程序,它包括:计算所请求的块

n 的物理地址,检查驱动电机是否在转,检测存取臂是否定

位在正确的柱面。 总之, 它必须确定需要哪些控制器命令

以及命令的执行次序。一旦决定应向控制器发送什么命令,

驱动程序就向控制器中的设备寄存器写入这些命令。

某些控制器一次只能处理一条命令, 另一些则可以接收

一串命令并自动进行处理。

Page 49: 第六章 输入 / 输出系统

49

第六章 输入 / 输出系统

6.3.4 与设备无关的 I/O 软件

现以块设备为例, 与设备无关的 I/O 软件的主要功能包括:

(1) 设备命名。

(2) 设备保护。

(3) 与设备无关的块大小。

(4) 数据缓冲。

(5) 数据块的分配。

(6) 对独占设备的分配与释放。

(7) 错误处理。

Page 50: 第六章 输入 / 输出系统

50

第六章 输入 / 输出系统

6.3.5 用户空间的 I/O 软件 尽管大部分 I/O 软件属于操作系统,但是也有一小部分是与用户程序链接在一起的库例程,甚至是在核心外运行的完整程序。系统调用,包括 I/O 系统调用,通常是库例程调用。在如下 C语句:

count=write(fd , buffer , nbyte);

中,所调用的库函数 write( )将与用户程序链接在一起, 并包含在运行时的二进制代码中。这一类库例程显然也是 I/O 系统的一部分。标准 I/O库包含相当多涉及 I/O 的库例程,它们作为用户程序的一部分运行。

Page 51: 第六章 输入 / 输出系统

51

第六章 输入 / 输出系统

6.3.6 I/O 系统软件的层次结构

图 6.12 I/O 系统的层次结构

用户进程

设备无关软件

设备驱动程序

中断处理程序

硬件

层次 I/O 应答 I/O 功能

进行 I/O 调用; ¸ñʽ»¯I/O£» Spooling

命名,保护,阻塞,缓冲,分配

建立设备寄存器;检查状态

当 I/O 结束时,唤醒驱动程序

执行 I/O 操作

I/OÇë 求

Page 52: 第六章 输入 / 输出系统

52

第六章 输入 / 输出系统

6.4 缓 冲 技 术

基本思想 : 在 CPU 与外设之间设立缓冲区,用于暂存 CPU与外设之间交换的数据,从而缓和 CPU 和外设速度不匹配所产生的矛盾。输入缓冲:指在用户进程需要数据之前,操作系统已经把数据从设备读入系统存储区中。输出缓冲:指操作系统先把要输出的数据写入系统存储区,当进程继续运行时,操作系统再把数据送往设备输出。

按使用方式专用缓冲区

通用缓冲区单缓冲双缓冲缓冲池

Page 53: 第六章 输入 / 输出系统

53

第六章 输入 / 输出系统

6.4.1 单缓冲

图 6.13 (a) 无缓冲; (b) 单缓冲

用户进程 操作系统I/O 设备

(a )

用户进程 操作系统I/O 设备

(b )

以块设备为例,设 T 为输入一块所需时间, C 是介于两个输入请求之间处理数据的时间。无缓冲区,则处理一块数据所需时间为 T+ C;如采用单缓冲区,则处理一块数据所需时间为 Max{C, T}+M ,其中 M 是把一数据块从系统缓冲区传送到用户数据区所需的时间。大多数情况下, M远小于 T或 C 。

Page 54: 第六章 输入 / 输出系统

54

第六章 输入 / 输出系统

6.4.2 双缓冲

图 6.14 双缓冲

用户进程I/O 设备

A

B

在双缓冲情况下,处理一个数据块的时间大致为 Max{C, T} 。如果 C< T ,则可使块设备很忙,连续输入;如果 C> T ,则保证用户进程处理完一个数据后无需等待 I/O 操作就可获得下一个数据。与单缓冲相比,不论哪种情况,系统性能都能得到了改善。 双缓冲可以进一步扩充成多缓冲。但系统性能并不是随着缓冲区的数量不断增加而无休止提高,当缓冲区达到一定数量时,甚至会使系统性能下降。

Page 55: 第六章 输入 / 输出系统

55

第六章 输入 / 输出系统

6.4.3 缓冲池( Buffer Pool )

1. 缓冲池的组成 对于既可用于输入又可用于输出的公用缓冲池, 其中至少应包含以下三种类型的缓冲区:① 空闲缓冲区;② 装满输入数据的缓冲区; ③ 装满输出数据的缓冲区。为了管理方便,可将相同类型的缓冲区链成一个队列。于是,可形成以下三个队列:

(1) 空缓冲区队列 emq : 由空缓冲区所链成的队列; (2) 输入队列 inq : 由装满输入数据的缓冲区所链成的队列; (3) 输出队列 outq : 由装满输出数据的缓冲区所链成的队列。

Page 56: 第六章 输入 / 输出系统

56

第六章 输入 / 输出系统

除了上述三个队列外,还应具有四种工作缓冲区:

(1) 用于收容输入数据的工作缓冲区;

(2) 用于提取输入数据的工作缓冲区;

(3) 用于收容输出数据的工作缓冲区;

(4) 用于提取输出数据的工作缓冲区。

Page 57: 第六章 输入 / 输出系统

57

第六章 输入 / 输出系统

2. 缓冲池管理的基本操作

对缓冲池管理提供两个基本操作 ( 过程 ) :

(1) getbuf(type) :用于从 type 所指定的队列的队首, 摘

下一个缓冲区;

(2) putbuf(type , number) :用于将用参数 number 所指

示的缓冲区, 挂在 type队列上。

Page 58: 第六章 输入 / 输出系统

58

第六章 输入 / 输出系统

3. 缓冲池的工作方式

图 6.15 缓冲池的工作方式

收容输入hin

sout提取输出

sin

hout

缓冲池

收容输出

提取输入 用户程序

Page 59: 第六章 输入 / 输出系统

59

第六章 输入 / 输出系统

1) 收容输入工作方式

在输入进程需要输入数据时,调用 getbuf(emq) 过程,从 emq队列的队首摘下一个缓冲区,把它作为收容输入工作缓冲区 hin 。然后,把数据输入其中,装满后再调用 putbuf(inq,hin)过程,将该缓冲区挂在输入队列 inq 的队尾。

2) 提取输入工作方式

当计算进程需要输入数据时,调用 getbuf(inq) 过程,从输入队列的取得一缓冲区 sin 作为提取输入工作缓冲区,计算进程从中提取数据。当计算进程用完该数据后,再调用 putbuf(emq, sin) ,将该缓冲区挂在空缓冲队列 emq上。

Page 60: 第六章 输入 / 输出系统

60

第六章 输入 / 输出系统

3) 收容提取输入工作方式

当计算进程需要输出时,调用 getbuf(emq) 过程,从从缓冲队列 emq 的队首取得一个空缓冲区并以次作为收容输出工作缓冲区 hout 。当其装满数据后,又调用 putbuf(outq,hout) 过程,将该缓冲区挂在 outq 的队尾。

4) 提取输出工作方式

当要输出数据时,由输出进程调用 getbuf(outq) 过程,从输出队列的队首摘取得一个装满输出数据的缓冲区,作为提取输出工作缓冲区 sout 。在数据提取完成后,再调用 putbuf(emq, sout) 过程,将它挂在空缓冲队列的末尾。

Page 61: 第六章 输入 / 输出系统

61

第六章 输入 / 输出系统

6.4.4 预先读与延迟写

1. 预先读

操作系统读块设备时,一般通过同步方式把一指定的数据块读入缓冲区,此时用户进程不得不进入阻塞状态,等待数据传输的结束。为了加快进程的推进速度,提高 CPU 和块设备工作的并行程度,最好在使用某一块之前,用异步方式提早把它读入缓冲区。当用户进程实际需要该块数据时,可以立即从缓冲区取走而无需等待。 这种技术称为预先读。

Page 62: 第六章 输入 / 输出系统

62

第六章 输入 / 输出系统

2. 延迟写

当块设备进行输出时,如果某一缓冲区只写了一部分,

则不要急于把该缓冲区的内容写到块设备上,而是把写块操

作推迟到某个适当的时机进行。那么什么是适当的时机呢 ?

一般有两个:其一是延迟写的缓冲区被写满时,其二是该缓

冲区被重新分配时。

Page 63: 第六章 输入 / 输出系统

63

第六章 输入 / 输出系统

作业

P200 6

Page 64: 第六章 输入 / 输出系统

64

第六章 输入 / 输出系统

6.5 磁盘的驱动调度 1. 顺序存储设备磁带: 730m2. 直接存储设备磁盘:柱面(磁道)、盘面(磁头)、扇区软盘:磁道、扇区3. 磁盘访问过程磁盘调度的原则:先进行移臂调度,再进行旋转调度。磁盘访问的时间由以下 3 个时间组成:寻道时间:磁头从当前位置移动到所需柱面(磁头)花费的时间。旋转等待时间:访问的扇区旋转到磁头下所需时间。传送时间 / 读写时间:读写当前扇区数据所花费的时间。

Page 65: 第六章 输入 / 输出系统

65

第六章 输入 / 输出系统

Ⅰ移臂调度

使磁头从当前位置移到访问数据所在的柱面(磁道)。

移臂调度算法:

(1) 先来先服务算法 (FCFS) 。先来先服务调度算法是最简单的一种方法,它按照输入 / 输出请求到达的顺序,逐一完成访问请求。 优点:简单,公平。缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。

Page 66: 第六章 输入 / 输出系统

66

第六章 输入 / 输出系统

(2) 最短查找时间优先法 (SSTF) 。这种算法总是先完成距当前存取臂距离最近的柱面上的输入 / 输出请求。 优点:改善了磁盘平均服务时间。 缺点:造成某些访问请求长期等待得不到服务。 (3) 扫描法 (SCAN) 。俗称探照灯法。由于请求序列具有动态性质,所以可采用扫描法。存取臂从磁盘的一端出发,向另一端移动,遇到需要访问的柱面就完成访问请求,直至到达磁盘的另一端。到达另一端后,存取臂移动方向就倒转过来,继续完成这一方向上的访问请求。 特点: 变向的次数减少。 (4) 电梯调度。该算法既要考虑申请者要求磁头移动的方向,又考虑要求磁头移动的距离,而且首先是方向一致,其次是距离最短。

Page 67: 第六章 输入 / 输出系统

67

第六章 输入 / 输出系统

图 6.16 电梯调度算法流程

同当前柱?面相同

?现在是向里移

按最佳物理记录存取

有比当前柱面?号小的请求

有比当前柱面?号大的请求

A

改变存取臂方向选择柱面号 最 大 者

选择柱面号 最 小 者B

Y

Y

N

N

N

N

N

Y

?有存取请求

执行存取

B

改变存取臂方向

A

移臂到指定柱面登记当前位置

电梯调度入口

结束

YY

Page 68: 第六章 输入 / 输出系统

68

第六章 输入 / 输出系统

(5) 循环扫描调度算法( CSCAN ) / 单向扫描调度算法这是 SCAN 算法的一种变种算法,是为了提供更均匀的等待时间而设计的。总是从 0号柱面开始向里扫描,按照各自所要访问的柱面位置的次序去选择访问者。移动臂到达最后个一个柱面后,立即带动读写磁头快速返回到 0号柱面。返回时不为任何的等待访问者服务。返回后可再次进行扫描。特点:最大磁道号紧接着最小磁道号构成 循环,进行扫描。

Page 69: 第六章 输入 / 输出系统

69

第六章 输入 / 输出系统

(6) N-Step-SCAN 算法在前几种算法中,都可能出现磁臂停留在某处不动的情况。例如,有一个或几个进程对某一磁道有着较高的访问频率,反复请求对某一磁道进行 I/O ,从而垄断了整个磁盘设备,把这一现象称为“磁臂粘着”。 N步 SCAN 算法是将磁盘请求队列分成若干个长度为 N 的子队列,磁盘调度将按 FCFS 算法依次处理这些子队列,又按 SCAN 算法处理队列中的每一个请求,这样就可避免出现粘着现象。当 N值取得很大时,会使其性能接近于 SCAN 算法;当 N=1 时,该算法退化为 FCFS 算法。(7) FSCAN 算法 FSCAN 算法实质上是 N-Step-SCAN 算法的简化。它只将磁盘请求访问队列分成两个子队列。一个是当前所有请求磁盘 I/O 的进程队列,由磁盘调度按 SCAN 算法进行处理。另一个队列则是在扫描期间,新出现的所有请求磁盘 I/O 的进程队列,这样所有的新请求都将被推迟到下一次扫描时处理。

Page 70: 第六章 输入 / 输出系统

70

第六章 输入 / 输出系统

Ⅱ旋转调度

根据延迟时间来决定执行次序的调度称为旋转调度。当移臂定位后,有多个访问者等待访问该柱面时,应优先选择延迟时间最短的访问者。例如,某一时刻对磁盘的输入 / 输出请求序列是:

柱面 (CC) 磁道 (HH) 物理记

录 R

7 4 1

7 4 8

7 4 5

40 6 4

2 7 7

Page 71: 第六章 输入 / 输出系统

71

第六章 输入 / 输出系统

进一步考查 7 号柱面上的三个输入 / 输出请求。 按上述次序,磁盘需旋转近两周才能完成访问。若将输入 / 输出请求按照下列的次序完成访问:

柱面 (CC) 磁道 (HH) 物理记录 R

7 4 1

7 4 5

7 4 8

Page 72: 第六章 输入 / 输出系统

72

第六章 输入 / 输出系统

作业

P200-201 10

Page 73: 第六章 输入 / 输出系统

73

第六章 输入 / 输出系统

6.6 设备分配程序

6.6.1 设备分配的数据结构

在配置有通道的计算机系统中,设备分配程序至少应解决以下三个问题:

(1) 是否有能用来为 I/O 请求提供的通路 ?

(2) 是否有一条以上的通路可用 ?

(3) 如果当前尚无通路可用, 那么通路何时才能空闲 ?

Page 74: 第六章 输入 / 输出系统

74

第六章 输入 / 输出系统

图 6.17 设备管理中的三种控制块

Page 75: 第六章 输入 / 输出系统

75

第六章 输入 / 输出系统

图 6.18 DCB , COCB , CHCB 间的连接

Page 76: 第六章 输入 / 输出系统

76

第六章 输入 / 输出系统

图 6.19 DCB 和 PCB 的连接

Page 77: 第六章 输入 / 输出系统

77

第六章 输入 / 输出系统

图 6.20 系统设备表与 UCB 的关系

Page 78: 第六章 输入 / 输出系统

78

第六章 输入 / 输出系统

对于所请求的 I/O 设备,可能出现三种情况: (1) 对于所请求的 I/O 设备, 仅有一条通路可用, 例如: 通道 B—— 控制器 C—— 设备 E 。 (2) 对于所请求的 I/O 设备,可以找到一条以上的可用通路, 例如上例中,最多可找出四条可用通路:

通道 A—— 控制器 C—— 设备 E 通道 A—— 控制器 D—— 设备 E 通道 B—— 控制器 C—— 设备 E 通道 B—— 控制器 D—— 设备 E

(3) 对于所请求的 I/O 设备, 没有一条可用的通路。

Page 79: 第六章 输入 / 输出系统

79

第六章 输入 / 输出系统

6.6.2 I/O 调度程序 在多进程的系统中,由于进程数多于设备数,就必然要引起进程对资源的争夺。为使系统有条不紊地工作,系统必须具有一套合理的设备分配原则。 这些原则与下述的四个因素有关:

1) I/O 设备的固有属性

2) I/O 设备的分配算法

(1) 先请求先服务。 (2) 优先级高者优先。

3) 设备分配的安全性

4) 与设备的无关性

Page 80: 第六章 输入 / 输出系统

80

第六章 输入 / 输出系统

6.6.3 设备分配的实施

1. 单通路 I/O 系统的设备分配

在单通路 I/O 系统中, 按如下步骤实施设备分配:

(1) 分配设备。

(2) 分配控制器。

(3) 分配通道。

Page 81: 第六章 输入 / 输出系统

81

第六章 输入 / 输出系统

2. 多通路 I/O 系统的设备分配 假定某进程 n 向系统提出 I/O 请求,要求为它分配一台I/O 设备。于是系统可选取该类设备中的任何一台设备分配给该进程。其步骤如下:

(1) 根据要求 I/O 的进程 n 所提供的设备类型,检索 SDT 表,找到第一个该类物理设备的 DCB ,由状态信息可知其忙闲情况。若忙,则检查第二个物理设备的 DCB 。若该类型的全部设备都处于忙碌状态,表明该类设备已分配完毕。进程 n 的此次 I/O 请求无法满足,只好把进程 n插入到等待该类设备的队列中。只要在该类设备中有一个空闲设备,系统便可对其计算分配该设备给进程 n 的安全性。若安全,则把设备分配给进程 n ,否则将其插入该类设备的等待队列。

Page 82: 第六章 输入 / 输出系统

82

第六章 输入 / 输出系统

(2) 当系统把第 i个设备分配给进程 n后,便可通过检查

与此设备相连的第一个 COCB ,而得知该控制器是否忙碌;

若忙, 再检查第二个 COCB 表。若与此设备相连的所有的

控制器都忙,则表明无控制器可分配给设备 i 。只要设备 i

不是该类设备中的最后一个,便可返回到步骤 (1) ,试图再

找下一个空闲设备;否则,仍将该进程插入控制器等待队列

中。

Page 83: 第六章 输入 / 输出系统

83

第六章 输入 / 输出系统

(3) 若有空闲的控制器,便可进一步检查与此控制器相连

的第一个通道是否忙碌。若忙,再查看第二个 CHCB 表,若

与此控制器相连的全部通道都忙,表明无通道可分配给控制器

j。只要控制器 j 不是该设备 i的最后一个控制器,便返回到步

骤 (2) ,试图找出一个空闲的控制器,否则,将该进程插入通

道等待队列。 若有空闲通道可用,则此次设备分配成功,将

相应的设备、控制器和通道分配给进程 n ,接着便可启动 I/O

设备,开始信息传送。多通路 I/O 系统设备分配的流程如下图

所示。

Page 84: 第六章 输入 / 输出系统

84

第六章 输入 / 输出系统

图 6.21 设备分配流程图

Page 85: 第六章 输入 / 输出系统

85

第六章 输入 / 输出系统

图 6.22 I/O 系统概貌

1. I/O 系统概貌

6.7.1 I/O 系统的结构 6.7 Windows NT 的 I/O 系统

Page 86: 第六章 输入 / 输出系统

86

第六章 输入 / 输出系统

NT执行体的 I/O 系统接收用户态和核心态进程的 I/O 请求, 以不同的方式传送到 I/O 设备。 I/O 系统由一组负责处理各种设备的输入 / 输出部件构成。 这 些部件有:

(1) I/O 管理程序;

(2) 文件系统;

(3) 缓冲存储管理器 (Cache Manager);

(4) 设备驱动程序 (Device Driver);

(5) 网络转发程序 (NetWork Redirector) 和网络服务程序(Network Server) 。

Page 87: 第六章 输入 / 输出系统

87

第六章 输入 / 输出系统

2. I/O 管理程序

I/O 管理程序建立了 NT执行体的 I/O模型,它实现与设备无关的输入 / 输出,即它并不进行实际的 I/O 处理。它的主要工作是建立一个代表 I/O 操作的 I/O 请求包 IRP(I/O Request Packet) ,把 IRP 传送给适当的驱动程序并在 I/O 完成后处理其结果,最后撤消 IRP 。与此相反,驱动程序接收 IRP ,执行 IRP规定的操作,并在完成后将 IRP 传回 I/O 管理程序或通过驱动程序再传到另一驱动程序, 以求进一步的处理。

I/O 系统采用包驱动方式,每个 I/O 请求都用一个 I/O 请求包来表达。每个 IRP 是一个数据结构,用以控制在每一操作步骤上的 I/O 操作的处理。

Page 88: 第六章 输入 / 输出系统

88

第六章 输入 / 输出系统

3. 虚拟文件

除了 I/O 管理程序,该结构中 还有四类驱动程序:文件系统、缓冲存储管理程序、 设备驱动程序、网络转发程序。要把这四类功能、特性均不相同的部件组合在一起,并建立一个一体化的统一系统,必须进行高层的抽象,建立一个统一的逻辑模型。

NT建立的逻辑模型吸收了 UNIX I/O 系统的概念, 认为“所有的读写数据都看成是直接送往虚拟文件的字节流”。虚拟文件用文件描述符表示, 处理虚拟文件就像处理一个真正的文件。由操作系统判定这个虚拟文件究竟是设备、管道、网络还是磁盘上的真正文件。

Page 89: 第六章 输入 / 输出系统

89

第六章 输入 / 输出系统

图 6.23 打开一个文件对象

系统服务

对象管理程序

安全性参考监视程序

进程管理程序

本地过程调用功能

虚拟内存管理程序

文件系统高速缓冲管理程序设备驱动程序网络驱动程序

I/O 管理程序¢Ü 创建文件对象

¢Ý 返回对象句柄

内核

Win32DLL

CRuntime

DLL

Win32Ó¦ÓóÌÐò

¢Ù fp£½fopen(D:\myfile.dat,r)

¢Ú CreateFile(D:\myfile.dat, ¡ ) ¢Þ ·µ»ØÎļþ¾ä±ú

¢Û NtCreateFile(D:\myfile.dat, ¡ )用户态核心态

Win32×Óϵͳ

Page 90: 第六章 输入 / 输出系统

90

第六章 输入 / 输出系统

6.7.2 驱动程序模型 每一个驱动程序都由以下标准成套 (或组合 )组成: (1) 一个初始化程序; (2) 一组调度程序; (3) 一个启动 I/O 的程序; (4) 一个中断服务程序; (5) 一个中断服务 DPC(延迟过程调用 ) 程序; (6) 一个完成例程; (7) 一个撤消 I/O例程; (8) 一个卸载例程; (9) 一个出错记录例程。

Page 91: 第六章 输入 / 输出系统

91

第六章 输入 / 输出系统

6.7.3 异步 I/O 操作

图 6.24 同步 I/O 操作

应用程序 WriteFile(file_handle,data, ¡ )

Win32 子系统 调用 NT 写文件服务

I/O 管理器 检查参数,建立 IRP调用设备驱动程序

设备驱动程序 I/O 对设备排队

Ö´ÐÐI/O转换中断服务

设备

处理中断

完成 IRP 返回核心态用户态

返回数据

( )等待服务完成 ReadFile(file_handle, data, ¡ )

时间

Page 92: 第六章 输入 / 输出系统

92

第六章 输入 / 输出系统

同步 I/O 操作过程可归纳如下:

(1) 按用户要求, I/O 管理程序为之形成 IRP , 并把它传送给驱动程序, 由驱动程序完成 I/O 操作。

(2) 设备完成 I/O 操作后,发中断请求,设备驱动程序中的中断处理程序进行相应中断处理。

(3) I/O 管理程序完成 I/O 请求。

在大多数操作系统中,同步 I/O 是标准的, Windows NT除了提供同步 I/O 外还提供异步 I/O ,允许子系统选用同步 I/O或异步 I/O , 并根据它的应用程序接口操作的不同,为客户应用程序提供不同类型的 I/O 。

Page 93: 第六章 输入 / 输出系统

93

第六章 输入 / 输出系统

图 6.25 异步 I/O

应用程序 WriteFile(file_handle,data, ¡

overlapped)

Win32 子系统 调用 NT 写文件服务

I/O 管理程序 检查参数,建立 IRP调用设备驱动程序

设备驱动程序 I/O 对设备排队

Ö´ÐÐI/O转换中断服务

设备

处理中断

完成 IRP 设备文件句柄为有信号状态

核心态用户态

( )执行其它任务ReadFile(file_handle,

data, ¡ overlapped)

时间

返回

返回

返回 I/O 挂起状态

Wait(file_handle)

( )等待结束…