0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是微内核_微内核的发展历史

h1654155282.3538 来源:陈翠 2019-08-14 17:20 次阅读

什么是微内核?

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

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

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

微内核的发展历史

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

第一代微内核:从无到有

第一代微内核的主要代表是Mach,该系统由美国卡耐基梅隆大学的AvieTevanian和RichardRashid主导开发。在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中常常用到。

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

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

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

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

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

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

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

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

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

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

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

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

在前面两代的基础上,第三代微内核蓬勃发展,许许多多微内核都被开发出来,主要代表有: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项目:LittleKernel发展而来。zircon内核属于微内核设计,只提供IPC、进程管理、地址空间管理功能。zircon区别于以进程或者以文件为核心的设计,zircon是以内存为核心来设计的,内存在zircon中是以对象的方式存在,可以通过channel通信机制传递虚拟内存对象(Virtualmemoryobject)的句柄,进程拿到句柄后可以把这块内存映射到自己的空间。

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微内核架构
    +关注

    关注

    0

    文章

    5

    浏览量

    6522
  • 微内核
    +关注

    关注

    0

    文章

    54

    浏览量

    13380
收藏 人收藏

    评论

    相关推荐

    RTOS发展历史

    RTOS发展历史  从1981年Ready System发展了世界上第1个商业嵌入式实时内核(VRTX32),到今天已经有近20年的历史。2
    发表于 08-15 11:32

    RTOS的实时内核内核解析

    使得CPU的利用更为有效。 需要指出的是,实时内核并不等于实时操作系统,实时内核只是实时操作系统的一部分。 内核是整个操作系统的基础,实时内核同样是实时操作系统的基础,目前很多实时
    发表于 02-19 06:36

    [HarmonyOS][鸿蒙专栏开篇]快速入门OpenHarmony的LiteOS内核

    。 `Huawei LiteOS`内核在`OpenHarmony`源码中所处的位置:3、LiteOS的目录介绍我们以`Cortex-A`系列处理器内核为例:[kernel_liteos_a](https://openharmo
    发表于 09-14 19:40

    内核什么时候发布?内核有何优势?

    想了解下内核什么时候发布的?内核有何优势?
    发表于 10-10 10:09

    HarmonyOS学习之十:HarmonyOS内核技术

    模块化,系统服务之间存在大量的内存复制; 对互相之间存在复杂调用关系的系统服务,难以设计通信接口; 系统服务与内核在地址空间上分离,造成代码局部性差,降低了 cache 命中率。二、内核
    发表于 11-30 13:55

    灵动ARM Cortex内核测试向量生成技术介绍

    灵动微电子基于arm Cortex-M系列内核开发的MM32 MCU产品拥有F/L/SPIN/W/P五大系列,200多个型号规格,累计交付近亿颗MCU,在本土通用32位MCU公司中位居前列。灵动
    发表于 12-15 07:00

    什么是内核

    什么是内核内核发展历史
    发表于 03-07 06:36

    RT-Thread Smart 内核最小系统移植教程 相关资料推荐

    RT-Thread内核最小系统移植全教程,值得学习一下。
    发表于 07-01 08:29

    内核结构的特点

    56.4.1课堂重点6.4.2测试与作业1单选(2分)以下哪个不是内核结构的特点A.文件与网络服务和内核一样,都运行在核心B.支持分布式系统C.更好的可移植性D.更好的可伸缩性正确
    发表于 10-27 06:09

    内核 uC/OS-II 该怎样去移植呢

    uC/OS-II内核结构是如何构成的?内核 uC/OS-II 中的任务到底是什么呢?内核 uC/OS-II 该怎样去移植呢?
    发表于 10-29 07:21

    Linux内核与MCU内核有哪些差异

    MCU的内核,如ucos-ii在编译的时候已经确认了所有的Task的代码段,堆栈段,常量端等等而且这些端都是直接和物理地址绑定,这里可以称之为编译物理地址绑定这样就会产生一个问题,如:我先开发一个
    发表于 11-03 08:17

    windows内核的相关资料推荐

    Linux 是宏内核或者单内核,windows是内核,最大的区别是所有的内核功能都被整体编译在一起,形成一个单独的
    发表于 12-16 07:52

    内核与大内核的相关资料下载

    内核与大内核是操作系统设计中的两种不同的思想,这与 CPU 的设计中 RISC 和 CISC 构架类似。其中,内核的思想是,把尽量少的操
    发表于 12-20 07:11

    嵌入式系统的发展历史

    目录1.1概述1.1.1 嵌入式系统的定义1.1.2嵌入式系统的发展历史1.1.3嵌入式系统的发展的新变化1.2嵌入式系统的组成1.3ARM处理器1.3.1ARM处理器介绍1.3.2ARM体系结构
    发表于 12-22 06:39

    内核与宏内核的比较与分析

    混合内核实质上也是微内核,而外内核是一种比较极端的设计方法,目前还处于研究阶段,所以我们就着重讨论宏内核与微内核两种
    发表于 03-17 16:05 11次下载
    微<b class='flag-5'>内核</b>与宏<b class='flag-5'>内核</b>的比较与分析