当前位置:首页教育技巧ppt技巧PPT常见问题

宏内核和微内核,幻灯片宏内核和微内核的区别在哪里

2024-07-26 10:05:51


首先内核操作系统是软件,是操作系统的核心。它要负责内存管理、进程调度、文件系统、中断管理、设备管理等等工作。

除了内核之外,操作系统还有个壳,称为“shell”,它提供操作系统界面,让用户不是直接面对计算机硬件,而是将指令告诉shell,再由shell跟内核沟通,由内核去指挥硬件设备完成各种工作。

shell看起来是一个交互界面,有图形界面和命令行界面两种形式,但本质上它是一个命令解析器,所以shell中会内置许多与编程语言相关的功能。

操作系统的内核设计有两大阵营,宏内核和微内核。

宏内核,就是内核代码都编译成一个二进制文件,所有内核代码运行在一个大内核地址空间里,内核代码之间可以直接访问和调用。当应用程序需要需要访问硬件资源或者需要内核提供服务的时候,通过系统调用对内核进行召唤。系统调用的本质是内核将功能封装成了一堆函数,调用就是调用函数。

但要注意的是应用程序并不是直接召唤系统调用的,昨天讲安卓操作系统架构的时候,在硬件抽象层之上有个本地框架层,这里有一堆C/C++写的函数库。应用程序实际上是通过这层的函数调用来实现系统调用的。这层库提供给应用程序的某个API里面可能封装了一个或者多个系统调用,从而提供内核功能。

内核接收到系统调用就去执行任务,由于内核的一大堆功能都是运行在一个大的内核地址空间,彼此之间互相调用和访问的效率比较高,一家人嘛互相了解沟通也方便,所以整体执行效率会比较高。

不过这种“混居”的方式也有缺点,就是假如某个成员得了什么病容易传染,导致整个系统崩掉。

Linux内核就是典型的宏内核,宏内核就比较大,2020年1月Linux内核的代码量已经超过2700万行了。

网上有不少关于Linux是宏内核还是微内核的争论,说它是微内核的,主要论据就是Linux内核也是模块化的。

实际上,Linux很早就在借鉴微内核一些优点,提出了模块化设计的思想,内核中很多核心和设备驱动都可以模块化实现,本质是这些模块被编译成一个个目标文件,可以在内核运行的过程中动态加载和卸载。

但是,这种模块化的实现和微内核的模块化不一样,这些模块不是作为特殊模块来执行,而是和静态编译的那些内核函数一样,运行在内核态中。

比喻一下就是,微内核的模块之间有点像一层楼的几户邻居,而Linux内核中的模块就是一套房里面的各个房间,关上大门还是一家人。

至于Windows操作系统,早年有一些是微内核架构的,后来取长补短,现在基本算是混合内核。

微内核,就是只保留内核最基本的功能,比如进程调度、内存管理等,将其他的如文件系统、设备驱动之类的扔了出去,放到用户态中以服务模块的形式来实现。至于哪些功能放在内核,哪些功能扔出去,各家操作系统有自己的想法,所以并没有标准的界限。

微内核因为很多功能都甩出去了,所以可以做得比较小,经典的MINIX 3的微内核只有1.2万行代码。微内核并不是个新的东西,微内核的祖宗MINIX诞生的时间比Linux还早一点,对操作系统有兴趣的同学可以往前翻《操作系统从UNIX到Android》这个视频。很多物联网设备就会用到微内核,黑莓用在手机和汽车上的QNX操作系统就是很优秀的微内核架构操作系统。

微内核的优点是小、灵活性高,需要某些功能的时候就给挂上,不需要的时候就断开。这种轻耦合的方式也比较安全,一个功能模块崩了就崩了,一般不影响整体。

缺点就是执行效率比较马虎。举个通俗易懂的例子:

比如你要吃碗面,宏内核自己就有材料、厨子、厨房。你只需要跟它喊一声,它就给端一碗面上来。

但如果是微内核的话,由于微内核中只有最基本的核心功能,它可能就只有厨子。那你就要去跟各个服务模块要碗、要水、要面,这里就会出现多次沟通(通信)和调用,造成比较大的开销,效率也有影响。这种进程之间的通信称为IPC通信,现在搞微内核基本都要花力气来提高IPC的效率,各家有各家的方式。具体可以自己查下资料,这里就不展开了。

华为鸿蒙OS现在是个多内核的架构,注意多内核不是混合内核。混合内核还是在一个内核里面搞事情,多内核就是有好几个核,好几个混合内核可以称为多内核混合内核。

鸿蒙OS的底层挂了三个内核,Linux内核、LiteOS和微内核。为什么要挂一个Linux内核,这是用来跑安卓的。至于其他的比如手环这种CPU算力和内存都很小的物联网设备,应该是用LiteOS或者微内核来支持的。

鸿蒙OS的PPT上对未来的愿景是基于微内核来跑一切,现在肯定是还没实现的。这里简单讲一下,如果鸿蒙想用微内核来跑一切要做些什么。

以手机为例,如果鸿蒙要兼容安卓应用的话,首先要把Linux能够提供的功能全部用微内核的方式实现,然后把各个服务模块能够提供的功能打包封装成函数,类似做成系统调用。这事儿我想想都觉得极其复杂,复杂的原因不是能不能实现的问题,关键在于如何有效率的实现。最基本的都得搞一套新的算法,来优化进程管理。

