资讯专栏INFORMATION COLUMN

物联网操作系统HelloX V1.88版功能描述

Yi_Zhi_Yu / 1681人阅读

摘要:用户态功能得到加强。与之对应的是另一种操作系统体系架构微内核,在微内核架构下,即使是操作系统内核功能,比如文件系统网络协议栈设备驱动程序等,也是以进程形式实现,每个功能是一个独立的进程,占用独立的地址空间。

经过HelloX开发团队近一年的努力,在HelloX V1.86版本基础上,增加许多功能特性,并对V1.86版本的一些特性进行了进一步优化之后,正式形成HelloX V1.88版本。经相对充分的测试和验证之后,现正式发布。相关代码,已全部上载到github上(github.com/hellox-project/HelloX_OS),欢迎对HelloX感兴趣的朋友下载测试和试用,并进一步反馈问题。

V1.88版本完成时间较长,主要原因是在过去的一年里,我从事的单位持续遭受各种外部压力。这些压力传递到员工身上,导致工作量和压力倍增,业余时间大大压缩。大多数时候都是晚上10点以后才下班,周末基本都要加班。即使在这样紧张的工作压力下,HelloX的开发也没有中断,一直持续。而且对代码的质量要求更高,因为通过过去一年多的遭遇,使我认识到基础软件的重要和必要性。HelloX属于基础软件,必须夯实基础,做到最大程度的容错和外部适应。

    1. V1.88主要功能简介

除继续保持V1.86所有特性之外,V1.88版本主要对下列特性进行了支持或优化:

  1. 高性能存储访问支持。HelloX现有版本已经支持相对完善的文件系统,比如FAT,NTFS(read only),裸文件系统等等。但文件I/O的性能还跟不上要求,当前文件I/O的吞吐量大约在20M BPS上下,而且对磁盘的访问是通过调用BIOS服务完成的,涉及到CPU模式的切换,大大影响整体效率。在V1.88版本中,HelloX实现了一个完整的基于IDE/AHCI接口的硬盘驱动程序,同时完整优化了FAT文件系统,系统的文件I/O吞吐率能够达到200M以上。这样HelloX就具备了做网络NAS、文件服务器等的能力。
  2. 用户态功能得到加强。每一个应用程序,都可以为进程形式运行,有自己独立的地址空间(32位),可以在自己的地址空间内创建多个用户线程实现并发。通过系统调用(system call)陷入内核,访问内核功能。不同进程之间的数据和程序代码严格隔离,最大限度的保证系统整体安全性。在V1.88版本中增加的TFTP Server功能,就是在用户态实现的一个应用程序,可以按需加载和运行;
  3. 实现相对完整的用户态代码库。引入基于ptmalloc开源代码的用户态堆内存管理算法,引入ANSI标准的C语言标准库,用户只需要按照通用的开发方法即可完成HelloX应用程序的开发,与开发Windows、Linux等操作系统应用没有任何不同。V1.88版本引入了开源的CPUID代码库,几乎在没有修改的情况下编译成为一个用户态应用程序-cpuid.exe,可以在HelloX下查看CPU的各类信息;
  4. 实现完整的BSD风格的socket系统调用。可以在用户态调用socket API开发网络类应用程序,在V1.88版本中,通过socket API函数,实现了两个功能:TFTP服务器和telnet服务器。支持TFTP协议的客户端,可以与运行HelloX操作系统的服务器,通过TFTP协议传输文件。比如HelloX产生的日志文件,通过TFTP client可以下载到个人PC上,进行分析。在个人PC上安装一个标准的telnet client软件,即可以telnet到hellox上进行远程操作,与通过串口线、键盘等操作手段完全一致。基于TFTP和Telnet,可实现对hellox的远程管理维护,大大方便了管理操作;
  5. 增加了更加丰富和完整的调试与诊断手段,实现了完善的日志输出功能。内核模块会产生日志信息,这些日志信息会被一个多带带的内核线程收集,并统一写入到日志文件中(syslog/logfile.txt)。如果出现系统崩溃,可以下载日志文件进行故障诊断。因为系统中有一个独立的内核线程负责收集和写日志,日志信息首先被发送到日志线程进行缓存,在合适的时机才真正写入文件系统,因此不论系统的上下文是什么(中断,系统调用,…),都可以调用__LOG函数来形成日志。

