第八章 外部设备管理
8.1 引言
8.2 缓冲技术
8.3 设备分配
8.4 设备控制
8.5 磁盘设备管理
8.6 设备管理举例外设的 特点:
种类 多差异 大 (控制和速度 )
外设 管理目的 包括:
外设资源的 控制外设资源的 共享提高外设资源的 利用率 。
8.1 引言
8.1.1 外部设备类型和特征
8.1.2 I/O控制技术
8.1.3 外设管理的目的和功能
8.1.4 外设管理结构返回
8.1.1 外部设备类型和特征
人机交互设备,视频显示设备、键盘、鼠标、打印机
与计算机或其他 电子设备交互 的设备:磁盘、磁带、传感器、控制器
计算机间的 通信设备,网卡、调制解调器返回
1,按交互对象分类
2,按交互方向分类
输入 (可读):键盘、扫描仪
输出 (可写):显示设备、打印机
输入 /输出 (可读写):磁盘、网卡
3,按外设特性分类
使用特征,存储、输入 /输出、终端
数据传输率,低速 (如键盘 )、中速 (如打印机 )、高速 (如网卡、磁盘 )
信息组织特征,单个字符或数据块
– 字符设备 (如打印机 )
– 块设备 (如磁盘 )
8.1.2 I/O控制技术返回
1,程序控制 I/O(programmed I/O)
I/O操作由程序发起,并等待操作完成。数据的每次读写通过 CPU。
缺点,在外设进行数据处理时,CPU只能等待。
2,中断驱动方式 (interrupt-driven I/O)
I/O操作由程序发起,在操作完成时(如数据可读或已经写入)由外设向 CPU发出中断,通知该程序。
数据的每次读写通过 CPU。
优点,在外设进行数据处理时,CPU不必等待,可以继续执行该程序或其他程序。
缺点,CPU每次处理的数据量少(通常不超过几个字节),只适于数据传输率较低的设备。
3,直接存储访问方式 (DMA,Direct Memory Access)
由程序 设置 DMA控制器中的若干寄存器值(如内存始址,传送字节数),然后 发起 I/O操作,而后者 完成 内存与外设的成批数据交换,在操作完成时由 DMA控制器向 CPU发出 中断 。
优点,CPU只需干预 I/O操作的开始和结束,而其中的一批数据读写无需 CPU控制,适于高速设备。
System Bus
I/O
Controller
I/O
Controller
Processor
DMA
Controller
Memory.....
Data
Count
Data
Register
Address
Register
Control
Logic
DMA Request
DMA Acknowledge
Interrupt
Read
Write
Address Lines
Data Lines
DMA方式下的 I/O控制器结构
4,通道控制方式 (channel control)
选择通道 (selector channel):可以连接多个外设,而一次只能访问其中一个外设
多路通道 (multiplexor channel):可以并发访问多个外设。
分为字节多路 (byte)和数组多路 (block)通道。
通道控制器 (Channel Processor)有自己的专用存储器,
可以执行由 通道指令 组成的通道程序,因此可以进行较为复杂的 I/O控制,如网卡上信道访问控制。通道程序通常由操作系统所构造,放在内存里。
优点:执行一个通道程序可以完成几批 I/O操作。
System Bus
Processor
I/O Bus
I/O
Controller
I/O
Controller
I/O
Controller
I/O
Controller
Memory
Channel
Processor
8.1.3 外设管理的目的和功能
提高效率,提高 I/O访问效率,匹配 CPU和多种不同处理速度的外设
方便使用,方便用户使用,对不同类型的设备统一使用方法,协调对设备的并发使用
方便控制,方便 OS内部对设备的控制:增加和删除设备,适应新的设备类型返回
1,外设管理目的
2,外设管理功能
提供 设备使用的用户接口,命令接口和编程接口
设备分配和释放,使用设备前,需要分配设备和相应的通道、控制器。
设备的访问和控制,包括并发访问和差错处理。
I/O缓冲和调度,目标是提高 I/O访问效率
8.1.4 外设管理结构返回
U s er P r o ce s s
L ogi ca l I / O
D ev i ce I / O
Sch edu l i ng & Co nt r ol ( D ev i ce D r i v er )
H ar dw ar e
Com m uni ca t i ons A r chi t ec t ur e
逻辑 I/O:逻辑设备 (也称为虚拟设备 )实体,不涉及实际的设备控制;
– 针对 用户接口,提供抽象的命令,如,Open,Close,Read,
Write。
– 针对 通信设备,则是通信体系结构如网络协议栈;
– 针对 文件存储设备,是文件系统的逻辑结构控制;
设备 I/O:逻辑设备与物理设备间的过渡协调机构。
– 用户命令到设备 操作序列的转换
– I/O缓冲,提高 I/O效率。
调度和控制,物理设备控制实体; 直接面对硬件设备的控制细节 。这部分通常体现为设备驱动程序。
– 并发 I/O访问调度
– 设备 控制和状态维护
– 中断处理
8.2 缓冲技术返回
1,引入缓冲技术的目的缓冲技术可提高外设利用率,尽可能使外设处于忙状态;但有一个限制:进程的 I/O请求不能超过外设的处理能力。
匹配 CPU或用户应用进程与外设的不同处理 速度
减少对 CPU的中断次数,提高 CPU和 I/O设备之间以及各个 I/O设备之间的处理并行性。因此,缓冲区所在的位置:内存,控制器或外设。这些在不同位置的缓冲区组合在一起,构成多级缓冲机制。
2,单方向缓冲
单缓冲 (single buffer):一个缓冲区,CPU和外设轮流使用,一方处理完之后接着等待对方处理。
双缓冲 (double buffer):两个缓冲区,CPU和外设都可以连续处理而无需等待对方。要求 CPU和外设的速度相近。
环形缓冲 (circular buffer):多个缓冲区,CPU和外设的处理速度可以相差较大。
3,缓冲池 (buffer pool)
缓冲区队列,三种:空闲缓冲区,输入缓冲区,输出缓冲区
操作,四种:设备输入,CPU读入,设备输出,
CPU写出。上述操作访问各个缓冲区队列时,需要进行相应的互斥操作。
这是一种双方向缓冲技术;缓冲区整体利用率高。
i n queue
em pt y queue
out queue
Bu ff er P o ol
D evi ce C P U
8.3 设备分配
8.3.1 设备分配数据结构
8.3.2 设备分配原则
8.3.3 假脱机技术返回由于外设资源的有限,需解决进程间的外设共享问题,
以提高外设资源的利用率。设备分配是对进程使用外设过程的管理。这里有两种作法,1)在进程间 切换使用 外设,如键盘和鼠标; 2)通过一个 虚拟设备 把外设与应用进程隔开,只由虚拟设备来使用设备。
8.3.1 设备分配数据结构
设备控制表 (DCT,Device Control Table):每个设备一张,描述设备特性和状态 。反映设备的特性、设备和控制器的连接情况。 DCT的内容主要包括:
– 设备标识:用来区别不同的设备;
– 设备类型:反映设备的特性;如:块设备或字符设备;
– 设备配置,I/O地址等;
– 设备状态:工作或空闲状态;
– 等待队列:等待使用该设备的进程队列;
返回
系统设备表 (SDT,System Device Table):系统内一张,反映 系统中设备资源的状态,记录所有设备的状态及其设备控制表的入口。 SDT表项的主要组成:
– DCT指针:指向相应设备的 DCT;
– 设备使用进程标识:正在使用该设备的进程标识;
– DCT信息:为引用方便而保存的 DCT信息,如:设备标识、设备类型等;
控制器控制表 (COCT,COntroller Control Table):每个设备控制器一张,描述 I/O控制器的配置和状态 。
如 DMA控制器所占用的中断号,DMA数据通道的分配。
– 通道控制表 (CHCT,CHannel Control Table):每个通道一张,描述通道工作状态。
返回
8.3.2 设备分配原则
与设备分配有关的 设备属性,
– 独享设备:打印机等;
– 共享设备:磁盘、网卡等;
设备 分配方式,各有优缺点
– 静态分配,在进程分创建时分配,在进程退出时释放;
不会出现死锁;
设备利用率不高;
– 动态分配,在进程执行过程中根据需要分配,使用结束后释放;
需要考虑死锁问题
有利于提高设备利用率 返回设备分配的原则是合理使用外设 (公平和避免死锁 ),提高设备利用率。
动态分配策略,针对特定的设备采用特定的分配策略。
– 先来先服务 (FCFS),按 I/O请求的先后顺序,排成 I/O请求命令队列;按 FCFS分配设备;
– 基于优先级,依据进程的优先级,指定 I/O请求的优先级,排成不同优先级队列;按优先级高低分配设备;
8.3.3 假脱机技术
引入:在多道批处理系统中,专门利用一道程序
( SPOOLing程序)来完成对设备的 I/O操作。无需使用外围 I/O处理机。
返回利用假脱机技术 (SPOOLing,Simultaneous Peripheral
Operation On Line,也称为虚拟设备技术 )可 把独享设备转变成具有共享特征的虚拟设备,从而提高设备利用率。
Appl i ca t i on A
Appl i ca t i on B
S POO L i ng
P r o gr am
Dev i ce
V i r t ual I / O Act ual I / O
假脱机的原理:
– SPOOLing程序和外设进行数据交换,可以称为
“实际 I/O”。一方面,SPOOLing程序预先从外设输入数据并加以缓冲,在以后需要的时候输入到应用程序;另一方面,SPOOLing程序接受应用程序的输出数据并加以缓冲,在以后适当的时候输出到外设。
– 在 SPOOLing程序中,需要管理两级缓冲区:内存缓冲区和快速外存上的缓冲池,后者可以暂存多批 I/O操作的较多数据。
– 应用程序进行 I/O操作时,只是和 SPOOLing程序交换数据,可以称为 "虚拟 I/O"。这时虚拟 I/O实际上是从 SPOOLing程序的缓冲池中读出数据或把数据送入缓冲池,而不是跟实际的外设进行 I/O操作。
优点:
– 高速虚拟 I/O操作,应用程序的虚拟 I/O比实际 I/O速度提高,
缩短应用程序的执行时间。另一方面,程序的虚拟 I/O操作时间和实际 I/O操作时间分离开来。
– 实现对独享设备的共享,由 SPOOLing程序提供虚拟设备,
可以对独享设备依次共享使用。
举例:打印机设备和可由打印机管理器管理的打印作业队列。
– 如,Windows NT中,应用程序直接向针式打印机输出需要
15分钟,而向打印作业队列输出只需要 1分钟,此后用户可以关闭应用程序而转入其他工作,在以后适当的时候由打印机管理器完成 15分钟的打印输出而无需用户干预。
8.4 设备控制
8.4.1 设备的控制过程
8.4.2 设备控制过程的实现方式
8.4.3 设备驱动程序返回
8.4.1 设备的控制过程
转换,将抽象的命令转换为具体的一定次序的指令
合法性检查,检查 I/O操作请求的合法性
可用性检查,检查控制器和设备的状态,判断是否可用
参数设置,设置控制器和设备的参数,包括构造必要的通道程序
启动 I/O:向控制器或设备发起 I/O操作
中断处理,提供必要的中断处理例程,以便 I/O完成时调用返回依据用户的控制命令对外设进行控制,并返回结果。
控制过程可分为以下 6步:
8.4.2 设备控制过程的实现方式
作为 应用进程 的一部分执行:与程序控制 I/O
相对应,难以对外设发出的中断作实时响应
作为 系统进程 执行:每类设备一个进程,或整个系统一个进程处理各类设备
不设进程,作为 OS核心 中的设备驱动程序返回
8.4.3 设备驱动程序
中转数据和控制,不是数据和控制的源端和目的端(应用程序和设备)
与硬件特性密切相关,通常由硬件厂商提供。
向上屏蔽设备细节,不同类型设备通常其设备驱动程序接口不同,同类设备的接口相同。因此,
同类设备的不同型号,只要更换设备驱动程序则可由 OS使用。
返回驱动程序是 I/O处理功能的低级系统例程。它具有如下特征:
8.5 磁盘设备管理
8.5.1 磁盘 I/O访问时间的组成
8.5.2 磁盘 I/O调度策略
8.5.3 磁盘缓存置换算法返回
CPU和内存的 访问速度 比磁盘要快若干个数量级,磁盘系统的性能 对整个系统的性能有重要影响,磁盘设备管理的目标就是提高磁盘系统的性能。
8.5.1 磁盘 I/O访问时间的组成
柱面定位时间:磁头移动到指定柱面的机械运动时间;
旋转延迟时间:磁盘旋转到指定扇区的机械运动时间;它与磁盘转速相关,如:软盘转速可为
600rpm(每分钟转速 ),硬盘可为 3600rpm。
数据传送时间:从指定扇区读写数据的时间。
返回设备占用等待时间
I / O 通道占用等待时间 柱面定位时间 旋转延迟时间 数据传送时间磁盘设备忙由于 柱面定位时间 在访问时间中占主要部分,合理组成磁盘数据的存储位置 可提高磁盘 I/O性能。
例子:读一个 128KB大小的文件:
(1)文件由 8个连续磁道 (每个磁道 32个扇区 )上的 256个扇区构成:
20ms+(8.3ms+16.7ms)*8=220ms;
其中,柱面定位时间为 20ms,旋转延迟时间为 8.3ms,
32扇区数据传送时间为 16.7ms;
(2)文件由 256个随机分布的扇区 构成:
(20ms+8.3ms+0.5ms)*256=7373ms;
其中,1扇区数据传送时间为 0.5ms;
随机分布时的访问时间为连续分布时的 33.5倍 。
8.5.2 磁盘 I/O调度策略
先进先出算法
优先级算法
后进先出算法
短查找时间优先算法
扫描 (SCAN)算法
循环扫描 (C-SCAN)算法
N步扫描 (N-step-SCAN)算法
双队列扫描 (FSCAN)算法 返回来自不同进程的磁盘 I/O请求构成 一个随机分布的请求队列 。磁盘 I/O调度的主要目标就是减少请求队列对应的 平均柱面定位时间 。
先进先出 (FIFO,First In First Out)算法,磁盘 I/O执行顺序为磁盘 I/O请求的先后顺序。
– 该算法的特点是公平性;在磁盘 I/O负载较轻且每次读写多个连续扇区时,性能较好。
优先级算法,依据进程优先级来调整磁盘 I/O请求的执行顺序。
– 该算法反映进程在系统的优先级特征,目标是系统目标的实现,而不是改进磁盘 I/O性能。
后进先出 (LIFO,Last In First Out)算法,后产生的磁盘 I/O请求,先执行。
– 该算法是基于事务系统中顺序文件中磁盘 I/O的局部性特征,相邻访问的位置也相邻。
– 它的问题在于系统负载重时,可能有进程的磁盘 I/O永远不能执行,处于饥饿状态。
短查找时间优先 (SSTF,Shortest Service Time First)算法,考虑磁盘 I/O请求队列中各请求的磁头定位位置,
选择从当前磁头位置出发,移动最少的磁盘 I/O请求。
– 该算法的目标是使每次磁头移动时间最少。它不一定是最短平均柱面定位时间,但比 FIFO算法有更好的性能。
– 对中间的磁道有利,可能会有进程处于饥饿状态。
扫描 (SCAN)算法,选择在磁头前进方向上从当前位置移动最少的磁盘 I/O请求执行,没有前进方向上的请求时才改变方向。
– 该算法是对 SSTF算法的改进,磁盘 I/O较好,且没有进程会饿死。
循环扫描 (C-SCAN)算法,在一个方向上使用扫描算法,当到达边沿时直接移动到另一沿的第一个位置。
– 该算法可改进扫描算法对中间磁道的偏好。实验表明,该算法在中负载或重负载时,磁盘 I/O性能比扫描算法好。
N步扫描 (N-step-SCAN)算法,把磁盘 I/O请求队列分成长度为 N的段,每次使用扫描算法处理这 N个请求。
当 N=1时,该算法退化为 FIFO算法。
– 该算法的目标是改进前几种算法可能在多磁头系统中出现磁头静止 在一个磁道上,导致其它进程无法及时进行磁盘
I/O。
双队列扫描 (FSCAN)算法,把磁盘 I/O请求分成两个队列,交替使用扫描算法处理一个队列,新生成的磁盘 I/O请求放入另一队列中。
– 该算法的目标与 N步扫描算法一致。
8.5.3 磁盘缓存置换算法访问频率置换算法 (Frequency-based Replacement)
返回磁盘缓存是 磁盘扇区在内存中的缓冲区 。磁盘缓存的调度算法很类似虚拟存储调度算法,但由于 磁盘的访问频率远低于虚拟存储,它们又存在区别。通常磁盘缓存调度算法会比虚拟存储复杂。
1.访问频率置换算法的引入它是对 LRU(最近最久未使用 )算法和 LFU(最不常用 )算法的改进。它要解决的主要问题是在 LFU算法中的 引用计数问题 。
磁盘访问可能会十分集中,在一段密集使用后,引用计数的变化就不能反映当前的引用情况 。需要考虑磁盘访问的这种密集特征,对密集引用不计数。 其基本思想是在短周期中使用 LRU算法,而在长周期中使用 LFU算法 。
2,访问频率置换算法
把 LRU算法中的特殊栈分成三部分,并在每个缓存块增加一个引用计数。
– 新区域 (New Section)
– 中间区域 (Middle Section)
– 旧区域 (Old Section)
···
新区域
··· ···
中间区域 旧区域引用计数不变引用计数加1
新读入数据块,引用计数为1
栈顶栈底
栈中缓存块被访问时 移到栈顶;如果该块在新区域,引用计数不变;否则,引用计数加 1。
– 在新区域中引用计数不变的目的是 避免密集访问对引用计数不利影响 ;
– 在中间区域和旧区域中引用计数加 1是 为了使用
LFU算法 ;
未缓存数据块读入后 放在栈顶,引用计数为 1;
在 旧区域中引用计数最小 的缓存块被置换;
– 中间区域的定义是为了避免新读入的缓存块在第一次出新区域时马上被置换,有一个过渡期;
8.6 设备管理举例
8.6.1 UNIX的设备管理
8.6.2 Windows NT的设备管理返回
8.6.1 UNIX的设备管理返回
UNIX的外设与特殊文件对应,由文件系统按文件管理方式进行管理,向上提供一个与文件系统统一的接口。
1,UNIX的 I/O结构
无缓存 I/O (Buffered
I/O):在进程 I/O区域与系统 I/O模块间直接进行数据交换;
有缓存 I/O (Unbuffered
I/O):有缓存 I/O要经过系统的缓冲区管理机构;
它分成系统缓冲区
(system buffer caches)和字符队列 (character
queues)两种。
按设备 I/O的不同情况,
UNIX系统的 I/O分成 2种:
硬件硬件控制字符设备设备驱动程序块设备缓冲区管理文件子系统 逻辑I / O
设备I / O
调度与控制
2,块设备 (block device)的缓冲区管理
块设备缓冲区结构,缓存块是缓存使用的基本单位,它与外设数据块相对应;每个缓存块由分立的两部分组成,缓冲控制块 和 缓冲数据区 。前者用于缓冲区管理,而后者用于存放数据(长度为
512字节或 1024字节)。
– 缓冲控制块:也称为缓冲首部 (buffer header)。内容包括:逻辑设备号,物理块号,缓冲区状态(如空闲、
延迟写、锁定等标志),指向缓冲数据区的指针,哈希队列的前后向指针,空闲队列的前后向指针缓冲区采用缓冲池结构,主要用于磁盘等外存的缓存。
缓冲区管理的相关数据结构
– 空闲缓冲队列 (Free list):系统的所有空闲缓冲区列表;
– 设备 I/O请求队列 (Driver I/O queue):正与外设进行 I/O操作的缓存块列表;一个缓存块必须处于空闲或操作状态;
– 设备缓冲区队列 (Device list):与各外设相关的缓存块列表,
其中有缓存数据;
缓冲区检索
– 设备缓冲区队列为 Hash队列,为了检索方便,设备缓冲区队列为一个按 (逻辑设备号,物理块号 )组织的 Hash队列。
把逻辑设备号和物理块号之和对 64取模作为哈希函数值,
据此建立多个哈希队列( 64个队列)。
– 缓存块可同时链入设备缓冲区队列和空闲缓冲队列:一个缓存块在分配给一个外设后,一直与该外设相关 (既使该缓存块在空闲缓冲队列中 ),直到分配给另一外设。即:设备释放缓冲区后,该缓冲区可处于 "延迟写 "状态,等待被写入到外设;该缓冲区被重新分配之前,要将其写入到外设。
缓冲区的置换算法
– 最近最久未使用算法 (LRU)算法
缓冲区数据读写:
– 外设与核心缓冲区间,
一般读 (从外设读入指定的数据块 ),预先读 (在一般读的基础上,异步读入另一块,以提高数据读取速度 );
一般写 (立即起动 I/O并等待完成),异步写 (立即起动 I/O而不等待完成,以提高写速度),延迟写 (不立即起动 I/O,以减少不必要的 I/O操作,但系统故障时会产生数据错误)
– 核心缓冲区与进程的用户区间,
使用 DMA方式 在缓存与用户进程进行内存到内存的数据传送,可节约 CPU时间,但要占用总线。
3,字符设备 (character device)的缓冲区管理
字符缓冲池的基本分配单位为 字符缓冲区 cblock:供各种字符设备(的设备驱动程序)使用。
– 每个缓冲区大小为 70字节,内容包括:第一个字符和最后一个字符的位置(便于从开头移出字符和向末尾添加字符),指向下一个缓冲区的指针 c_next,可存放 64个字符的数据区
字符设备缓冲队列 clist,每个字符设备驱动程序对应一个 clist。 由若干个 cblock依次链接而成,而 clist指向第一个和最后一个 cblock
– 所有的空闲缓冲区也对应一个 clist。
字符缓冲区采用缓冲池结构,构成一个字符队列
(Character Queue),它不同于块设备缓冲区的多次读写,缓冲区中每个字符只能读一次,读后被破坏。
字符设备缓冲区的操作
– 空闲缓冲区操作,申请空闲缓冲区、释放空闲缓冲区;
– 字符设备缓冲队列操作,从队首 读出 一个字符、
向队尾 写入 一个字符,读出 队首缓冲区的所有字符、向队尾 加入 一个有数据的缓冲区、从队首 读出 n个字符、向队尾 写入 n个字符;
可用字符数队首缓冲区指针队尾缓冲区指针
clist
链指针
cblock
链指针
cblock
NULL
cblock
...
4,设备开关表 (switch table)
UNIX设备驱动程序通过相应的块设备开关表和字符设备开关表描述向上 与文件系统的接口 。开关表是每个设备驱动程序的一系列接口过程的入口表,给出了一组 标准操作的驱动程序入口地址,文件系统可通过开关表中的各函数入口地址转向适当的驱动程序入口。
文件系统
open close writeread
ioct
l
open close writeread
缓冲区管理字符设备开关表 块设备开关表字符设备驱动程序中断处理程序块设备驱动程序中断处理程序中断向量设备中断中断向量
一个设备驱动程序可 同时提供块接口和字符接口,在两个开关表中各占一个表项;
一个设备驱动程序 不必支持所有的入口点,可仅返回错误码或返回成功。如:打印机的写入口点;
块设备开关表,
– open:打开设备时调用,完成设备及相关数据结构的初始化;
– close:最后一个对设备的引用释放 (没有进程打开该设备 )时调用,完成设备关闭或脱机;
– strategy(用于 I/O数据传输):向块设备发出读写请求的公共入口点;操作是异步的,驱动程序可能会优化请求队列。
字符设备,
– open,close
– read:从字符设备读取数据;
– write:向字符设备写入数据;
– ioctl:控制操作字符设备的通用入口点,它的参数为控制命令及命令参数;
5,流机制 (streams)
流的引入:流的引入是为了解决内核与驱动程序抽象层次过高,而引起的 驱动程序功能大量重复 。它可提供一个完全基于消息的模块化的驱动程序编写方法 。
流的定义:流是一组系统调用、内核资源和创建、使用及拆除流的 例程的集合,
构成一个数据传输通道,两端为读队列和写队列。
流的结构:上行流 (upstream)和下行流 (downstream)
用户进程驱动程序端模块1
用户空间核心空间流头硬件接口模块2
下行流 上行流
流的多路复用机制:
– 上部多路复用器:向上连接多个流;
– 下部多路复用器:向下连接多个流;
– 双向多路复用器:同时支持向上连接的多个流和向下连接的多个流;
以太网令牌环网
TCP UDP
IP
用户进程流头用户进程流头用户进程流头用户进程流头
8.6.2 Windows NT的设备管理返回
1,NT的 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请求包
(IRP);
核心态设备驱动程序,将 I/O请求包转化为对硬件设备的特定控制请求;
驱动程序支持例程,供设备驱动程序调用,以完成 I/O
请求;
硬件抽象层 I/O访问例程,隔离驱动程序与硬件平台,
以提高可移植性 (同体系结构上的二进制可移植和 NT
支持平台间的源代码可移植 );
2,核心态驱动程序的类型
文件系统驱动程序,实现文件 I/O请求到物理设备 I/O请求的转换;
文件系统过滤器驱动程序,截取文件系统驱动程序产生的 I/O请求,执行另外处理,并发出相应的低层 I/O请求;如:容错磁盘;
类驱动程序 (class driver):实现对特定类型设备的 I/O请求处理;
如:磁盘、磁带、光盘等;
端口驱动程序 (port driver):实现对特定类型 I/O端口的 I/O请求处理;如,SCSI接口类型;
小端口驱动程序,把对端口类型的 I/O请求映射到适配器类型;
硬件设备驱动程序 (hardware device driver):直接控制和访问硬件设备;
NT采用 分层驱动程序 的思想,只有最底层的硬件设备驱动程序访问硬件设备,高层驱动程序都是进行 高级
I/O请求到低级 I/O请求的转换 工作;各层驱动程序间的
I/O请求通过 I/O管理器 进行。
2,设备驱动程序的组成
初始化例程,I/O管理器在加载驱动程序时,利用初始化例程创建系统对象;
调度例程集,实现设备的各种 I/O操作;如:打开、关闭、读取、写入等;
启动 I/O例程,初始化与设备间的数据传输;
中断服务例程 (ISR):设备 (软 )中断时的调用例程;要求快速简单;
中断服务延迟过程调用 (DPC)例程,以内核线程方式,执行 ISR执行后的中断处理工作;
设备驱动程序由一组处理 I/O请求的不同阶段的例程组成。
小结
外部设备:交互对象、输入输出类型、特性
I/O控制技术:程序控制、中断驱动,DMA方式、
通道方式
外设管理目的和功能
缓冲:目的、单缓冲、双缓冲和环形缓冲、缓冲池
设备分配:共享和独享、静态和动态、假脱机技术
设备控制:工作过程、实现方式、设备驱动程序
设备控制举例:字符设备、块设备、设备创建、设备驱动程序