微内核 性能 ipc linux,微内核(microkernel)有关-程序员宅基地

技术标签: 微内核 性能 ipc linux  

微内核(microkernel)相关

from : http://www.yandong.org/archives/191

介绍

WIKI上的解释是:在计算机科学中,微内核是一个近乎最小的软件集合,但具有能够提供实现操作系统所需的机制。

In computer science, a microkernel is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system (OS).   —wiki

微内核把硬件驱动,协议栈,以及文件系统等都放入用户空间,以保持较小的代码规模。微内核的代码一般在10000行一下,像Minix不足6000行代码,而高于20000行一般都归于monokernel。

本质上说,微内核可以被看作是对传统操作系统共性的进一步抽象,从某种意义上说可以被称作是“操作系统的操作系统”。

时代背景

开始的内核都很小,主要是因为电脑很小。随着电脑功能的增强和硬件的发展等因素,内核越来越大。BSD unix开启了大内核的时代。内核规模的增长使内核更容易出现bug,而且不方便管理。而微内核的出现正是为了解决这些问题。微内核发展与上世纪80年代。与之相对的是,宏内核(mono kernel)。虽然微内核在当时是一个非常惹得话题,应用领域之中,mono kernel占据这主导地位。

发展

第一代: Mach是最早的微内核系统,由卡内基梅隆大学发展的。它从1985年运行到1994年,到Mach 3.0版结束。Mach的研究到至今似乎是结束,虽然有许多商业化操作系统,如NEXTSTEP 与 OPENSTEP,特别是 Mac OS X都是使用Mach或其衍生系统。Mach的虚拟内存(VM)系统也被BSD的开发者用于CSRG,并出现在BSD衍生的系统中,如FreeBSD。

最为悲惨的遭遇是,Mac OSX与FreeBSD并未保留Mach首倡的微核心结构,除了Mac OSX继续提供微核心于内部处理通讯以及应用程式直接控制。更有些滑稽的是,在microkernel流行的时候,windows曾经把UI部分拿出kernel,可当microkernel之风过去了的时候,微软又把部分底层的UI放回了kernel。微软总是最后一个吃螃蟹的人,当它都尝试microkernel,足以说明microkernel是多么火热。可microkernel为什么又被冷落了呢?性能。

ps:卡内基梅隆大学位于痞子堡,是美国计算机科学重镇,排名前五。

ps:Mac OS X (使用XNU 核心)基于Mach3.0

ps:NEXTSTEP基于Mach2.0

第二代:L4可以看作是Mach的改进。由德国的 GMD 设计。GMD 是德国国家信息技术研究院,相当于中科院计算所加上软件所。

在九十年代后期,微内核迎来了其生命中的第二春。一些研究人员认真分析了微内核系统性能差的原因,指出其性能差并非根本内在的因素造成,而是设计实现的失误。为什么这么说呢?因为早起的微内核系统大多是由 Mono Kernel 一步步逐渐改进而来。其很多设计并未发生重大改变。他们虽然被称为微内核,但其代码量还是很大。例如,Mach 3 内核支持 140个系统调用,代码量为 300K 字节。为证明其论点,他们设计并实现了几个性能远超第一代的微内核操作系统,我们把它们称为第二代微内核系统]。其中的一个代表作品就是 L4。

第三代:seL4是一组基于微内核构架的操作系统内核,澳大利亚研究组织NICTA创造了一个新的L4版本,称为Secure Embedded L4(简写seL4),宣布在世界上率先开发出第一个形式化机器证明的(formal machine-checked proof)通用操作系统。

微内核的发展方向

微内核性能分析

理想情况下,内核中仅留下 Address SpaceSupport(地址空间支持),IPC (InterProcess Communication,进程间通讯),和Scheduling(调度),其他功能模块做为用户进程运行。其中IPC是极其重要的组成部分,因为模块间要是想通信的话,就的靠IPC了。IPC的性能直接决定微内核的性能。可不如人意的是,虽然IPC已经广泛应用,但其性能并不理想,从而成为微内核的性能瓶颈。

IPC的性能有多么差呢?我们来看看比较数据。微内核系统中 IPC 性能不断提高,但到 90 年代初似乎达到了顶峰。Mach 3 的 IPC 最好性能大约是 115 µs (在 486-DX 50 机器上),通常需要200 µs。对其它微内核系统也大致如此。当时许多研究人员认为,有 100 µs 左右的时间是 IPC 的固有消耗,这一时间已无法缩短。但是与之相比,在同样硬件平台上,一个 UNIX 系统调用只需要20 µs, 好过微内核系统 10 倍。

到了L4的时代,微内核的性能得到了很好的改善。L4 内核支持三种抽象概念:地址空间,线程,和 IPC。他只提供 7 个系统调用,只有 12K 字节代码。在 486-DX50 机器上,一个地址空间切换 IPC, 8 字节参数传递,只需要 5 µs。如果参数量为 512字节,只需要 18 µs。也就是说,L4的IPC比第一代微内核的IPC快20倍以上,甚至比传统操作系统的IPC还要快。

