当前位置: 首页 > 科技观察

华为“鸿蒙”涉及的微内核到底是什么?本文为您介绍微内核

时间:2023-03-20 19:18:52 科技观察

据悉,华为鸿蒙系统的内核与安卓完全不同。安卓采用的是宏内核,而华为采用的是另一种全新架构的微内核。这个内核会让系统的应用程序独立运行,互不干扰,它的优势不仅限于此。而谷歌也有微内核的后起之秀GoogleFuchisa。那么,微内核到底是什么?下面就让我们一起认识一下微内核吧。背景&庞大的UNIX家族的计算机技术在二战后迅速发展,构成计算机的主要基本单元从电子管发展到分立晶体管,再到大规模集成电路。随着计算机技术的发展,计算机的性能越来越强大,硬件也越来越复杂。人们发现很难直接管理计算机,于是人们开始设计软件来管理越来越复杂的计算机系统。这些软件称为系统。级软件。从最初的批处理系统、多道程序系统、分时系统,到20世纪60年代通用操作系统的出现,计算机系统层出不穷。直到20世纪70年代,才出现了被大家广泛接受和使用的通用操作系统。其中最经典的当然是UNIX系统了。UNIX系统于1971年在著名的贝尔实验室的一台PDP-11/24机器上诞生,经过不断的发展和传播,在80年代取得了巨大的成功。UNIX被移植到很多处理器架构中,并在很多行业得到了广泛的应用,甚至成为了行业标准,影响至今。UNIX和Linux等类UNIX系统是典型的宏内核设计,即所有的系统服务都放在内核中,因为系统服务代码之间有大量的数据交换和大量的服务请求,并且在同一代码段内进行函数调用(C语言)或跳转(汇编或机器码时代)是最直接高效的方法,而且在同一地址空间进行数据交换也很方便,所以这样的宏内核设计是很自然的.但是随着UNIX内核功能的扩展(文件系统、TCP/IP网络协议栈、进程管理、内存管理、驱动程序等),UNIX内核代码也相应增加了很多,进而在可维护性、稳定性、安全面临一些挑战。为了试图解决这些挑战,人们开始尝试使用微内核的思想来设计系统内核。什么是微内核微内核设计的基本思想是简化内核功能,在内核之外以用户态实现尽可能多的系统服务,同时加入相互的安全保护。内核只提供最基本的服务,如多进程调度、多进程通信(IPC)等。其中,进程通信作为连接应用程序和用户态系统服务的桥梁。下图是宏内核和微内核的对比示意图:与宏内核系统相关的服务基本都放在内核态内核中,比如文件系统、设备驱动、虚拟内存管理、网络协议栈等.;而微内核则把更多的系统服务(比如文件系统、POSIX服务、网络协议栈甚至外围驱动)放在用户态应用中,一个一个形成服务,等待其他应用的请求。后来为了宏内核和微内核扬长避短,开发了中间混合内核,一些服务也会放在内核中。微内核的发展历史微内核的概念自提出以来,不断发展、完善和完善,至今可分为三代。第一代微内核:从无到有第一代微内核的主要代表是Mach,由卡内基梅隆大学的AvieTevanian和RichardRashid开发。在最初设计Mach的时候,UNIX的发展如火如荼,所以Mach的设计目标之一就是兼容UNIX,但与UNIX不同的是,Mach尝试使用微内核架构来设计。Mach以IPC作为所有系统服务与内核交换数据的基本机制,充分利用IPC、虚拟内存、多进程等特性,将冗余的系统服务移出内核,作为进程运行。1986年,经过两年的发展,也就是Mach第一个版本发布后的第二年,Mach发布了第二个版本。但是由于时间紧迫,人手资金不足,Mach内核并没有提供Full系统服务。为了支持系统上层的运行,该版本的内核包含了大量的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在微内核的小小尝试,很快引起了大批公司和组织的关注。开放软件基金会(OSF)宣布下一代系统OSF/1将基于Mach的内核,NeXTSTEP也将使用Mach2。5.甚至IBM也打算使用Mach构建WorkplaceOS。苹果也在这个时候出手了,苹果自此基于Mach2.5构建了自己的操作系统内核XNU。XNU的组成如下图所示。Mach是内核的内环,外环右侧是Apple的驱动框架(I/OKit),外环左侧是提供UNIX兼容服务的BSD系统服务代码层,三者共同为上层提供完整的系统服务。XNU广泛应用于Apple的OSX、IOS等系统。此时,由于UNIX系统广泛使用所带来的商业利益,BSD系统开发商与UNIX的拥有者AT&T此时陷入了一场官司,所使用的BSD相关代码马赫有法律风险。提高性能的期望和规避法律风险的需要正在推动Mach3.0的发展。Mach3.0的发展目标主要是取代BSD系统服务,同时将尽可能多的系统服务放在内核之外运行,成为名副其实的微内核设计。经过众多开发者3年的努力,1990年发布了Mach3.0,但由于系统服务之间完全使用IPC通信,而不是像宏内核那样直接调用函数,即使运行在多线程上也会出现性能损失。处理器机严重的是,Mach3.0损失了高达UNIX67%的运行效率,这导致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被哈曼国际收购;2010年哈曼国际被黑莓收购,QNX成为黑莓的资产)。QNX主要为交通、能源、医疗、航天等高可靠性领域提供解决方案。第三代微内核:关注安全问题。第三代微内核在前两代的基础上蓬勃发展,发展出很多微内核。主要代表有:seL4、Fiasco.OC、NOVA等。本来,第一代微内核的设计将降低内核安全性的系统服务隔离开来,使得系统服务漏洞不会影响到内核,从而提高了内核的安全性。可以说它关上了破坏系统的大门,但二代系统却为攻击者打开了一扇窗;因为二代微内核在内核中省略了安全检查的步骤,所有安全检查的实现都交给了系统服务自己,这就导致系统服务和系统的通信接口直接暴露给用户态,并且任何进程都可以不受限制地请求系统服务,而系统服务要花费额外的代价来区分请求是否合法,容易造成拒绝服务攻击。例如正常的文件服务应该是从虚拟文件系统服务->文件系统服务->磁盘驱动服务的过程完成的,但是如果攻击者绕过虚拟文件系统服务,直接无限制地请求攻击者访问的文件系统service使文件系统服务长期处于满负荷状态,使其他进程无法通过正常的虚拟文件系统获取文件系统服务。为了在不过度影响性能的情况下增强安全性,人们开始开发第三代微内核。seL4是在第二代内核L4的基础上发展起来的。seL4不仅继承了L4核心家族的高性能特性,还具有基于端点的IPC机制。这种IPC机制最大的特点就是使用了能力空间的概念。当一个进程使用IPC请求系统服务时,它必须具备相应的能力。进程持有一个不可伪造的令牌,表明它有能力请求某项服务。通证可以通过IPC进行复制、转移、转移。token实际上是一个指向内核对象的指针,存在于内核空间,所以普通进程不能修改自己和其他进程的权限分配,但是内核可以控制token指定的权限,从而保证用户态不能bypasstheabilitySpace是一种滥用系统服务的机制。seL4也是第一个完全通过形式化验证的内核。通俗地说,形式化验证就是借助数学软件,用数学语言自动推导和检验系统的每一个运行状态。seL4形式验证相关论文。其他微内核系统:Fuchsia、MinixFuchsia是谷歌开发的全新操作系统,试图覆盖手机、平板甚至笔记本等一系列领域。谷歌为该系统配备了Vulkan图形界面、3D桌面渲染Scenic、Flutter应用程序开发框架和一个名为zircon的微内核。zircon内核是从高通平台的一个Bootloader项目:LittleKernel开发而来。zircon内核是微内核设计,只提供IPC、进程管理、地址空间管理功能。Zircon不同于流程或基于文件的设计。Zircon以内存为核心设计。记忆以物体的形式存在于锆石中。虚拟内存对象(Virtualmemoryobject)的句柄可以通过通道通信机制传递,进程拿到句柄后,就可以将这块内存映射到自己的空间。Minix系统是由荷兰阿姆斯特丹自由大学的AndrewS.Tanenbaum教授开发的。该系统最大的特点是可以隔离故障,自动重启失败的服务。Minix使用分层设计。微内核底层提供中断处理、进程管理、进程通信等服务。该层运行在内核态;中间层提供轮回服务(ReincarnationServer)、文件服务、进程管理和X图形服务。以及驱动等,这一层运行在用户态;顶层是用户进程。其中,轮回服务负责在中间层服务崩溃时重启服务,以保证服务的自愈。Minix因其自我修复特性而被英特尔的管理引擎(ME)选择,该引擎管理英特尔芯片的内部块。微内核的优缺点优点系统服务模块化,可移植性强;提高内核安全性(模块内部的bug不影响内核稳定性,黑客利用软件漏洞造成的损害仅限于单个模块);多套系统服务可以共存,相当于同时运行多个操作系统;稳定统一的接口(私有驱动和服务可独立维护,无需绑定内核源码);在业务上,微内核可以防止代码受到一些开源协议的影响,比如GPL协议;内核精简,可以正式测试,内核的安全性可以用数学证明;可以证明数学的实时性能;它非常适合多处理器系统设计。在多处理器核心计算机上,相互依赖的系统服务可以同时运行;缺点是通过进程通信而不是使用系统调用来交换数据或调用系统服务,导致额外的操作系统开销;在使用一些经常使用的系统服务时,比如通过网络发送和接收数据,操作系统带来的进程上下文切换也是一种负担;由于系统服务模块化程度高,系统服务之间存在大量内存重复;系统服务之间调用关系复杂,通信接口设计困难;系统服务和内核在地址空间上是分开的,这导致代码局部性差,降低了缓存命中率。