第6章+四五六章作业_第1页
第6章+四五六章作业_第2页
第6章+四五六章作业_第3页
第6章+四五六章作业_第4页
第6章+四五六章作业_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章输入/输出系统6.1I/O系统的硬件结构6.2采用通道模型的I/O系统6.3I/O系统的软件组织6.4缓冲技术6.5磁盘的驱动调度6.6设备分配程序6.7WindowsNT的I/O系统6.8Windows2000/XP设备管理机制实例分析I/O系统I/O硬件设备介绍磁盘时钟设备视频控制器RS-232I/O系统的硬件组织I/O系统的软件组织I/O控制方式设备控制器通道模型I/O软件设计目标I/O软件层次结构磁盘调度设备分配程序I/O系统I/O硬件设备介绍磁盘时钟设备视频控制器RS-232I/O系统的硬件组织I/O系统的软件组织I/O控制方式设备控制器通道模型I/O设备硬件概览3.按资源分配角度分类独占设备。一经分配给某进程,在进程释放它之前,其它设备不能使用。如打印机、纸带读入机等。

(2)共享设备。允许若干进程同时共享的设备。如磁盘机。(3)虚拟设备。通过假脱机(Spooling)技术把原来的独占设备改造成可为若干个进程所共享的设备。4.按传输数据数量分类外部设备按传输数据的数量,分为字符设备和块设备。

(1)字符设备。每次传输数据以字节为单位的设备称为字符设备,如打印机、终端、键盘等低速设备。

(2)块设备。传输以数据块为单位进行的设备称为块设备。如磁盘、磁带等高速外存储器等。I/O系统I/O硬件设备介绍磁盘时钟设备视频控制器RS-232I/O系统的硬件组织I/O系统的软件组织I/O控制方式设备控制器通道模型2.磁盘结构解析磁盘结构解析cont.

磁盘结构解析

cont.C,H,S表6-1典型的软盘和硬盘的技术参数I/O系统I/O硬件设备介绍磁盘时钟设备视频控制器RS-232I/O系统的硬件组织I/O系统的软件组织I/O控制方式设备控制器通道模型2.时钟图6.3可编程时钟

可编程时钟的优点是它的中断频率可由软件控制。如果使用振荡频率为1MHz的晶体,那么计数器每一微秒接收到一个脉冲,对于16位的寄存器,中断可编程为按1μs至65536μs的间隔发生。时钟采用民用电产生固定频率的震荡采用晶振RC电路思考题:对于震荡频率为1MHz的晶振,要产生1s的时钟中断,如果用32位计数器,该计数器的值应该设置多大?0100001001000000F4240

时钟硬件所做的工作仅仅是按给定的时间间隔产生中断,其它和时间有关的工作必须由软件(时钟驱动程序)来做。时钟软件的任务包括:①维护日期和时间;②防止进程运行时间超过允许界限;③对CPU使用进行记帐;④处理用户进程提出的时间闹钟系统调用;⑤对系统某些部分提供监视定时器;⑥支持直方图监视和统计信息搜集。3.终端(1)存储映像终端。图6.4存储映像终端直接写入视频RAM视频RAM卡和监视器像素(Pixel):像素的显示:<位置,灰度>。字符的显示:需要知道字符的像素矩阵,也就是字符的“位模”。

不同的字符有不同的位模,这些位模通常不会变化,因此保存在视频ROM中。行的显示:一行显示80个字符,每个字符被划分为9*14个像素

(包括字符间隔)。每次只显示一行扫描线。大家计算一下,要显示一行字符,需要花费多大的视频RAM空间?4*6矩阵9*5矩阵(2)RS-232终端。图6.5RS-232终端与计算机通信UART:UniversalAsynchronousReceiverTransmitterI/O系统I/O硬件设备介绍磁盘时钟设备视频控制器RS-232I/O系统的硬件组织I/O系统的软件组织I/O控制方式设备控制器通道模型6.1.3I/O系统的硬件组织1.I/O控制方式循环I/O测试方式。程序通过in,out指令直接控制I/O设备,

进行数据传输。(2)程序中断I/O方式。I/O操作仍然由CPU控制,一次只能传输

一个字或字符。外设不能直接访问内存。(3)DMA方式。(4)通道方式。图6.7DMA方式下的数据传输

