unix系统微内核_宏内核与微内核、linux内核与unix内核的区别 - CSDN
  • 微内核架构

    千次阅读 2019-01-23 01:28:07
    微内核架构(Microkernel Architecture),也被成为插件化架构(Plug-in Architecture),是一种面向功能进行拆分的可扩展性架构,通常用于实现基于产品(原文为product-based,指存在多个版本,需要下载安装才能使用...

    微内核架构(Microkernel Architecture),也被成为插件化架构(Plug-in Architecture),是一种面向功能进行拆分的可扩展性架构,通常用于实现基于产品(原文为product-based,指存在多个版本,需要下载安装才能使用,与web-based想对应)的应用。例如Eclipse这类IDE软件、UNIX这类操作系统、淘宝App这类客户端软件等,也有一些企业将自己的业务系统设计成微内核的架构,例如保险公司的保险核算逻辑系统,不同的保险品种可以将逻辑封装成插件。

    基本架构

    微内核架构包含两类组件:核心系统(core system)和插件模块(plug-in modules)。核心系统负责和具体业务功能无关的通用功能,例如模块加载、模块间通信等;插件模块负责实现具体的业务逻辑
    在这里插入图片描述
    上面这张图中核心系统Core System功能比较稳定,不会因为业务功能扩展而不断修改,插件模块可以根据业务功能的需要不断扩展。微内核架构的本质就是将变化封装在插件里面,从而达到快速灵活扩展的目的,而又不影响整体系统的稳定。

    设计关键点

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

    1、插件管理

    插件系统需要知道当前有哪些插件可用,如何加载这些插件,什么时候加载插件,常见的实现方法是插件注册表机制。
    核心系统提供插件注册表(可以是配置文件,也可以是代码,还可以是数据库),插件注册表含有每个插件模块的信息,包括它的名字、位置、加载时机(启动就加载,还是按需加载等)

    2、插件连接

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

    3、插件通信

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

    OSGi架构简介

    OSGi的全称是Open Services Gateway intiative,本身其实是指OSGi Alliance。这个联盟是Sun Microsystems、IBM、爱立信等公司于1999年3月成立的开放的标准化组织,最初名为Connected Alliance。它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提供服务建立开放的标准,这个标准就是OSGi specification。现在我们谈到OSGi,如果没有特别说明,一般是指OSGi的规范。
    OSGi联盟的初始目标是构建一个在广域网和局域网或设备上展开业务的基础平台,所以OSGi的最初设计也是针对嵌入式应用的,诸如机顶盒、服务网关、手机
    、汽车等都是其应用的主要环境。然而,无心插柳柳成荫,由于OSGi具备动态化、热插拔、高可复用性、高效性、扩展方便等优点,它被应用到了PC上的应用开发。尤其是Eclipse这个流行软件采用OSGi标准后,OSGi更是成为了首选的插件化标准。现在我们谈OSGi已经和嵌入式应用关系不大了,更多是将OSGi当做一个微内核的架构模式。
    Eclipse3.0开始,抛弃了自己实现的插件化框架,改用OSGi插件化框架。需要注意的是OSGi是一个插件化的标准,而不是一个可运行的框架,Eclipse采用的OSGi框架为Equinox,类似的实现还有Apache的Felix、Spring的Spring DM。
    OSGi框架的逻辑架构图如下:
    在这里插入图片描述

    1、模块层(module层)

    模块层实现插件管理功能。OSGi中,插件被称为Bundle,每个Bundle是一个java的jar文件,每个Bundle里面都包含一个元数据文件MANIFEST.MF,这个文件包含了Bundle的基本信息。例如,Bundle的名称、描述、开发商、classpath,以及需要导入的包和输出的包等,OSGi核心系统会将这些信息加载到系统中用于后续使用。
    一个简单的MANIFEST.MF样例如下:

    Manifest-Version: 1.0
    Archiver-Version: Plexus Archiver
    Built-By: liuzhe
    Created-By: Apache Maven 3.5.3
    Build-Jdk: 1.8.0_162
    

    2、声明周期层

    声明周期层实现插件连接功能,提供了执行时模块管理、模块对底层OSGi框架的访问。生命周期层精确的定义了Bundle生命周期的操作(安装、更新、启动、停止、卸载),Bundle必须按照规范实现各个操作,例如:

    public class NettyBundleActivator implements BundleActivator {
        private OsgiLoggerFactory loggerFactory;
    
        public NettyBundleActivator() {
        }
    
        public void start(BundleContext ctx) throws Exception {
            this.loggerFactory = new OsgiLoggerFactory(ctx);
            InternalLoggerFactory.setDefaultFactory(this.loggerFactory);
        }
    
        public void stop(BundleContext ctx) throws Exception {
            if (this.loggerFactory != null) {
                InternalLoggerFactory.setDefaultFactory(this.loggerFactory.getFallback());
                this.loggerFactory.destroy();
                this.loggerFactory = null;
            }
    
        }
    }
    

    3、服务层(service层)

    服务层实现插件通信的功能。OSGi提供了一个服务注册的功能,用于各个插件将自己提供的服务注册到OSGi核心的注册中心,如果某个服务想用其他服务,则直接在服务注册中心搜索可用中心即可。

    规则引擎架构简析

    规则引擎从结构上来看也属于微内核架构的一种具体体现,其中执行引擎可以看做是微内核,执行引擎解析配置好的业务流,执行其中的条件和规则,通过这种方式来支持业务的灵活多变。
    规则引擎在计费、保险、促销等领域应用较多。例如电商促销,常见的促销规则有:

    • 3件8折
    • 第三件免费
    • 跨店满200减100
    • 新用户立减50

    • 以上仅仅列出来常见的几种,实际上完整列下来可能有几十上百种,再加上排列组合,促销方案,可能有几百上千种,这样的业务如果靠代码来实现,开发效率完全跟不上业务的变化速度,而规则引擎却能很灵活的应对这种需求,主要原因在于:

    1、可扩展

    通过引入规则引擎,业务逻辑实现与业务系统分离,可以在不改动业务系统的情况下扩展新的业务功能

    2、易理解

    规则通过自然语言描述,业务人员易于理解和操作,而不像代码那样只有程序员才能理解和开发。

    3、高效率

    规则引擎系统一般提供可视化的规则定制、审批、查询及管理,方便业务人员快速配置新的业务。
    规则引擎基本架构如下:
    在这里插入图片描述

    • 开发人员将业务功能分解提炼为多个规则,将规则保存在规则库中
    • 业务人员根据业务需要,通过将规则排列组合,配置成业务流程,保存在业务库中
    • 规则引擎执行业务流程,实现业务功能
      对照微内核架构的设计关键点,看看规则引擎是如何实现的

    1、插件管理

    规则引擎中的规则就是微内核架构中的插件,引擎就是微内核架构的内核。规则可以被引擎加载和执行。规则引擎架构中,规则一般保存在规则库中,使用数据库来存储。

    2、插件连接

    业务人员需要基于规则语言来编写规则文件,然后有规则引擎加载执行规则文件来直线业务功能。因为规则引擎的插件连接实现机制,其实就是规则语言。

    3、插件通信

    单个规则并不需要依赖其他规则,因此规则之间没有主动的通信,规则只需要输出数据或者事件。

    展开全文
  • 背景庞大的 UNIX 家族 计算机技术在二战后快速发展,构成计算机的主要基本单元从电子管发展到分立晶体管,再到后来的大规模集成电路。随着计算机技术发展,计算机性能越来越强劲,硬件越来越复杂,人们发现很难去...

    640?wx_fmt=png

    背景庞大的 UNIX 家族

     

    计算机技术在二战后快速发展,构成计算机的主要基本单元从电子管发展到分立晶体管,再到后来的大规模集成电路。随着计算机技术发展,计算机性能越来越强劲,硬件越来越复杂,人们发现很难去直接管理计算机了,于是人们开始设计软件用于管理越来越复杂的计算机系统,这些软件称作系统级软件。

    从最开始的批处理系统,多道程序系统,分时系统到上世纪 60 年代开始出现通用操作系统,计算机系统层出不穷,直到上世纪 70 年代才出现被大家广泛接受广泛使用的通用操作系统。其中最经典的当然就是 UNIX 系统了。

    UNIX 系统,1971 年诞生于大名鼎鼎的贝尔实验室的一台 PDP-11/24 机器上,其后经过不断发展与传播,在 80 年代取得了巨大成功,UNIX 被移植到众多的处理器架构,并在众多行业得到广泛使用,甚至成为行业标准影响至今。

    640?wx_fmt=png

    UNIX 以及类 UNIX 系统如 Linux 都是典型的宏内核设计,也就是把所有系统服务都放到内核里,因为系统服务代码之间存在大量数据交换和大量的服务请求,而在同一个代码段内进行函数调用(C 语言)或跳转(汇编或者机器码时代)是最直接、最高效的方法,在同一片地址空间也方便数据交换,所以这样的宏内核设计是很自然的。

    但是随着 UNIX 内核功能的拓展(文件系统、TCP/IP网络协议栈、进程管理、内存管理、驱动程序等),UNIX 内核代码也相应增加了很多,进而在可维护性、稳定性、安全性方面面临一些挑战。为了试图解决这些挑战,人们开始尝试使用微内核的思想来设计系统内核。

     

    640?wx_fmt=png

    什么是微内核?

     

    微内核设计的基本思想是简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护。内核只提供最基础的服务,比如多进程调度、多进程通信(IPC)等。其中进程通信是作为连接应用与用户态系统服务的桥梁。

    640?wx_fmt=png

    宏内核与微内核的对比示意图

    宏内核系统相关的服务基本都是放于内核态内核中,例如文件系统、设备驱动、虚拟内存管理、网络协议栈等;而微内核则把更多的系统服务(例如文件系统、POSIX 服务、网络协议栈甚至外设驱动)放到用户态应用,形成一个个服务,等待其他应用的请求。而后来,为了在宏内核与微内核之间扬长避短,也发展出了中间的混合内核的形态,部分服务也会放置于内核中。

     

    640?wx_fmt=png

    微内核的发展历史

     

    微内核这个概念从提出开始就在不断地发展、完善进步之中,到目前为止可以分为三代。

    第一代微内核:从无到有

    第一代微内核的主要代表是 Mach,该系统由美国卡耐基梅隆大学的 Avie Tevanian 和 Richard Rashid 主导开发。在 Mach 刚刚开始设计时,UNIX 的发展正如日中天,所以Mach在设计时的一大目标就是兼容 UNIX,但是与 UNIX 不同的是 Mach 尝试使用微内核架构去设计。Mach 以 IPC 是作为所有系统服务与内核交换数据的基础机制,充分运用 IPC、虚拟内存、多进程等特性将冗余的系统服务移出内核作为进程运行。

    1986年,经过两年的开发,第一版的 Mach 发布后的第二年,Mach 就发布了第2版,不过由于时间仓促,加之没有足够的人手与资金,所以此时 Mach 内核并不提供完全的系统服务。

    为了支撑系统上层运行,这一版的内核包含了大量 4.3 版本的 BSD 系统(UNIX的一个分支)代码提供系统服务,并且 BSD 系统服务运行在内核状态,这导致 Mach 内核的代码体积甚至大于常规 UNIX 内核。

    第一版和第二版的 Mach 主要做了如下工作:

    1. 验证了微内核的可行性;

    2. 在多处理器计算机上进行移植验证了微内核在多处理器计算机上的运行;

    3. 最后为了提高 IPC 的效率,Mach 使用共享内存机制来完成 IPC。

    而 Mach 的共享内存机制是在虚拟内存技术的支持下实现的,只有需要对内存进行写入时才进行复制。这么一处理比每次都复制一遍内存节省了内存使用同时又加快了 IPC 机制的处理时间,这个改进称为写时复制,并且在如今的通用操作系统如 Linux 中常常用到。

    经过测试,Mach 2.5的效率最多比 UNIX 少 25%,但是考虑到 Mach 带来的可靠性、可拓展性、安全性,这个效率损失尚可以接受。

    当然此时 Mach 内核还不算完全的微内核。而考虑到微内核可以更高效地利用多处理器计算机的处理器核心资源,人们期待着等 Mach 把系统服务都搬到内核之外后可以把运行效率损失降下来。

    同时 Mach 在微内核方面小小的尝试迅速吸引了大批公司与组织的注意,开放软件基金会(Open Software Foundation,OSF)宣布下一代系统 OSF/1 将基于 Mach 的内核, NeXTSTEP 也将使用 Mach2.5, 甚至 IBM 也打算利用 Mach 构建 Workplace OS。苹果公司这个时候也出手了,苹果公司也从此基于 Mach2.5 打造其操作系统内核 XNU,XNU的构成如下图所示,Mach 作为内核的内环,外环右侧是苹果的驱动框架(I/O Kit),外环左侧是 BSD 的系统服务代码提供 UNIX 兼容的服务层,这三者共同协作向上层提供完整的系统服务。XNU 广泛地使用在苹果公司的 OSX、IOS等系统中。

    640?wx_fmt=png

    这个时候由于 UNIX 系统广泛使用带来的商业利益,此时 BSD 系统开发者与 UNIX 的拥有者 AT&T 陷入了法律大战,Mach 使用的 BSD 相关代码有了法律风险。

    提升性能的期望和规避法律风险的需求推动着 Mach 3.0 的开发,Mach 3.0 的开发目标主要是为了替换 BSD 系统服务,同时尽量多地将系统服务放到内核之外去运行,成为名副其实的微内核设计。

    经过众多开发者 3 年的努力,Mach 3.0 于 1990 年发布,但是由于在系统服务之间完全使用 IPC 通信,而不是向宏内核那样直接进行函数调用,即便是多处理器机器上运行也性能损失惨重,Mach 3.0 最多比 UNIX 损失 67% 运行效率,这导致 Mach 3.0 以及其所代表的第一代微内核设计被看衰。此后断断续续有在 Mach 的基础上对性能进行提升的尝试,但是均不太理想,至此 Mach 成为了微内核第一代先驱者。

    第二代微内核:解决性能问题

    第二代微内核的主要代表是 L3 和 L4,以及 QNX 系统使用的 Neutrino 内核。前面第一代的微内核 Mach 由于效率问题虽然失败了,但是微内核的理念并没有被放弃,德国的计算机科学家 Jochen Liedtke 认为 Mach 的 IPC 效率低下的原因就是因为 IPC 部分不够精简,于是他开发了 L3 和 L4 微内核,对 IPC 部分进行了很彻底的精简:

    1. 内核的 IPC 机制只是单纯地传递信息,诸如安全权限检查这类的代码都省略掉,省略掉的功能全部由用户进程自己处理。如此一来 IP C功能部分的代码执行时间大大缩短;

    2. IPC 不使用内存传递消息,而使用寄存器传递消息,同时限制 IPC 每次传递的信息长度,这样省去了对内存的访问时间。L4 微内核的 IPC 速度经过测试要比 Mach 快 20 倍,这个令人惊讶的优化效果吸引了众多的目光,使微内核的研究重新火热起来。后面 L4 内核又发展出了很多相关系统,比如 Pistachio、L4/MIPS 与 Fiasco 等等,这些内核组成了 L4 的大家族。

    640?wx_fmt=png

    第二代微内核的代表除了有 L4 内核,也还有其他微内核比如 Exokernel、Rambler 等,不过商业上最成功的则是目前黑莓公司旗下的 QNX 系统所使用的 Neutrino 内核(QNX,1980年诞生,最初以 QUICK UNIX 为名,后改为 QNX;2004 年 QNX 被 Harman 国际收购;2010 年 Harman 国际下被黑莓收购,QNX 成为黑莓旗下的资产),QNX 主要为高可靠领域提供解决方案,比如交通、能源、医疗、航天航空等。

    640?wx_fmt=png

    第三代微内核:主要重视安全问题等

    在前面两代的基础上,第三代微内核蓬勃发展,许许多多微内核都被开发出来,主要代表有:seL4、Fiasco.OC、NOVA 等。

    本来第一代微内核的设计隔离了使内核安全性降低的系统服务,让系统服务漏洞不会影响内核,进而提高了内核安全性,可以说是关上了破坏系统的门, 但是第二代系统却又给攻击者开了个窗户。

    由于第二代微内核在内核中省去了关于安全性检查等步骤,把所有关于安全检查功能的实现都交给系统服务自己去实现,这导致系统服务的通信接口直接暴露给用户态,任何进程都可能无限制地请求系统服务,系统服务不得不花费额外的代价来区分请求是否合法,容易造成拒绝服务攻击。

    比如正常的文件服务应该是从虚拟文件系统服务->文件系统服务->磁盘驱动服务这个流程来完成的,但是如果攻击者如果绕过虚拟文件系统服务,直接无限制地请求攻击者本身没有权限访问的文件系统服务,使文件系统服务长期处于满载状态,让其他进程无法通过正常的虚拟文件系统得到文件系统服务。为了增强安全性,且不过分影响性能,人们开始研发第三代微内核。

    seL4 是在第二代内核 L4 的基础上发展而来的。seL4 不仅仅继承了 L4 内核家族的高性能特性,还具备基于端点(enndpoint)的 IPC 机制。

    这种 IPC 机制最大的特点是使用了能力空间的概念,进程在使用 IPC 请求系统服务时必须具备相对应的能力,进程持有不可伪造的令牌来表示拥有请求某种服务的能力。令牌可以被复制,可以被转移,还可以通过 IPC 进行传输。令牌其实是一个指向存在于内核空间内核对象的指针,所以普通进程并不能修改自身以及其他进程的权限分配,但是内核可以对令牌指定的权限进行控制,从而保证了用户态不能绕过能力空间这个机制对系统服务造成滥用。

    seL4 还是第一个完全通过形式化验证的内核,通俗说形式化验证就是在数学软件的帮助下使用数学语言自动化地推导检查系统的每一个运行状态。seL4 形式化验证相关论文。

    其他的微内核系统:Fuchsia、Minix

    Fuchsia 是 Google 开发的一款全新操作系统,试图覆盖手机、平板甚至笔记本等一系列领域。Google 为该系统配备了 Vulkan 图形接口、3D 桌面渲染 Scenic、Flutter 应用开发框架,还有一个称为 zircon 的微内核。

    zircon 内核是从高通平台的一个 Bootloader 项目:Little Kernel发展而来。zircon内核属于微内核设计,只提供 IPC、进程管理、地址空间管理功能。zircon 区别于以进程或者以文件为核心的设计,zircon 是以内存为核心来设计的,内存在 zircon 中是以对象的方式存在,可以通过 channel 通信机制传递虚拟内存对象(Virtual memory object)的句柄,进程拿到句柄后可以把这块内存映射到自己的空间。

    Minix 系统则由荷兰阿姆斯特丹的 Vrije 大学的 Andrew S.Tanenbaum 教授所开发。

    该系统最大的特点是可以故障隔离,自动重启失败的服务。

    Minix 使用分层设计,最底层的微内核提供中断处理、进程管理、进程通信等服务,这一层运行在内核态;中间层提供轮回服务(Reincarnation Server)、文件服务、进程管理、X 图形服务以及驱动等,这一层运行在用户态,最上层为用户进程。

    其中轮回服务负责在中间层的服务出现崩溃时重启这些服务,从而保证服务的自我修复。Minix 由于其自我修复特性被英特尔管理引擎(ME)所选用,该管理引擎主要负责管理英特尔芯片的内部模块。

     

    640?wx_fmt=png

    微内核的优缺点

     

    一、优点

    1. 系统服务模块化,可移植性高;

    2. 内核安全性提高(模块内部的 Bug 不影响内核稳定,将黑客利用软件漏洞造成的破坏限制在单个模块内部);

    3. 可以多套系统服务共存,相当于同时运行多种操作系统;

    4. 稳定统一的接口(可以独立维护私有驱动以及服务,不需要跟内核源码绑定);

    5. 在商业上,微内核可以避免代码受到一些开源协议的影响,比如 GPL 协议;

    6. 内核精简,可以进行形式化验证,利用数学证明内核的安全性;

    7. 数学可证明的实时性;

    8. 非常适合多处理器系统设计,在多处理器核心计算机上,互相依赖的系统服务可以同时运行;

    二、缺点

    1. 通过进程通信的方式交换数据或者调用系统服务,而不是使用系统调用,造成额外的操作系统开销;

    2. 使用一些频繁使用的系统服务时,比如网络收发数据,造成的进程上下文切换对操作系统来说也是一个负担;

    3. 由于系统服务高度模块化,系统服务之间存在大量的内存复制;

    4. 对互相之间存在复杂调用关系的系统服务,难以设计通信接口;

    5. 系统服务与内核在地址空间上分离,造成代码局部性差,降低了 cache 命中率。

    展开全文
  • 操作系统单体内核和微内核的区别

    千次阅读 2017-02-18 14:52:15
    单体内核:大内核,将OS的全部功能都做进内核中,包括调度、文件系统、网络、设备驱动器、存储管理。比如设备驱动管理、资源分配、进程间通信、...微内核微内核与单体内核不同,微内核只是将OS中最核心的功能加入内核


    单体内核:大内核,将OS的全部功能都做进内核中,包括调度、文件系统、网络、设备驱动器、存储管理。比如设备驱动管理、资源分配、进程间通信、进程间切换管理、文件系统、存储管理、网络等。单体内核是指在一大块代码中实际包含了所有操作系统功能,并作为一个单一进程运行,具有唯一地址空间。大部分UNIX(包括Linxu)系统都采用的单体内核。

    微内核:微内核与单体内核不同,微内核只是将OS中最核心的功能加入内核,包括IPC通信、地址空间分配和基本的调度,这些东西处在内核态运行。如:WINCE系统。

    而其他功能如设备驱动、文件系统、存储管理、网络等作为一个个处于用户态的进程而向外提供某种服务来实现,而且这些处于用户态的进程可以针对某些特定的应用和环境需求进行定制。有时,也称这些进程为服务器。

    展开全文
  • 浅谈微内核

    千次阅读 多人点赞 2018-10-30 10:13:21
    浅谈微内核 微内核是什么 谈到微内核,其实是与宏内核相比所称为微内核。...微内核,又称为微核心,是一种内核的设计架构,由一群数量最小化的软件程序组成,严格意义上的微内核仅仅实现操作系统最基础的机...

    浅谈微内核

    微内核是什么

    • 谈到微内核,其实是与宏内核相比所称为微内核。宏内核大家应该再熟悉不过了,也称为集成式核心、单体式核心。像Linux就是典型的宏内核,它除了时钟中断、进程创建与销毁、进程调度、进程间通信外,其他的文件系统、内存管理、输入输出、设备驱动管理都需要内核完成。微内核,又称为微核心,是一种内核的设计架构,由一群数量最小化的软件程序组成,严格意义上的微内核仅仅实现操作系统最基础的机制,包括底层地址空间管理线程管理进程间通信(IPC)
    • 微内核的设计理念是将系统服务的实现,与系统的基本操作规则区分开来。将核心功能模块化,划分成几个独立的进程,各自运行,这些进程被称为服务(service)。所有的服务进程,都运行在不同的地址空间。只有需要绝对特权的进程,才能在具特权的运行模式下运行,其余的进程则在用户空间运行。也就是说,它只完成内核不得不完成的功能,剩余的诸如文件系统、内存管理、设备驱动等的内容都被作为系统进程放到了用户态空间。
    • 简单的说,微内核就是一个皇帝,所有权利集中在他手上,但是,办具体的事情要找别人。
      宏内核像国务院之类的,组织机构很庞大,有好多人在管事。
    • 下图清晰的展示了宏内核和微内核的架构区别

    微内核的优缺点

    优点
    • 能够使得不同的API,文件系统,甚至不同的操作系统的特性在一个系统中共存。
    • 这种由微内核所决定的结构(IPC,多线程)能够应用在所有的应用程序和服务上。一个精炼的微内核接口能够有演绎成更多模块的系统结构。
    • 微内核这样的架构使得服务各自独立,减少系统之间的耦合度,易于实现与除错,也可增进可移植性。它可以避免单一组件失效,而造成整个系统崩溃,内核只需要重新启动这个组件,不致于影响其他服务器的功能,使系统稳定度增加。同时,操作系统也可以视需要,抽换或新增某些服务进程,使功能更有弹性。
    缺点
    • 微内核最大的问题就在于传输效率,微内核通过进程间通信来协调各个系统进程间的合作,这就需要系统调用,而系统调用需要切换堆栈以及保护进程现场,比较耗费时间;而宏内核都是通过简单的函数调用来完成各个部门之间的合作的,所以理论上宏内核效率要比微内核高。而这一问题其实主要受限于硬件的传输速率,在我看来,一旦硬件发展到了一定地步,能达到内核内外通信时间差异不大时,也就是微内核真正蓬勃发展的时刻。

    微内核效率问题的解决

    • 目前在硬件水平无法达到的情况下,解决这一问题就不得不提到一个为了妥协所做出的内核架构——混合内核,混合核心的基本设计理念,是以微内核架构来设计操作系统核心,但在实现上则采用宏内核的作法。它让一些微核结构运行在用户空间的代码运行在核心空间,这样让核心的运行效率更高些,例如包括Windows NT,Mac OS X等,为了追求性能,他们将需要具备特权的服务组件放进核心空间,即成为混合内核。

    微内核的发展历程

    • 微内核结构必然是多线程的,第一代微内核,在内核提供了较多的服务,因此被称为“胖微内核”,它的典型代表是Mach,Mach的开发是为了取代BSD的UNIX核心,所以是许多新的操作系统的设计基础。Mach的研究至今似乎是停止了,虽然有许多商业化操作系统,它既是 GNU HURD 也是Mac OS X的内核。Mac OS X与FreeBSD并未保留Mach首倡的微核心结构,除了Mac OS X继续提供微核心于内部处理通信以及应用程序直接控制。但一个很大的问题是Mach使用的是one-size-fits-all的通用机制,以牺牲性能为代价而获取可移植性,导致他的IPC设计非常复杂,有许多额外的IPC开销。
    • 微内核结构被意识到效能不佳后,研发者们想要更薄的IPC层,对性能更关注,设计与硬件特性相关的架构,能有利于性能改进。这时L3微内核问世了,相对于Mach的复杂的IPC系统,L3仅简单的传递消息,而没有任何额外的开销。L3也使用了各种硬件的特性来传递消息,让每个调用都最大化的利用硬件特性,如同寄存器一样,同样的系统中,Mach需要114毫秒来发送即使是最短的消息,而L3可以用少于10毫秒的时间来发送同样的消息。一次系统调用的时间比Unix所花费的一半还少,而Mach执行同样的系统调用需要5倍于Unix的时间。在意识到其他的Mach问题后,经过改进,最终形成了L4微内核。L4这个微内核系统由于其出色的性能和很小的体积而开始被计算机工业所认知。随后,系统在多个方向上有了高速的发展,值得提及的是一个更加独立于硬件平台的版本,被称为Pistachio,之后又被移植到了许多不同的硬件构架上。现在已经形成一个微内核家族,包括Pistachio,L4/MIPS,与Fiasco,可看出第二代微内核只提供最基本的OS服务,典型的OS还有QNX,QNX在黑莓手机BlackBerry 10系统中被采用,QNX是类Unix实时操作系统。
    • 其实对于现在来说,只有宏内核架构的区分度比较大,混合内核与微内核的界限已经不是很清晰了,毕竟我们不能一味的追求移植性和方便性,性能对于操作系统永远是第一位的,硬件的提升必将会带来真正纯粹高效的微内核。

    一些微内核(混合内核)架构的操作系统简介

    • MINIX 3:MINIX 3是一款免费的开源操作系统,可用于研究操作系统,作为研究项目的基础,或者用于微内核系统主导市场的商业(嵌入式)系统。该项目的大部分重点是通过容错和自我修复技术实现高可靠性。MINIX基于一个以内核模式运行的小型(大约12K行代码)微内核。操作系统的其余部分作为服务器进程的集合运行,每个服务器进程都受硬件MMU保护。这些进程包括虚拟文件系统,一个或多个实际文件系统,内存管理器,进程管理器,再生服务器和设备驱动程序,每个进程都作为单独的用户模式进程运行。这种设计的一个后果就是隔离了由于错误或攻击导致的系统故障。例如,由于错误或漏洞造成的音频驱动程序故障或接管可能会导致奇怪的声音,但不会导致完全接管操作系统。类似地,系统组件的崩溃在很多情况下可以在没有人为干预的情况下自动且透明地恢复。其他操作系统几乎没有像MINIX 3那样的自我修复功能之前新闻爆出每一个英特尔处理器内都有一个 minix 大管家,minix成为全球最流行的操作系统。
    • Fuchsia:Fuchsia是Google开发的操作系统,基于Zircon的微内核,Zircon受到Little Kernel的启发,用于嵌入式系统,主要使用C和C++编写,Fuchsia作为免费与开源软件分发,Zircon是纯粹的微内核。内核中主要的抽象只包括进程、虚拟内存和IPC机制。各种文件系统、设备驱动、服务都作为一个进程跑在用户态。 Zircon内核除了解决GPL污染的问题,它还有一些很吸引人的特性。Zircon是一个微型内核,灵活性非常高,不仅可以用于手机,还能用于嵌入式设备、桌面PC、平板电脑等多种平台之上。可以预计,Fuchsia并不会仅仅是某个平台专属系统,它应该会成为应用领域更胜于安卓的多面手。
    参考资料

    wiki
    知乎微内核
    Fushsia官网
    MINIX 3官网

    展开全文
  • 宏内核与微内核、Linux内核与Unix内核的区别

    万次阅读 多人点赞 2016-05-25 10:07:56
    操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下: 单内核:也称为宏内核。将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址...
  • 操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下: 单内核:也称为宏内核。将内核从整体上作为一个大过程实现,并同时运行在一个...
  • Unix sel4 微内核源码

    2020-07-18 23:30:41
    seL4是世界上最小的内核之一。但是seL4的性能可以与当今性能最好的微内核相比。 作为微内核,seL4为应用程序提供...seL4是高性能的L4微内核家族的新产物,它具有操作系统所必需的服务,如线程,IPC,虚拟内存,中断等。
  • 操作系统微内核技术起始于20世纪80年代,起初被设计用来解决传统一体化操作系统在可维护性、扩展性、可靠性和稳定性方面的诸多问题。 但是伴随着微内核思想的进一步发展,最终形成一整套操作系统设计的核心理念,即...
  • 操作系统微内核技术起始于20世纪80年代,起初被设计用来解决传统一体化操作系统在可维护性、拓展性、可靠性和稳定性方面的诸多问题。但是随着微内核思想的进一步发展,最终形成一套操作系统设计的核心理念。操作系统...
  • 微内核和单内核

    万次阅读 2012-09-04 10:46:17
     操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下:  微内核(Microkernelkernel)――在微内核中,大部分内核都作为单独的进程在特权状态...
  • 有关这个问题的回答形成了两种主要的体系结构:大内核和微内核。大内核系统将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信息,能有效...
  • 鸿蒙系统微内核是什么

    千次阅读 2019-08-27 23:15:50
    ​最近华为高调发布了鸿蒙操作系统(Harmony OS),基于微内核的全场景分布式系统,可以按需扩展,低延时,实现更广泛的系统安全。按照发布会的PPT来看,鸿蒙OS有三层架构,第一层是微内核,第二层是基础服务,第三层...
  • 微内核和宏内核对比

    千次阅读 2010-09-26 16:15:00
      微内核与宏内核比较 <br />内核按照体系结构分为两类:微内核(microkernel)与宏内核(macrokernel). 微内核系统有WindowNT,Minix,Mach,etc.宏内核的系统Unix,Linux,etc.通过比较Minix和Linux来...
  • 内核内核就是从整体上把内核作为一个大过程来实现,同时也运行在一个单独的地址空间上。...大多数的Unix系统都设计为单内核。Linux也是一个单内核,也就是说,Linux内核运行在单独的内核地址空间上...
  • 微内核与第二代微内核

    千次阅读 2009-07-10 09:33:00
    第一代微内核 微内核的概念是由Richard Rashid在卡内基梅隆(Carnegie-Mellon)大学开发Mach操作系统时提出的,目标是建立一个基于消息传送(message passing)机制的最小内核,以便在此基础上建造对其它操作系统的模拟...
  • 操作系统微内核技术起始于20世纪80年代,随着微内核思想的进一步发展完善,目前为止可以分为三代。 1.1 第一代微内核: 第一代微内核的主要代表是Mach,Mach以IPC是作为所有系统服务与内核交换数据的基础机制,充分...
  • 微内核:提供操作系统核心功能的内核的精简版本,它设计成在很小的内存空间内增加移植性,提供模块化设计,以使用户安装不同的接口与,如DOS、Workplace OS、Workplace Unix等。IBM、Microsoft等操作系统都采用了这...
  • Kubernetes: 微内核的分布式操作系统 沈凋墨 编程高手/游戏达人/AI砖家 ​关注他 77 人赞同了该文章 如今,Kubernetes已经成为分布式集群管理系统和公有云/私有云的事实标准。实际上,Kubernetes是一个分布式...
  • 1.什么是微内核? 微内核设计的基本思想是简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护。内核只提供最基础的服务,比如多进程调度、多进程通信(IPC)等。其中进程通信是...
1 2 3 4 5 ... 20
收藏数 12,878
精华内容 5,151
关键字:

unix系统微内核