单片内核的驱动程序可以在环0,1或2中(微内核它们将在环3中 - 用户环).
将驱动程序代码放入内核0或"略少"特权环1和2中是否有任何优点/缺点?
环1和环2仍然可以访问超级用户页面,但是他们无法运行一些特殊的特权指令(如果有的话,它们会引发一般保护错误 - 就像环3一样)
使用环1和环2最明显的优点是可以保护内核免受故障设备驱动程序的架构分离.理论上,当外环中的驱动程序发生灾难性故障时,正确编写的内核将允许优雅的故障.在ring 0中运行驱动程序可能会允许它在失败时删除整个内核.
将驱动程序移动到环1和2中的缺点是与内核和驱动程序之间的环转换的持续需求相关的性能开销.当然,在微内核系统中,这是必要的,并且可以根据您的需要足够快.通过适当的优化,将内核与其服务分离可以实现非常小的性能损失.话虽如此,用于快速上下文切换的Intel SYSENTER/ SYSEXIT(和等效的AMD SYSCALL/ SYSRET)指令仅允许环0和3之间的转换; 为了执行进入或退出环1或2的上下文切换,需要完全中断.
另一个需要考虑的缺点是,因为许多其他体系结构只有管理程序和用户模式(或等效体系),所以您编写的任何平台体系结构都可以管理运行代码的级别元素:
如果您计划构建将为不同体系结构构建的系统,这可能会导致一些困难.