首页> 中国专利> 基于能力的设备驱动程序框架

基于能力的设备驱动程序框架

摘要

对硬件驱动程序施加限制。该方法包括从系统内核将I/O资源分配给系统的根总线。从根总线,该方法还包括将I/O资源的子集分配给设备总线。将I/O资源的子集分配给设备总线包括将设备总线限于只能分配被根总线分配给它的I/O资源。从该设备总线,该方法包括通过设备接口将I/O资源分配给设备。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-07-05

    授权

    授权

  • 2016-02-03

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20140103

    实质审查的生效

  • 2016-01-06

    公开

    公开

说明书

背景

计算机和计算系统已经影响了现代生活的几乎每个方面。计算机通常涉及工作、休闲、保健、运输、娱乐、家政管理等。

通用计算系统可通过使用已知为设备驱动程序的代码来利用多个设备。设备驱动程序用作将硬件或其他设备接口到系统资源(诸如CPU寄存器、系统存储器寄存器等)的方式。设备驱动程序通常以内核模式运行,该内核模式是特权模式。具体而言,在内核模式中,驱动程序代码能访问任意存储器地址并控制任意系统级组件。然而,有缺陷的或恶意的驱动程序可容易地损坏计算系统的完整性,从而导致崩溃或数据破坏。

因而,设备驱动程序是不安全的。尽管面向对象的设计方法、语言类型安全性以及静态代码验证到达高级平台(例如,所谓的云)和开发环境,设备驱动程序仍然使用不安全的语言(例如,C/C++)来开发且使用较少类型、非面向对象、且易错的接口来访问。大多数设备驱动程序仍然在内核模式中执行,增加了单个软件隐错造成系统故障的可能性。此外,在任何驱动程序被实现在用户模式中的程度上,它们现在不能被用于高吞吐量和低等待时间设备,因为在一些操作系统中,硬件中断不能被递送到用户模式进程。在其他操作系统中,用户模式驱动程序的性能显著差于内核模式驱动程序。

在多个常见操作系统中,设备驱动程序可通过错误或恶意来自由地尝试映射和使用系统存储器中的任一物理地址。由于驱动程序软件的特权性质,操作系统通常没有方法来确保驱动程序不分配端口、中断或不属于驱动程序的或不需要供驱动程序来正确地运行以控制特定硬件设备的其他接口。例如,键盘驱动程序通常应该能够访问IRQ1,但不需要访问端口80。通过访问端口80,恶意的键盘驱动程序可实现包括将键击跨网络发送到欺诈网站在内的按键记录功能。这可危害系统的安全性。

在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实施例。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施例的一个示例性技术领域。

概述

此处示出的一个实施例涉及一种在计算环境中实施的用于对硬件驱动程序施加限制的方法。该方法包括从系统内核将I/O资源分配给系统的根总线。从根总线,该方法还包括将I/O资源的子集分配给设备总线。将I/O资源的子集分配给设备总线包括将设备总线限于只能分配被根总线分配给它的I/O资源。从该设备总线,该方法包括通过设备接口将I/O资源分配给设备。

提供概述以便以简化形式介绍将在以下详细描述中进一步描述的一些概念的选集。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。

将在以下的描述中阐述另外的特征和优点,并且部分特征和优点可从该描述中显而易见,或者可从本文教导的实践中获知。本发明的特征和优点可以通过在所附权利要求中特别指出的手段和组合来实现并获取。本发明的特征将从以下描述和所附权利要求书中变得完全显而易见,或者可通过如下所述对本发明的实践而获知。

附图简述

为了描述可获得本主题的上述和其它优点和特征的方式,将通过参考附图中示出的本主题的具体实施例来呈现以上简要描述的本主题的更具体描述。应该理解,这些附图仅描绘了各典型实施例,因此其不应被认为是对范围的限制,各实施例将通过使用附图用附加特征和详情来描述并解释,在附图中:

图1示出设备硬件和自动设备硬件抽象层接口生成;

图2示出分层驱动程序生成;

图3示出总线驱动程序框架;

图4示出驱动程序中断和设备通信;

图5示出自动生成设备驱动程序的代码的方法;

图6示出对硬件驱动程序施加限制的方法;以及

图7示出实现可支持高吞吐量和低等待时间设备的安全驱动程序的方法。

详细描述

