基于能力的设备驱动程序框架的制作方法_3

文档序号:9476198阅读:来源:国知局
可使用任意现有的库。附加地,开发者不再需要担屯、 存储器管理。管理进程存储器的同一垃圾收集器被用于驱动程序。不正确的存储器管理是 操作系统故障的最大来源之一。在一些实施例中,与隐错有关的系统驱动程序存储器可被 去除。
[0059]在一些示例实施例中,被实现为一个或多个进程410的驱动程序是单个线程。由 此,开发者不需要担屯、同步、线程和中断级别。驱动程序复杂度的许多已经消失并且开发者 专注于驱动程序的功能。
[0060]驱动程序可经由标准类型安全接口来访问。常见的操作系统将对驱动程 序的访问限制到几个预先定义的功能,诸如打开、关闭、读取、写和通用接口,诸如 DeviceloControl(称为'ioctr)。尽管在先前系统中,驱动程序控制的几个公知硬件组件 W及它们执行的任务是受限的,但运对其中至少一些硬件设备(例如,硬件加速器,如图形 加速器)向它们的主机展示广泛且复杂的接口的现代系统而言是低效的。在一些实施例操 作系统中提供的解决方案将驱动程序当作第一类居民。
[0061]与任何其他系统服务一样,被实现为进程410的驱动程序是经由类型安全接口来 访问的。运样的实现利用语言的类型安全性特征并在编译时捕获易错的方法调用。为了提 供编译时类型检查,编译器需要知道代码中的变量或表达式的数据类型信息。接口提供接 口消费者与接口实现之间的合同。在编译期间,方法签名可在统计上被检查。不同类型的 参数的失配完全不能发生在运行系统中。另外,运些错误由应用开发人员在编译时捕获,且 不需要驱动程序开发人员在内核模式404中进行运行时检查。
[0062]另外,开发的安全性和容易性,各实施例使设备驱动程序能够达到与常见内核模 式设备驱动程序相比的高吞吐量和低等待时间。运可W通过实现零复制I/O路径的能力来 达到。"零复制"指的是W下事实:进入系统的数据只被写入存储器一次,并且随后可被许 多抽象层在操作系统内W及在应用代码内直接使用,而无需复制该数据。零复制I/O路径 是其中CPU不执行从一个存储器位置到另一存储器位置的复制的路径。相反,CPU可W执 行其他任务。运可W从上下文切换中解脱出来W实现用户模式402和内核模式404之间的 系统切换W实现复制。W下现在将示出允许受管的用户模式设备驱动程序使用零复制I/O 路径达到运样的性能的技术。
[0063] 各实施例可被配置成执行高效的中断分派。将硬件中断高效地递送给用户模式驱 动程序的能力是新颖的。中断分派由操作系统微内核、域内核、W及驱动程序的框架库之间 的紧密交互来执行。
[0064] 分派中断的机制使用3层体系结构,包括I/O中断管理器、驱动程序框架库、W及 高效的微内核中断处理。 W65] 如图4所示,每一域408包括域内核,其示例在414-1处示出(但在本文中统称为 414)。I/O中断管理器(其示例在416-1处示出(但在本文中统称为416))是域内核414 的一部分,并且桥接在硬件设备102与设备驱动程序进程410之间。它负责管理设备驱动程 序在IRQ418上的注册,将中断分派给驱动程序进程410,W及在IRQ由多个设备共享时处 理中断共享。当所有设备驱动程序在进程中运行时,与传统单片式操作系统内核设计(其 中设备驱动程序在内核中运行)相比,各实施例可为驱动程序施加更强的隔离和容错。 [0066]驱动程序框架库负责在域内核414处注册中断处理程序W接收通知。当在域内核 414处接收到硬件中断时,中断处理程序被触发且预注册的驱动程序例程被调用。调用该方 法的开销非常低,因为不存在从用户模式402到所设及的内核模式404的上下文切换。 阳067]各实施例实现高效微内核中断处理。在一些实施例中,微内核406是可中断的但 不可先占的。逻辑处理器在微内核406的上下文中运行时,可W接收中断但不能锁定或切 换其上下文。为了最小化中断分派等待时间,各实施例限制处理器可在微内核406内花费 的时间量。一些实施例为可能花费比预设界限更长时间的系统调用实现持续执行方案。界 限和持续方案使微内核406能够W非常低的等待时间向域内核414递送中断。所有硬件中 断(MSIJRQW及虚拟)被递送给作为驱动程序的一部分的用户模式库。在一些实施例中, 最小化中断分派等待时间可W通过使用零复制I/O路径来达到。 W側现在示出零复制I/O路径的一个说明性示例。参考图1,示出了系统存储器112。 进程410可W分配系统存储器112的一部分。微内核406 (参见图4)可W允许进程410分 配存储器,但一旦存储器被分配给进程410,进程410就具有对系统存储器的该部分的控制 权。在硬件驱动程序示例中,硬件设备102可W对存储器的该部分进行写入。驱动程序进程 410随后将存储器的运一部分标记为不可变的。不可变的存储器是其内容和/或地址不能 被改变的存储器。因为存储器的该部分是不可变的,所W没有对访问存储器的该部分的真 实约束。因而,该系统不必切换到内核模式就能允许不同进程从该存储器进行读取。因而, 驱动程序进程410可W访问存储器的该部分而无需上下文切换,并且因而可W快速且高效 地获得来自硬件设备102的写入存储器的该部分的数据,使得在驱动程序被实现在用户模 式中时仍然可达到高效率和低等待时间。
[0069] 该数据可通过提供存储器的不可变部分的不同视图按适当的方式被递送给不同 进程410。因而,并非复制特定进程410所需的数据的各部分,指向存储器的不可变部分的 指针可被使用,且存储器的不可变部分中的数据的逻辑视图可W提供适当的数据。因而,从 特定进程410的角度看,该数据看起来已被复制并W适当的格式提供,而事实上没有发生 数据复制。
[0070] 类似功能可被使用W供驱动程序进程410将数据发送到硬件设备102。具体而言, 驱动程序进程410可W将数据写入系统存储器112的一部分。该部分可由同一驱动程序进 程410或另一驱动程序进程标记为不可变的。存储器随后可由硬件设备102读取,而无需 该系统切换到内核模式404。
[0071] 在一些实施例中,存储器的不可变部分可具有与其相关联的计数器。每次进程访 问存储器的不可变部分时,计数器就递增。当进程完成读取存储器的不可变部分时,计数器 递减。因而,在已读取存储器的不可变部分的所有进程完成存储器的不可变部分之后,计数 器递减到零,运允许存储器的该部分被释放W用于其他存储器操作。
[0072]另一技术与使用DMA信道来用于设备控制相关。信道是恰好具有两个端点(称为 信道端点)的双向消息管道。DM信道是桥接应用与设备驱动程序(它们经由DM交换大 量分组化数据)之间的间隙的高性能机制。运是标准进程间通信(IPC)信道的特殊化,主 要因提供可读DMA操作和信道中的消息的异步引退而不同。IPC消息具有两部分,一个强制 部分W及另一个可任选部分。强制部分是复制到信道的时隙内的内联数据,且可任选部分 包括跨信道传送(或通过信道共享)的处理。DMA信道在W下方面是唯一性的:
[0073]它们完全在用户模式(驱动程序和进程活在其中)中执行。
[0074]它们提供背压。对于在应用和网络驱动程序之间传递的每一消息,没有存储器分 配。此外,数据可停留在信道中,直至它被完全消费,并且运一数据之后的消息可继续被处 理。
[0075]它们包括零复制支持。DMA可W从环缓冲区执行。
[0076]它们包括对任意控制消息的支持。运启用如软件分割卸载等优化。
[0077]W下讨论现设及可W执行的多种方法W及方法动作。虽然用特定次序讨论或用W 特定次序发生的流程图示出了各个方法动作,但除非明确规定或因为一动作依赖于另一动 作在执行该动作之前完成而需要特定次序,否则不需要特定次序。
[0078] 现在参考图5,示出了方法500。可W在计算环境中实施方法500。方法500包括 用于自动生成与设备驱动程序一起使用来与硬件进行对接的代码的动作。方法500包括接 收硬件设备的机器可读描述(动作502)。该机器可读描述包括硬件设备的硬件寄存器或共 享存储器结构中的至少一者。例如,图1示出硬件设备102的机器可读描述116的示例。
[0079] 方法500还包括确定要与硬件设备一起使用的操作系统(动作504)。例如,代码 生成工具118可访问或具有设定为其创建硬件接口层115的操作系统的信息。
[0080] 方法500还包括在代码生成工具上处理机器可读描述来为硬件设备自动生成专 用于所确定的操作系统的硬件驱动程序的代码(动作506)。例如,图1示出代码生成工具 118执行机器可读硬件规范116。
[0081]可生成各种驱动程序代码部分。例如,方法500的一些示例可被实施,其中生成硬 件驱动程序的代码包括生成用于读和写寄存器并解释寄存器的各字段的硬件访问方法。作 为替换或补充,方法500的各实施例可被实施,其中生成硬件驱动程序的代码包括生成用 于读和写共享结构字段的方法。作为替换或补充,方法500的各实施例可被实施,其中生成 硬件驱动程序的代码包括生成用于硬件设备的机器可读描
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1