HelenOS
HelenOS
关于HELENOS
HelenOS是一种基于便携式微内核的多服务器操作系统,从头开始设计和实现。它将关键操作系统功能(如文件系统,网络,设备驱动程序和图形用户界面)分解为一系列细粒度的用户空间组件,这些组件通过消息传递相互交互。一个组件的故障或崩溃不会直接损害其他组件。因此,HelenOS具有灵活性,模块化,可扩展性,容错性和易于理解性。
HelenOS旨在与C11和C ++ 14标准兼容,但并不希望成为任何现有操作系统的克隆,并且与传统API交换兼容性以实现更清洁的设计。大多数HelenOS组件都是专门为HelenOS订购的,因此其基本部件可以不受适配层(adaptation layers),胶水代码(glue code),法兰组件(franken components)和由此产生的维护负担的影响。
HelenOS运行在八种不同的处理器架构和机器上,从嵌入式ARM设备和单板计算机到多核32位和64位台式机,再到64位Itanium和SPARC机架式服务器。
HelenOS是开源的免费软件。其源代码可在BSD许可下获得。某些第三方组件是根据GPL许可的。
常见问题
基本概念
什么是微内核?
在微内核操作系统中,诸如设备驱动程序,文件系统和网络之类的某些功能从内核空间移出到用户空间。从内核中取出的代码作为普通用户进程运行。微内核本身仅提供用户进程运行和通信所必需的最小功能。这与将大多数这些功能保留在内核中的传统单片操作系统形成鲜明对比。沿着微内核设计线构建操作系统的主要原理是通过将大多数操作系统策略强制进入用户空间部分并尽可能地使微内核自身免于策略而实现更大的可扩展性。这使得可以使用不同的操作系统个性,可能甚至并行,在同一个微内核之上,并且很容易改变在操作系统内核中硬编码的功能。请注意,多服务器微内核带来了有限容错的额外好处:单片操作系统的内核驱动程序中的错误通常会导致整个系统崩溃,而微内核操作系统的用户空间驱动程序中的错误则受到限制到驱动程序运行的用户进程。
什么是多服务器?
在微内核操作系统的范围内,多服务器将操作系统功能扩展到多个用户进程。请注意这与单服务器微内核的区别,后者将所有这些功能集中到单个用户进程中。将系统结构化为多服务器的动机是消除单服务器系统中单个服务器进程所代表的单点故障。多服务器系统的另一个优点是更小,更简单的组件,只能通过显式接口进行通信。较小和较简单的组件受益于关注点的分离,可以做一件事情,并且更容易推理。显式接口使组件可以互换,并且组件粒度级别上系统的正确性更容易推理。
基于微内核的系统本质上是否缓慢?
没有,但有一种内在的性能损失从数较高的基于微内核的系统的上下文和地址空间的开关而产生比单片操作系统。Literature 告诉我们,这个点球可以低至约6 %,如果系统实施得非常谨慎。应将惩罚视为我们使用这些系统获得的利益的代价。这类似于为使用高级编程语言的舒适而牺牲一点性能。
HelenOS将军的问题
什么是HelenOS?
HelenOS是一个从头开始编写的基于开源微内核的多服务器操作系统。它运行在几种不同的CPU架构上(IA-32,x86-64,SPARC V9,IA-64,PowerPC,ARM,MIPS)。HelenOS以便携性,模块化,简洁设计和编码风格而自豪。
HelenOS用于什么?
有些人仅仅将HelenOS作为一种业余爱好,有些人将其用作实现其职业目标的设备(即在操作系统研究中)。HELENOS也作为学校作业的 Operating Systems course 在 Faculty of Mathematics and Physics ,布拉格查尔斯大学,以及对学生的本科论文,硕士论文和团队的软件项目。
在这一点上,我们并不认为HelenOS可用于与开发和研究不同的东西,但是我们已经非常接近可以用于真正实用的东西的程度。
HelenOS发布了哪些许可证?
所有原始的HelenOS代码都包含在类似BSD的许可证中。GPLv2涵盖了一些特定的第三方组件。有关详细信息,请参阅此页面。
从最终用户的角度来看,它做了什么?
我们有一个命令行和一个简单的图形用户界面,允许您从磁盘和磁盘映像操作文件,运行应用程序和挂载文件系统。您可以播放俄罗斯方块或编辑文本文件。由于使用UCS(即Unicode),HelenOS支持多国文本。我们还有网络,因此您可以在HelenOS上运行简单的Web服务器或通过网络远程控制HelenOS。HelenOS也可以为你播放一些音乐。我们已经移植了一些第三方开发工具,其中包括GCC,binutils,Python和pcc。
您对HelenOS的目标是什么?
主要是三件事。一种是创建一个完全可用的操作系统(即一个可以用于至少一些日常任务的系统,例如用作路由器,服务器,PDA或桌面),第二个目标是能够在设计用于实际可用性的系统上试验操作系统设计和实现的新思想和方法。最后,但并非最不重要的是,开发HelenOS的目标是获得乐趣。
HelenOS开发是如何组织的?
HelenOS开发是由社区驱动的,由一个由长期开发人员组成的核心团队和一群松散的贡献者。所有开发人员和贡献者的主要沟通媒介是我们的开发邮件列表。由于大多数长期开发人员目前都在布拉格(或附近),我们每个月都会在布拉格举办一次开发者会议。分钟通常发布在邮件列表中。HelenOS社区的决策过程可以被描述为开放和寻求共识,但是精英。一段代码的权重超过千字,但代码必须精心设计,设计良好,实施良好且记录完备。
HelenOS源代码保存在哪里?
HELENOS源代码目前正在与管理的Git。鼓励开发人员举办自己的开发分支的GitHub通过克隆库https://github.com/HelenOS。
我想为HelenOS做出贡献。我应该从哪里开始?
我们的wiki上有几个页面可以帮助和指导任何潜在的贡献者。请仔细阅读我们的贡献者总结和我们(不仅仅是)学生的提示(这些提示真的不针对学生)以及这些页面上的链接。任何贡献的自然第一先决条件是您能够从源代码编译HelenOS并运行它。但请注意,从源代码编译HelenOS并不是随便尝试一下(您可以轻松运行预先构建的,受支持的HelenOS映像)。
如果您想通过向我们报告错误做出贡献,请阅读我们关于如何提交错误的说明。另外请考虑完成此常见问题解答,因为它可能解释了HelenOS的大局。
与其他系统的比较
HelenOS与UNIX有何不同?
请参阅我们的页面,其中介绍了HelenOS与类UNIX系统之间的一些设计差异。
HelenOS与GNU Hurd有什么不同?
GNU Hurd 重新实现了UNIX在马赫微内核之上的多服务器环境。从版本0.7开始,Hurd在单处理器ia32系统上运行。正在努力将amd64付诸实施。一些Hurd的组件,例如ext2fs
文件服务器的部分和pfinet
网络服务器实际上是从古老的Linux版本中清除的,而其他一些组件则是原创的。网络堆栈具有单进程架构。NIC和磁盘驱动程序也取自Linux,但在内核模式下作为Mach的一部分运行。有一些实验版的Hurd支持通过DDE兼容层在用户模式下运行Linux 2.6.x网络和磁盘驱动程序。赫德的硬件支持相当有限。从版本0.7开始,它不支持USB或声音。然而,实验性PoC通过臀部内核实现USB和声音。Hurd是一个多用户系统,并且非常重视以非特权用户可以使用计算机的方式构建它,而无需获得管理员对某些任务的特权(例如 使文件系统命名空间中的不受信任/实验文件系统可访问。赫德通过翻译机制为系统的动态配置提供了极大的灵活性。用户可以通过将IPC服务器与访问文件系统节点时调用的任意文件系统节点(即设置转换器)相关联来修改系统的行为。有两个GNU Hurd发行版:Debian GNU / Hurd和Arch Hurd。前者包括大约80%的Debian软件包,这些软件包的数量仍然非常可观。用户可以通过将IPC服务器与访问文件系统节点时调用的任意文件系统节点(即设置转换器)相关联来修改系统的行为。有两个GNU Hurd发行版:Debian GNU / Hurd和Arch Hurd。前者包括大约80%的Debian软件包,这些软件包的数量仍然非常可观。用户可以通过将IPC服务器与访问文件系统节点时调用的任意文件系统节点(即设置转换器)相关联来修改系统的行为。有两个GNU Hurd发行版:Debian GNU / Hurd和Arch Hurd。前者包括大约80%的Debian软件包,这些软件包的数量仍然非常可观。
另一方面,HelenOS是一个多服务器环境,不会重新实现任何遗留系统。它有自己的微内核称为SPARTAN。除了ia32,它还支持不同程度的amd64,arm32,ia64,mips32,ppc32和sparc64,其中一些在多处理器配置中。绝大多数HelenOS组件(如文件系统,网络堆栈,设备驱动程序和GUI)都是专门为HelenOS编写的,因此各种兼容层和粘合代码几乎没有引入任何膨胀,也没有任何额外的维护负担与维护相关老化的第三方组件。网络堆栈被分解为多个进程,每个进程实现堆栈的一部分,如IP,TCP或UDP。基本上所有HelenOS驱动程序都以用户模式运行,例外情况是用于调试目的的内核驱动程序以及计时器和中断控制器驱动程序。HelenOS支持USB和声音(Sound Blaster 16和Intel HDA)。HelenOS是一个单用户操作系统,尽管已经在多用户支持上完成了一些实验性工作。与翻译机制最接近的类比是在位置服务文件系统中公开服务。可以通过产生/杀死实现某些IPC协议的用户空间服务器以及将服务堆叠在彼此之上来动态地改变系统配置。HelenOS目前不支持很多用户应用程序,因为开发重点是子系统,框架和驱动程序。在HelenOS中运行一些标准开发工具(例如binutils,gcc,python和其他一些工具)存在非常有限的支持。
HelenOS与MINIX 3的不同之处是什么?
MINIX 3是带有自己的微内核和核心服务,和NetBSD的userland部分的多服务器系统。微内核不支持线程。从版本3.3.0开始,MINIX在单处理器ia32和arm32系统上运行。存在一些多处理器代码,但自3.1.x版以来一直未维护。MINIX 3带有两个备用网络堆栈。它自己的inet
服务器和lwip
基于lwIP网络堆栈的服务器。尽管lwIP包含对IPv6的一些实验性支持,但两个服务器都只是IPv4。对lwip
服务器的IPv6支持正在进行中。两者inet
和lwip
具有在一个过程中组合IP,UDP和TCP的单片架构。已经对使网络堆栈模块化进行了一些研究。文件系统和大多数设备驱动程序都是专门为MINIX开发的。从版本3.3.0开始,MINIX支持USB集线器,USB大容量存储和MUSB OTG控制器(在某些SoC上可以找到)。不支持标准USB主机控制器或USB人机接口设备。MINIX 3的开发版本使用在DDE兼容层内运行的Linux 2.6.29 USB驱动程序。MINIX 3的卖点一直是它的可靠性特性。MINIX 3包含复活服务,在某些情况下,可以重新启动崩溃或行为不当的服务。MINIX 3的开发版本支持正在运行的系统服务的实时更新。感谢NetBSD用户名,
为避免重复,请参阅上一个问题的答案。最重要的是,HelenOS内核实现了内核线程。HelenOS模块化网络堆栈支持IPv4和IPv6。HelenOS USB堆栈支持UHCI,OHCI,EHCI和XHCI。提供USB集线器,人机接口设备(又称鼠标和键盘)和大容量存储的驱动程序。HelenOS没有提供复活服务或实时更新。
HelenOS与Genode有何不同?
Genode是一个操作系统组件框架,可以在多服务器环境中轻松重用各种第三方组件(以及原始Genode组件)。它支持几种不同的微内核(甚至是单片内核,如Linux)与各种原始和包装的用户空间组件(例如由DDE层或臀部内核包装的外部设备驱动程序)的组合。用户空间组件的粒度是变化的,从细粒度到大块和单片。当然,并非所有组件的理论组合都在Genode中工作,并且功能集也可能不同。Genode使用递归系统结构,其中组件以树层次结构组织。父组件可以完全控制其子女,同时,为孩子们提供一部分自己的资源,比如RAM。Genode组件,尤其是根core
组件,通过要求他们提供的服务付款(就资源而言)来强制执行有效的资源核算。Genode组件可以使用特殊的资源交易协议来动态调整其资源消耗。
与此相比,HelenOS是单个便携式微内核和多平台用户空间的连贯组合,由细粒度组件为其设计和构建。我们强烈希望设计和实现我们自己的组件,以便从其他系统导入外部组件并将它们包装到膨胀的兼容性层中,尤其是在处理操作系统的关键核心组件时。HelenOS支持基本资源会计,但目前不像Genode那样精细。与Genode组件不同,HelenOS组件没有严格的层次结构,整个系统结构相当平坦。
HelenOS与L4Re有何不同?
L4Re是建立在Fiasco.OC微内核顶部的多服务器操作系统框架。内核基于功能,具有实时功能。自2017年10月发布r75以来,L4Re运行在amd64,arm32,arm64,ia32,mips32和mips64处理器架构上,支持SMP并专注于虚拟化。微内核上方运行一组用户空间组件,这些组件分为几类:本机L4Re组件(例如root和init任务,I / O管理器,驱动程序,GUI窗口管理器和虚拟机监视器)或半虚拟化VM(L4Linux
),或完全虚拟化的VM,或用于演示目的的第三方组件。运行时方案主要(但不是唯一)由init任务和I / O管理器根据一对Lua脚本静态设置。L4Re提供了一个POSIX接口,允许它使用相当多的贡献包。L4Re还使用本机和第三方设备驱动程序和服务器组件的混合。值得注意的是,后者在历史上由DDE框架启用,该框架导入了部分Linux 2.6.29,允许重用兼容的Linux设备驱动程序。最近,L4Re使用L4Linux
甚至完全虚拟化的VM作为设备驱动程序操作系统。L4Linux
也可以用作服务器组件。先前发布的版本包含组合Linux NIC驱动程序,DDE和lwIP网络堆栈的网络服务器的跟踪。然而,该组件已被禁用,并在发布r72时标记为已损坏。
相比之下,HelenOS支持一组略有不同的处理器架构,尽管一些实验大师论文的结果目前还没有参与虚拟化。它的内核不提供实时保证。HelenOS面向连接的IPC本质上是一种针对单一类型内核对象的粗粒度功能系统:异步IPC端点,在HelenOS中称为答案盒。HelenOS旨在提供一个由许多细粒度组件组成的连贯,动态,单用户和通用的系统。HelenOS几乎专门推出自己的原始驱动程序,框架,GUI,网络和文件系统。
工具链相关问题
为什么不使用Clang作为主编译器?
我们实际上支持Clang作为某些体系结构的替代编译器(例如ia32和amd64)。但Clang目前不支持HelenOS支持的所有CPU架构,因此我们默认使用GCC来构建HelenOS。
指南
- UsersGuide:HELENOS用户指南
- KnowledgeArticles:代替开发人员指南
- Doxygen文档:每日构建从源生成API文档的
请查阅相应的发行说明和我们的硬件支持页面,了解支持哪些硬件组合。有关如何使用不同图像类型的说明,请参阅我们的用户指南。HelenOS是使用开源/免费软件构建的,有关详细信息,请参阅我们的许可页面。
对于目前的来源,克隆正式HELENOS 库或浏览源代码在网上。还有每晚构建可供下载ci.helenos.org(见详情最新版本)。
================== End
HelenOS的更多相关文章
- Linux没有最小只有更小----迷你Linux版本大集合(转)
[自从去年到现在已经收集了上百种版本的Linux和Unix,至于Unix就不想说了,没有Linux的功底是很难驾驭Unix的,我在这里只把小于360M的Linux以及一些非Linux但是很像Linux ...
随机推荐
- 腾讯基于 Flink 的实时流计算平台演进之路
https://mp.weixin.qq.com/s/MGnG_Mpf6CUQWLJHvmWqLA
- 【转载】 第四范式首席科学家杨强:AlphaGo的弱点及迁移学习的应对(附视频)
原文地址: https://www.jiqizhixin.com/articles/2017-06-02-2 ============================================= ...
- SpringMVC源码分析--HandlerMappings
之前分析过SpringMVC中的DispatcherServlet,分析了SpringMVC处理请求的过程.但忽略了一些DispatcherServlet协助请求处理的组件,例如SpringMVC中的 ...
- Qt编写控件属性设计器9-数据库采集
一.前言 数据库作为数据源,在很多组态软件中使用非常多,指定数据库类型,填写好数据库连接信息,指定对应的数据库表和字段,采集间隔,程序按照采集间隔自动采集数据库数据,绑定到界面上的控件赋值显示即可.使 ...
- iOS的推送证书过期的处理
1.删除MAC上钥匙串访问中对应的推送证书.<根据过期日期看> 2.登录苹果开发者后台,revoke删除已过期推送证书(貌似会自己消失不用删除,具体记不清了...),然后为对应App ID ...
- iframe重定向让父页面跳转
情景描述 我们在使用一些后台程序的html模板(比如H-ui)的时候,这些html前端程序是iframe版的, 也就是说在使用的时候,每当我点击左侧导航栏的一个按钮,在右侧就会弹出一个菜单栏,在显示的 ...
- 【Leetcode_easy】1078. Occurrences After Bigram
problem 1078. Occurrences After Bigram 题意 solution: class Solution { public: vector<string> fi ...
- python 创建虚拟环境(virtualenv)
原文地址:https://www.jianshu.com/p/2645d8f2e690 另附连接:Linux环境下虚拟环境virtualenv安装和使用 virtualenv 安装 1.Install ...
- myeclipse安装activiti-designer
将压缩包中的features和plugins放到dropins下,然后重启myeclipse activiti-designer下载地址: 链接:https://pan.baidu.com/s/19u ...
- 【C/C++开发】运算符重载
c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁.高效.在c++中不止函数可以重载,运算符也可以重载.由于一般数据类型间的运算符没有重载的必要, ...