本帖最后由 如假包换的Echo 于 2020-3-31 15:14 编辑

宏内核也叫大内核。

宏内核与微内核的区别其实就是大内核与小内核的区别。

怎么划分?

Microkernel微内核只包含关键功能Virtual memory、Task Schedules和IPC,遵循“能多小就要多小”的设计原则。
Monolithic kernel则包含上面介绍的操作系统需要的全部功能。

==
其实,无论微内核系统或者宏内核系统,它们差不多都要提供那么多的功能,谁也少不了太多。所以两者看似是大小的区别或者是kernel代码的区别,但本质上却是把哪些功能放在了kernel mode,把哪些功能放在user mode的区别。

从维基百科给出的这张图上明显可以看出两者的区别。



优劣对比

如果从历史发展和现状来对比,几十年操作系统的发展结果早已清晰表明:宏内核获得了绝对性的胜利。

因为当前我们使用的主流操作系统,包括Windows、Android、iOS、macOS、Linux等等,都是宏内核操作系统或者说都是基于宏内核架构创建起来的。

但是我们也应该注意到以下几点:



  • 微内核也起源非常之早,可以追溯到1970年前后,一直以来是和宏内核同步发展的。
  • 目前的主流操作系统早已经不是当年纯粹的宏内核架构了,而是广泛吸取微内核架构的优点而后揉合而成的混合内核Hybrid kernel。
  • 当今宏内核架构遇到了越来越多的困难和挑战,而微内核的优势似乎越来越明显,尤其是谷歌下一代操作系统Fuchsia['fjuʃə] 还是华为未来的鸿蒙OS,都瞄准了微内核架构

微内核为什么半个世纪没有获得成功?

这里有很多原因,这里只是其中可能的几条:


  • 性能问题。Kernel mode和User mode之间的切换更加耗时,比起把各种功能都打包在一起的宏内核,微内核需要太多的切换,这直接导致性能底下。当然现在无论是算法改进还是CPU支持都有了很大的进步,基本上可以说现在已经不是大问题了。
  • 极致原则。微内核一直努力遵循“内核应该极小化”的原则(minimality),这让很多微内核研究者和开发者收到了束缚,在时代允许的硬件环境下难以对性能进行有效优化。
  • 缺乏大企业支持。当然这也和微内核当初性能不佳有关。

那么微内核的优势在哪里?

  • 易于维护和升级。把众多的服务功能和设备驱动从内核代码中分离出来,如果只需要对某些功能进行改进,这样无论是改代码还是增加新功能,都不用去变动原来的核心代码,当然效率高。
  • 系统更加稳定。只要微内核的关键功能代码不出问题,系统就不会崩溃。比如说如果文件服务代码运行时候出了问题,宏内核因为文件服务代码是放在kernel mode的,直接就系统崩溃蓝屏了。而微内核的文件服务代码是放在user mode的,只要运行在kernel mode的代码直接把文件服务功能强行停止然后重启就可以继续使用了,系统不会蓝屏。
  • 系统更加安全。微内核除了把额外的功能划出kernel mode之外,还改变了任务之间的权限管理模式,它并不能像宏内核那样直接给用户安装的APP授权访问关键功能和各种服务、驱动,而是依赖于不断的传递带有授权信息的handle对象来实现授权,这虽然很繁琐,但安全性无疑要比宏内核高很多。
  • 系统更加可定制。宏内核把所有驱动和服务都打包在内核里难以拆分,如果需要开发一个不需要网络功能服务的操作系统就比较麻烦了。而微内核中各种服务都是单独的,直接去掉很容易。这对当前越来越多样化的小型智能硬件操作系统的开发非常有用。
  • 分布式计算。因为微内核把各种服务和驱动都单独开来,这就允许让各种系统服务运行在不同的芯片、不同电脑上面,让很多台计算机一起来运行同一个操作系统,这对分布式计算和云计算提供了更多可能。

在windows2000之前,比如windows98或者windowsMe,文件服务、网络服务等等这些功能都是打包放在kernel mode中运行的,只要其中一个服务出问题就直接蓝屏。后来Window把很多服务功能都从核心中移出来,所以Windows7之后蓝屏就明显少了很多。