Kernel 为什么单片内核需要更多的重新启动?

Kernel 为什么单片内核需要更多的重新启动?,kernel,computer-science,Kernel,Computer Science,许多讨论单片内核优缺点的文章都提到,“通常需要重新启动计算机”[] 但这些文章都没有真正说明为什么需要重新启动 有人能解释一下为什么会出现这种情况吗?引用的语句是在一段与代码开发和调试有关的段落中做出的,而不是与最终结果有关。也就是说,在为单片内核开发特定于驱动程序或体系结构的组件时,需要频繁重新启动,因为设备探测和驱动程序初始化代码在启动时运行,而且驱动程序运行在内核空间中,而严重错误(“oops”)需要重新启动。相比之下,在微内核设计中,大部分驱动程序代码都在用户空间中运行,可以像任何其他用

许多讨论单片内核优缺点的文章都提到,“通常需要重新启动计算机”[]

但这些文章都没有真正说明为什么需要重新启动


有人能解释一下为什么会出现这种情况吗?

引用的语句是在一段与代码开发和调试有关的段落中做出的,而不是与最终结果有关。也就是说,在为单片内核开发特定于驱动程序或体系结构的组件时,需要频繁重新启动,因为设备探测和驱动程序初始化代码在启动时运行,而且驱动程序运行在内核空间中,而严重错误(“oops”)需要重新启动。相比之下,在微内核设计中,大部分驱动程序代码都在用户空间中运行,可以像任何其他用户空间线程一样轻松地重新启动,而无需重新启动。到目前为止,作者正在陈述任何有这两种内核开发经验的人从个人经验中知道的东西。Linux内核空间设备驱动程序调试是一件痛苦的事情,确实需要频繁重启

然而,作者接着说“当调试变得更困难时,随着困难的增加,代码更可能是‘错误’”。此声明不是关于开发和调试的。这是一个关于发展最终结果的推测,作者没有提供支持证据。在实践中,通过使用基于社区的维护模型和分阶段发布周期对代码进行广泛测试,可以降低在Linux等内核中实际发布buggier代码的风险

作者没有提到最近在单片内核(如Linux)中使用用户空间设备驱动程序的趋势。这些驱动程序是分离模式驱动程序,将大多数驱动程序逻辑移动到用户空间任务中,并在内核空间中只留下少量代码,通常用于轮询I/O和将DMA传输到在驱动程序的用户空间部分处理的缓冲区中。使用此方法的网络驱动程序示例如下。这种类型的驱动程序在开发和部署阶段都具有微内核驱动程序的大部分优点,而不需要微内核设计的消息传递系统开销。

OP的问题是“为什么单内核驱动程序开发需要频繁重新启动,而微内核驱动程序开发不需要频繁重新启动”。