2022.30 微内核架构

微内核架构(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也吸收了微内核的优点:模块化设计,支持动态装载内核模块,还避免了微内核设计上的缺陷,让一切都运行在内核态,直接调用函数,无需消息传递

posted on 2022-07-19 23:15  时间朋友  阅读(35)  评论(0编辑  收藏  举报

导航