采用DMA方式的数据传输处理过程如下:①当进程要求设备输入数据时,CPU把准备存放输入数据的内存始址及要传输的字节数分别送入DMA控制器中的内存地址寄存器和传送字节计数器;另外,还要把控制/状态寄存器中的中断允许位和启动位置1,从而启动设备,开始数据输入。②发出数据输入要求的进程进入阻塞状态,进程调度程序调度其它进程占有CPU。③输入设备不断地挪用CPU工作周期,将数据从内部缓冲区源源不断地送入内存,直至所要求的字节数全部传送完毕。④DMA控制器在传输完成时通过中断请求线发出中断信号,CPU接到中断信号后转中断处理程序进行相应处理。⑤中断处理结束后,CPU返回被中断的进程或去运行重新被调度的进程。(3)设备控制器图6.8设备控制器的组成用于存放从CPU送来的数据/从设备产生的数据用于存放从CPU送来的控制信息/从设备产生的状态信息I/O系统I/O硬件设备介绍磁盘时钟设备视频控制器RS-232I/O系统的硬件组织I/O系统的软件组织I/O控制方式设备控制器通道模型选择型DMA多路型DMAI/O发展阶段I/O通道的特点:I/O通道本质上是一个专用于I/O处理的处理器,它能够执行I/O指令,因此拥有对I/O操作的完全控制。这些指令被编制成一个I/O程序,保存在内存中。因此CPU通过指示I/O通道去执行内存中的一段程序的方式来启动I/O传输。这些程序会说明将要访问的设备、内存中的存储区域地址、优先级以及错误条件下所采取的动作等。I/O通道按照这些指令控制数据的传输。I/O通道的特点:I/O通道本质上是一个专用于I/O处理的处理器,它能够执行I/O指令,因此拥有对I/O操作的完全控制。这些指令被编制成一个I/O程序,保存在内存中。因此CPU通过指示I/O通道去执行内存中的一段程序的方式来启动I/O传输。这些程序会说明将要访问的设备、内存中的存储区域地址、优先级以及错误条件下所采取的动作等。I/O通道按照这些指令控制数据的传输。

几个重要概念:

通道命令:又称为通道命令字(CCW,ChannelcommandWord),它是规定设备的某一种动作的指令。

通道程序:是由通道命令编制出来的一段程序,用于控制设备的工作。整个通道程序确定了外围设备应执行的操作及操作顺序。

通道程序存放在哪里呢?

通道地址字:通道程序是存放在主存中的,为了使通道能够正确快速地找到通道程序的起始地址,系统在主存中安排一个固定的单元,用来存放通道程序的起始地址,这个固定的单元称为通道地址字(CAW,ChanneladdressWord)。通道状态字:通道被启动后,控制指定的设备完成规定的操作,同时,通道在执行对外围设备控制的过程中,要记录通道与设备执行情况,为此系统在主存中安排另一个固定单元,用于存放这些被记录状态,这个固定单元称为通道状态字(CSW,ChannelStatusWord)。

通道程序:中央处理器执行“启动I/O”指令启动通道工作,通道被启动后执行事先编制好的由通道命令组成的通道程序来控制设备工作。通道命令又称为通道命令字(CCW,ChannelCommandWord),每一条通道命令规定了设备的某一种操作,整个通道程序就确定了设备应执行的操作和操作顺序。通道程序是存放在内存中的,为了使通道能够正确快速地找到通道程序的起始地址,系统在内存中安排了一个固定的单元,用来存放通道程序的起始地址,这个固定的单元称为通道地址字(CAW,ChannelAddressWord)。通道被启动后,控制指定的设备完成规定的操作,同时记录通道与设备执行情况,为此系统在内存中安排另一个固定单元,用于存放这些被记录状态,这个固定的单元称为通道状态字(CSW,ChannelStatusWord)。

6.2采用通道模型的I/O系统6.2.1通道类型字节多路通道(ByteMultiplexorChannel)2.选择通道3.数组多路通道IBM370的I/O结构6.2.4CPU和通道间的通讯1.输入/输出指令

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

由(B1)+D1形成的地址指出通道号和设备号的存放单元,该单元的内容为:通道号设备号SIO(STARTI/O):用于启动指定通道和设备开始工作,SIO指令发出后,根据通道和设备状态建立结果特征,即条件码。CPU根据执行结果建立的条件码得知此次启动是否成功,再确定下一步的动作。

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

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

