我曾经读过一次,微内核体系结构的一个优点是您可以停止/启动网络和文件系统之类的基本服务,而无需重新启动整个系统。但是考虑到当今的Linux内核(是否总是这样?)提供了使用模块来达到相同效果的选项,那么微内核的(剩余的)优势是什么?
我曾经读过一次,微内核体系结构的一个优点是您可以停止/启动网络和文件系统之类的基本服务,而无需重新启动整个系统。但是考虑到当今的Linux内核(是否总是这样?)提供了使用模块来达到相同效果的选项,那么微内核的(剩余的)优势是什么?
Answers:
与整体内核相比,微内核以更少的代码在最内部,最受信任的模式下运行需要更少的代码。这有很多方面,例如:
Unix GUI通过X窗口提供,这是用户区代码(视频设备驱动程序(的一部分)除外)。许多现代的unice允许普通用户通过FUSE加载文件系统驱动程序。某些Linux网络数据包过滤可以在userland中完成。但是,设备驱动程序,调度程序,内存管理器和大多数网络协议仍仅是内核。
Tanenbaum-Torvalds辩论是有关Linux和微内核的经典文章(如果有过时)。二十年后,人们可以说Linux朝着微内核结构发展的步伐非常缓慢(可加载模块在早期出现,FUSE则在最近出现),但是还有很长的路要走。
另一件事发生了变化,虚拟化在台式机和高端嵌入式计算机上的重要性越来越高:出于某些目的,相关的区别不在于内核和用户域之间,而在于虚拟机管理程序和来宾OS之间。
整体内核比微内核要老得多。它在Unix中使用,而微内核的概念出现在1980年代末。
具有单块内核的OS的示例是UNIX,LINUX,而具有微内核的OS的示例是QNX,L4,HURD和最初的Mach(不是MacOS X),后来被转换为混合内核。甚至MINIX也不是纯粹的微内核,因为其设备驱动程序被编译为内核的一部分。
整体内核比微内核快。第一个Mach微内核比单块内核慢50%。像L4这样的更高版本仅比整体内核慢2%或4%。
整体内核通常很庞大,而纯微内核的尺寸必须很小,甚至可以放入处理器的一级缓存(第一代微内核)中。
在单片内核中,设备驱动程序驻留在内核空间中,而在微内核中,设备驱动程序驻留在用户空间中。
由于设备驱动程序驻留在内核空间中,因此单片内核的安全性不如微内核(驱动程序中的故障可能导致崩溃)。微内核比单片内核更安全,因此它们被用于许多军事设备。
单片内核使用信号和套接字来确保IPC,而微内核方法则使用消息队列。在1 日的微内核的代执行不力IPC所以他们对上下文切换缓慢。
向单片系统添加新功能意味着重新编译整个内核,而无需重新编译即可添加新功能或补丁
情况是linux内核是单片和微内核的混合体。在纯整体实现中,运行时不会加载任何模块。
术语monolithic kernel
和microkernel
不能被认真比较,因为它们描述了内核设计的不同方面(结构与大小)。
一个典型的整体内核是SunOS-4.x内核,而Linux仍与之相似,因为您手动配置了基本内核的内容。
Solaris内核(从1992年的2.1开始)不再被称为单片内核,因为所有驱动程序均按需自动加载,并且在初始引导过程中仅加载了一小部分。
SunOS-4.x和Solaris(SunOS-5.x)和Linux都是单上下文实现。它们的整个代码在单个MMU上下文中运行。
Mac OS X基于Mach并作为多上下文实现运行,其中多个进程由MMU上下文分隔。在此概念中,驱动程序位于单独的进程和单独的MMU上下文中。
许多人将Mac OS X称为“微内核系统”,但是基本内核可能不小于Solaris的基本内核。
如此看来,这将是更好谈谈single context kernels
对multi context kernels
。
microkernel
无论如何,该术语 是错误的,因为它通常用于应称为的事物multi context kernel
。