欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Queuing and Dequeuing IRPs中文翻译.doc

    • 资源ID:48969507       资源大小:67.50KB        全文页数:7页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Queuing and Dequeuing IRPs中文翻译.doc

    大连民族学院毕业设计(论文)外文文献原文及译文学 院: 计算机科学与工程 专 业: 网络工程 班 级: 网络062班 学生姓名: 刘安旭 指导教师: 王立明 等待和出列的IRP因为I / O管理器支持异步多任务和多线程在一个系统,尤其是在多处理器的机器,I/ O可以请求一个快于驱动程序的设备完成处理,。因此,IRP要绑定到已经忙于处理其它IRP的设备,必须在驱动程序中等待。因此,最底层的驱动程序需要具备以下条件之一:StartIo例程,它的I / O管理器调用已经在系统提供的IRP队列中等待的I / O操作IRP驱动程序(见IoStartPacket)。内部IRP的等待和出列机制,使用中的管理IRP驱动程序的处理速度能够满足他们。驱动程序可以使用设备队列,互锁队列,或取消安全的队列。更多信息,参阅Driver-Managed IRP Queues。只有最底层的设备驱动程序,能够满足和完成所有的IRP派遣例程,不需要StartIo例程和IRP驱动程序管理的队列。高层次的驱动程序多数没有StartIo。大多数中间驱动程序也没有StartIo内部队列。在IRP IoCompletion例程中,中间驱动程序通常可以通过使用IRP的有效的参数进行调度和后处理.。下面的介绍,是大体而言,设计的考虑决定是否实行内在StartIo常规程序,和driver-managed等候IRP。StartIo程序驱动只有设备驱动程序能够处理电脑的外围设备的I / O操作,并可以实现StartIo常规事务。对于这些驱动程序、I / O管理器提供IoStartPacket和IoStartNextPacket程序队列和出入队IRP的system-supplied IRP队列。更多关于StartI的信息,参阅Writing a StartIo Routine.内部驱动IRP队列如果一个装置能支持多个并行的I / O操作,它的lowest-level设备驱动程序必须建立内部请求队列管理自己的等待IRP。例如, 因为系统序列驱动支持全双工系列设备,所以它需要保持独立队列的读、写、净化等业务。高层次的驱动向一些潜在的设备驱动程序发送请求,同样也可以保持内部IRP队列。例如,文件系统驱动几乎总是有内部等候IRP。更多信息,参阅Driver-Managed IRP Queues.内部队列同步device-dedicated思想的驱动和和最高层的驱动程序,使用executive worker线程(包括文件系统驱动)通常都建立了自己的等待IRP。队列是共享的驱动程序思想或driver-supplied worker-thread调用的例程和其它驱动过程IRP。一个驱动程序,实现自身的队列的结构必须确保进入队和出队是同步的的。任务驱动编写者为了使任务简单化,提供了一个标准的框架IRP队列,你可以在IRP队列中实施。更多信息,参阅Cancel-Safe IRP Queues。这是实现IRP队列最便捷的方式。驱动程序也可以实现IRP队列和取消逻辑同步。例如,一个驱动可以使用一个联锁队列。驱动程序的调度程序插入IRP队列和driver-created线程或者驱动程序的worker-thread通过调用ExInterlockedXxxList支持程序回收移除它们。举例来说,这个系统控制器驱动使用一个软盘联锁队列。它的device-dedicated线程加工处理一样,是由其他IRP的StartIo设备驱动程序和相同其他IRP的DpcForIsr设备驱动程序处理。包涵StartIo内部队列的驱动程序一个驱动程序,经营自己的内部队列也可以有一个StartIo例行程序,但不需要。大多数lowest-level驱动装置都有一个StartIo例行程序或管理自己的队列中,但不能同时适用。IRP一个例外是SCSI港,它有一个StartIo驱动程序和管理内部队列的IRP。I / O管理器队列IRP港口驱动程序的StartIo例行的设备等待联系在一起的driver-created设备对象表示一个SCSI HBA)。SCSI港口的驱动程序也设立和管理设备,每个目标为IRP队列的设备(对应)在SCSI逻辑单位HBA-driven SCSI总线的机器。驱动程序使用它的SCSI港举行IRP队列的辅助设备发送的小型电脑标准介面类驱动在LU-specific队列在任何设备SCSI总线特别繁忙。实际上,这个驱动程序的补充,LU-specific装置队列使得SCSI港口驱动程序同步操作,通过HBA异构SCSI装置,同时保持每台设备的SCSI巴士HBA一样忙碌。完成IRP"完成一个IRP”是一种速记,意思是“让所有的词的驱动程序堆栈完成一个I / O操作。”这个IRP请求后,已经完成,I / O管理器通知,要求启动应用程序的I / O操作完成。当驱动程序已经完成了处理一个IRP,它要求IoCompleteRequest(通常是在一个DpcForIsr程序)。这导致I / O管理器来确定是否建立了IoCompletion高层次驱动程序的IRP。如果是这样的话,每个IoCompletion程序被称为,反过来,直到所有的分层驱动程序在链条已完成IRP。当所有的驱动程序都完成IRP,I / O管理器的状态将原者的操作。注意到一个更高的驱动程序driver-created设立了一个IRP必须提供一个IoCompletion常规释放出的IRP。完成IRP的时机驱动程序应该启动时IRP完成下列条件:驱动程序决定IRP处理因无效的参数不能进步或其他情况。驱动程序能处理请求的I / O操作的IRP的驱动程序堆栈,和操作完成。这个IRP被取消。(参阅Canceling IRPs)如果这些条件无法满足,一名驱动程序的调度程序必须通过这个IRP的next-lower驱动,或者它必须处理工艺的I / O请求。如果有一个条件,驱动程序必须IoCompleteRequest打调用。如果驱动程序完成一个请求,因为处理不能进步,或如果它完成请求处理请求的操作不存取装置,它通常称IoCompleteRequest从其分派程序。更多信息,参阅Completing IRPs in Dispatch Routines.如果驱动程序要访问一个装置来满足要求,它通常称IoCompleteRequest从DpcForIsr例行程序。这些程序进行了广泛的服务中断。在分派程序完成IRP这节描述完成IRP在分派程序,包含以下的主题: 如何完成一个IRP在分配程序什么时候完成一个IRP在分配程序如何在分配程序完成IRP 如果一个输入IRP可以完成,调度程序立刻做如下:1设置变更状态和信息的成员的I / O地位IRP块与适当的价值,在一般。分配程序集的地位要么STATUS_SUCCESS或适当的错误(STATUS_Xxx),可值的一个支持程序或,以较低的同步请求时,驱动程序。如果一个底层驱动,更高回报STATUS_PENDING驱动程序不应该叫IoCompleteRequest为IRP,只有一处例外:高等级的驱动可以用一个事件同步的IoCompletion常规和它之间分配程序,在这种情况下,IoCompletion常规信号并返回STATUS_MORE_PROCESSING_REQUIRED。调度程序的事件,然后等待调用IoCompleteRequest完成IRP。它集信息的字节数,如果要求成功转移数据传送,如读或写的要求,是满意的。这是一个非常有价值的信息,来设置不同的具体要求,根据它完成IRP其他STATUS_SUCCESS。这是一个非常有价值的信息,来设置不同的具体要求,根据IRP,它警告STATUS_XXX。例如,它将信息的字节数为这样一种警告作为转移STATUS_BUFFER_OVERFLOW。通常,它集信息到零,它为要求,以一个错误STATUS_XXX。 2调用IoCompleteRequest IRP和PriorityBoost与IO_NO_INCREMENT。3在适当的STATUS_XXX返回,它已经在I / O状态。注意到一个叫IoCompleteRequest使得给定的IRP达到调用者,所以这个返回值,从调度程序不能从I / O地位阻止一个已经完成IRP 遵循这实施指南,叫IoCompleteRequest与一个IRP。总是释放任何旋转锁(s)驱动程序持有IoCompleteRequest之前。它需要一个无限数量的时间来完成一个IRP,特别是在一连串的分层的驱动程序。而且,一个僵局会导致更高的IoCompletion驱动程序发送一个IRP回到较低的驱动程序,举办一个旋转锁。在分配程序完成IRP 通常,驱动程序不完整,除非他们分派程序IRP请求对给定的参数,是无效的或设备驱动程序,除非特别IRP_MJ_XXX不需要设备的I / O操作。每个驱动程序在一系列分层驱动程序能查证的参数,以自己的I / O栈单元,每个IRP所收到的驱动程序的调度程序。完成IRP和无效的分配程序的参数尽可能最高的驱动程序改善I / O吞吐量为任何链的驱动程序和系统的整体。在一个高级调度程序应该完成一个IRP驱动或者把它处理低驱动,根据以下指南:如果调度程序确定任何参数在自己的I / O栈单元是无效的,它应该完成IRP立即用适当的错误状态,如STATUS_INVALID_PARAMETER。如果这个IRP包含函数代码IRP_MJ_CLEANUP,DispatchCleanup程序必须完成每个IRP目前排到目标设备对象,因为文件对象中指定的驱动程序的I / O栈单元,并完成清除IRP。清理要求显示申请终止或关闭了一个文件处理的文件对象代表了驱动程序的设备对象。当DispatchCleanup程序返回,通常是驱动程序的DispatchClose程序被称为下。否则,一个高层次的驱动程序能满足要求的只有把它传递给了next-lower驱动程序在lowest-level调度程序驱动程序应该完成一个IRP根据下列指南:如果调度程序确定任何参数在自己的I / O栈单元是无效的,或如果驱动程序不支持这个IRP,它应该完成IRP立即用适当的错误状态。在这种情况下,驱动程序必须完成IRP和一个状态值的STATUS_SUCCESS。一般情况下,任何高层次的驱动程序已经检查了参数为一个请求的操作,但lowest-level设备驱动程序应该履行自己的参数检查。如果这个IRP包含函数代码IRP_MJ_CLEANUP,DispatchCleanup程序必须完成每个IRP目前排到目标设备对象,对给定的文件对象的I / O堆栈位置,然后完成清除IRP。清理要求显示申请终止或关闭了一个文件处理的文件对象代表了驱动程序的设备对象。当DispatchCleanup程序返回,通常是驱动程序的DispatchClose程序被称为下。如果这个请求,不需要设备的I / O操作,调度程序应该满足要求,完成IRP。例如,一个驱动可以保存当前的游戏模式及其设备在这个设备扩展,尤其如果它很少改变装置模式初始化后。它可以满足DispatchDeviceControl程序要求查询当前设备模式将这个存储的信息。否则,调度程序必须打调用给IoMarkIRPPending IRP队列,另一名驱动程序,为进一步的处理程序,并返回STATUS_PENDING。取消IRP驱动程序在IRP排队等候无限的间隔(这样一个用户可以取消之前提交的I / O请求)必须有一个或多个取消程序来完成user-canceled I / O请求。例如,键盘、鼠标、平行、连续、音响设备驱动程序(或驱动分层的管辖他们)和文件系统驱动程序应该取消。驱动程序对于微软视窗XP操作系统,可以使用,后来cancel-safe IRP队列,而不是实现自己的撤销程序。“取消一个IRP”是指完成IRP尽快的同时仍然保持系统的完整性。对一般的讨论后,看到完成IRP IRP。取消过程开始时,系统或驱动程序调用IoCancelIRP。这个程序要求每个IRP是联系在一起的线,尚未完全完成。这个系统取消的线程IRP若未启动I / O请求退出。驱动程序可以取消只是IRP,他们已经创造了(参阅 Creating IRPs for Lower-Level Drivers.)如果一个IRP是没有完成5分钟之内,I / O管理器把IRP超时。这样的帖子是社交IRP被砍伐,一个错误的装置,目前拥有这个IRP。你应该确保任何要求,可能要花很长时间才能完成你的驱动程序都可取消。确保潜在的长期要求可取消的,你可以用cancel-safe IRP队列和内核驱动框架,从抽象取消驱动开发。取消程序任何驱动程序,可以用一个IRP状态设间隔一定有一个或多个撤销程序。例如,一个键盘驱动程序可能无限期等待一个用户按下的一个关键。相反,如果一个驱动程序将永远比它更IRP队列中五分钟可以完成,它很可能并不需要取消程序。假设一个用户模式思想使得一个I / O请求,它是由一个队列调度程序的最高级别的设备驱动程序,并请求的线程被终止而IRP队列。代表一个IRP队列终止思想应该取消。因此,驱动程序必须建立一个driver-supplied取消程序中,每个IRP队列。驱动程序,创建IRP必须取消他们的联系时,船长IRP被取消。因为相关并不伴有一个IRP请求线,主人IRP的取消程序负责取消任何有关当主人IRP IRP被取消。取消程序的数量取决于驱动程序的设计。一般来说,驱动程序必需为各个阶段的I / O处理准备取消程序。考虑以下的设计准则:在一系列高层的驱动器的驱动程序必须至少有一个IRP队列取消程序。如果必要的话,可取消它可以有多个取消程序。驱动程序在低层IRP可以保持在一个较长的时间间隔,也应该有一个或多个撤销程序。如果驱动程序在自己内部的队列中,也应该为每个单独的队列提供IRP取消程序。有些最高层别的驱动程序的互动装置,如键盘、鼠标、声音、平行的阶级和串行驱动程序,必须有取消程序。一些低层的驱动程序,比如持有IRP队列的平行端口驱动程序对于某些高层驱动的有相对较长的时间间隔,也应该有取消程序。大容量储存设备驱动程序,在中间驱动分层,不太可能有撤销程序。它的责任是文件系统驱动办理注销文件I / O请求,而这个IRP输入处理低层的大容量储存驱动是可以取消的。注册取消程序 如果设备驱动程序,具有StartIo调度程序,可以注册为IoStartPacket输入提供地址的取消程序。如果驱动程序没有StartIo例行程序,它在做以下分派程序之前,为进一步的处理一个IRP队列由其他驱动程序。1。IoAcquireCancelSpinLock调用。2。IoSetCancelRoutine调用与输入IRP和入口点为driver-supplied取消程序。3。IoReleaseCancelSpinLock调用。更多关于取消旋转锁,参阅Using the System's Cancel Spin Lock驱动程序,自己管理自己的队列的IRP,而不是用I / O manager-supplied设备排队,不需要获得取消旋转锁的时候,IoSetCancelRoutine。然而,这些驱动程序应该检查取消程序的指针,IoSetCancelRoutine返回来决定取消程序已开始。同步IRP注销从驱动程序的角度看,一个IRP可随时取消。异步IRP取消;因此,驱动时必须能承受着一系列潜在竞争状态,如果有下列中一种情况IRP将会被取消。驱动程序调用后,但IRP在队列等待。驱动程序调用后,但它正在处理IRP。例如,一个IRP被取消后,驱动程序的StartIo程序,但是在这个StartIo常规清除IRP队列的装置。驱动程序例行dequeues之后,但是在IRP请求启动的I / O。注意:当驱动程序一个IRP队列和释放任何旋转锁保护队列,另一个线程可以访问和改变这个IRP。当原来的线程简历甚至只要在下一行代码这个IRP可能已经被取消了,或者改变了。驱动程序可以用cancel-safe IRP队列框架来实现IRP队列。这个系统寄存器一个取消程序的驱动程序,自动处理同步安全地取消IRP。参阅Cancel-Safe IRP Queues。否则,驱动程序必须实施自己的同步。下列成员的一个IRP包含有关取消:IRP>取消一个IRP是是否被取消或应该取消CancelRoutineIRP>是否一个IRP是可取消。如果该成员包含一个指向取消程序,那么这个IRP是可取消。如果这是空的,那么这个IRP不是可取消。如果这是空的,但IRP>取消设置,这表明取消程序正在运行,这个IRP被取消。如果驱动程序处理可取消,它就是IRP负责设定适当的取消程序在每个IRP,在一个可取消的状态。

    注意事项

    本文(Queuing and Dequeuing IRPs中文翻译.doc)为本站会员(赵**)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开