TCH(TESTCHANNEL):测试通道,根据对通道测试的结果建立相应的条件码。2.CPU和通道间的通讯图6.11CPU启动通道的工作流程

通道I/O主要过程的时间关系示意图I/O系统I/O硬件设备介绍磁盘时钟设备视频控制器RS-232I/O系统的硬件组织I/O系统的软件组织I/O控制方式设备控制器通道模型I/O软件设计目标I/O软件层次结构磁盘调度设备分配程序6.3I/O系统的软件组织6.3.1I/O软件设计的目标设备无关性:使程序员写出的软件无需任何修改便能读出软盘、硬盘以及CD-ROM等不同设备上的文件,而与具体设备无关。不同设备之间的差异由操作系统去处理,操作系统会调用不同的设备驱动程序来真正地将输入数据写到输出设备上。

错误处理:错误应尽可能在接近硬件的地方处理。

同步/异步传输:必须能处理独占设备和共享设备的I/O操作。6.3.6I/O系统软件的层次结构图6.12I/O系统的层次结构用户进程count=read(fd,buffer,nbytes)if(count==nbytes){….}唤醒用户进程继续执行设备无关软件通过fd找到对应的文件file结构和数据缓冲区,并在缓冲区中查看数据;若没有数据,则调用驱动程序读数据。count=设备驱动程序实施设备读控制所需的一系列操作硬件

磁盘设备控制器

读取数据完毕中断处理程序I/O请求处理过程系统功能调用为什么要引入缓冲?6.4缓冲技术I/O与用户进程直接进行数据交换的方法存在下面几个问题:尽管采用DMA和通道技术,提高了CPU的使用效率,但是仍然没有缩小一个用户进程等到I/O操作结束的时间;有可能出现单进程死锁现象。当一个进程发送一个I/O命令后处于阻塞状态,等待I/O完成事件的发生,然后在开始I/O操作之前被换出,也就是操作系统将该进程的内存空间换出到磁盘上的交换区,此时I/O操作也将被阻塞,因为它要等待该进程被换入,于是就出现了死锁;为了避免死锁,在发出I/O请求之前,参与I/O操作的用户存储空间必须被锁定在内存中,这样带来两个问题:一是干扰了操作系统的交换决策,二是如果这个I/O操作正在排队,而内存页面的锁定使得正在等待该I/O完成的进程不能被交换出去,那么就会造成内存空间浪费。6.4.1单缓冲当用户进程发出I/O请求时,操作系统给该操作分配一个位于内存中系统部分的缓冲区。输入传送的数据被放到系统缓冲区中。当传送完成时,进程把该块移到用户空间,并立即请求另一块,这称做“预读”,或者预先输入。根据程序的局部性原理,程序在不久的将来很可能就会读取预读的数据。当准备将数据发送到一台设备时,首先把这些数据从用户空间复制到系统缓冲区,然后就立即返回继续执行,而系统缓冲区中的数据最终是被写入到设备中。单缓冲工作示意图在单缓冲技术中CPU和外设轮流使用一个缓冲。每当一个用户进程发出一个I/O请求时,OS便在主存中为之分配一个缓冲区。图7.10显示了单缓冲的工作过程,处理一块数据时间:Max(C,T)+M

。双缓冲工作过程示意图

双缓冲工作方式的基本方法是在设备输入时,先将数据输入到缓冲区A,装满后便转向缓冲区B。此时操作系统可以从缓冲区A中提取数据传送到用户区,最后由CPU对数据进行计算。其工作过程如下图所示。系统处理一块数据的处理时间可粗略地认为是MAX(C,T)。若C<T,可使块设备连续输入;若C>T,可使CPU不必等待设备输入。也即采用双缓冲区,CPU和外设都可以连续处理而无需等待对方。但是,要求CPU和外设的速度相近。对于单缓冲和双缓冲,当C<=T时,可以使外部设备全速运行;当C>T时,可以使CPU全速运行,也就是进程不需要等待I/O,在任何一种情况下,都有性能的提高,但这种提高是以增加了复杂性为代价的。6.4.3缓冲池1.缓冲池的组成

