ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022.30 微内核架构

2022-07-19 23:34:00  阅读:149  来源: 互联网

标签:插件 架构 2022.30 通信 内核 微内核 Linux


微内核架构(Microkernel Architecture),也被称为插件化架构(Plug-in Architecture),是一种面向功能进行拆分的可扩展性架构。

微内核架构最大的优势是允许第三方开发者添加额外的插件化应用,前提是该插件应用需要遵从下文所述的开发规范。采用微内核架构的软件随处可见,如IDE软件Eclipse、VsCode、企业ERP软件,这类软件自身具备丰富功能,同时支持第三方应用的即插即用,而且第三方插件化程序的安装、运行、卸载以及故障不会对原有系统造成任何影响。

微内核架构包含两类组件:核心系统(core system)和插件模块(plug-in modules)。核心系统负责和具体业务功能无关的通用功能,例如模块加载、模块间通信等;微内核的架构本质就是将变化部分封装在插件里面,从而达到快速灵活扩展的目的,而又不影响整体系统的稳定。

微内核的核心系统设计的关键技术有:插件管理、插件连接和插件通信。

1. 插件管理

核心系统需要知道当前有哪些插件可用,如何加载这些插件,什么时候加载插件。常见的实现方法是插件注册表机制。

核心系统提供插件注册表(可以是配置文件,也可以是代码,还可以是数据库),插件注册表含有每个插件模块的信息,包括它的名字、位置、加载时机(启动就加载,还是按需加载)等。

2. 插件连接

插件连接指插件如何连接到核心系统。通常来说,核心系统必须制定插件和核心系统的连接规范,然后插件按照规范实现,核心系统按照规范加载即可。常见的连接机制有 OSGi(Eclipse 使用)、消息模式、依赖注入(Spring 使用),甚至使用分布式的协议都是可以的,比如 RPC 或者 HTTP Web 的方式。

3. 插件通信

插件通信指插件间的通信。虽然设计的时候插件间是完全解耦的,但实际业务运行过程中,必然会出现某个业务流程需要多个插件协作,这就要求两个插件间进行通信。由于插件之间没有直接联系,通信必须通过核心系统,因此核心系统需要提供插件通信机制。

这种情况和计算机类似,计算机的 CPU、硬盘、内存、网卡是独立设计的配件,但计算机运行过程中,CPU 和内存、内存和硬盘肯定是有通信的,计算机通过主板上的总线提供了这些组件之间的通信功能。微内核的核心系统也必须提供类似的通信机制,各个插件之间才能进行正常的通信。

 

微内核已存在很长的历史,有很多操作系统是基于微内核设计的,如Mach,用于GNU Hurd和Mac OS X,Minix、QNX、RT-Thread等,但在商业操作系统中占的份额很少,微内核主要在学界的热度更高。

每一次发展微内核,都大致经历这样的过程:把内核的某些功能剥离出内核,然后爆发性能问题,然后再把一部分功能移回到内核。这样就出现了很多介于宏内核和微内核之间的内核形态,一般统称为混合内核。我们常见的Mac OS、Windows NT等用的就是这种混合内核的架构。

Linux/UNIX是基于宏内核的,内核提供了相当多的功能,包括驱动,调度器,地址空间管理,进程间通信,文件系统,虚拟文件系统,系统调用等,其宏内核的代码量高达2700万行。而微内核仅提供调度器,地址空间管理以及进程间通信等最基础的功能,MINIX 3的微内核仅1.2万行代码。

微内核的低效率是硬伤,宏内核的文件系统,驱动等以线程的方式工作在内核空间,它们之间的通信可以都在内核完成,不需要上下文切换,可以直接访问共享资源,甚至可以直接相互调用接口达到通信的目的,而微内核则需要通过IPC通信,触发系统调用,内存拷贝(异步通信需要拷贝两次),运行上下文切换,阻塞进程,这些操作开销都很大。

其实,早在 1992 年,Linus 曾经与 Tanenbaum(Minix作者,操作系统方面专家) 进行过一场关于Linux操作系统内核选择的著名争论。

Tanenbaum 认为,以微内核架构设计的操作系统,在理论上,比宏内核架构更加优越,主张Linux应该以微内核架构来进行重新设计。但是 Linus 以开发实务上的观点展开反击,陈述 Linux 选择宏内核架构进行开发的理由:从哲学及美学的观点出发,微核心的确是一个比较好的架构,但是采用微核心架构的GNU Hurd根本没有如期被成功开发出来,所以他才要开发Linux,操作系统核心主要的功能都倚靠硬件特性,所以内核本身不需要过度具备可移植性,让高级的软件应用程序接口具备可移植性才是更重要的,以Linux来跟Minix比较,移植程序到Linux上是更容易的。Linux内核采用集成式核心架构,是因为它能够简化核心设计,这是一个权衡下的结果。Linux一开始针对Intel 80386架构来开发,因为Linus自己买的电脑就是80386,对80386架构了解更多,Linux一开始就是他准备自己使用的,如果想要移植到别的平台,代码都是开放的,想要的人可以自己做。不过,Linux也吸收了微内核的优点:模块化设计,支持动态装载内核模块,还避免了微内核设计上的缺陷,让一切都运行在内核态,直接调用函数,无需消息传递。

标签:插件,架构,2022.30,通信,内核,微内核,Linux
来源: https://www.cnblogs.com/doit8791/p/16496222.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有