既然IPC的性能已经得到改善?那么微内核还面临什么问题呢?L4所做的改变只能使微内核在单服务器上的性能稍稍优于传统的系统。但是在多服务器上,和mono systems仍然木有可比性。为什么如此?说来话长,参见IPC机制吧。

GNU/Hurd

说起这,就要说说蛋疼而旷日持久的GNU工程。GNU 工程 创始于一九八四年,旨在开发一个完整 GNU 系统。GNU 自己的内核 Hurd 仍在开发中,离实用还有一定的距离。因此,现在的 GNU 通常使用 Linux 内核。这样的组合即为 GNU/Linux 操作系统。已经有上百万人在使用 GNU/Linux,但他们中的很多人把它误称为“Linux”。GNU Hurd的开发走过一段极其苦逼的历史,开始它基于由卡內基美隆大学的 Mach 3.0的,后来卡内基中止了Mach计划,于是自由软件基金会便转向犹他大学的Mach4,后来犹他也终止Mach计划,不甘心的自由软件基金会的人于是决定自己发展Mach,叫GNU/Mach。2002年推出GNU/Mach1.0,过了几年推出2.0,可不知什么原因2.0被放弃,重新回到1.X版本。再后来,Mach在业界的研究都被终止了,L4兴起,自由软件那帮可怜的娃不得不放弃之前近二十年的努力,将Hurd移植向L4。

所以说GNU Hurd 是一系列基于 GNU Mach 或者 L4 微内核的守护进程,这一套守护进程最终形成了 GNU 操作系统。之前GNU 计划从1990年开始开发 GNU Hurd,并且将它作为一个遵循 GPL 的自由软件发布。Hurd 的目标是从功能、安全性和稳定性上全面超越 Unix 内核,而同时又能保持对其的兼容性,为此 Hurd 遵守 POSIX 标准。

“HURD”是一个间接递归缩写,来自“HIRD of Unix Replacing Daemons”,其中“HIRD”表示“HURD of Interfaces Representing Depth”。

Hurd基于GNU Mach作微内核进行开发。这是由Richard Stallman做出的技术决定。更为滑稽的一段故事是,Stallman并不看好像linux等的monokernel,才作出使用microkernel的决定。而linux的创始人Linus Torvalds更是鄙视microkernel,认为microkernel注定是一个技术失败。而对于芸芸众生的我们,习惯了GNU/linux组合,用着linux的内核,使用着GNU的软件。

linux是否是微内核?

众多的linux是monokernel,如上面所提到的Linus Torvalds本人并不看好微内核。首先认为microkernel是一个技术失败,木有显示意义;再者,他认为没有必要为了microkernel而带来的一点蝇头小利而重写linux内核,不值得。

有哪些微内核?

上文提到的Mach, L4, seL4, hurd等

Exokernel和Rambler,都是第二代微内核

BeOS曾经是一款非常伟大的微内核操作系统,没能持续发展,被Palm收购以后寿终正寝了

ReactOS是一款企图兼容Windows的开源操作系统项目,不过进展十分缓慢,该项目已死

Minix3,学习现代操作系统技术真正的好教材!

QNX,看上去非常美好的实时+微内核。黑莓推出了一款平板PlayBook,就是使用QNX。它可能是最成功的微内核操作系统之一。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39631350/article/details/116630945

智能推荐

深入了解C语言(函数的参数传递和函数使用参数的方法) _c语言中prog03_06了解函数-程序员宅基地

文章浏览阅读1k次。 深入了解C语言(函数的参数传递和函数使用参数的方法) 深入了解C语言(函数的参数传递和函数使用参数的方法)tangl_99(原作) C语言生成的代码在执行效率上比其它高级语言都高.现在让我们来看看C语言生成的代码具体是什么样子的.当你看完本文对于C语言的了解一定会更深一步了. 本文通过一个个实际案例程序来讲解C语言. 研究案例一 工具: Turboc C v2.0,Debug_c语言中prog03_06了解函数

Android App开发-简单控件(4)——按钮触控和图像显示_通过按钮的点击事件控制图片的现实和隐藏-程序员宅基地

文章浏览阅读1.1k次,点赞18次,收藏14次。本节介绍了按钮控件的常见用法,包括:如何设置大小写属性与点击属性,如何响应按钮的点击事件和长按事件,如何禁用按钮又该如何启用按钮,等等。_通过按钮的点击事件控制图片的现实和隐藏

数据类型分类 转换、复杂类型(复合、引用、对象类型)、ypeof的返回值、运算符02_"ypeof callback == \"function\"如何写"-程序员宅基地

文章浏览阅读73次。day02 数据类型1.回顾什么叫js?基于对象和事件驱动的解释性脚本语言js的组成ECMAScript:JavaScript的标准DOM:Document Object Model 文档对象模型BOM:Browser Object Model 浏览器对象模型JavaScript和ECMAScript的关系?前者是后者的具体实现后者是前者的标准引入方式变量存储数据的容器声明变量:var 变量名var a; //undefined命名规则:1_"ypeof callback == \"function\"如何写"

