单内核与微内核的比较

操作系统内核分为单内核、微内核、外内核(科研中)。

单内核

所谓的单内核就是把它从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上。因此单内核通常以单个静态二进制文件的形式存放于磁盘中。所有内核服务都在这样的一个大内核地址空间上运行。内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间上,所以内核可以直接调用函数。

支持单内核模式的人认为单内核具有简单和性能高的特点。大多数的Unix系统都设计为单内核。Linux也是一个单内核,也就是说,Linux内核运行在单独的内核地址空间上。

微内核

微内核并不作为一个单独的大过程来实现,微内核的功能被划分为多个独立的过程,每个过程叫做一个服务器。只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间。所有的服务器都保持独立并运行在各自的地址空间上。因此就不能像单内核那样直接调用函数,而是通过IPC机制互通消息,互换“服务”。服务器的各自独立,有效地避免了一个服务器的失效祸及另一个。同样,模块化的系统允许一个服务器为了另一个服务器而换出。

IPC机制的开销多于函数调用,又因为会涉及内核空间与用户空间的上下文切换,因此,消息传递需要一定的周期,而单内核中简单的函数调用没有这些开销。所以,目前实际应用的基于微内核的系统都让大部分或全部服务器位于内核中,这样就可以直接调用函数,消除频繁的上下文切换同。

Windows NT内核(Windows XP、Windows Vista、Windows 7)和Mach(Mac OS X 的组成部分)都是微内核结构。

总结

Unix内核通常需要硬件系统提供页机制(MMU)来管理内存。这种页机制可以加强对内存空间的保护,确保每个进程都可以运行在不同的虚地址空间中。
早期的Linux也必须要有MMU支持,后期就不用了,这时的Linux已经可以运行在没MMU的小型嵌入系统上。

Linux还积极汲取了微内核的优点:模块化设计、抢占式内核、支持内核线程、动态装载内核模块的能力。Linux还避免了微内核的性能损失缺陷,让所有事情都运行于内核态,直接调用函数,无须消息传递。

猜你喜欢

转载自blog.csdn.net/weixin_40763897/article/details/90740465