根据github的统计,HelloX V1.88在原来基础上总共更新了130多个源代码文件,修改或增加了大约3万行的源代码。V1.88版本的总代码行大约为20万行(不包括用户态的应用程序代码)。HelloX V1.88内核编译后的二进制文件大小,大约在565K左右。

    1. V1.88用户态功能介绍

用户态进程功能是HelloX V1.85版本新引入的功能,主要目的是为了对不同的应用程序之间,以及应用程序、内核之间进行彻底的隔离,创造一个安全稳定的执行环境。是否具备用户态功能,是区分通用操作系统和嵌入式操作系统的标志之一。在HelloX V1.88版本中,用户态功能做了较大的增强。但用户态功能博大精深,需要考虑的因素不比内核本身要少,因此在后续版本中,还会进一步完善和增强用户态功能。

大部分嵌入式的操作系统都不具备用户态功能,在嵌入式领域,包括操作系统内核,应用程序,各种驱动程序,大多数情况都是一个解决方案厂商提供,不存在不信任的应用程序或设备驱动。而且引入进程之后,频繁的进程间切换会降低系统整体性能,因此权衡下来,嵌入式操作系统一般都不实现用户态功能。

但是HelloX定位于物联网网关等复杂的应用场景,需要动态加载和执行第三方应用程序。如果不做安全隔离,程序之间就可以直接访问对方数据,存在巨大安全隐患。同时第三方应用质量无法保证,在没有地址空间隔离的情况下,一旦一个应用程序出问题,很大概率会导致整个系统崩溃。因此权衡下来,HelloX最终在V1.85版本中引入用户态进程功能。

只是动态按需加载的第三方应用,才会以进程形式运行。HelloX内核本身的功能,比如TCP/IP协议栈,网卡驱动程序,USB驱动程序,文件系统,等等功能还是在内核中运行。因为我们认为这些功能是可信任的,而且都是系统必须功能(一项功能缺失,即使操作系统内核不受影响,也已经无法提供完整的功能),因此与内核分离意义不大,这就是典型的“宏内核”体系架构。与之对应的是另一种操作系统体系架构:微内核,在微内核架构下,即使是操作系统内核功能,比如文件系统、网络协议栈、设备驱动程序等,也是以进程形式实现,每个功能是一个独立的进程,占用独立的地址空间。这种实现方式可进一步确保内核的安全,但是由于进程间通信(IPC)的低效率问题,会使得系统性能大打折扣。当然,现在有很多技术手段,来提升微内核架构下系统的整体性能,但是站在工程角度,笔者还是建议整体上用宏内核来实现操作系统。但是可以充分吸收微内核的一些优点,来改进宏内核架构。比如在HelloX的实现中,把TCP/IP协议栈、日志管理、以太网管理等等作为独立线程(运行于内核态)实现,这样可使得模块之间更加独立,由于不涉及用户态上下文切换,IPC性能得以保证,总体上呈现出一种“宏内核+微内核”结合的优势。

