Windows IO处理流程浅析 .docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows IO处理流程浅析

Windows I/O处理流程浅析黄贝宁 Windows操作系统中(以Windows 2000/XP为例),一个典型的I/O请求要通过一系列复杂的操作实现。 讨论Windows 系统的I/O操作的流程之前,不得不提及Windows的I/O系统结构。简单说来,从虚拟机的角度来说,Windows的I/O系统是一个层层封装的虚拟机。Windows在系统核心中,对设备进行了数层封装:直接构建在设备上的是硬件抽象层(HAL),在此之上的是设备驱动程序,然后是I/O系统(I/O管理器、电源管理、WDM、WMI例程等);同时还有许多在用户态运行的系统服务如WMI服务,方便应用程序管理I/O设备。正因为有这种复杂的层次结构,统一管理、兼容成百上千不同种类的系统设备才成为可能。各个抽象层次把硬件结构上的多样性屏蔽掉,使用户能够按照一个统一的方式进行I/O操作。由于这里主要讨论I/O处理流程,I/O系统的结构不做细致阐述。 以下以打开一个文件对象的过程为例,说明Windows I/O请求的处理流程: 打开文件对象(File Object) )create请求。 I/O管理器调用文件系统驱动程序,向它发送IRP。文件系统驱动程序访问它在IRP中的I/O堆栈单元(I/O stack location)以决定要进行什么操作,检查参数,决定是否需要通过cache访问文件。如果不需要,在IRP中建立更低一级驱动程序的I/O堆栈单元。 各级驱动程序处理IRP完成这个I/O操作请求,会调用I/O管理器和其他系统组件提供的核心态支持例程。 驱动程序在IRP中设置I/O状态块(指明操作是否成功或错误代码),并将IRP返回到I/O Manager。 I/O管理器从IRP中获得I/O状态,通过被保护的子系统将状态信息返回到原始调用者处。 I/O管理器释放已经完成任务的IRP。 如果操作成功,I/O管理器返回这个文件对象的句柄到子系统;否则返回相应的失败状态。 如果打开成功,子系统就可以通过句柄来对这个设备进行各种I/O操作。其他操作的工作流程与此类似。I/O管理器会根据不同的请求类型产生相应的IRP发送到相应的驱动程序中执行特定的操作。 以上处理流程虽然复杂,但去掉一些细节后,总脉络是清晰的:I/O请求先陷入到系统核心,从上依层次向下将指令传到设备,执行结果依次向上返回到调用进程,切换回用户态。 整个流程中,有几个重要的数据结构: 文件对象(File Object):文件对象是一种逻辑上的对象,它并不仅仅可以代表文件,事实上它可以代表许许多多不同的物理设备(键盘、打印机、屏幕……当然也可以代表文件)。它事实上提供的是一种基于内存共享的物理资源表示法。每个文件对象对应一个句柄,用户程序通过这个句柄实现各种I/O操作。具体说,通过写入/查询特定的内存区段的,即可实现和物理设备的通讯。Windows所有的I/O操作都通过这种虚拟的文件对象进行,它隐藏了I/O操作目标的实现细节,为各种不同的物理设备提供了一个统一的操作接口。 驱动程序对象(Driver Object)) 事实上由于I/O操作种类繁多,它们有不同的需求和特点,所以Windows提供了不同的I/O操作选项。主要的I/O操作类型有:同步I/O和异步I/O,快速I/O(注意:快速I/O模式比较特殊,不使用IRP),映射文件I/O和文件高速缓存,分散/集中I/O。各种I/O操作类型的内部处理步骤是很不一样的。同时,单层和多层的驱动程序也有不同的执行策略。这些涉及到过多的细节和Windows驱动程序模型(WDM),在此不更多的展开讨论。 虽然具体到每一个I/O请求处理策略会各有不同,但总的来说,涉及到的操作对象和数据结构就是前面提到的那些。而且总的处理脉络仍然是:I/O请求先陷入到系统核心,从上依层次向下将指令传到设备,执行结果依次向上返回到调用进程,切换回用户态。 参考资料: 《操作系统教程》 《MSDN Library》 DDK部分 用户程序 环境子系统或动态链接库 I/O管理器 服务 设备对象和驱动程序对象 物理设备 文件对象句柄 调用 返回 IRP I/O端口操作、寄存器等 中断、DMA等方式…… 请求 返回 用户态 核心态

文档评论(0)

wuyuetian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档