然后,还是得做一层硬件抽象,这层还好因为有很多现成的东西可以集成。

硬件抽象上面也是要做本地框架和JAVA运行环境的,毕竟要兼容安卓应用。本地框架也还好,本来就有很多现成的库。JAVA运行环境,核心库也有很多可以继承的。

虚拟机的话要么优化现有的安卓虚拟机,牛逼的话就自己搞一套。

或者心一横,暗度陈仓,先随便搞一下安卓应用兼容,实际上大力发展鸿蒙应用生态。比如华为搞的方舟编译器,就是想把Java程序的源代码直接编译成机器码,这样就不用虚拟机。但是这么做会有两个问题,第一、源代码的所有动态语义都用静态方法来解决,这不一定是百分百能实现的事情。要实现这个目标,我估摸着是需要在应用程序开发的时候遵循一些华为的规范,华为现在也提供了相应的集成开发环境。

第二个问题,以前的视频也说过,不同的CPU能够执行的机器码是不同的,直接把源代码编译成机器码来执行,就会有硬件兼容的问题。苹果能够直接搞机器码,那是因为苹果本身直接搞CPU,算是配套的。但苹果之外的阵营,CPU厂商还是不少的。

针对硬件兼容的问题,华为也是有考虑的,搞了个方舟引擎,用来执行中间码。把源代码编译成机器码并不是一蹴而就的,要先编成中间码。方舟引擎就是执行中间码,这就有点类似虚拟机。

上面讲了一些和编译、虚拟机相关的东西,不懂没关系,后面会专门讲,就是感觉一下意思。

再往上一层是应用程序框架层,就是一堆提供给开发者和应用的JAVA API接口,本质就是要搞好函数封装。还有就是提供一些系统服务。这些事儿华为能干得出来。

上面讲了如果华为要搞微内核需要哪些基本操作,具体这些操作比如微内核、方舟编译器、方舟引擎当前做到什么程度了我还真不知道,毕竟它不是全透明,开源也是一步一步来的。有兴趣的同学可以时常去看一下,用一下。

很多人为鸿蒙是不是在套壳掐架,对于这点其实我不怎么在意,毕竟要自己搞操作系统,华为该干的事儿它都有在干,而且它也知道自己必须要干。

操作系统不仅仅是个技术战,更是要打生态仗。安卓这么多年的积累已经有了庞大的硬件产业链生态、开发者生态和用户生态。从生态上来讲,华为要搞个全新的东西干掉安卓是不现实的,不掉队就行了。

为什么华为和谷歌都在搞微内核啊,谷歌正在搞的fushica就是个微内核架构的OS。微内核虽然有很多亟待解决的毛病,比如依赖IPC通信,效率不高,大量上下文切换造成开销浪费等等。但是,微内核可以实现灵活的服务功能添加和删减,是很适合碎片化、场景多样性、特定需求多的物联网应用的。

所以,明摆着,手机就这样了,智能手机市场这两年基本增速都停了,还有点微微下掉。未来更广阔的星辰大海在物联网啊兄弟姐妹们,华为和谷歌真正要决战的场子在物联网。

不过,虽然真正的战场在物联网,但手机操作系统还是必须做的,基本盘在这里,而且还有安全和其他因素在。

搞操作系统是很难的,虽然鸿蒙一出网上关于操作系统的文章陡增,专家像雨后春笋。但实际上,真正搞操作系统的人才是很少的。从Linux操作系统诞生至今,全球给它提交过贡献代码的也不超过3000人。这事儿两面看,一方面是人少,一方面要两三千人才能搞出来Linux这样的东西,而且这几千人还不是随便什么人都行,真得都有刷子才行。

为什么搞操作系统的人少呢?操作系统经过三十多年的发展,其架构都相对固定了,要创造个什么新的东西是非常难的,更多的是局部上的创新、修改和优化。而且这跟开发应用程序不一样,应用程序可能几周就能搞个新模块,操作系统要搞点啥基本时间进度以年为单位,而且搞操作系统还得对硬件比较了解,需要复合程度比较高的知识结构。这种情况下,大家都是程序员,别人不断推陈出新,升职加薪,你一两年毫无动静,没点佛系和热爱还真干不大动。我认识一个搞操作系统的全栈大牛,年薪也不算高,而且就算想要跳槽可选的东家也非常的有限。

华为鸿蒙掀起热度是好事,让更多的人愿意去了解操作系统,也会带来更多人才的可能性。中国搞自己的操作系统,紧迫性比任何时期都强,未来也会有更好的择业环境。

主流的操作系统Linuxwindows苹果,哪个不是搞了三十年了,所以对于国产操作系统大家还是需要一些耐心。

Linux内核还没讲完,后面会接着讲。这两个关于操作系统的视频内容都比较浅,也比较少,主要是和硬件知识相比,操作系统的内容是糅杂的,讲什么不讲什么,讲到什么程度我还有点混乱,你们就先随便看着把,在调整中。

相关信息


电脑版

【免责声明】本站信息来自网友投稿及网络整理,内容仅供参考,如果有错误请反馈给我们及时更正,对文中内容的真实性和完整性本站不提供任何保证,不承但任何责任。
版权所有:学窍知识网 Copyright © 2011-2024 www.at317.com All Rights Reserved .