HelloX V1.88版本的用户态功能主要包含下列这些:

  1. 地址空间独立和隔离。每个进程都有自己独立的线性地址空间,在32位CPU上是4G大小(包括内核空间)。不同进程之间的地址空间完全独立,相同的内存地址,对不同的进程来说,完全代表不同的物理内存位置。进程的线性地址空间又进一步分为内核空间和用户空间。其中用户空间范围为1G到3G之间(共2G),用户应用程序可以自由访问这部分内存空间,前提是明确提出内存分配请求之后。内核空间被分为了两部分:0到1G之间,以及3G到4G之间。内核空间被映射到每一个进程中,应用程序代码无法直接访问,必须通过系统调用陷入内核态,才能访问内核空间。但是内核却可以自由访问用户地址空间。基于安全考虑,HelloX V1.86版本的内核,也不会直接访问用户空间,而是经过一个内核交换区进行访问;
  2. 内存保护。运行在用户态的应用程序,只能访问1G到3G之间的用户空间,无法直接访问内核空间。即使是用户空间,也必须通过一个系统调用(VirtualAlloc),预先分配之后才能访问,否则仍然会引发异常。不同进程之间的用户空间则是完全隔离的,无法相互看到。但是HelloX内核也提供一个叫做VirtualMap的系统调用,可以把一块公共的内存同时映射到两个进程中,实现高效的进程间数据共享;
  3. 应用程序动态加载。当前HelloX可以从外部存储介质上动态加载PE格式的可执行文件,并创建一个进程运行它。在加载PE格式的应用程序时,HelloX会做一番详尽的格式检查,对于任何有疑问的应用程序,都会拒绝执行。一旦通过HelloX的检查,一个新的进程就会被创建,并启动运行。需要说明的是,从外部介质中加载应用程序,并对其进行检查和运行,是在用户态完成的。HelloX实现了一个叫做user agent的模块,专门加载外部应用。内核做尽可能少的工作,把尽可能多的工作放在用户态完成。Loadapp是HelloX提供的一个加载和运行用户态应用程序的工具,在shell界面上,输入loadapp+应用程序路径名,即可加载并运行;
  4. 系统调用功能。系统调用功能是必须实现的,在实现了用户态进程的前提下。用户态的代码无法直接访问内核,必须通过系统调用来进入内核态,才能请求内核服务。系统调用利用了CPU的硬件机制,通过一个固定且统一的接口,进入内核态。在执行具体的内核代码之前,系统调用的内核态部分代码会对调用参数做详细的检查,确保这个请求是合法的。比如,对于用户指定的内存地址,必须位于用户空间内,且必须已分配。如果检查失败,则系统调用会失败,同时进程会被认为有恶意行为而强制终止掉;
  5. 内核对象的隐藏。在HelloX的内核代码中,都是通过内核对象的指针来访问内核对象的。比如等待一个互斥体(Mutex)对象,传递给WaitForThisObject函数的参数,就是Mutex对象的指针。但是让用户态也通过指针访问内核对象,则是非常危险的。虽然用户态不能直接通过指针访问内核对象,但是应用程序可以假造内核对象指针,来发起系统调用。这时候系统内核很难检查这个指针是否是非法的,如果贸然去操作,很可能因为这个内核对象不存在而导致非法操作。这就是大多数操作系统,包括HelloX,都是以handle(句柄)的方式来访问内核对象的。每创建一个内核对象,HelloX内核会在进程的句柄表里增加一项,并把该项的索引值返回给用户态。用户态通过这个索引值(句柄)来发起系统调用。收到用户态的系统调用请求之后,内核会首先根据这个索引值查询句柄表,看看是否有对应的内核对象存在。如果没有,说明是一个非法的系统调用。如果有对应的内核对象,则进一步检查内核对象的状态,类型,等等。确认无误之后才会真正操作内核对象;
  6. 用户态应用开发库。除了提供最基本的系统调用外,一个完整的操作系统还必须提供用户态的应用开发库,比如C语言标准库。C标准库对操作系统提供的API做了封装,以标准化的函数对外呈现。这样在开发用户态应用程序时,程序员只需要调用C标准库的函数即可,无需调用操作系统的API,使得应用程序可移植性大大增强。HelloX V1.86支持ANSI C89版本的标准库函数,使用ANSI C89版本开发的应用程序,可以不做修改直接移植到HelloX。在1.86版本中,我们移植了很多C语言程序,其中比较典型的有CPU管理程序cpuid等;
  7. 用户态内存管理器。实现C标准库函数并不仅仅是对操作系统API的封装,更复杂的是实现用户态的系统功能。比如对用户态内存管理(即标准C库函数的malloc/free/calloc等函数),不能直接映射到操作系统提供的API的,因为操作系统提供的内存分配API往往是大颗粒的(4K以上),而用户应用程序所需要的大多数是一些小粒度的内存请求。这就需要在用户态提供内存再分配功能,即从操作系统“批发”内存,然后细分成更小的内存块,再“零售”给用户应用程序。这个用户态的内存管理程序并不比操作系统内核的内存管理功能简单,要充分考虑并发效率、竞争、内存使用效率等等问题。业界有很多的开源算法,HelloX V1.86版本移植了业界广泛使用的ptmallc内存管理库,并做了线程安全处理,作为用户态内存分配器。

