宏内核 微内核

强内核,又称宏内核或单内核,是操作系统内核架构的一种,简单理解,就是把所有要用到的东西都放到了内核里,比如最基本的进程、线程管理、内存管理、文件系统、驱动、网络协议等等。因为所有的模块都是在内核里,那优点就是处理效率高,但随着内核增大,管理起来也越不方便,而且只要其中一个模块出现问题,就会导致整个内核崩溃,系统的稳定性就差一些。

微内核是指将内核模块化设计,大部分内核都作为单独的进程,相互之间通过消息传递进行通信。微内核的功能类似于一个消息的转发站,优点是有助于内核功能的扩展和模块间的隔离,单个模块的bug不影响整个内核,只要杀掉出问题的进程就可以了,内核稳定性高,缺点就是进程间通信肯定会影响内核的效率。

宏内核的代表是Linux,微内核的代表是windows。可能有人会说微内核看起来更好,为什么 Linux不用微内核。Linux第一版用的是宏内核,之后也一直沿用下来,在Linus看来没有必要去重写Linux内核,一是这种结构实现起来是比较简单的,避免了划分模块、设计消息结构等麻烦,二是Linux没有研发时间上的限制,也不受市场的压力,其实就是有的是时间把单内核写好,三是Linux其实在单内核内核实现了充分的模块化,也就相当于吸收了微内核的优点,扩展及管理起来并没有那么困难,四是Linus认为了为增加可维护性而牺牲处理效率是不值得的。

单内核与微内核设计之比较

操作系统内核可以分为两大设计阵营:单内核和微内核(第三阵营外内核,主要用在科研系统中,但也逐渐在现实世界中壮大起来)。

单内核是两大阵营中一种较为简单的设计,在1980年之前,所有的内核都设计成单内核。所谓单内核就是把它从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间。因此,这样的内核通常以单个静态二进制文件的形式存放于磁盘。所有内核服务都在这样的一个大内核空间中运行。内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间:内核可以直接调用函数,这与用户空间没有什么区别。这种模式的支持者认为单模块具有简单和高性能的特点。大多数Unix系统都设计为单模块。

另一方面,微内核并不作为一个单独的大过程来实现。相反,微内核的功能被划分为独立的过程,每个过程叫做一个服务器。理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间。不过,所有的服务器都保持独立并运行在各自的地址空间。因此,就不可能像单模块内核那样直接调用函数,而是通过消息传递处理微内核通信:系统采用了进程间通信(IPC)机制,因此,各种服务器之间通过IPC机制互通消息,互换“服务”。服务器的各自独立有效地避免了一个服务器的失效祸及另一个。

同样,模块化的系统允许一个服务器为了另一个服务器而换出。因为IPC机制的开销比函数调用多,又因为会涉及内核空间到用户空间的上下文切换,因此,消息传递需要一定的周期,而单内核中简单的函数调用没有这些开销。基于此,付之于实际的微内核系统让大部分或全部服务器位于内核,这样,就可以直接调用函数,消除频繁的上下文切换。Windows NT内核和Mach(Mac OS X的组成部分)是微内核的典型实例。不管是Windows NT还是Mac OS X,都在其新近版本中不让任何微内核服务器运行在用户空间,这违背了微内核设计的初衷。

Linux是一个单内核,也就是说,Linux内核运行在单独的内核地址空间。不过,Linux汲取了微内核的精华:其引以为豪的是模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。不仅如此,Linux还避其微内核设计上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无需消息传递。至今,Linux是模块化的、多线程的以及内核本身可调度的操作系统。实用主义再次占了上风。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值