对于既可用于输入又可用于输出的公用缓冲池,其中至少应包含以下三种类型的缓冲区:①空闲缓冲区;②装满输入数据的缓冲区;③装满输出数据的缓冲区。为了管理方便,可将相同类型的缓冲区链成一个队列。于是,可形成以下三个队列:(1)空缓冲区队列emq:由空缓冲区所链成的队列;(2)输入队列inq:由装满输入数据的缓冲区所链成的队列;(3)输出队列outq:由装满输出数据的缓冲区所链成的队列。除了上述三个队列外,还应具有四种工作缓冲区:(1)用于收容输入数据的工作缓冲区;(2)用于提取输入数据的工作缓冲区;(3)用于收容输出数据的工作缓冲区;(4)用于提取输出数据的工作缓冲区。2.缓冲池管理的基本操作对缓冲池管理提供两个基本操作(过程):

(1)getbuf(type):用于从type所指定的队列的队首,摘下一个缓冲区;

(2)putbuf(type,number):用于将用参数number所指示的缓冲区,挂在type队列上。3.缓冲池的工作方式图6.15缓冲池的工作方式6.4.4预先读与延迟写1.预先读操作系统读块设备时,一般通过同步方式把一指定的数据块读入缓冲区,此时用户进程不得不进入阻塞状态,等待数据传输的结束。为了加快进程的推进速度,提高CPU和块设备工作的并行程度,最好在使用某一块之前,用异步方式提早把它读入缓冲区。当用户进程实际需要该块数据时,可以立即从缓冲区取走而无需等待。这种技术称为预先读。2.延迟写当块设备进行输出时,如果某一缓冲区只写了一部分,则不要急于把该缓冲区的内容写到块设备上,而是把写块操作推迟到某个适当的时机进行。那么什么是适当的时机呢?一般有两个:其一是延迟写的缓冲区被写满时,其二是该缓冲区被重新分配时。注意,文件关闭时缓冲区被强行物理写入块设备。I/O系统I/O硬件设备介绍磁盘时钟设备视频控制器RS-232I/O系统的硬件组织I/O系统的软件组织I/O控制方式设备控制器通道模型I/O软件设计目标I/O软件层次结构磁盘调度设备分配程序6.5磁盘的驱动调度

磁盘的驱动调度是先进行移臂(移动存取臂)调度,再进行旋转调度。例如,某一时刻对磁盘的输入/输出请求序列是:柱面(CC)磁道(HH)物理记录R7417487454064277

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

移臂调度算法有:

(1)先来先服务算法(FCFS)。先来先服务调度算法是最简单的一种方法,它按照输入/输出请求到达的顺序,逐一完成访问请求。

(2)最短查找时间优先法(SSTF)。这种算法总是先完成距当前存取臂距离最近的柱面上的输入/输出请求。

(3)扫描法(SCAN)。由于请求序列具有动态性质,所以可采用扫描法。存取臂从磁盘的一端出发,向另一端移动,遇到需要访问的柱面就完成访问请求,直至到达磁盘的另一端。到达另一端后,存取臂移动方向就倒转过来,继续完成这一方向上的访问请求。图6.16电梯调度算法流程I/O系统I/O硬件设备介绍磁盘时钟设备视频控制器RS-232I/O系统的硬件组织I/O系统的软件组织I/O控制方式设备控制器通道模型I/O软件设计目标I/O软件层次结构设备分配程序磁盘调度6.6设备分配程序6.6.1设备分配的数据结构

在配置有通道的计算机系统中,设备分配程序至少应解决以下三个问题:(1)是否有能用来为I/O请求提供的通路?(2)是否有一条以上的通路可用?(3)如果当前尚无通路可用,那么通路何时才能空闲?图6.17设备管理中的三种控制块图6.18UCB,CUCB,CCB间的连接图6.19UCB和PCB的连接

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

对于所请求的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设备,没有一条可用的通路。6.6.2I/O调度程序

在多进程的系统中,由于进程数多于设备数,就必然要引起进程对资源的争夺。为使系统有条不紊地工作,系统必须具有一套合理的设备分配原则。

这些原则与下述的四个因素有关:

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

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

①先请求先服务。②优先级高者优先。

(3)设备分配的安全性

(4)与设备的无关性

