20楼#
发布于:2003-02-23 00:57
In
|
|
21楼#
发布于:2003-02-23 15:24
simba 兄
你介绍的文章的确不错,还有没有什么好文章或好的站点呀?如果有请贡献出来吧 |
|
|
22楼#
发布于:2003-02-23 19:16
那片文章的作者也来这个论坛的,呵呵,其实就在这个论坛,
你用文章搜索就可以找到很多可能对你有用的帖子了。 |
|
23楼#
发布于:2003-02-23 21:27
请问:当我们的应用进程想从一个设备中读数据时,它调用ReadFile(),进入了核心,再通过I/O管理器向驱动程序发IRP,驱动程序再完成相应的动作. NT的抢先多任务不仅表现在用户界面上,在设备驱动级也是抢占和可中断的.在系统中每一个线程都被赋予优先属性,大部分的优先属性都是可变的,除非是实时优先,这种优先只有自己放弃控制.无论优先属性如何,当硬件或某种软件中断产生时,系统中的一些线程将被抢占.核心态对于给定平台的指派中断都定义了中断请求层IRQL,NT核心区分硬件和软件中断优先,一些核心态代码运行于较高的IRQL,例如NT驱动. 列如,当NT驱动初始化时将调用IoCreateDevice一次或数次,为物理,逻辑或虚拟设备创建设备对象。 IO管理器的主要工作是接收IO请求(通常来自于用户模式的应用程序),创建IO请求包,将IRP传递给合适的NT驱动。并且跟踪它们直到完成。并且为每个IO操作的原始请求者返回状态。IO管理器使用IRP和NT驱动通讯,并且允许NT驱动互相之间通讯。要注意的是一些IRP将传递给不止一个NT驱动。例如,在磁盘中打开文件这个请求将首先传到文件系统驱动,经过中间介质的镜像驱动最终传到物理磁盘驱动。因此每一个IRP有一个固定的部分,还有一个或多个IO的位置栈。在固定的部分,IO管理器保持原始请求信息,例如调用者参数,关于哪一个文件打开的设备对象地址,等等。另外在固定的部分还包含IO状态块,其中包含了请求操作的驱动信息。在高级驱动的IO本地栈中,IO管理器设置特殊的参数。 *************IO管理器提供异步IO,这样IRP的请求者能够继续执行,而不是等待IRP完成**************。NT驱动没有必要按照它们传递给IO管理器的顺序处理IO请求。IO管理器或高级驱动在接收时可以重新排列IO请求或将大数据的传输请求分离为小的传输请求。 |
|
|
24楼#
发布于:2003-02-24 18:16
回复wwwwwww:那么这个例程是被什么样的机构调度的呢?肯定不是线程调度机构。
首先,内核驱动的I/O例程(statIo, adddevice)是由I/O管理器调度的。 另外说明一点,W2k的多任务,抢占式的实现与Unix不同。并不是存在某一线程调度机构对线程或进程进行调度的。 而是当线程或进程1、阻塞 2、时间片耗尽 3、产生I/O操作等,切换到内核态,执行线程调度片段,产生进程/线程切换。 所以,对于内核例程和应用程序并行执行,应该还是服从与Windows的进程/线程调度机制(注意不是调度机构,准确的讲,Windows没有专门负责调度的系统进程) |
|
上一页
下一页