孤独◎浪人
驱动牛犊
驱动牛犊
  • 注册日期2003-02-23
  • 最后登录2003-02-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2003-02-23 00:57
In
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2003-02-23 15:24
simba 兄
你介绍的文章的确不错,还有没有什么好文章或好的站点呀?如果有请贡献出来吧
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
simba
驱动牛犊
驱动牛犊
  • 注册日期2002-01-28
  • 最后登录2009-02-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2003-02-23 19:16
那片文章的作者也来这个论坛的,呵呵,其实就在这个论坛,
你用文章搜索就可以找到很多可能对你有用的帖子了。
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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请求或将大数据的传输请求分离为小的传输请求。


放弃瘟草,现吃李草
sun_ck
驱动牛犊
驱动牛犊
  • 注册日期2002-05-29
  • 最后登录2003-03-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2003-02-24 18:16
回复wwwwwww:那么这个例程是被什么样的机构调度的呢?肯定不是线程调度机构。

首先,内核驱动的I/O例程(statIo, adddevice)是由I/O管理器调度的。

另外说明一点,W2k的多任务,抢占式的实现与Unix不同。并不是存在某一线程调度机构对线程或进程进行调度的。
而是当线程或进程1、阻塞 2、时间片耗尽 3、产生I/O操作等,切换到内核态,执行线程调度片段,产生进程/线程切换。

所以,对于内核例程和应用程序并行执行,应该还是服从与Windows的进程/线程调度机制(注意不是调度机构,准确的讲,Windows没有专门负责调度的系统进程)



  
上一页 下一页
游客

返回顶部