支持用户态功能,是HelloX由嵌入式操作系统向通用操作系统转变的标志。作为计算机领域的最基本软件,支持丰富的应用场景是操作系统得以长期存在的基础。具备高性能、实时性、高可靠的通用操作系统,必然会比嵌入式操作系统更能适应外部需求,也更容易把场景做丰富。通用操作系统与嵌入式操作系统并不是非此即彼、相互排斥的,而是可以有机统一起来。影响通用操作系统性能的传统机制,比如内存交换、延迟页面调入等,随着计算机内存的不断增大,已经变得不是很重要。把这些功能拿掉,保留用户态功能,同时对调度机制、加载机制、中断响应等做出优化,是可以有效统一嵌入式操作系统和通用操作系统的。HelloX后续版本将超这个方向发展。

与以前版本的原则一致,在HelloX V1.88版本的开发过程中,我们始终坚持“稳定可靠,不留问题死角,可直接应用”为原则,所有代码都经过了详细深入的内部测试。

    1. V1.88网络功能简介

网络功能一直是HelloX操作系统的最重要功能。相比前一个版本,HelloX V1.88的网络功能进一步增强,比如增加了对Intel服务器网卡82547的支持,把DHCP Server功能迁移到了用户态,对不同网络线程进行了多核重分配,设计并实现了统一的网络接口管理框架,等等。

在原来专门定制的软路由器black box基础上,又升级了一款新的软路由器“blue-white”,因为这款路由器的前面板有蓝、白两色。最新升级的路由器,可以支持4到8个千兆以太网接口(原来只有两个接口),可以通过console接口(RS232)进行配置,下图是它前面板:

所有千兆以太网接口是对等的,可以通过配置,作为WAN接口(连接运营商)或者LAN接口(连接本地交换机,或者WLAN AP)。通过串口(console接口)进行配置管理,个人电脑可以通过类似超级终端的软件,来控制blue-white,如上图。

由于大多数的WiFi芯片都不开源,因此blue-white当前并不提供WLAN AP功能。需要外接一个二层AP设备,提供WLAN信号接入。该软路由的总体成本在600元人民币左右,如果批量定制,成本还可以进一步降低。但是与基于SoC的家用路由器相比,虽然没有功耗和成本优势,但其计算能力,则是传统家用路由器无法比拟的,这也是它作为物联网网关的重要优势。

最近刚好搬了新家,就以blue-white为核心,设计了一个家庭网络,并实际投入使用。整个网络的构造如下手绘图:

运营商提供的光猫工作在二层桥接模式,blue-white作为整个家庭网络的核心网关,发起到运营商网络的pppoe连接,并为下游设备(比如IP电视、两个WLAN AP等)分配IP地址。家里用的家电、电脑、PAD、手机等等,都通过WLAN AP接入。其中IP电视多带带通过一条物理网线接入blue-white,这样可以把持续大流量的电视机,与突发网络流量的其它终端设备隔离开,不至于相互影响。下列是blue-white的一个运行截图:

