前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么叫做微内核?与安卓系统有什么区别?

什么叫做微内核?与安卓系统有什么区别?

作者头像
程序员互动联盟
发布2020-04-03 17:58:25
1.5K0
发布2020-04-03 17:58:25
举报

从事嵌入式开发多年,要讲清楚这个事情真需要一定开发经验特别是关于linux上面的,首先微内核是相对于强内核而言,linux属于典型的强内核架构,从第一版本开始就是这个样子,首先linux设计者对于设计成强内核有自己的理由,更多是一些个性化的理由,当然也提出自己的一些意见,必须是祖师爷大家还是要尊重老人家的意见,概括起来大致有几个方面。

1.强内核机构看起来更加清晰明了,结构层次清晰简洁。

2.很重要的原因,因为linux代码是开源的,更加具备理想情怀,因为是开源的架构大家有的是时间把这个事情做的更加完美细致,如果这个事情放在一个商业化企业去做,可能架构就要跟着调整了,毕竟任何企业都要有时间点概念,这就是开源社区和商业化组织的最大区别。

3.linux

的强内核也就是但单个内核把里面的功能结构划分的十分清晰明确反而像极了微内核,linux结构层面简单明了,非常容易学习。

4.祖师爷认为单纯为了增加维护性而去牺牲效率是不值得,所说的效率就是指的是进程之间的通讯开销。

从以上四点就可以得出结论,Linux在设计上还是展示出很多的与众不同之处,但从安卓系统性能上讲这种单纯的强内核架构已经显示出来弊端了,如同余大嘴说到的现在安卓的代码差不多 有一亿行,但真正在运行只有8%的概率,所以在效率上有大打折扣,可以讲随着硬件以及软件发展趋势,微内核未来成为一种大的趋势,现在微内核做的比较好的属于美国黑莓公司的QNX系统,由于是收费系统在市面上推广的力度不是很大,主要用在进口车的里面的娱乐系统上面。

从技术角度解析强内核和微内核的区别

在功能简单单一的场景下强内核有着自己独特的优势。因为功能简单模块就比较少,代码量也相对少了许多,在这种情况下采用强内核容易维护,而且代码实现也比较简单。微内核主要针对运行场景非常复杂,功能模块极其复杂的场景而设计的

要了解微内核首先要明白用户空间和内核空间的差异,在强内核中几乎涉及到设备驱动的代码都要运行在内核空间,用户在编写代码的时候就要创建一个进程,用户空间的代码通过内存映射的方式在访问内核空间的设备,在设备功能比较少的时候非常具有优势,但在多种设备融合在一起的时候这种设计弊端就出来了。微内核架构上是系统级功能非常简单就是提供进程之间的通讯基础,其余复杂的功能散落在各个服务里面,如果要调用别的功能模块通过进程之间的通讯来完成,能够支持多个服务在一个规则里面运行,所以讲在微内核架构里面融入安卓系统还是一件非常容易的事情,因为就是开设一个独立的服务在里面,所以华为公司敢拍着脑袋说鸿蒙系统兼容安卓不是多大的问题,只不过需要成熟的生态系统来支撑。

微内核架构就可以根据功能的差异划分成多种服务。如果是通讯比较频繁的可以单独放在一个服务里面,在设计上会灵活许多,华为的鸿蒙系统在理论上性能要强于安卓主要架构原理在于此,同时优化了进程之间通讯的机制,非常符合万物互联的架构,甚至讲连接不同的服务就如同连接不同的设备,完全在一个系统概念下通讯,特别是针对5G成熟后应用的连接,虽然看起来鸿蒙是被迫的产物,但现在看起来更像是未来生态的一个标准。

有些操作系统采用微内核和强内核结合方式,mach架构就是这种典型的代表,所以在苹果手机的流畅度相比安卓还是要流畅一些,这里面有架构方面的因素,随着后续手机功能的持续增加微内核已经是一种趋势了,但微内核是不是真的无懈可击了,答案是否定的。

微内核和强内核优缺点

微内核由于在服务之间通讯增加了传输的成本,如果数据交互的数据量非常大效率必然受到影响,但由于服务之间互相独立,一个模块出现问题了不会影响到别的进程。强内核在工作过程中同时加载的数据量太大,影响了整体性能,整体来讲两种体系架构各有优劣,不单纯的讲哪种方式最合适。

选择什么什么样子的架构主要和具体使用场景息息相关,合适的就是最好的,希望能帮到你。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从技术角度解析强内核和微内核的区别
  • 微内核和强内核优缺点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档