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

文档序号:9476198阅读:来源:国知局
的样本描述。所呈现的寄存器是能 力寄存器。每个寄存器位于相对于设备存储器基本地址的相同偏移处。在运个示例中,能 力寄存器位于如由其为硬件-软件句法的一部分的"MemoryMappedRegister(存储器映射 的寄存器)"属性指定的偏移OxC处。一旦寄存器的基本地址被设定,硬件一软件接口就提 供若干个属性来呈现不同的寄存器字段。在运个示例中,"化taField(数据字段)"属性被 用于表示其是能力寄存器的一部分的寄存器。例如,肥SPARAMS是位于自能力寄存器的基 本地址(如解释的在OxC处)偏移0x4处的寄存器。每个数据字段被硬件一软件接口句法 递归地注释(如W下示出的)。
[0036] W下示出肥CPARAMS寄存器字段的硬件一软件接口描述。
[0037]
[0038]
[0039] 运个图显示了肥SPARAMS寄存器如何被注释(其是W上呈现的能力寄存器的一部 分)。硬件-软件接口"BitField(位字段)"和"Reserve地its(保留的位)"属性使得开 发者能够注释寄存器位。例如,在运个寄存器处的位0指示设备是否支持64个地址。开发 者使用"[(BitField(0)]public bool Bit64A(Mressing;"来呈现运个要求。所生成的代 码将使得开发者能够访问作为Boolean(布尔)的"Bit64A(Mressing"来查询值。 W40] W下显示了用于取得/设置肥CPARAMS字段值的生成的代码。
[0041 ]
[0042]
[0043] 所生成的代码使用专用于操作系统的接口并能针对其他操作系统来被容易地生 成。
[0044] W下示出藉此所生成的代码被设备驱动程序代码使用的方式。
[0045]
[0046] 一旦寄存器用底层存储器区域来初始化,寄存器可被容易地读取、操纵并写回到 设备。
[0047] 在W上示出的示例中,所生成的代码能被任意操作系统使用并不被限制到特定供 应商。附加地或替换地,所生成的代码可W采用任一开发语言,诸如C#、JAVA、C、C++等。
[0048] 如所示的,通用硬件-软件接口语言被用于在机器可读硬件规范中描述硬件寄存 器和主机存储器数据结构(可经由DMA访问)。代码生成器对硬件-软件接口描述进行操 作。硬件-软件接口描述可通过硬件供应商来被提供、验证和维护。硬件供应商可直接从 硬件设计中生成机器可读硬件规范,从而消除人为错误的可能性。运从软件/硬件接口设 计和实现路径中减少或消除了人类干预,减少开发时间并提供了一致且更好的调试体验。
[0049] -些实施例实现具有资源加固的基于能力的驱动程序模型。具体而言,大多数驱 动程序114与实际硬件对接。为了实现运个,驱动程序114将驻留在设备102上的物理存 储器122的一部分映射到计算系统104的虚拟地址空间或使用称为I/O空间的专用地址空 间。先前示出的技术被实现来帮助确保驱动程序代码正确地使用经映射的存储器(或I/O 端口)来访问设备102。在多个常见操作系统中,设备驱动程序114可通过错误或恶意来自 由地尝试映射和使用系统存储器112中的任一物理地址。由于驱动程序软件的特权性质, 操作系统通常没有方法来确保驱动程序114不分配端口、中断或不属于驱动程序的或不需 要供驱动程序来正确地运行W控制特定硬件设备102的其他接口。例如,键盘驱动程序通 常应该能够访问IRQ1,但不需要访问端口 80。通过访问端口 80,恶意的键盘驱动程序可实 现包括将键击跨网络发送到欺诈网站在内的按键记录功能。运可危害系统的安全性。
[0050] 本文中的各实施例可在受管代码(诸如C#或JAVA)中实现驱动程序和系统进程。 受管代码是将仅在沙箱式虚拟机的管理下执行的计算机程序源代码。由此,被运样实现的 任意驱动程序或系统进程包括闭合的对象空间。设备存储器和寄存器仅能经由在驱动程序 被初始化时被提供给该驱动程序的专用受管对象访问。由此,驱动程序将仅能够访问被需 要供驱动程序来正确地运行W控制设备的系统资源和I/O进程。
[0051] 现在参考图2, 一些实施例实现其中所有I/O资源(诸如经存储器映射的寄存器 206、I/O端口 208和DMA缓冲区210)的集合204是能力的方式。运些能力由内核212独占 地拥有并在启动之际被分配到系统的根总线驱动程序214。系统根总线驱动程序214能将 所有I/O资源的集合204的子集204-U204-2到204-n分派到其他系统总线214-U214-2 至IJ214-n。子集204-1到204-n按W下运种方式分配:总线214-1到214-n是它们需要用 于将被附加到它们的特定设备的仅被分配的资源。
[0052] 当总线驱动程序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资源。当 驱动程序被终止或退出时,它的资源能被其父总线驱动程序容易地回收。通过使用输入/ 输出存储器管理单元(I0MMU)硬件,运个方案能被实施在硬件级别处。例如,尝试用非法存 储器地址来编程设备的驱动程序开发者将不能够危害系统的安全性。
[0053] 图3示出了典型总线驱动程序302的结构。总线驱动程序302 (在运个示例中为 PCI总线驱动程序)与提供所有驱动程序服务的用户级库(例如,在运个示例中为从华盛顿 少H、雷蒙德市的微软公司可用的化iver化amework(驱动程序框架)库)链接。驱动程序还 与使得总线驱动程序302能够枚举其子设备的即插即用管理器库306链接。对于每个枚举 的设备,框架创建称为总线插槽(诸如,总线插槽308-1)的抽象,其保持被分配的设备的资 源。每个总线驱动程序导出被运行时附加到子驱动程序(作为示例示出为114-1)的多个 总线插槽接口,诸如示例总线插槽接口 310-1 (表示为I总线插槽QbusSlot)接口)。除了 所枚举的设备驱动程序之外,没有其他服务或进程能将其自身附加到总线插槽接口。总线 插槽接口被子设备驱动程序使用W将其分配的I/O资源分派到设备,如示例设备102-1示 出的。驱动程序仅能分派在父驱动程序处的总线插槽上指定的I/O资源。
[0054] 运一机制可在W下意义上被容易地实现并分发:1/〇资源管理在每一总线驱动程 序本地执行,而非在内核中或单个系统服务中。
[0055] 除了被对待为能力的I/O资源之外,各实施例可实现能够控制各个服务的连接性 的操作系统。由于驱动程序被当作服务,各实施例可控制驱动程序能使用其/与其交互的 服务集合。例如,不像其他操作系统,在一些实施例中,驱动程序不能向另一驱动程序发送 消息,运是因为它不具有运么作的能力(其是用于向该服务发送消息的接口)。一些实施例 的操作系统能够约束、控制、观察和推断驱动程序到系统中的其他组件的连接。基于能力的 模型和对受管代码的使用的组合提供了如在此示出的各个益处。
[0056] 参考图4,示出了一独特架构。在示出的示例中,示出了用户模式402(例如,x86 架构的特权环中的最少特权的Ring(环)3)和内核模式404。微内核406可被实现在内核 模式404(有时被称为管理者模式)中。微内核406是提供各机制的最小数量的软件,各机 制诸如低级地址空间管理、线程管理和IPC通信。微内核406负责读取基本硬件表。
[0057] 在用户模式402中,地址空间被划分成域,诸如例如,域408-1 (但本文中统称为 408)。域在运行时(诸如示例运行时412-1-1)运行各个进程(诸如示例进程410-1-1,但 统称为410),包括一个或多个驱动程序进程。可实现W下实施例:其中驱动程序是用户模 式402管理的能支持高吞吐量和低等待时间设备的进程410。在一些实施例中,包括设备驱 动程序在内的所有服务使用受管代码库来开发并W用户模式402执行。附加地,进程410 和微内核406之间的隔离可进一步经由语言的静态确认的类型安全性来实现。运个机制使 得能通过进程间通信(IPC)信道来实现数据的交换,而无需复制为驻留在单个地址空间或 域408中的所有进程。运样的方式在不基于类型安全语言的传统系统中难W实现安全。
[0058]使用受管代码来实现的用户模式驱动程序可极大地提升系统安全性并简化驱动 程序开发。具体而言,开发者可利用在系统中可用的任一用户模式库(包括XML解析器、队 列管理等)。在传统操作系统中,由于存储器限制W及如驱动程序必需与内核共享它们的地 址空间的其他限定,驱动程序开发者不
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1