谷歌取代安卓的操作系统迟迟未发布,一万行Rust代码,清华学生「山寨」了一个 您所在的位置:网站首页 历史读后感作文300字左右 谷歌取代安卓的操作系统迟迟未发布,一万行Rust代码,清华学生「山寨」了一个

谷歌取代安卓的操作系统迟迟未发布,一万行Rust代码,清华学生「山寨」了一个

#谷歌取代安卓的操作系统迟迟未发布,一万行Rust代码,清华学生「山寨」了一个| 来源: 网络整理| 查看: 265

机器之心报道

机器之心编辑部

谷歌新一代操作系统还在路上,清华先出了个「山寨」版。

在移动操作系统的市场中,Android 和 IOS 是最强势的两位主导者。

其实早在 2016 年,谷歌就已经开始开发一款名为 Fuchisia 的新操作系统。与 Android 不同,Fuchisia 并非基于 Linux 内核,而是基于 Zircon。据业内人士推测,该系统可能会成为 Android 的强大替代者。

按照原先的猜测,谷歌可能会在今年的 I/O 开发者大会上公布 Fuchsia OS 开发测试版。然而受到疫情影响,本年度 I/O 大会已经取消,Fuchisia 也没了音信。

但问题不大!开源文档在手,又何必苦苦等待官方发布呢?

在谷歌 I/O 大会倒计时 100 天左右的时候,来自清华大学的一个团队启动了一个神秘项目——尝试用 Rust 语言重新实现 Fuchsia 的微内核 Zircon。

经过 100 天的密集开发,他们赶在官方发布之前成功山寨了一个 Zircon 内核出来,目前能够正常运行 shell 等基础程序,总代码量仅为 1 万行左右。

这个「山寨」版的 Zircon 名为 zCore。zCore 继承并改进了 rCore 项目中使用 Rust 语言编写 OS 的实践经验,开发者希望将它定位为继 rCore 之后的下一代 Rust OS。

项目地址:https://github.com/rcore-os/zCore

根据作者介绍,该项目主要由清华大学计算机系的王润基等同学合作完成。他们在 Rust OS 方面的工作已经进行了两年,起初只是一个课程设计项目,后来被官方收购成了课改项目,之后又被作为毕业设计项目。

目前,该项目仍在由他们以及参加操作系统课程设计的同学们继续开发,下一步的目标是支持驱动程序,成为真正实用的系统。

zCore 背后的家族

在说 zCore 之前,有必要先了解一下它的族人「uCore」和「rCore」。

「ucore」是清华大学计算机系副教授陈瑜所写的操作系统,主要基于 MIT 的 Frans Kaashoek 等人在 2006 年写的操作系统 xv6 的设计,该操作系统也被称为「麻雀」,因为这个操作系统包含虚存管理、进程管理、处理器调度、同步互斥、进程间通信、文件系统等主要内核功能,总的内核代码量(C+asm)不会超过 5K 行,充分体现了「麻雀虽小,五脏俱全」的精神。

「rCore」是用 Rust 重新实现的 Linux 内核,诞生于 2018 年,目前已在清华计算机系的操作系统教学实验中试点应用。

zCore 算是 rCore 的晚辈,并和 rCore 有着「血缘关系」,事实上 zCore 并不是一个独立的 OS,在它的仓库里还藏着一个小 rCore,使用一段命令即可快速召唤 rCore。

这点的隐藏好处在于,基于 Zircon 提供的内核中最关键的内存管理和进程管理的功能,接下来只需在它基础上补充 Linux 作为宏内核的其它功能(例如文件系统),并对外提供 Linux 系统调用接口,即可重新构造出一个新的 rCore。

zCore 特性

总的来说,zCore 有以下几个特点:

第一个完全山寨的 Zircon 内核

使用 Rust 编写,实现精简,层级清晰

支持用户态开发、测试和运行

第一个在内核中使用 async 机制

