本文分享自天翼云开发者社区《常用内核架构》,作者:JackW
宏内核
应用程序调用内存分配的 API(应用程序接口)函数。
处理器切换到特权模式,开始运行内核代码。
内核里的内存管理代码按照特定的算法,分配一块内存。
把分配的内存块的首地址,返回给内存分配的 API 函数。
内存分配的 API 函数返回,处理器开始运行用户模式下的应用程序,应用程序就得到了一块内存的首地址,并且可以使用这块内存了。
特点:功能耦合,效率高;但是开发一个新的功能也得重新编译、链接、安装内核,因为它没有模块化,没有扩展性、没有移植性,高度耦合在一起,一旦其中一个组件有漏洞,内核中所有的组件可能都会出问题。
微内核
应用程序发送内存分配的消息,这个发送消息的函数是微内核提供的,相当于系统 API,微内核的 API(应用程序接口)相当少,极端情况下仅需要两个,一个接收消息的 API 和一个发送消息的 API。
处理器切换到特权模式,开始运行内核代码。
微内核代码让当前进程停止运行,并根据消息包中的数据,确定消息发送给谁,分配内存的消息当然是发送给内存管理服务进程。
内存管理服务进程收到消息,分配一块内存。
内存管理服务进程,也会通过消息的形式返回分配内存块的地址给内核,然后继续等待下一条消息。
微内核把包含内存块地址的消息返回给发送内存分配消息的应用程序。
处理器开始运行用户模式下的应用程序,应用程序就得到了一块内存的首地址,并且可以使用这块内存了。
特点:微内核牺牲一定性能,具有不少优点,首先,系统结构相当清晰利于协作开发。其次,系统有良好的移植性,微内核代码量非常少,就算重写整个内核也不是难事。最后,微内核有相当好的伸缩性、扩展性,因为那些系统功能只是一个进程,可以随时拿掉一个服务进程以减少系统功能,或者增加几个服务进程以增强系统功能。
Darwin-XUN 内核
Darwin是苹果公司2000年开发的开源OS。集成了卡耐基梅隆大学的微内核Mach和伯克利大学的类Unix操作系统,后者提供一整套的操作系统服务。
Windows NT(new Technology)
微软为了获得市场,从不稳定的Windows3.1、95/98、ME之后推出NT,后续的XP更是成为其商业巅峰。
总结
Linux 性能良好,结构异常复杂,不利于问题的排查和功能的扩展,而 Darwin-XNU 和 Windows 结构良好,层面分明,利于功能扩展,不容易产生问题且性能稳定。