没有合适的资源?快使用搜索试试~ 我知道了~
HelloX V186发布公告(20201024)1
需积分: 0 0 下载量 143 浏览量
2022-08-03
21:32:51
上传
评论
收藏 757KB PDF 举报
温馨提示
试读
13页
引入系统配置管理功能,不论是操作系统内核还是用户态应用程序,都可以把配置信息(或状态信息)写入内核维护的一个 JSON 文件中,下一次启动的时候可以直接读取。H
资源详情
资源评论
资源推荐
物联网操作系统 HelloX V1.86 发布公告
经过 HelloX 开发团队近一年的努力,在 HelloX V1.85 版本基础上,增加许多功能特
性,并对 V1.85 版本的一些特性进行了进一步优化之后,正式形成 HelloX V1.86 版
本。经相对充分的测试和验证之后,现正式发布。相关代码,已全部上载到 github 上
(github.com/hellox-project/HelloX_OS),欢迎对 HelloX 感兴趣的朋友下载测试和
试用,并进一步反馈问题。
V1.86 版本完成时间较长,主要原因是在过去的一年里,我从事的单位遭受各种外部压
力。这些压力传递到员工身上,导致工作量和压力倍增,业余时间大大压缩。大多数
时候都是晚上 10 点以后才下班,周末基本都要加班。即使在这样紧张的工作压力下,
HelloX 的开发也没有中断,一直持续。而且对代码的质量要求更高,因为通过过去一
年多的遭遇,使我认识到基础软件的重要和必要性。HelloX 属于基础软件,必须夯实
基础,做到最大程度的容错和外部适应。
HelloX V1.86 主要功能简介
除继续保持 V1.85 所有特性之外,V1.86 版本主要对下列特性进行了支持或优化:
1. 用户态功能得到加强。每一个应用程序,都可以为进程形式运行,有自己独立
的地址空间(32 位),可以在自己的地址空间内创建多个用户线程实现并发。
通过系统调用(system call)陷入内核,访问内核功能。不同进程之间的数据
和程序代码严格隔离,最大限度的保证系统整体安全性;
2. 实现相对完整的用户态代码库。引入基于 ptmalloc 开源代码的用户态堆内存管
理算法,引入 ANSI 标准的 C 语言标准库,用户只需要按照通用的开发方法即
可完成 HelloX 应用程序的开发,与开发 Windows、Linux 等操作系统应用没有
任何不同。V1.86 版本引入了开源的 CPUID 代码库,几乎在没有修改的情况下
编译成为一个用户态应用程序-cpuid.exe,可以在 HelloX 下查看 CPU 的各类
信息;
3. 内核保护机制进一步增强。用户态应用程序是不可信、不安全的,为了保护内
核的安全,在 V1.86 版本中引入了多种机制。最典型的就是 HANDLE 机制,即
任何一个操作系统对象,比如文件、信号量、事件、互斥体等,都是以
HANDLE 方式返回给用户态,而不是直接返回这些内核对象的内存地址。用户
态应用程序访问这些对象时,操作系统内核会根据 HANDLE 的值查询内部表
格,得到实际的内核对象。HANDLE 机制是任何成熟复杂的操作系统必须实现
的安全机制。另外一个安全机制就是用户态-内核态内存拷贝,在用户发起系统
调用时,传递到内核的是用户态内存。考虑到安全性,操作系统内核不会直接
访问用户态内存,而是分配一块对应大小的内核态内存作为交换区。这种方式
虽然效率上有影响,但却能够保证内核安全;
4. 实现完整的 BSD 风格的 socket 系统调用。可以在用户态调用 socket API 开发
网络类应用程序,在 V1.86 版本中,内置了一个用户态的 DHCP 服务器程序,
该程序通过 socket API 实现网络通信,为 DHCP 客户端分配 IP 地址。基于
socket API,后续除了一些对转发效率要求极严的网络功能(比如 IP 路由、以
太网交换、IP 报文深度解析分析等),大部分网络功能都可转移到用户态,大
大提升系统的伸缩性和安全;
5. 网络功能上,做了较大动作的优化。比如把 PPPoE 处理功能调度到一个单独的
CPU 核上,与 IP 路由所在的 CPU 核分离,整体提升了网络吞吐量。V1.86 版
本最新支持了 Intel 82574 服务器网卡,具备了运行在高性能服务器上的基
础。HelloX V1.86 的标准应用场景仍然是宽带路由器,作者重新定制了一款基
于 Intel ATOM CPU 的软路由器,该路由器有 4 到 8 个基于 82574 的千兆以太
网接口,整体具备大于 1G 的网络处理能力,并在家庭网络中正式使用。详细
信息请参考下面章节;
6. 引入系统配置管理功能,不论是操作系统内核还是用户态应用程序,都可以把
配置信息(或状态信息)写入内核维护的一个 JSON 文件中,下一次启动的时
候可以直接读取。HelloX V1.86 内核集成了业界开源的 cJSON 代码,并对其做
了多线程安全处理,作为系统配置管理功能的引擎;
7. 对原来版本的网络接口管理功能做了重构。在 V1.86 版本中,定义了一个新的
网络接口对象__GENERIC_NETIF,即通用网络接口。所有类型的网络接口,不
管是以太网、PPP 串行接口等物理接口,还是虚拟的隧道接口、VLAN 子接
口,都统一到通用网络接口对象上进行管理。这使得 HelloX 的网络功能更加一
致,对不同网络接口的支持也更加简便,只需要编写一个符合 generic netif 要
求的驱动程序,挂载到内核中即可,HelloX 的网络管理框架可自动对其进行管
理;
8. 增加了更加丰富和完整的调试与诊断手段,包括日志输出功能,异常情况下的
调试信息输出功能,以及内存申请跟踪等功能。当前的内核,已经很少出现异
常情况。万一出现异常,通过分析上述手段输出的信息,可以快速定位问题。
根据 github 的统计,HelloX V1.86 在原来基础上总共更新了 550 多个源代码文件,修
改或增加了大约 5 万行的源代码。V1.86 版本的总代码行大约为 20 万行(不包括用户
态的应用程序代码)。HelloX V1.86 内核编译后的二进制文件大小,大约在 550K 左
右。
HelloX V1.86 用户态功能介绍
用户态进程功能是 HelloX V1.85 版本新引入的功能,主要目的是为了对不同的应用程
序之间,以及应用程序、内核之间进行彻底的隔离,创造一个安全稳定的执行环境。
是否具备用户态功能,是区分通用操作系统和嵌入式操作系统的标志之一。在 HelloX
V1.86 版本中,用户态功能做了较大的增强。但用户态功能博大精深,需要考虑的因素
不比内核本身要少,因此在后续版本中,还会进一步完善和增强用户态功能。
大部分嵌入式的操作系统都不具备用户态功能,在嵌入式领域,包括操作系统内核,
应用程序,各种驱动程序,大多数情况都是一个解决方案厂商提供,不存在不信任的
应用程序或设备驱动。而且引入进程之后,频繁的进程间切换会降低系统整体性能,
因此权衡下来,嵌入式操作系统一般都不实现进程功能。
但是 HelloX 定位于物联网网关等复杂的应用场景,需要动态加载和执行第三方应用程
序。如果不做安全隔离,程序之间就可以直接访问对方数据,存在巨大安全隐患。同
时第三方应用质量无法保证,在没有地址空间隔离的情况下,一旦一个应用程序出问
题,很大概率会导致整个系统崩溃。因此权衡下来,HelloX 最终在 V1.85 版本中引入
用户态进程功能。
只是动态按需加载的第三方应用,才会以进程形式运行。HelloX 内核本身的功能,比
如 TCP/IP 协议栈,USB 驱动程序,文件系统,等等功能还是在内核中运行。因为我们
认为这些功能是可信任的,而且都是系统必须功能(一项功能缺失,即使操作系统内
核不受影响,也已经无法提供完整的功能),因此与内核分离意义不大。
HelloX V1.86 版本的用户态功能主要包含下列这些:
1. 地址空间独立和隔离。每个进程都有自己独立的线性地址空间,在 32 位 CPU 上是
4G 大小(包括内核空间)。不同进程之间的地址空间完全独立,相同的内存地
址,对不同的进程来说,完全代表不同的物理内存位置。进程的线性地址空间又进
一步分为内核空间和用户空间。其中用户空间范围为 1G 到 3G 之间(共 2G),用
户应用程序可以自由访问这部分内存空间,前提是明确提出内存分配请求之后。内
核空间被分为了两部分:0 到 1G 之间,以及 3G 到 4G 之间。内核空间被映射到每
一个进程中,应用程序代码无法直接访问,必须通过系统调用陷入内核态,才能访
问内核空间。但是内核却可以自由访问用户地址空间。基于安全考虑,HelloX
V1.86 版本的内核,也不会直接访问用户空间,而是经过一个内核交换区进行访
问;
2. 内存保护。运行在用户态的应用程序,只能访问 1G 到 3G 之间的用户空间,无法
直接访问内核空间。即使是用户空间,也必须通过一个系统调用(VirtualAlloc),
剩余12页未读,继续阅读
优游的鱼
- 粉丝: 71
- 资源: 316
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0