Operating system 沙箱内核模式驱动程序是可能的还是常见的技术?

Operating system 沙箱内核模式驱动程序是可能的还是常见的技术?,operating-system,kernel,device-driver,Operating System,Kernel,Device Driver,我看到内核模式驱动程序在特权模式下运行是有风险的,但是是否有任何单片内核可以执行任何形式的驱动程序/可加载模块沙盒,或者这真的是微内核的领域?这种沙盒没有意义,操作系统完全信任驱动程序代码。基本上,这些驱动程序成为内核的一部分。在FS崩溃或内核的任何主要子系统崩溃后,都无法进行故障切换。基本上这是不好的(崩溃后的故障切换,想象一下在启动磁盘的存储驱动程序崩溃后你能做什么?),因为可能会导致数据丢失。 第二,沙箱导致所有内核代码性能受损。这种沙箱没有任何意义,操作系统完全信任驱动程序代码。基本上,

我看到内核模式驱动程序在特权模式下运行是有风险的,但是是否有任何单片内核可以执行任何形式的驱动程序/可加载模块沙盒,或者这真的是微内核的领域?

这种沙盒没有意义,操作系统完全信任驱动程序代码。基本上,这些驱动程序成为内核的一部分。在FS崩溃或内核的任何主要子系统崩溃后,都无法进行故障切换。基本上这是不好的(崩溃后的故障切换,想象一下在启动磁盘的存储驱动程序崩溃后你能做什么?),因为可能会导致数据丢失。
第二,沙箱导致所有内核代码性能受损。

这种沙箱没有任何意义,操作系统完全信任驱动程序代码。基本上,这些驱动程序成为内核的一部分。在FS崩溃或内核的任何主要子系统崩溃后,都无法进行故障切换。基本上这是不好的(崩溃后的故障切换,想象一下在启动磁盘的存储驱动程序崩溃后你能做什么?),因为可能会导致数据丢失。
第二,沙箱导致对所有内核代码的性能影响。

是的,有些平台使用“单片”(对于单片的某些定义)内核,对某些驱动程序进行驱动程序沙箱。Windows在较新版本的用户模式驱动程序框架中实现了这一点。这样做有两个原因:-

  • 它允许隔离。用户模式驱动程序中的故障不必导致整个系统停机。这对于被认为不是系统关键的硬件驱动程序来说很重要。例如打印机或声卡。在这些情况下,如果驱动程序失败,通常可以简单地重新启动,用户甚至不会注意到发生了这种情况
  • 它使编写和调试驱动程序变得更加容易。驱动程序编写器可以使用常规用户模式库和常规用户模式调试器,而不必担心IRQL和DPC之类的问题
  • 另一张海报说这毫无意义。希望以上解释了为什么您可能想要这样做。另外,另一张海报说,他们的行为是一个性能问题。同样,这取决于驱动程序的类型。在Windows中,这通常用于USB驱动程序。在USB驱动程序的情况下,不管驱动程序在何种模式下运行,驱动程序都不会直接与硬件通信-他们正在与另一个与USB主机控制器通信的驱动程序通信,因此,用户模式通信的开销要比编写一个必须从用户模式对IO端口进行位转换的驱动程序时少得多。此外,您还可以避免为性能至关重要的硬件编写用户模式驱动程序—在打印机和音频硬件的情况下,用户模式转换比硬件本身快得多,因此一个或两个附加模式上下文开关的性能成本可能与此无关


    因此,有时值得这么做,因为额外的健壮性和开发的易用性使得较小且通常不明显的性能降低是值得的。

    是的,有一些具有“单片”(对于单片的某些定义)内核的平台为某些驱动程序执行驱动程序沙箱。Windows在较新版本的用户模式驱动程序框架中实现了这一点。这样做有两个原因:-

  • 它允许隔离。用户模式驱动程序中的故障不必导致整个系统停机。这对于被认为不是系统关键的硬件驱动程序来说很重要。例如打印机或声卡。在这些情况下,如果驱动程序失败,通常可以简单地重新启动,用户甚至不会注意到发生了这种情况
  • 它使编写和调试驱动程序变得更加容易。驱动程序编写器可以使用常规用户模式库和常规用户模式调试器,而不必担心IRQL和DPC之类的问题
  • 另一张海报说这毫无意义。希望以上解释了为什么您可能想要这样做。另外,另一张海报说,他们的行为是一个性能问题。同样,这取决于驱动程序的类型。在Windows中,这通常用于USB驱动程序。在USB驱动程序的情况下,不管驱动程序在何种模式下运行,驱动程序都不会直接与硬件通信-他们正在与另一个与USB主机控制器通信的驱动程序通信,因此,用户模式通信的开销要比编写一个必须从用户模式对IO端口进行位转换的驱动程序时少得多。此外,您还可以避免为性能至关重要的硬件编写用户模式驱动程序—在打印机和音频硬件的情况下,用户模式转换比硬件本身快得多,因此一个或两个附加模式上下文开关的性能成本可能与此无关


    因此,有时值得这么做,因为额外的健壮性和开发的易用性使得较小且通常不明显的性能降低是值得的。

    我认为我们讨论的是内核模式驱动程序)。而且很少一组驱动程序可以用UMDF编写(如果你想要一些选项,比如我记得的concurent access,你也不能切换到UMDF)。UMDF可以做的事情肯定有限制,但这仅仅是UMDF的一个功能,它还不是一项完整的技术——它们支持您希望首先进入用户模式的东西,比如打印机驱动程序,在这里并发访问不是问题。这个问题并不是专门问内核模式驱动程序,我认为我们讨论的是内核模式驱动程序)。而且很少一组驱动程序可以用UMDF编写(如果你想要一些选项,比如我记得的concurent access,你也不能切换到UMDF)。UMDF可以做的事情肯定有限制,但这仅仅是UMDF的一个功能,它还不是一个完整的技术——它们为您想要转移到用户模式f的东西提供了支持