不能采用时间片轮转法!!!6.6.3设备分配的实施1.单通路I/O系统的设备分配在单通路I/O系统中,按如下步骤实施设备分配:分配设备。(2)分配控制器。(3)分配通道。2.多通路I/O系统的设备分配

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

(1)根据要求I/O的进程n所提供的设备类型,检索SDT表,找到第一个该类物理设备的UCB,由状态信息可知其忙闲情况。若忙,则检查第二个物理设备的UCB。若该类型的全部设备都处于忙碌状态,表明该类设备已分配完毕。进程n的此次I/O请求无法满足,只好把进程n插入到等待该类设备的队列中。只要在该类设备中有一个空闲设备,系统便可对其计算分配该设备给进程n的安全性。若安全,则把设备分配给进程n,否则将其插入该类设备的等待队列。(2)当系统把第i个设备分配给进程n后,便可通过检查与此设备相连的第一个CUCB,而得知该控制器是否忙碌;若忙,再检查第二个CUCB表。若与此设备相连的所有的控制器都忙,则表明无控制器可分配给设备i。只要设备i不是该类设备中的最后一个,便可返回到步骤(1),试图再找下一个空闲设备;否则,仍将该进程插入控制器等待队列中。(3)若有空闲的控制器,便可进一步检查与此控制器相连的第一个通道是否忙碌。若忙,再查看第二个CCB表,若与此控制器相连的全部通道都忙,表明无通道可分配给控制器j。只要控制器j不是该设备i的最后一个控制器,便返回到步骤(2),试图找出一个空闲的控制器,否则,将该进程插入通道等待队列。若有空闲通道可用,则此次设备分配成功,将相应的设备、控制器和通道分配给进程n,接着便可启动I/O设备,开始信息传送。多通路I/O系统设备分配的流程示于图6.21。图6.21设备分配流程图图6.22I/O系统概貌1.I/O系统概貌6.7.1I/O系统的结构6.7WindowsNT的I/O系统NT执行体的I/O系统接收用户态和核心态进程的I/O请求,以不同的方式传送到I/O设备。I/O系统由一组负责处理各种设备的输入/输出部件构成。这些部件有:(1)I/O管理程序;(2)文件系统;(3)缓冲存储管理器(CacheManager);(4)设备驱动程序(DeviceDriver);(5)网络转发程序(NetWorkRedirector)和网络服务程序(NetworkServer)。2.I/O管理程序

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

I/O系统采用包驱动方式,每个I/O请求都用一个I/O请求包来表达。每个IRP是一个数据结构,用以控制在每一操作步骤上的I/O操作的处理。3.虚拟文件除了I/O管理程序,该结构中还有四类驱动程序:文件系统、缓冲存储管理程序、设备驱动程序、网络转发程序。要把这四类功能、特性均不相同的部件组合在一起,并建立一个一体化的统一系统,必须进行高层的抽象,建立一个统一的逻辑模型。

NT建立的逻辑模型吸收了UNIXI/O系统的概念,认为“所有的读写数据都看成是直接送往虚拟文件的字节流”。虚拟文件用文件描述符表示,处理虚拟文件就像处理一个真正的文件。由操作系统判定这个虚拟文件究竟是设备、管道、网络还是磁盘上的真正文件。图6.23打开一个文件对象6.7.2驱动程序模型每一个驱动程序都由以下标准成套(或组合)组成:(1)一个初始化程序;(2)一组调度程序;(3)一个启动I/O的程序;(4)一个中断服务程序;(5)一个中断服务DPC(延迟过程调用)程序;(6)一个完成例程;(7)一个撤消I/O例程;(8)一个卸载例程;(9)一个出错记录例程。6.7.3同步I/O操作与异步I/O操作

图6.24同步I/O操作

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

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

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

(3)I/O管理程序完成I/O请求。在大多数操作系统中,同步I/O是标准的,WindowsNT除了提供同步I/O外还提供异步I/O,允许子系统选用同步I/O或异步I/O,并根据它的应用程序接口操作的不同,为客户应用程序提供不同类型的I/O。图6.25异步I/O6.8Windows2000/XP设备管理机制实例分析6.8.1Windosw2000/XP输入/输出系统的体系结构传统上认为,输入/输出(I/O)系统是操作系统设计中最难规范化的领域,因为I/O设备五花八门、种类繁杂,小到传感器、鼠标,大到磁盘、磁带、绘图仪等等,它们的性能截然不同。总之,其数据格式、数据组织到使用方法都有很大差别。如何规范化设计,这对操作系统设计也是需要研究的。Windows2000/XP操作系统采用和强调了软件工程中抽象的原则,在设计中全力找出各种事务的共性,用一致的模型、方法和界面来使其规范化,如用客户/服务器模型来规范各个用户进程之间的关系。

