代码之家  ›  专栏  ›  技术社区  ›  mmk

将x86驱动程序代码放在环1和环2中而不是0中有什么好处吗?

  •  6
  • mmk  · 技术社区  · 10 年前

    单片内核的驱动程序可以是0、1或2环(对于微内核,它们将是3环-用户环)。

    将驱动程序代码放在内核的环0或“稍微少一点”特权的环1和2中有什么优点/缺点吗?

    环1和环2仍然可以访问监管器页面,但它们不能运行某些特殊的特权指令(如果运行了,它们将引发一般保护故障,就像环3一样)

    1 回复  |  直到 9 年前
        1
  •  5
  •   Community CDub    8 年前

    使用环1和环2最明显的优点是架构分离,可以保护内核免受故障设备驱动程序的影响。理论上,当外环中的驱动程序发生灾难性故障时,一个正确编写的内核将允许出现优雅的故障。在环0中运行驱动程序可能会使其在失败时关闭整个内核。

    将驱动程序移动到环1和环2中的缺点是与内核和驱动程序之间不断需要环转换相关的性能开销。当然在微内核系统中, this is necessary and could be sufficiently fast depending on your needs 。通过适当的优化,将内核与其服务分离可能会对性能造成非常小的影响。话虽如此,英特尔 SYSENTER / SYSEXIT (和同等AMD SYSCALL / SYSRET )用于快速上下文切换的指令 只有 允许环0和3之间的过渡;为了执行进入或离开环1或环2的上下文切换,需要完全中断。

    要考虑的另一个缺点是,因为许多其他架构只有主管和用户模式(或等效模式),所以您编写的任何管理代码运行级别元素的平台架构都必须具备这两种模式:

    • 取决于平台是否具有环1和/或2
    • 根据平台对代码的权限级别做出不同的决定。

    如果您计划构建一个针对不同体系结构构建的系统,这可能会导致一些困难。