CPUID作为用户态应用程序,加载并运行后可以显示完整的CPU信息。

截止目前,blue-white已运行一月有余,表现稳定。在长期外出出差的情况下,可以整体切断弱电开关,节约电量。在返回家中时,直接打开电源即可,无需做任何重新配置。在连接运营商的PPPOE session中断的情况下,也可以重新拨号建立连接。经过实际网络速度测试,下行速率在230M左右(受运营商接入带宽限制),CPU峰值利用率不超过50%。

在自己生活的环境中真正应用起HelloX,并根据实际需求持续进行开发和优化,与“只开发、不使用”,或者“只使用、不开发”,感觉是完全不一样的。

在使用过程中,随着越来越多的物联网设备接入到HelloX网关,我个人越来越体会到物联网操作系统的真实和价值,越来越感受到物联网网关的重要性。设想一下,物联网网关可以看到所有物联网设备的通信模式,包括报文的平均长度,发送间隔,带宽,时间分布,MAC地址,通信协议类型,等等信息。通过这些信息,即使不对IP报文做深度分析(这样做是不符合法律规定的),也可以通过大数据或者AI技术识别出设备类型和设备能力,从而有目的的与物联网设备进行协同。单个物联网网关,是一个本地网络的控制中心,而所有的物联网网关组成的大的网络,则是整个世界的控制中心。HelloX将聚焦物联网网关方向,做深入的技术耕耘,为人类建立安全,可靠,智能的物联网数字中心。

    1. 操作系统与其它操作系统的区别

HelloX操作系统是包括内核、设备驱动程序、用户态应用程序、物联网套件等一系列功能的一个系统软件,这与当前流行的主要操作系统都有不同之处:

LinuxLinux主要定位是操作系统内核以及基本的管理维护工具,其定位是通用操作系统的内核,可以应用在物联网领域,但是并未针对物联网领域做特殊优化和定制。HelloX既包括操作系统内核,也包括面向物联网的套件,针对物联网做了定制,是面向物联网领域的专业操作系统;

Android这是面向智能手机的操作系统,Android并没有实现操作系统内核,而是直接使用了Linux作为内核,在此基础上开发了支持智能手机的配套功能和组件。HelloX的思路与Android有类似之处,都是面向某一个应用场景,针对场景做了深入开发。但与Android不同,HelloX本身实现了内核功能,没有引用其它内核;

鸿蒙(Harmony):与Android类似,是面向智能移动终端的操作系统,也是基于Linux内核,针对智能移动终端场景做了深入开发,实现了诸如软件总线等技术,方便不同类型的移动终端随时随地的交互和协同。HelloX是面向物联网领域的操作系统,具备完全自主开发的内核和物联网执行环境,用于支撑万物互联。鸿蒙操作系统设计了内核抽象层,可以对不同的内核进行封装和抽象,因此,理论上,可以把HelloX作为鸿蒙的内核之一;

欧拉:面向信息基础设施的操作系统,比如服务器、云计算、网络设备、工业设备等,从其定位和描述来看,更多的是定位于后端专业应用场景。欧拉也是基于Linux内核进行开发和完善,与行业合作伙伴一起建设信息基础设施的最核心软件部件。

总结起来,就是HelloX操作系统包括了内核、支撑模块、物联网执行子系统等一系列组件,有完全自主知识产权的内核,遵循BSD开源协议。并不是说使用Linux内核就不是真正的操作系统,但作为最核心部件,具备自主内核有很大好处:可以选择不开源,做到进一步的安全;可以对内核进行任意修改,而不用考虑开源协议的约束;可以自主规划内核发展路径,有最大自主权…。但是开发一个全新的内核,也有巨大挑战,必须要有广泛的应用场景、庞大的用户基数,对内核进行广泛测试,确保其稳定性和可靠性。

    1. 进一步的开发方向