Windows2000/XP的I/O系统体系结构如图6.26所示,它由几个可执行模块和大量设备驱动程序组成。通过这张图我们可以看到,Windows2000的I/O体系的设计使用了分层结构,这有利于实现其平台无关性,也为其他目标的实现带来了便利。图6.26Windows2000/XP的I/O系统体系结构6.8.2核心态模块大部分I/O操作并不会涉及所有的组件,一个典型的I/O操作从应用程序调用一个与I/O操作有关的函数开始,通常会涉及I/O管理器、一个或多个设备驱动程序以及硬件抽象层。I/O系统相关的核心态模块的主要功能如下。I/O管理器:把应用程序和系统组件连接到各种虚拟的、逻辑的和物理的设备上,并定义了一个支持设备驱动程序的基本构架,负责驱动I/O请求的处理,为设备驱动程序提供核心服务。它把用户态的读写转化为I/O请求包IRP。

即插即用管理器:通过与I/O管理器和总线驱动程序的协同工作来检测硬件资源的分配,并检测相应硬件设备的添加和删除。电源管理器:通过与I/O管理器的协调工作,来检测整个系统和单个硬件设备,完成不同电源状态的转换。WMI支持例程:也叫做Windows驱动程序模型WDM(WindowsDriverModel)的提供者,运行驱动程序使用这些支持例程作为媒介,与用户态运行的WMI服务通信。设备驱动程序:为某种类型的设备提供一个I/O接口。设备驱动程序从I/O管理器接收命令,当处理完毕后通知I/O管理器。设备驱动程序之间的协同工作也通过I/O管理器进行。即插即用组件:用于控制和配置设备的用户态API。即插即用WDM接口:I/O系统为驱动程序提供了分层结构,这一结构包括WDM驱动程序、驱动程序层和设备对象。注册表:存储基本硬件、驱动程序的初始化和配置信息的数据库。硬件抽象层:I/O访问例程把设备驱动程序与多种多样的硬件平台隔离开来,使它们在给定的体系结构中是二进制可移植的,并在Windows2000/XP支持的硬件体系结构中是源代码可移植的。图6.27一个典型的I/O请求流程6.8.3输入/输出系统的数据结构1.文件对象文件对象提供了基于内存的共享物理资源的表示法(除了被命名的管道和邮箱外,它们虽然是基于内存的但不是物理的)。在Windows2000/XP的I/O系统中,文件对象也代表这些资源。当调用者打开文件或单一设备时,I/O管理器将为文件对象返回一个句柄。文件对象的主要属性如表6-2所示。表6-2文件对象属性属性目的文件名标识文件对象指向的物理文件字节偏移量在文件中标识当前位置(只对同步I/O有效)共享模式表示当调用者正在使用文件时,其他调用者是否可以打开文件进行读、写操作或删除操作指向设备对象的指针表示文件在其上驻留的设备类型指向卷参数块的指针表示文件在其上驻留的卷或分区指向区域对象的指针描述一个映射文件的根结构指向专用高速缓存映射的指针表示文件的哪一部分由高速缓存管理器管理,以及它们驻留在高速缓存的什么地方图6.29说明打开一个文件时系统所发生的情况。在这个实例中,C程序调用库函数fopen,由它去调用WIN32的CreatFile函数。然后由系统DLL在NTDLL.DLL中调用本地NTCreatFile函数,在NTDLL.DLL中的例程包含引发到核心态系统服务调度程序转换适当的指令。最后,系统服务调度程序在NTOSKRNL.EXE中调用真正的NTCreatFile例程。图6.29打开一个文件对象的过程2.驱动程序对象和设备对象当线程为一个文件对象打开一个句柄时,I/O管理器必须根据文件对象名称来决定它将调用哪个驱动程序来处理请求。而且,I/O管理器必须在线程下一次使用同一个文件句柄时可定位这个信息。驱动程序对象代表系统中一个独立的驱动程序,I/O管理器从这些驱动程序对象中获得并为I/O记录每个驱动程序的调度例程的入口。设备对象在系统中代表一个物理的、逻辑的或虚拟的设备,并描述它们的特征,如缓冲区的对齐方式和它用来保存即将到来的I/O请求包的设备队列的位置。图6.30显示了一个设备驱动器对象。从图中可以看出,设备对象反过来指向自己的驱动程序对象,这样I/O管理器就知道在接收一个I/O请求时应该调用哪个驱动程序,即它使用设备对象找到代表该设备驱动程序的驱动程序对象,然后利用在初始化请求中提供的功能码来索引驱动程序对象。每个功能码都对应于一个驱动程序的入口。图6.30Windows2000/XP输入/输出的数据结构3.IO请求包

