宏内核相反,微内核架构提倡功能尽可能少,只提供进程调度、处理中断、内存映射、进程间通信等功能。微内核架构是不能够提供什么实际功能的,而内存管理、进程管理、设备管理和文件管理服务等,都被做成一个个服务进程,它们和用户进程一样,只是它们能够提供宏内核里边提供的功能。
微内核提供了一种良好的进程间通信机制:消息。应用程序在调用某项服务时,会向微内核发送一个消息,而由微内核再往具体的服务进程发送,接着进程就会完成具体的功能。服务进程的编程模型就是循环处理来自其他进程的消息,完成对应的功能。
为了理解微内核的工程原理,我们来看看微内核提供内存分配功能的服务过程,具体如下:
- 应用程序发送内存分配的消息,这个发送消息的函数是微内核提供的,相当于系统 API,微内核的 API(应用程序接口)相当少,极端情况下仅需要两个,一个接收消息的 API 和一个发送消息的 API。
- 处理器切换到特权模式,开始运行内核代码。
- 微内核代码让当前进程停止运行,并根据消息包中的数据,确定消息发送给谁,分配内存的消息当然是发送给内存管理服务进程。
- 内存管理服务进程收到消息,分配一块内存。
- 内存管理服务进程,也会通过消息的形式返回分配内存块的地址给内核,然后继续等待下一条消息。
- 微内核把包含内存块地址的消息返回给发送内存分配消息的应用程序。
- 处理器开始运行用户模式下的应用程序,应用程序就得到了一块内存的首地址,并且可以使用这块内存了。
微内核最明显的缺点就是系统开销大,性能差。因为同一个功能相比于宏内核而言拐了几个弯才能实现。
微内核的优点:
1.功能划分清晰,便于协作开发。
2.系统可移植性好,微内核代码量比较少。
3.微内核有良好的伸缩性和扩展性。
宏内核与微内核的区别:
特性 | 微内核(Microkernel) | 宏内核(Monolithic Kernel) |
---|---|---|
内核复杂性 | 较低,内核只包含基本的调度和进程管理功能,其他功能以用户空间服务的形式提供。 | 较高,内核包含大部分核心功能,如文件系统、网络协议栈等。 |
模块性 | 高,系统功能以模块化的方式组织,易于添加或删除功能,微内核的系统结构清晰,利于协作开发 | 低,系统功能通常紧密耦合在一起,不容易分离或替换。 |
上下文切换频率 | 较高,用户空间服务和内核之间的通信可能导致频繁的上下文切换。 | 较低,因为大部分功能直接嵌入到内核中,减少了上下文切换的需求。 |
性能优化机会 | 有限,系统功能之间的通信可能引入性能开销。 | 较多,系统功能紧密集成,更容易进行内核内部的优化。一般来说,宏内核的性能更高 |
系统调用 | 通常需要多次上下文切换,因为服务通常在用户空间。 | 通常只需要一次上下文切换,因为功能通常在内核中。 |
可维护性和扩展性 | 高,易于添加、升级或替换用户空间服务,内核稳定性更高。 微内核系统具有良好的伸缩性、扩展性 | 有限,修改内核可能需要更大的努力,内核升级可能风险更大。 |
系统稳定性 | 较高,单一用户空间服务故障通常不会影响整个系统的稳定性。 | 有限,内核的稳定性可能会受到某些故障的影响。 |
执行速度 | 通常较慢,由于上下文切换和通信开销,可能对执行速度有一定的负面影响。 | 通常较快,由于内核内部功能紧密耦合和较少的上下文切换,通常更快 |
可移植性 | 通常微内核代码量少,系统具有良好的可移植性,因为微内核的设计理念鼓励模块化、清晰的接口和明确定义的规范,这些因素有助于提高操作系统的可移植性。 | 更低 |
为什么说宏内核比微内核执行速度更快?
宏内核(Monolithic Kernel)和微内核(Microkernel)是两种不同的操作系统内核架构,它们在执行速度上的差异主要取决于其设计和实现的方式。以下是宏内核相对于微内核更快的一些可能原因:
-
减少上下文切换:微内核架构通常将一些核心功能,如文件系统、网络协议栈等,移出内核,以降低内核的复杂性。然而,这可能导致更频繁的用户空间和内核空间之间的上下文切换,因为用户空间的服务需要与内核通信。宏内核通常将这些功能作为内核模块直接嵌入内核,减少了上下文切换的开销。
-
更高的性能优化机会:宏内核通常具有更大的内核空间,允许进行更多的性能优化,如内核函数之间更高效的调用和数据共享。微内核的架构可能需要更多的消息传递和间接调用,这可能会导致性能开销。
-
更少的通信开销:微内核通常依赖于进程间通信(Inter-Process Communication, IPC)来实现不同的服务之间的协作,而宏内核中这些服务通常更紧密地耦合在一起,减少了通信开销。IPC可以引入额外的延迟和开销,对于某些性能敏感的应用而言,这可能是一个不利因素。
-
优化的系统调用:在宏内核中,系统调用通常更加高效,因为它们直接调用内核中的功能,而微内核的系统调用通常需要更多的层级。这也有助于提高宏内核的执行速度。
然而,需要注意的是,微内核架构在某些方面具有优势,例如更好的可维护性和可扩展性,以及更高的系统稳定性。性能并不是唯一的考虑因素,它取决于具体的应用场景和需求。在实际应用中,开发人员需要根据特定的需求来选择内核架构。
明白了上述两个定义后,看下面的我的理解:
1、微内核相当于一个信息交换中心,自身可以实现的功能较少,他的主要职责是传递一个请求,一个A模块对其他模块功能的请求。而宏内核相当于一个是一个中央集权控制中心,把内存管理,文件管理等功能全部管理。
2、两个内核的优缺点:
A、理论上来看,微内核的设计思想更好一些,它将系统分为各个小的功能模块,把设计难度大大降低。因此,系统的维护与修改也方便进行。
B、但是微内核的通信失效率很高,是一个大问题。宏内核的功能模块之间的耦合度太高,将修改与维护的代价提高。但是在目前的linux操作系统里不会因为此造成很大问题(目前的linux还不算很复杂)。宏内核因为是直接调用的,所以效率比较高。
微内核的操作系统有:Window,Minix,Mac等等。
宏内核的操作系统有:Unix,Linux等等。