许多文章讨论了整体内核的优缺点,提到"通常需要重新启动计算机" [https://en.wikipedia.org/wiki/Kernel_(operating_system)#Monolithic_kernels]。
这些文章都没有说明为什么需要重新启动。
有人可以解释为什么会这样吗?
答案 0 :(得分:2)
引用的语句是在与代码开发和调试相关的段落中进行的,而不是最终结果。也就是说,在为单片内核开发驱动程序或体系结构特定组件时需要频繁重启,因为设备探测和驱动程序初始化代码在引导时运行,并且因为驱动程序在内核空间中运行,其中存在严重错误(" oops")需要重启。相比之下,在微内核设计中,许多驱动程序代码在用户空间中运行,可以像任何其他用户空间线程一样轻松地重新启动,而无需重新启动。到目前为止,作者正在说明具有两种类型内核开发经验的人员从个人经验中知道什么。 Linux内核空间设备驱动程序调试很麻烦,确实需要经常重启。
然而,作者然后进入状态"当调试变得更难,并且随着困难变得越来越强烈,代码变得越来越可能变得越来越困难'。关于开发和调试,此声明不。这是关于作者没有提供支持证据的最终结果的猜想。实际上,通过使用基于社区的维护模型和分阶段发布周期对代码进行广泛测试,可以减轻实际在Linux等内核中发布buggier代码的风险。
作者没有提到最近在单片内核(如Linux)中使用用户空间设备驱动程序的趋势。这些驱动程序是拆分模式驱动程序,它将大多数驱动程序逻辑移动到用户空间任务中,并且只在内核空间中留下少量代码,通常用于轮询I / O并将DMA传输到在驱动程序的用户空间部分。使用此方法的示例网络驱动程序是DPDK。在开发和部署阶段,这种类型的驱动程序具有微内核驱动程序的大部分优点,而没有微内核设计的消息传递系统开销。