IRP是I/O系统用来存储处理I/O请求所需信息的地方。当线程调用I/O服务时,I/O管理器就构造一个IRP来表示在整个I/O过程中要进行的操作。I/O管理器在IRP中保存一个指向调用者的文件对象指针。IRP由两部分组成:固定部分(标题)和一个或多个堆栈单元。图6.31单层驱动程序中一个I/O请求涉及的数据结构

6.8.4Windows2000/XP的设备驱动程序1.核心驱动程序核心驱动程序主要分为如下几种:

(1)文件系统驱动程序:接收访问文件的I/O请求,主要针对大容量的设备和网络设备。

(2)PnP管理器和电源管理器设备驱动程序:包括大容量存储设备、协议栈和网络适配器等。

(3)为NT编写的驱动程序:可在Windows2000/XP下工作,但一般不支持电源管理和PnP。

(4)WIN32子系统显示和打印驱动程序:把与设备无关的图形(GDI)请求转换为设备专用请求。这些驱动的集合称为“核心态图形驱动程序”。

(5)WDM驱动程序:包括对PnP、电源管理和WMI的支持。2.Windows2000/XP支持的其他驱动程序

Windows2000/XP支持的其他驱动程序主要有:

(1)虚拟设备驱动程序:用于模拟16位的MSDOS的驱动程序,它们捕获MSDOS应用程序对端口的引用,并将其转化为本机WIN32I/O函数。

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

3.硬件支持的驱动程序硬件支持的驱动程序主要有:

(1)类驱动程序:该驱动程序一般提供某类设备的基本支持接口,如磁盘、CD-ROM等,它通过端口驱动程序提供的逻辑端口操作硬件。

(2)端口驱动程序:用于提供某种接口(如串行接口、并行接口、USB接口等)的操作例程库,它是小端口驱动程序的一个功能包装,通过这些接口,类驱动程序可以直接访问接口而不必去和连接它们的总线交互了。

(3)小端口驱动程序:该驱动程序用于对实际硬件适配器的I/O请求映射,它负责最后驱动硬件工作。当文件系统收到一个特定文件“写”数据的请求时,如何转换为磁盘上的柱面/磁道/扇区?图6.32便说明了数据“写”到磁盘上的过程。图6.32文件驱动和磁盘驱动的层次

6.8.5Windows2000/XP的I/O处理Windows2000/XP允许用户以同步或异步的方式进行I/O操作。若是同步方式,设备执行数据传输并在I/O完成时返回一个状态码,然后程序就可以立即访问被传输的数据。若是异步方式,则允许应用程序发布I/O请求,在设备传输数据的同时,应用程序继续执行。

快速I/O是一个特殊的机制,它允许I/O系统不产生IRP而直接到文件系统驱动程序或高速缓存管理器去执行I/O请求。映射文件I/O是I/O系统的一个重要特性,是由I/O系统管理器和内存管理器共同产生的。“映射文件”是指把磁盘中的文件视为进程的虚拟内存的一部分,程序可以将文件作为一个大数组来访问,而无需做缓冲数据或执行磁盘I/O的工作。下面通过对单层驱动程序的同步I/O请求例子,来介绍Windows2000/XP是如何进行I/O处理的。对单层驱动程序的同步I/O请求处理有如下六个步骤:

(1) I/O请求通过子系统DLL。

(2)子系统调用I/O管理器的NTWriteFile服务。

(3)I/O管理器以IRP的形式给设备驱动程序发送请求。

(4)驱动程序驱动I/O操作。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论