micro-kernel 和 macro-kernel 的差别是设计思想的不同。
在此之前讨论一个基本的问题:什么是kernel,怎么定义它的role。
简单对software进行分类,可以分为system software和application software,其中system software提供对application software developer的基本支持如运行环境、和提供其所需的服务,让其能够不care application software运行的硬件环境。本质上是对software从业人员进行流水化,分层化,以提供开发人员的效率;也让开发人员从初期的为了兼容不同的硬件环境的巨大effort中解脱出来。这里我们对system software的开发称之为操作系统开发。
而众所周知,内核是操作系统的核心,是对硬件细节的第一层抽象。它的作用是负责管理系统的进程、内存、中断、文件和网络,设备驱动,决定了系统的性能和稳定性。简而言之,对上屏蔽硬件细节,提供各种服务,如进程间通信,设备驱动和文件系统等等。另一方面有了kernel的隔离可以对application software进行权限的管控。
在micro-kernel的设计思想是尽可能的精简kernel。对于kernel本身提供的服务进行精简,只包含进程管理、进程间通信、地址管理等。常见device都作为一个服务的进程对其他进程提供相应服务。
而macro-kernel则会将硬件所能提供的服务都集成到kernel中,并对常见需求,如显示,输入系统,中断管理,gpio,外设管理等。