ArceOS设计原则和思路
ArceOS要解决的问题
性能问题
传统宏内核架构和微内核架构的操作系统在性能上有一些可以优化的地方,但在具体实施上又很难做到。
- 如果OS信任APP,那么没有必要建立特权级隔离,这样可以减少特权级上下文切换和不同特权级间数据拷贝的性能开销。
- 如果支持单应用,那么多个地址空间在单个应用程序域中的用处不大,反而会带来性能开销。
- 如果支持功能有限的应用,那么与此无关的的内核功能模块也是没有必要的,这样可以减少内核的体积,减少内核启动时间。
- 传统操作系统通用性的设计会引入不必要的开销,如虚拟文件系统的通用表示对应网络应用引入了不必要的过长执行路径。
- 对应不同应用的需求可以采用不同的内核功能模块,如不同的内存分配算法/调度算法等,以提高整体性能。
安全问题
ArceOS采用了一系列的新技术来解决传统操作系统的安全问题。
- 采用Rust语言开发内核和应用
- 对于Rust应用,尽量避免采用unsafe code进行编码
- 对于C/C++应用,可以与OS一起整体隔离在一个虚拟机中执行
- 采用单应用的架构,避免了不同应用之间的相互干扰
生态问题
ArceOS在架构设计上,虽然目前的重点是基于unikernel架构,但也通过一系列的架构设计,支持宏内核和微内核架构
- 在现有unikernel架构上进行扩展,支持宏内核或微内核架构
- 通过支持Linux ABI,形成libc,支持Linux应用
- 通过支持Linux Syscall,直接支持Linux应用运行
- 通过支持Rust std库,直接支持Rust应用运行
开发问题
操作系统开发一直是一个比较困难的事情,我们看到的实际情况是操作系统(如Linux)随着时间的发展越来越庞大臃肿,难以维护和开发。我们认为将来的操作系统不是像现在统治世界的 Linux、Windows 那样庞大而通用,而是各种可以迅速组合形成的,并且功能丰富多彩的组件化定制操作系统,能够快速适配未来多种多样的处理器、加速器、外设和应用需求,在开发的便捷性、性能和安全性等方面优于已有的通用操作系统。但如何设计组件化定制操作系统是一个需要深入思考的挑战性问题。为此我们一直在思考能否通过基于泛型的独立功能组件来快速构建各种领域专用的OS。
我们认为开发操作系统的痛点是开发者编写操作系统软件很繁琐,需要关注的细节太多。其根本原因是操作系统内部模块广泛的相互依赖带来的软件复杂性,以及操作系统的自包含性带来的软件不可重用性。我们需要把操作系统看出是一个多层次的软件栈,分析操作系统中各个功能的层次划分,各个功能模块具有独立性,从而形成面向操作系统的层次化软件开发方法。
ArceOS的设计原则
我们希望操作系统开发者能够快速创建一个面向特定领域的操作系统内核,且对于每个应用程序,能确保最佳性能、高安全和高可靠的需求,同时能轻松移植现有的应用程序。为此,需要建立如下一些设计原则:
- 单体执行:应用与内核形成一个整体,运行在裸机或虚拟机上。
- 单地址空间:主要针对单个应用程序方案,不同的应用程序通过共享内存或网络通信交互。
- 单保护域:应用程序与内核运行在同一特权级,应用程序可以直接访问内核的数据结构和硬件资源。
- 与OS无关的内核功能组件:形成广泛的内核功能组件,可在没有OS的情况下独立运行和测试。
- 与硬件无关的内核功能组件:形成广泛的内核功能组件,可在不同的硬件平台上运行。
- 支持Linux ABI:支持Linux应用程序运行。
- 支持Rust std库:支持Rust应用程序运行。
- 架构可扩展:除了单体内核架构,也可扩展威微内核架构和宏内核架构。
简而言之,ArceOS是一个基于Rust语言的Unikernel,它的目标是为云计算平台提供一种高性能、高可靠、高安全、易开发的操作系统解决方案。ArceOS的设计思路是将操作系统的核心功能和应用程序紧密集成在一起,形成一个单一的可执行镜像,这个镜像包含了应用程序所需的所有功能组件,包括网络协议、文件系统和设备驱动等。而组成ArceOS的功能组件是可以独立存在的,并可以与其它功能组件组合,形成新的领域操作系统内核。