本文公开的各实施例可包括便于开发用于所有设备类型的高性能用户模式和类型安全驱动程序的多种技术。驱动程序给出可与其他操作系统中存在的常规内核模式设备驱动程序相比的性能。

一些实施例可实现自动生成设备驱动程序硬件抽象层。如图1中示出的,硬件设备102与计算系统104对接,该计算系统使用CPU108中的寄存器106以及系统112中的共享存储器110。硬件设备通常以静态方式构建以与寄存器106集合中的特定寄存器对接并与特定存储器交互对接。为了确保系统104和寄存器106以及共享存储器110与硬件设备102正确地对接,驱动程序114被用于向设备硬件提供到系统硬件的映射以及来自系统硬件的映射。驱动程序114通常通过使用提供文本规范的制造商来手动地开发。

硬件制造商通常以自由形式硬件规范来描述硬件。驱动程序开发者使用这些规范来开发硬件访问层。如提到的,这个层使得驱动程序能够与设备寄存器和共享存储器对接,诸如通过使用直接存储器访问(DMA)。开发这个层既是麻烦的也是容易出错的,这是因为它取决于规范的质量和开发者的经验。在大多数情况下,这个层是依赖于操作系统的并且不能被其他平台使用。

本文中的一些实施例通过实现用于将硬件访问层规范与其实现分隔开来的硬件抽象机制来简化驱动程序开发。机器可读硬件规范116可由设备供应商来提供。机器可读硬件规范可由代码生成工具118来处理。代码生成工具118具有一个或多个不同操作系统的操作系统上下文并由此能通过处理机器可读硬件规范116来自动地创建硬件设备接口层。由此,机器可读硬件规范116可被重用来创建多个不同操作系统并使用各种不同编程语言的硬件设备接口层115-1、115-2到115-n。这个方案极大地简化了驱动程序开发并减少由不正确的硬件访问导致的错误量。机器可读硬件规范116可用简单语言(诸如C#)来编写并能通过检查被容易地验证。

由此,开发者或硬件制造商可使用硬件-软件接口语言来描述设备102硬件寄存器和共享存储器结构(在主机存储器中)。出于这个目的,开发者咨询文本硬件规范。注意,硬件工程师或硬件供应商也可提供机器可读硬件规范116的硬件-软件接口描述。具体而言,驱动程序开发者不需要涉入到硬件描述阶段来使用硬件-软件接口语言定义机器可读硬件规范116。在第二阶段,硬件描述被包括硬件-软件接口处理器120的代码生成工具118来处理。

硬件-软件接口处理器120可生成如以下示出的各种软件驱动程序模块。

硬件-软件接口处理器120可生成用于读取/写寄存器和解释它们的字段的硬件访问方法。例如,基于机器可读硬件规范116,代码生成工具118可确定寄存器106集合中的哪些寄存器被用于与硬件设备102通信。方法可被生成来访问这些寄存器并可被用于向希望控制硬件设备102的应用提供软件接口以指示每个寄存器的目的以及在每个寄存器中的数据的解释。

硬件-软件接口处理器120可生成用于读取/写共享结构字段的方法。例如,基于机器可读硬件规范116,代码生成工具118可在驱动程序软件模块中标识共享存储器110的将被硬件设备102使用的各部分。这允许软件应用使用驱动程序114来能够与共享存储器110的被硬件设备102使用的各部分通信。

硬件-软件接口处理器120可生成用于在硬件-软件接口描述中表达的硬件接口实体的存储器分配器。例如,基于机器可读硬件规范116,代码生成工具118知晓哪些硬件接口被包括在硬件设备102中。硬件接口层115可被自动地生成来由此包括存储器分配器以在系统存储器112中分配存储器来用于使用硬件接口。

硬件-软件接口处理器120可生成解释并跟踪硬件接口实体的日志模块。例如,基于机器可读硬件规范116和关于硬件设备102的硬件接口的知识,代码生成工具118可自动地生成硬件接口层115以包括能够使用硬件接口来收集和记录数据的模块,该数据记录硬件设备102的硬件动作。

硬件-软件接口处理器120可生成可视化硬件接口实体的调试器扩展例如,基于机器可读硬件规范116和关于硬件设备102的硬件接口的知识,代码生成工具118可自动地生成硬件接口层115以包括能够使用硬件接口来收集和记录数据的模块,该数据记录硬件设备102的能被用于调试目的的硬件动作。

以下示出USBEHCI控制器能力寄存器的硬件-软件接口样本描述。

如所示的,该图示出了USBEHCI控制器寄存器的样本描述。所呈现的寄存器是能力寄存器。每个寄存器位于相对于设备存储器基本地址的相同偏移处。在这个示例中,能力寄存器位于如由其为硬件-软件句法的一部分的“MemoryMappedRegister(存储器映射的寄存器)”属性指定的偏移0xC处。一旦寄存器的基本地址被设定,硬件-软件接口就提供若干个属性来呈现不同的寄存器字段。在这个示例中,“DataField(数据字段)”属性被用于表示其是能力寄存器的一部分的寄存器。例如,HCSPARAMS是位于自能力寄存器的基本地址(如解释的在0xC处)偏移0x4处的寄存器。每个数据字段被硬件-软件接口句法递归地注释(如以下示出的)。

以下示出HCCPARAMS寄存器字段的硬件-软件接口描述。

这个图显示了HCSPARAMS寄存器如何被注释(其是以上呈现的能力寄存器的一部分)。硬件-软件接口“BitField(位字段)”和“ReservedBits(保留的位)”属性使得开发者能够注释寄存器位。例如,在这个寄存器处的位0指示设备是否支持64个地址。开发者使用“[(BitField(0)]publicboolBit64Addressing;”来呈现这个要求。所生成的代码将使得开发者能够访问作为Boolean(布尔)的“Bit64Addressing”来查询值。

以下显示了用于取得/设置HCCPARAMS字段值的生成的代码。

所生成的代码使用专用于操作系统的接口并能针对其他操作系统来被容易地生成。

以下示出藉此所生成的代码被设备驱动程序代码使用的方式。

一旦寄存器用底层存储器区域来初始化,寄存器可被容易地读取、操纵并写回到设备。

在以上示出的示例中,所生成的代码能被任意操作系统使用并不被限制到特定供应商。附加地或替换地,所生成的代码可以采用任一开发语言,诸如C#、JAVA、C、C++等。

如所示的,通用硬件-软件接口语言被用于在机器可读硬件规范中描述硬件寄存器和主机存储器数据结构(可经由DMA访问)。代码生成器对硬件-软件接口描述进行操作。硬件-软件接口描述可通过硬件供应商来被提供、验证和维护。硬件供应商可直接从硬件设计中生成机器可读硬件规范,从而消除人为错误的可能性。这从软件/硬件接口设计和实现路径中减少或消除了人类干预,减少开发时间并提供了一致且更好的调试体验。

一些实施例实现具有资源加固的基于能力的驱动程序模型。具体而言,大多数驱动程序114与实际硬件对接。为了实现这个,驱动程序114将驻留在设备102上的物理存储器122的一部分映射到计算系统104的虚拟地址空间或使用称为I/O空间的专用地址空间。先前示出的技术被实现来帮助确保驱动程序代码正确地使用经映射的存储器(或I/O端口)来访问设备102。在多个常见操作系统中,设备驱动程序114可通过错误或恶意来自由地尝试映射和使用系统存储器112中的任一物理地址。由于驱动程序软件的特权性质,操作系统通常没有方法来确保驱动程序114不分配端口、中断或不属于驱动程序的或不需要供驱动程序来正确地运行以控制特定硬件设备102的其他接口。例如,键盘驱动程序通常应该能够访问IRQ1,但不需要访问端口80。通过访问端口80,恶意的键盘驱动程序可实现包括将键击跨网络发送到欺诈网站在内的按键记录功能。这可危害系统的安全性。

本文中的各实施例可在受管代码(诸如C#或JAVA)中实现驱动程序和系统进程。受管代码是将仅在沙箱式虚拟机的管理下执行的计算机程序源代码。由此,被这样实现的任意驱动程序或系统进程包括闭合的对象空间。设备存储器和寄存器仅能经由在驱动程序被初始化时被提供给该驱动程序的专用受管对象访问。由此,驱动程序将仅能够访问被需要供驱动程序来正确地运行以控制设备的系统资源和I/O进程。

现在参考图2,一些实施例实现其中所有I/O资源(诸如经存储器映射的寄存器206、I/O端口208和DMA缓冲区210)的集合204是能力的方式。这些能力由内核212独占地拥有并在启动之际被分配到系统的根总线驱动程序214。系统根总线驱动程序214能将所有I/O资源的集合204的子集204-1、204-2到204-n分派到其他系统总线214-1、214-2到214-n。子集204-1到204-n按以下这种方式分配:总线214-1到214-n是它们需要用于将被附加到它们的特定设备的仅被分配的资源。

当总线驱动程序214-1到214-n枚举它们的设备时,它们将一组I/O资源分配到每个子。例如,总线214-1具有附加到它的设备202-1和202-1。总线214-1可将I/O资源集合204-1-1分配到设备202-1并将资源集合204-1-2分配到设备202-2,其中集合204-1-1和204-1-2是集合204-1的子集。总线仅可分配被分配到其的I/O资源。这种方式提供了层级I/O资源分派方案,其能被用于保证驱动程序仅能使用或传输被分配到其的资源。这能极大地提升系统可靠性并允许操作系统在任一时间容易地跟踪和撤销任一I/O资源。当驱动程序被终止或退出时,它的资源能被其父总线驱动程序容易地回收。通过使用输入/输出存储器管理单元(IOMMU)硬件,这个方案能被实施在硬件级别处。例如,尝试用非法存储器地址来编程设备的驱动程序开发者将不能够危害系统的安全性。

图3示出了典型总线驱动程序302的结构。总线驱动程序302(在这个示例中为PCI总线驱动程序)与提供所有驱动程序服务的用户级库(例如,在这个示例中为从华盛顿州、雷蒙德市的微软公司可用的DriverFramework(驱动程序框架)库)链接。驱动程序还与使得总线驱动程序302能够枚举其子设备的即插即用管理器库306链接。对于每个枚举的设备,框架创建称为总线插槽(诸如,总线插槽308-1)的抽象,其保持被分配的设备的资源。每个总线驱动程序导出被运行时附加到子驱动程序(作为示例示出为114-1)的多个总线插槽接口,诸如示例总线插槽接口310-1(表示为I总线插槽(IbusSlot)接口)。除了所枚举的设备驱动程序之外,没有其他服务或进程能将其自身附加到总线插槽接口。总线插槽接口被子设备驱动程序使用以将其分配的I/O资源分派到设备,如示例设备102-1示出的。驱动程序仅能分派在父驱动程序处的总线插槽上指定的I/O资源。

这一机制可在以下意义上被容易地实现并分发:I/O资源管理在每一总线驱动程序本地执行,而非在内核中或单个系统服务中。

除了被对待为能力的I/O资源之外,各实施例可实现能够控制各个服务的连接性的操作系统。由于驱动程序被当作服务,各实施例可控制驱动程序能使用其/与其交互的服务集合。例如,不像其他操作系统,在一些实施例中,驱动程序不能向另一驱动程序发送消息,这是因为它不具有这么作的能力(其是用于向该服务发送消息的接口)。一些实施例的操作系统能够约束、控制、观察和推断驱动程序到系统中的其他组件的连接。基于能力的模型和对受管代码的使用的组合提供了如在此示出的各个益处。

参考图4,示出了一独特架构。在示出的示例中,示出了用户模式402(例如,x86架构的特权环中的最少特权的Ring(环)3)和内核模式404。微内核406可被实现在内核模式404(有时被称为管理者模式)中。微内核406是提供各机制的最小数量的软件,各机制诸如低级地址空间管理、线程管理和IPC通信。微内核406负责读取基本硬件表。

在用户模式402中,地址空间被划分成域,诸如例如,域408-1(但本文中统称为408)。域在运行时(诸如示例运行时412-1-1)运行各个进程(诸如示例进程410-1-1,但统称为410),包括一个或多个驱动程序进程。可实现以下实施例:其中驱动程序是用户模式402管理的能支持高吞吐量和低等待时间设备的进程410。在一些实施例中,包括设备驱动程序在内的所有服务使用受管代码库来开发并以用户模式402执行。附加地,进程410和微内核406之间的隔离可进一步经由语言的静态确认的类型安全性来实现。这个机制使得能通过进程间通信(IPC)信道来实现数据的交换,而无需复制为驻留在单个地址空间或域408中的所有进程。这样的方式在不基于类型安全语言的传统系统中难以实现安全。

使用受管代码来实现的用户模式驱动程序可极大地提升系统安全性并简化驱动程序开发。具体而言,开发者可利用在系统中可用的任一用户模式库(包括XML解析器、队列管理等)。在传统操作系统中,由于存储器限制以及如驱动程序必需与内核共享它们的地址空间的其他限定,驱动程序开发者不可使用任意现有的库。附加地,开发者不再需要担心存储器管理。管理进程存储器的同一垃圾收集器被用于驱动程序。不正确的存储器管理是操作系统故障的最大来源之一。在一些实施例中,与隐错有关的系统驱动程序存储器可被去除。

在一些示例实施例中,被实现为一个或多个进程410的驱动程序是单个线程。由此,开发者不需要担心同步、线程和中断级别。驱动程序复杂度的许多已经消失并且开发者专注于驱动程序的功能。

驱动程序可经由标准类型安全接口来访问。常见的操作系统将对驱动程序的访问限制到几个预先定义的功能,诸如打开、关闭、读取、写和通用接口,诸如DeviceIoControl(称为‘ioctl’)。尽管在先前系统中,驱动程序控制的几个公知硬件组件以及它们执行的任务是受限的,但这对其中至少一些硬件设备(例如,硬件加速器,如图形加速器)向它们的主机展示广泛且复杂的接口的现代系统而言是低效的。在一些实施例操作系统中提供的解决方案将驱动程序当作第一类居民。

与任何其他系统服务一样,被实现为进程410的驱动程序是经由类型安全接口来访问的。这样的实现利用语言的类型安全性特征并在编译时捕获易错的方法调用。为了提供编译时类型检查,编译器需要知道代码中的变量或表达式的数据类型信息。接口提供接口消费者与接口实现之间的合同。在编译期间,方法签名可在统计上被检查。不同类型的参数的失配完全不能发生在运行系统中。另外,这些错误由应用开发人员在编译时捕获,且不需要驱动程序开发人员在内核模式404中进行运行时检查。

另外,开发的安全性和容易性,各实施例使设备驱动程序能够达到与常见内核模式设备驱动程序相比的高吞吐量和低等待时间。这可以通过实现零复制I/O路径的能力来达到。“零复制”指的是以下事实:进入系统的数据只被写入存储器一次,并且随后可被许多抽象层在操作系统内以及在应用代码内直接使用,而无需复制该数据。零复制I/O路径是其中CPU不执行从一个存储器位置到另一存储器位置的复制的路径。相反,CPU可以执行其他任务。这可以从上下文切换中解脱出来以实现用户模式402和内核模式404之间的系统切换以实现复制。以下现在将示出允许受管的用户模式设备驱动程序使用零复制I/O路径达到这样的性能的技术。

各实施例可被配置成执行高效的中断分派。将硬件中断高效地递送给用户模式驱动程序的能力是新颖的。中断分派由操作系统微内核、域内核、以及驱动程序的框架库之间的紧密交互来执行。

分派中断的机制使用3层体系结构,包括I/O中断管理器、驱动程序框架库、以及高效的微内核中断处理。

如图4所示,每一域408包括域内核,其示例在414-1处示出(但在本文中统称为414)。I/O中断管理器(其示例在416-1处示出(但在本文中统称为416))是域内核414的一部分,并且桥接在硬件设备102与设备驱动程序进程410之间。它负责管理设备驱动程序在IRQ418上的注册,将中断分派给驱动程序进程410,以及在IRQ由多个设备共享时处理中断共享。当所有设备驱动程序在进程中运行时,与传统单片式操作系统内核设计(其中设备驱动程序在内核中运行)相比,各实施例可为驱动程序施加更强的隔离和容错。

驱动程序框架库负责在域内核414处注册中断处理程序以接收通知。当在域内核414处接收到硬件中断时,中断处理程序被触发且预注册的驱动程序例程被调用。调用该方法的开销非常低,因为不存在从用户模式402到所涉及的内核模式404的上下文切换。

各实施例实现高效微内核中断处理。在一些实施例中,微内核406是可中断的但不可先占的。逻辑处理器在微内核406的上下文中运行时,可以接收中断但不能锁定或切换其上下文。为了最小化中断分派等待时间,各实施例限制处理器可在微内核406内花费的时间量。一些实施例为可能花费比预设界限更长时间的系统调用实现持续执行方案。界限和持续方案使微内核406能够以非常低的等待时间向域内核414递送中断。所有硬件中断(MSI、IRQ以及虚拟)被递送给作为驱动程序的一部分的用户模式库。在一些实施例中,最小化中断分派等待时间可以通过使用零复制I/O路径来达到。

现在示出零复制I/O路径的一个说明性示例。参考图1,示出了系统存储器112。进程410可以分配系统存储器112的一部分。微内核406(参见图4)可以允许进程410分配存储器,但一旦存储器被分配给进程410,进程410就具有对系统存储器的该部分的控制权。在硬件驱动程序示例中,硬件设备102可以对存储器的该部分进行写入。驱动程序进程410随后将存储器的这一部分标记为不可变的。不可变的存储器是其内容和/或地址不能被改变的存储器。因为存储器的该部分是不可变的,所以没有对访问存储器的该部分的真实约束。因而,该系统不必切换到内核模式就能允许不同进程从该存储器进行读取。因而,驱动程序进程410可以访问存储器的该部分而无需上下文切换,并且因而可以快速且高效地获得来自硬件设备102的写入存储器的该部分的数据,使得在驱动程序被实现在用户模式中时仍然可达到高效率和低等待时间。

该数据可通过提供存储器的不可变部分的不同视图按适当的方式被递送给不同进程410。因而,并非复制特定进程410所需的数据的各部分,指向存储器的不可变部分的指针可被使用,且存储器的不可变部分中的数据的逻辑视图可以提供适当的数据。因而,从特定进程410的角度看,该数据看起来已被复制并以适当的格式提供,而事实上没有发生数据复制。

类似功能可被使用以供驱动程序进程410将数据发送到硬件设备102。具体而言,驱动程序进程410可以将数据写入系统存储器112的一部分。该部分可由同一驱动程序进程410或另一驱动程序进程标记为不可变的。存储器随后可由硬件设备102读取,而无需该系统切换到内核模式404。

在一些实施例中,存储器的不可变部分可具有与其相关联的计数器。每次进程访问存储器的不可变部分时,计数器就递增。当进程完成读取存储器的不可变部分时,计数器递减。因而,在已读取存储器的不可变部分的所有进程完成存储器的不可变部分之后,计数器递减到零,这允许存储器的该部分被释放以用于其他存储器操作。

另一技术与使用DMA信道来用于设备控制相关。信道是恰好具有两个端点(称为信道端点)的双向消息管道。DMA信道是桥接应用与设备驱动程序(它们经由DMA交换大量分组化数据)之间的间隙的高性能机制。这是标准进程间通信(IPC)信道的特殊化,主要因提供可读DMA操作和信道中的消息的异步引退而不同。IPC消息具有两部分,一个强制部分以及另一个可任选部分。强制部分是复制到信道的时隙内的内联数据,且可任选部分包括跨信道传送(或通过信道共享)的处理。DMA信道在以下方面是唯一性的:

它们完全在用户模式(驱动程序和进程活在其中)中执行。

它们提供背压。对于在应用和网络驱动程序之间传递的每一消息,没有存储器分配。此外,数据可停留在信道中,直至它被完全消费,并且这一数据之后的消息可继续被处理。

它们包括零复制支持。DMA可以从环缓冲区执行。

它们包括对任意控制消息的支持。这启用如软件分割卸载等优化。

以下讨论现涉及可以执行的多种方法以及方法动作。虽然用特定次序讨论或用以特定次序发生的流程图示出了各个方法动作,但除非明确规定或因为一动作依赖于另一动作在执行该动作之前完成而需要特定次序,否则不需要特定次序。

现在参考图5,示出了方法500。可以在计算环境中实施方法500。方法500包括用于自动生成与设备驱动程序一起使用来与硬件进行对接的代码的动作。方法500包括接收硬件设备的机器可读描述(动作502)。该机器可读描述包括硬件设备的硬件寄存器或共享存储器结构中的至少一者。例如,图1示出硬件设备102的机器可读描述116的示例。

方法500还包括确定要与硬件设备一起使用的操作系统(动作504)。例如,代码生成工具118可访问或具有设定为其创建硬件接口层115的操作系统的信息。

方法500还包括在代码生成工具上处理机器可读描述来为硬件设备自动生成专用于所确定的操作系统的硬件驱动程序的代码(动作506)。例如,图1示出代码生成工具118执行机器可读硬件规范116。

可生成各种驱动程序代码部分。例如,方法500的一些示例可被实施,其中生成硬件驱动程序的代码包括生成用于读和写寄存器并解释寄存器的各字段的硬件访问方法。作为替换或补充,方法500的各实施例可被实施,其中生成硬件驱动程序的代码包括生成用于读和写共享结构字段的方法。作为替换或补充,方法500的各实施例可被实施,其中生成硬件驱动程序的代码包括生成用于硬件设备的机器可读描述中表达的硬件接口实体的存储器分配器。作为替换或补充,方法500的各实施例可被实施,其中生成硬件驱动程序的代码包括生成解释并跟踪硬件接口实体的日志模块。作为替换或补充,方法500的各实施例可被实施,其中可视化硬件接口实体的调试器扩展。

方法500的一些实施例可被实施,其中硬件设备的机器可读描述由硬件供应商提供。

方法500的一些实施例可被实施,其中所生成的硬件驱动程序的代码被生成为受管代码。

现在参考图6,示出了方法600。可以在计算环境中实施方法600。方法600包括用于对硬件驱动程序施加限制的动作。方法600包括从系统内核,将I/O资源分配给系统的根总线(动作602)。例如,图2示出通过将资源分配给总线驱动程序214,来将I/O资源分配给系统的根总线。

从根总线,方法600包括将I/O资源的子集分配给设备总线(动作604)。将I/O资源的子集分配给设备总线包括将设备总线限于只能分配被根总线分配给它的I/O资源。例如,在图2中,设备总线214-1到214-n具有分配给它们的资源。这些设备总线中的每一者只能够进一步分配已被分配给它们的资源。

方法600还包括从设备总线,通过设备接口将I/O资源分配给设备(动作606)。

方法600的一些实施例可被实现,其中将设备总线限于只能够分配被根总线分配给它的I/O资源是通过用受管代码实现总线驱动程序来达成的。

方法600可被实施,其中将I/O资源的子集分配给设备总线包括调用用受管代码实现的总线驱动程序。

方法600可被实施,其中将I/O资源分配给设备包括调用用受管代码实现的设备驱动程序。

方法600还可包括防止其他服务和进程将它们自己附连到设备接口。

现在参考图7,示出了方法700。可以在计算环境中实施方法700。方法700包括用于实现可支持高吞吐量和低等待时间设备的类型安全驱动程序的动作。方法700包括接收来自硬件设备的数据(动作702)。方法700还包括使用零复制将所述数据递送到在用户模式中执行的一个或多个驱动程序进程,以允许所述一个或多个驱动程序进程支持高吞吐量和低等待时间硬件设备(动作704)。

方法700可被实施,其中递送所述数据是在无需先占所述内核模式的情况下执行的。作为替换或补充,方法700还可包括限制处理器在内核模式中花费的时间量。作为替换或补充,方法700可被实施,其中驱动程序进程是用受管代码实现的。作为替换或,方法700还包括在用户模式中实现的I/O中断管理器针对中断来注册用户模式设备驱动程序。在一些实施例中,I/O中断管理器将中断分配给驱动程序进程。作为替换或补充,方法700还可包括将驱动程序实现为单线程化进程。作为替换或补充,方法700可被实施,其中所述一个或多个驱动程序进程是在无需限制什么用户模式库能被用来实现所述一个或多个驱动程序进程的情况下实现的。

此外,各种方法可由包括一个或多个处理器和诸如计算机存储器等计算机可读介质的计算机系统来实施。具体而言,计算机存储器可存储计算机可执行指令,这些指令在由一个或多个处理器执行时使得诸如各实施例中所述的各个动作等各种功能被执行。

本发明的各实施例可以包括或利用包含计算机硬件的专用或通用计算机,这将在下文中更详细地讨论。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种显著不同的计算机可读介质:物理计算机可读存储介质和传输计算机可读存储介质。

物理计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储(如CD、DVD等)、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。

“网络”被定义为使得电子数据能够在计算机系统和/或模块和/或其它电子设备之间传输的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的网络和/或数据链路。以上介质的组合也被包括在计算机可读介质的范围内。

此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输计算机可读介质自动转移到物理计算机可读存储介质(或者相反)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传送到计算机系统RAM和/或计算机系统处的较不易失性的计算机可读物理存储介质。因此,计算机可读物理存储介质可被包括在同样(或甚至主要)利用传输介质的计算机系统组件中。

计算机可执行指令包括,例如使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。更具体而言,上述特征和动作是作为实现权利要求的示例形式而公开的。

本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备二者中。

本发明可具体化为其他具体形式而不背离其精神或特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变都被权利要求书的范围所涵盖。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号