用受管代码实现的高吞吐量低等待时间用户模式驱动程序的制作方法

文档序号:9332650阅读:278来源:国知局
用受管代码实现的高吞吐量低等待时间用户模式驱动程序的制作方法
【专利说明】用受管代码实现的高吞吐量低等待时间用户模式驱动程序
[0001] 背景
[0002] 计算机和计算系统已经影响了现代生活的几乎每个方面。计算机通常涉及工作、 休闲、保健、运输、娱乐、家政管理等。
[0003] 通用计算系统可通过使用称为设备驱动程序的代码来利用多个设备。设备驱动程 序用作将硬件或其他设备接口到系统资源(诸如CPU寄存器、系统存储器寄存器等)的方 式。设备驱动程序通常在内核模式中运行,该内核模式是特权模式。具体而言,在内核模式 中,驱动程序代码能访问任意存储器地址并控制任意系统级组件。然而,有缺陷的或恶意的 驱动程序可容易地损坏计算系统的完整性,从而导致崩溃或数据破坏。
[0004] 因而,设备驱动程序是不安全的。尽管面向对象的设计方法、语言类型安全性以及 静态代码验证到达高级平台(例如,所谓的云)和开发环境,设备驱动程序仍然使用不安全 的语言(例如,C/C++)来开发且使用较少类型、非面向对象、且易错的接口来访问。大多数 设备驱动程序仍然在内核模式中执行,增加了单个软件隐错造成系统故障的可能性。此外, 在任何驱动程序被实现在用户模式中的程度上,它们现在不能被用于高吞吐量和低等待时 间设备,因为在一些操作系统中,硬件中断不能被递送到用户模式进程。在其他操作系统 中,用户模式驱动程序的性能显著差于内核模式驱动程序。
[0005] 通常,在传送去往/来自设备的数据时,由于需要在用户模式与内核模式之间切 换,高吞吐量低等待时间驱动程序不能被实现在用户模式中。
[0006] 在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实 施例。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施例的一个示例性技 术领域。
[0007] 简要概沐
[0008] 本文示出的一个实施例涉及一种在计算环境中实施的用于实现可支持高吞吐量 和低等待时间设备的安全驱动程序的方法。该方法包括接收来自硬件设备的硬件消息。该 方法还包括使用零复制将所述硬件消息递送到在用户模式中执行的一个或多个驱动程序 进程,以允许所述一个或多个驱动程序进程支持高吞吐量和低等待时间硬件设备。
[0009] 提供概述以便以简化形式介绍将在以下详细描述中进一步描述的一些概念的选 集。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助 确定所要求保护的主题的范围。
[0010] 将在以下的描述中阐述另外的特征和优点,并且部分特征和优点可从该描述中显 而易见,或者可从本文教导的实践中获知。本发明的特征和优点可以通过在所附权利要求 中特别指出的手段和组合来实现并获取。本发明的特征将从以下描述和所附权利要求书中 变得完全显而易见,或者可通过如下所述对本发明的实践而获知。
[0011] 附图简述
[0012] 为了描述可获得本主题的上述和其它优点和特征的方式,将通过参考附图中示出 的本主题的具体实施例来呈现以上简要描述的本主题的更具体描述。应该理解,这些附图 仅描绘了各典型实施例,因此其不应被认为是对范围的限制,各实施例将通过使用附图用 附加特征和详情来描述并解释,在附图中:
[0013] 图1示出设备硬件和自动设备硬件抽象层接口生成;
[0014] 图2示出分层驱动程序生成;
[0015] 图3示出总线驱动程序框架;
[0016] 图4示出驱动程序中断和设备通信;
[0017] 图5示出自动生成设备驱动程序的代码的方法;
[0018] 图6示出对硬件驱动程序施加限制的方法;以及
[0019] 图7示出实现可支持高吞吐量和低等待时间设备的安全驱动程序的方法。
[0020] 详细描述
[0021] 本文公开的各实施例可包括便于开发用于所有设备类型的高性能用户模式和类 型安全驱动程序的多种技术。驱动程序给出可与其他操作系统中存在的常规内核模式设备 驱动程序相比的性能。
[0022] -些实施例可实现自动生成设备驱动程序硬件抽象层。如图1中示出的,硬件设 备102与计算系统104对接,该计算系统使用CPU 108中的寄存器106以及系统112中的 共享存储器110。硬件设备通常以静态方式构建以与寄存器106集合中的特定寄存器对接 并与特定存储器交互对接。为了确保系统104和寄存器106以及共享存储器110与硬件设 备102正确地对接,驱动程序114被用于向设备硬件提供到系统硬件的映射以及来自系统 硬件的映射。驱动程序114通常通过使用制造商提供的文本规范来手动地开发。
[0023] 硬件制造商通常以自由形式硬件规范来描述硬件。驱动程序开发者使用这些规范 来开发硬件访问层。如提到的,这个层使得驱动程序能够与设备寄存器和共享存储器对接, 诸如通过使用直接存储器访问(DM)。开发这个层既是麻烦的也是容易出错的,这是因为它 取决于规范的质量和开发者的经验。在大多数情况下,这个层是依赖于操作系统的并且不 能被其他平台使用。
[0024] 本文中的一些实施例通过实现用于将硬件访问层规范与其实现分隔开来的硬件 抽象机制来简化驱动程序开发。机器可读硬件规范116可由设备供应商来提供。机器可读 硬件规范可由代码生成工具118来处理。代码生成工具118具有一个或多个不同操作系统 的操作系统上下文并由此能通过处理机器可读硬件规范116来自动地创建硬件设备接口 层。由此,机器可读硬件规范116可被重用来创建用于多个不同操作系统的并使用各种不 同编程语言的硬件设备接口层115-U115-2到115-n。这个方案极大地简化了驱动程序开 发并减少由不正确的硬件访问导致的错误量。机器可读硬件规范116可用简单语言(诸如 C#)来编写并能通过检查被容易地验证。
[0025] 由此,开发者或硬件制造商可使用硬件-软件接口语言来描述设备102硬件寄存 器和共享存储器结构(在主机存储器中)。出于这个目的,开发者咨询文本硬件规范。注 意,硬件工程师或硬件供应商也可提供机器可读硬件规范116的硬件-软件接口描述。具 体而言,驱动程序开发者不需要涉入到硬件描述阶段来使用硬件-软件接口语言定义机器 可读硬件规范116。在第二阶段,硬件描述被包括硬件-软件接口处理器120的代码生成工 具118来处理。
[0026] 硬件-软件接口处理器120可生成如以下示出的各种软件驱动程序模块。
[0027] 硬件-软件接口处理器120可生成用于读/写寄存器和解释它们的字段的硬件访 问方法。例如,基于机器可读硬件规范116,代码生成工具118可确定寄存器106集合中的 哪些寄存器被用于与硬件设备102通信。方法可被生成来访问这些寄存器并可被用于向希 望控制硬件设备102的应用提供软件接口以指示每个寄存器的目的以及在每个寄存器中 的数据的解释。
[0028] 硬件-软件接口处理器120可生成用于读/写共享结构字段的方法。例如,基于 机器可读硬件规范116,代码生成工具118可在驱动程序软件模块中标识共享存储器110的 将被硬件设备102使用的各部分。这允许软件应用使用驱动程序114来能够与共享存储器 110的被硬件设备102使用的各部分通信。
[0029] 硬件-软件接口处理器120可生成用于在硬件-软件接口描述中表达的硬件接口 实体的存储器分配器。例如,基于机器可读硬件规范116,代码生成工具118知晓哪些硬件 接口被包括在硬件设备102中。硬件接口层115可被自动地生成来由此包括存储器分配器 以在系统存储器112中分配存储器来供硬件接口使用。
[0030] 硬件-软件接口处理器120可生成解释并跟踪硬件接口实体的日志模块。例如, 基于机器可读硬件规范116和关于硬件设备102的硬件接口的知识,代码生成工具118可 自动地生成硬件接口层115以包括能够使用硬件接口来收集和记录数据的模块,该数据记 录硬件设备102的硬件动作。
[0031] 硬件-软件接口处理器120可生成可视化硬件接口实体的调试器扩展。例如,基于 机器可读硬件规范116和关于硬件设备102的硬件接口的知识,代码生成工具118可自动 地生成硬件接口层115以包括能够使用硬件接口来收集和记录数据的模块,该数据记录硬 件设备102的能被用于调试目的的硬件动作。
[0032] 以下示出USB EHCI控制器能力寄存器的硬件-软件接口样本描述。
[0035] 如所示的,该图示出了 USB EHCI控制器寄存器的样本描述。所呈现的寄存器是能 力寄存器。每个寄存器位于相对于设备存储器基本地址的相同偏移处。在这个示例中,能 力寄存器位于如由其为硬件-软件句法的一部分的"MemoryMappedRegister (存储器映射 的寄存器)"属性指定的偏移OxC处。一旦寄存器的基本地址被设定,硬件-软件接口就提 供若干个属性来呈现不同的寄存器字段。在这个示例
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1