FX3/CX3 JLINK 调试_ezusbsuite_qsg.pdf-程序员宅基地

文章浏览阅读2.1k次。FX3 JLINK调试是一个有些麻烦的事情,经常有些莫名其妙的问题。 设置参见 c:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\firmware 下的 EzUsbSuite_UG.pdf 文档。 常见问题: 1.装了多个版本的jlink,使用了未注册或不适当的版本 选择一个正确的版本。JLinkARM_V408l,JLinkA_ezusbsuite_qsg.pdf

用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放_qopengl如何鼠标控制旋转-程序员宅基地

文章浏览阅读2.6k次。** 本文仅通过用openGL+QT简单实现二进制stl文件读取显示并通过鼠标旋转缩放, 是比较入门的级别,由于个人能力有限,新手级别,所以未能施加光影灯光等操作, 未能让显示的stl文件更加真实。****效果图:**1. main.cpp```cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); _qopengl如何鼠标控制旋转

刘焕勇&王昊奋|ChatGPT对知识图谱的影响讨论实录-程序员宅基地

文章浏览阅读943次,点赞22次,收藏19次。以大规模预训练语言模型为基础的chatgpt成功出圈,在近几日已经给人工智能板块带来了多次涨停,这足够说明这一风口的到来。而作为曾经的风口“知识图谱”而言,如何找到其与chatgpt之间的区别,找好自身的定位显得尤为重要。形式化知识和参数化知识在表现形式上一直都是大家考虑的问题,两种技术都应该有自己的定位与价值所在。知识图谱构建往往是抽取式的,而且往往包含一系列知识冲突检测、消解过程,整个过程都能溯源。以这样的知识作为输入,能在相当程度上解决当前ChatGPT的事实谬误问题,并具有可解释性。

随便推点

类加载过程 与 代码的执行顺序_类加载后代码的执行顺序-程序员宅基地

文章浏览阅读5k次。https://www.cnblogs.com/ysocean/p/8194428.html 代码的执行顺序https://www.jianshu.com/p/3556a6cca7e5类加载过程_类加载后代码的执行顺序

Oracle LiveLabs实验:Introduction to Oracle Spatial Studio_oracle_spatial 可视化-程序员宅基地

文章浏览阅读601次。本实验介绍了适用于 Oracle Spatial Studio。他既可以在云上,也可以在本地作为Java应用部署。介绍详见这里。此实验申请地址在这里,时间为120分钟。此实验的帮助见这里。本实验使用的地图为OpenStreetMap,即免费的维基世界地图。此实验会自动创建一个ADW,需要通过OCI Console完成初始化配置,然后可以通过网页访问Spatial Studio简介在本次研讨会中,您将探索 Spatial Studio 用于自助式空间分析和可视化的功能。 使用交通事故、警察局和警察_oracle_spatial 可视化

UG\NX二次开发 改变Block UI界面的尺寸_ug二次开发 调整 对话框大小-程序员宅基地

文章浏览阅读1.3k次。改变Block UI界面的尺寸_ug二次开发 调整 对话框大小

基于深度学习的股票预测(完整版,有代码)_基于深度学习的股票操纵识别研究python代码-程序员宅基地

文章浏览阅读1.3w次,点赞18次,收藏291次。基于深度学习的股票预测数据获取数据转换LSTM模型搭建训练模型预测结果数据获取采用tushare的数据接口(不知道tushare的筒子们自行百度一下,简而言之其免费提供各类金融数据 , 助力智能投资与创新型投资。)python可以直接使用pip安装tushare!pip install tushareCollecting tushare Downloading https://files.pythonhosted.org/packages/17/76/dc6784a1c07ec040e74_基于深度学习的股票操纵识别研究python代码

中科网威工业级防火墙通过电力行业测评_电力行业防火墙有哪些-程序员宅基地

文章浏览阅读2k次。【IT168 厂商动态】 近日,北京中科网威(NETPOWER)工业级防火墙通过了中国电力工业电力设备及仪表质量检验测试中心(厂站自动化及远动)测试,并成为中国首家通过电力协议访问控制专业测评的工业级防火墙生产厂商。   北京中科网威(NETPOWER)工业级防火墙专为工业及恶劣环境下的网络安全需求而设计,它采用了非X86的高可靠嵌入式处理器并采用无风扇设计,整机功耗不到22W,具备极_电力行业防火墙有哪些

第十三周 ——项目二 “二叉树排序树中查找的路径”-程序员宅基地

文章浏览阅读206次。/*烟台大学计算机学院 作者:董玉祥 完成日期: 2017 12 3 问题描述:二叉树排序树中查找的路径 */#include #include #define MaxSize 100typedef int KeyType; //定义关键字类型typedef char InfoType;typedef struct node

推荐文章

热门文章

相关标签