作为物联网操作系统,HelloX将始终聚焦物联网领域的应用,为物联网量身定制一套最优的系统软件解决方案。我们认为,只有一个内核的支撑,是远远不够的。物联网和智能硬件的有效发展和壮大,需要更多技术的支持,比如人工智能,分布式计算,机器学习,等等。但一个稳定可靠和可扩展的物联网操作系统,是这些技术的最好生存土壤。

同时我们认为,物联网中的一个关键组件将会是物联网接入网关。不论是哪种应用场景,物联网网关将是物联网世界连接用户或者真实世界的最核心角色。随着5G等技术向工业领域深入推进,以及工业制造领域越来越快的数字化转型,对物联网网关的需求会越来越多。因此,后续HelloX会首先瞄准这一个物联网应用场景,进行深入耕耘。物联网网关首先是一个更安全和高效的宽带接入网关,同时具备支撑物联网应用的能力。下图示意了我们对物联网网关的理解:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/122276.html

相关文章

  • 2021爱智先行者-EdgerOS开箱及配置(IOS

    摘要:为广大开发者提供基于互联网技术栈的操作系统平台,极大简化了物联网开发难度,提高开发效率。边缘计算借助硬件的计算能力,为家庭和企业提供强大的边缘计算能力,不仅能够满足物联网时代家庭生活和企业计算的多种需求,还能够降低用户设备和网络的成本。 EdgerOs介绍 EdgerOS 是为万物互联时代而...

    王岩威 评论0 收藏0
  • 常见联网操作系统介绍

    摘要:相比之下,物联网操作系统领域的碎片化问题则非常严重,并没有哪几个操作系统占据绝对优势,正处于百花齐放百家争鸣的阶段。在年被公司正式收购,将自己的服务内嵌到系统中,并于年推出了集成无线连接安全等功能的物联网操作系统。 物联网操作系统是运行在物联网设备上的提供物物相连能力的操作系统,其核心在于...

    AdolphLWQ 评论0 收藏0
  • UCloud重磅发布UIoT-Core联网平台,助力海量IoT设备云端智能

    摘要:微软雅黑宋体在高性能方面,物联网平台采用了分布式集群架构设计,可支持海量设备的长连接和百万并发数据交换,提供设备与云端间健壮的双向通信链路。物联设备爆发增长,5G网络即将商用,IPv6逐渐普及,计算成本下降,以及大数据分析和人工智能技术的快速发展,这些不断涌现的技术浪潮,正在推动我们更快地进入万物智联时代。 近日,UCloud优刻得重磅发布了第一款物联网平台产品UIoT-Core,该平...

    youkede 评论0 收藏0
  • 一步步搭建联网系统——无处不在的三剑客

    摘要:无处不在的三剑客这时我们终于了解了我们的三剑客,他们也就这么可以结合到一起了,是这一切的基础。无处不在的三剑客就这样到了这里,写得似乎很多也很少,但是还是没有做出来一个东西,于是我们朝着这样一个方向前进。 无处不在的三剑客 这时我们终于了解了我们的三剑客,他们也就这么可以结合到一起了,HTML+Javascript+CSS是这一切的基础。而我们用到的其他语言如PHP、Python、R...

    dreamans 评论0 收藏0
  • JavaScript在联网中的应用

    摘要:定律在那篇最流行的编程语言能做什么里,我们列举了在不同领域的使用情况,今天让我们来详解一下在物联网中的应用。这个硬件层决定了物联网应用比应用更加复杂。这时,我开始关注实现物联网应用的可能性。 凡是能用JavaScript写出来的,最终都会用JavaScript写出来。 —— Atwood定律 在那篇《最流行的编程语言JavaScript能做什么?》里,我们列举了JavaScript在不...

    aaron 评论0 收藏0

发表评论

0条评论

Yi_Zhi_Yu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<