至少从目前来看,zCore 是第一个完全山寨的 Zircon 内核,也是第一个用 Rust 语言重新实现的 Zircon 微内核。它运行在内核态,对外提供与 Zircon 完全相同的系统调用,因此能够运行原生的 Fuchsia 用户程序。

在 QEMU 中运行 zCore。

据项目作者介绍,zCore 还可以作为一个普通的用户进程运行在 Linux 或 macOS 的用户态。这种模式一般称为 LibOS 或 User-Mode OS,不需要安装 QEMU 模拟器,只需装上 Rust 官方工具链,就可以编译运行体验 zCore。

gitclone https://github.com/rcore-os/zCorecd zCore

gitlfs pull

cargorun --release -p zircon-loader prebuilt/zircon

这样一来,就实现了让开发者在用户态开发、用 gdb 配合 IDE 调试、用 cargo test 跑单元测试、统计测试覆盖率等功能,这些在之前的内核开发中都是做不到的。

zCore 的整体架构如下图所示。首先,为了让 zCore 能够同时运行在内核态和用户态,项目作者在最下面设计了一个硬件抽象层(HAL),将内核所依赖的底层操作封装起来,在裸机环境和 Linux/macOS 环境上分别提供不同的实现。

在 HAL 之上的核心是 zircon-object,也就是 Zircon 内核对象,这里面包含了所有内核机制的实现。

在对象层之上是系统调用层,它负责将内核对象的功能封装成 Zircon syscall ABI 暴露给用户进程。

再往上就是整个 OS 的顶层模块,它负责完成系统初始化和加载第一个用户进程的工作,并将所有模块组装到一起,生成一个可执行文件。

经过粗糙的统计,目前各个模块的代码量大致如下:

图源:知乎@王润基。

各个模块的代码量汇总以后,约为 12300 行(使用 loc 工具,仅统计 code),这也是该系统的「精简」所在——只用了 1w 多行就实现了两个 OS,并且还能在两种模式下跑。

作者提到,这一方面是因为 Zircon 微内核本身足够简单(相对地,用户程序就十分复杂了),另一方面是因为 Linux 那边也最大程度复用了 Zircon 内核对象的功能。「当然这里也有一点作弊,因为有些功能是作为外部依赖引入的,没有统计进来(比如 rCore 的文件系统部分)。」

作者表示,相比于 10 万行 C++写的官方 Zircon,zCore 只需要 1 万行 Rust 就实现了大部分核心功能。

当然,关于 Rust 语言的 unsafe 代码块问题,作者进行了必要的解释:「在 HAL 之上大约有 20 个 unsafe,其中大部分用在了两个对象之间互相取 Weak 引用的操作,剩下的也比较容易检验正确性。而 HAL 之下 unsafe 就比较多了,由于贴近底层硬件,几乎处处 unsafe,也就跟 C 没什么区别了。不过好在 HAL 代码还是比较少的,不过几百行而已。」

除此之外,zCore 也是首次在内核中引入 async 无栈协程机制。好处包括空间占用少、上下文切换开销更小、并发量和吞吐率更高,不过它的缺点在于协作式、不可抢占,可能会为系统的实时性带来挑战。关于二者之间的对比,还有待进一步的测试和分析。

「麻雀虽小,五脏俱全」

zCore 麻雀虽小,五脏俱全。目前已经能够在进入 shell 的基础上运行各种小程序。当然由于是微内核,Zircon 在进入 shell 之前已经走过了一段漫长的路程,从 userboot -> bootsvc -> component_manager → driver_manager,启动了各种服务进程,也用到了各种系统机制。

Zircon 一共有 160 多个系统调用,为了运行到 shell,开发者实现了其中的 65 个。

此外,Fuchsia 官方还提供了很多用户态测试程序,大大提高了测试和完善内核的效率。目前他们已经能够通过约一半的测试,剩下的还在逐步完善中。

zCore 测试状态表,更多内容可见 https://github.com/rcore-os/zCore/wiki/Status:-Core-tests。

参考链接:https://zhuanlan.zhihu.com/p/137733625



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有