将x86驱动程序代码放在环1和环2中而不是0中是否有优势?

将x86驱动程序代码放在环1和环2中而不是0中是否有优势?,x86,drivers,X86,Drivers,单片内核的驱动程序可以在环0、1或2中(对于微内核,它们将在环3-用户环中) 将驱动程序代码放在内核的环0中或“稍微少一点”的特权环1和2中有什么优点/缺点吗 环1和环2仍然可以访问管理器页面,但它们不能运行某些特殊的特权指令(如果它们运行,则会引发一般保护故障,就像环3一样)使用环1和环2最明显的优点是架构分离,可以保护内核不受故障设备驱动程序的影响。理论上,当外圈的驱动程序发生灾难性故障时,正确编写的内核将允许正常故障。在环0中运行驱动程序可能会允许它在出现故障时关闭整个内核 将驱动程序移动

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

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


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

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

将驱动程序移动到环1和环2的缺点是性能开销,这与内核和驱动程序之间不断需要环转换有关。当然,在微内核系统中。通过适当的优化,将内核与其服务分离只会对性能造成很小的影响。话虽如此,用于快速上下文切换的Intel
SYSENTER
/
SYSEXIT
(以及等效的AMD
SYSCALL
/
SYSRET
)指令仅允许环0和环3之间的转换;为了执行环1或环2的上下文切换,需要完全中断

另一个要考虑的缺点是,因为许多其他体系结构只有监督者和用户模式(或等价的),所以您编写的任何平台架构都会管理代码运行的级别元素:

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

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

还要注意,分页只有“用户”和“主管”。任何环1或环2代码都可以访问“管理器”页面(例如,垃圾环0内核页面);因此,使用环1或环2没有什么意义,或者必须使用分段来确保保护而不是分页(这对性能来说是一个非常糟糕的想法)