ZEVORN.blog

September 29, 2024

开源操作系统训练营 · 学习实录

LearningOS4.2 min to read

前言

从 2021 年开始,我一直从事体系架构模拟和动态二进制翻译工作,由于工作需要,我经常要调试各种操作系统,比如 Linux、VxWork、FreeRTOS 、RT-Thread、SylixOS、AcoreOS、ReWorks 等等,这让我对操作系统的原理和业务应用场景有了一个宏观的认识。随着嵌入式系统的复杂化和规模化(多系统的同步与交互),对于数字嵌入式系统的性能也提出了更高的要求。

在 2024 年上半年,我主导了一个(用于全系统模拟的)高性能 JIT 引擎的前期研发工作,在项目实施期间,也许是对于模拟器性能的敏感,让我对硬件虚拟化技术产生了很大的兴趣,我了解到,这属于操作系统内核的一部分(Type-2)。

前段时间,我学习虚拟化技术时,在幽兰本上用 C 语言实现了一个 200 行左右代码量的KVM 轻量虚拟机,并分享在了兰舍群聊,郭克老师看到以后,向我推荐了由清华大学陈渝教授和向勇老师发起的「开源操作系统训练营」。经过几天的了解,我被训练营课程和项目内容深深地吸引,遂决定报名参与,希望在“探索设计与构建新一代安全高性能操作系统”的训练营愿景中,也贡献一份绵薄之力。

PS:与陈渝教授的一点渊源:

2002 年冬天,一群操作系统爱好者在网络上讨论技术,想要在脱离硬件限制的情况下,学习和研究操作系统的原理。于是,他们提出用软件模拟硬件的想法,这其中就包括 SkyEye 的发起者——清华大学陈渝教授。

当时,国际上已经有类似的项目,如 uCLinux 组织开发的 ARMulator 模拟器,可以模拟 AT91 的开发板,支持 UClinux 在上面运行。基于 ARMulator 的设计框架和经验,陈渝教授等人在 2003 年正式发起了 SkyEye 开源项目,被国内外个人爱好者和高校大量使用。

我在 2022 年起,发起和组织了 SkyEye 开源项目的重新维护,目前开源在 Gitee 平台


本篇文章,用于记录训练营期间的学习情况和心得体会,按照日期的倒序排版。

第二阶段

日志(2024-10-14)

  1. 编写二阶段实验 2 的报告。

日志(2024-10-13)

  1. 完成二阶段实验 2 的编码任务,通过 CI/CD 测试;

日志(2024-10-10)

  1. 学习 rCore-Camp-Guide-2024A · 第四章:地址空间
  2. 来西安旅游,条件有限,在笔记本电脑上又重新搭了一遍实验环境,顺便解决了之前的一些小问题;

PS:之前实现过 ARM 全系列的非安全的几种 MMU 翻译格式的模拟,所以对 RISCV RV39 的 MMU 翻译格式理解起来还比较轻松。不过这部分内容比较多,需要再耐心看两天,再做题目。操作系统一旦开启 MMU 以后,地址发生虚实隔离,调试起来会困难一些,前期充分理解 rCore 的内存管理策略,对后面的实验有很大帮助。

日志(2024-10-09)

  1. 参加训练营课程;
  2. 完成第二阶段实验 1

PS: 完成第一题,Rust 方面用到了模板、结构体、关联函数、match 的知识,操作系统需要知道基本的汇编以及权限变化产生的影响,还有理解系统调用。第一阶段提前完成了,所以开始二阶段学习。

第一阶段

日志(2024-10-08)

  1. 用 Rust 编写了一个最小 JIT,学习 FFI 编程,trait;
  2. 学习 Rust 生命周期;
  3. 拉取第二阶段的仓库,基于 docker 搭建环境镜像,成功运行 ch1 分支。

PS:和做编译器的朋友交流了学习 Rust 的心得,得出一个很好的结论:”学习 Rust 最好的方式,就是把自己熟悉的业务用 Rust 重写一遍。“这给了我很大的启发,是不是也应该用 Rust 实现一个学习用途的 JIT ?和其他朋友简单沟通了一下,有了一个初步思路,或许可以做一个 x86 => RISC-V or ARM => RISC-V 的 JIT,丰富 RISC-V 的生态。

日志(2024-10-07)

  1. 参加 RustSBI 线上讲座,我提了一个关于 RustSBI 对虚拟化方面支持情况的问题。

日志(2024-10-04)

  1. 学习 Rust 的 struct 、enum、Option、match
  2. 学习 Rust 的 package、crate、module
  3. 学习 Rust 的 use

日志(2024-10-02)

  1. 参加训练营课程「Rust 语法入门」;
  2. 学习《Rust 圣经》中关于基础语法部分。

日志(2024-09-30)

  1. 复习 Rust 所有权;
  2. 搭建 Rust risc-v 交叉编译环境;
  3. 参加训练营课程「环境配置 + Rustlings 入门」。

PS:开营前一周,速通了一遍 rustling,主要是通过解决编译报错来快速推进,算是对 Rust 这门语言,有了一个初印象。接下来三周,反复咀嚼 Rust 的主要知识点,夯实基础。


训练营开营

2024 秋冬季开源操作系统训练营启动会 (2024-09-29),介绍了训练营的背景、目标、课程内容和规模。训练营得到全程实验室支持,覆盖 520 多所高校和240 多家公司,课程包括 Rust 基础语法、答疑和算法,操作系统实战项目,旨在培养对开源操作系统感兴趣的人才。

下面记录会议中我比较感兴趣的部分:

开幕致辞(陈渝)

最后,陈渝教授表示期待参与者们能够通过此次训练营获得知识、建立友谊并提升个人能力,并预告了接下来将有来自不同领域的专家进行更深入的分享。

vivo 自研操作系统在 Rust 上的探索(杨春)

总结,杨春的发言主要围绕 vivo 在操作系统研发上的努力,特别是采用 Rust 语言的决策及其在安全方面的优势,并强调了与学术界合作的重要性以及对未来人才发展的期望。

介绍 ArceOS 发展计划(石磊)

  1. 多模式支持:除了支持传统的单片式内核外,还支持虚拟化基础设施。
  2. 组件化设计:通过组件仓库和组合方式来构建不同模式的内核。
  3. 基于 Rust 语言:利用 Rust 语言在内存安全和并发安全方面的优势,并探索基于 Rust 开发内核的模式。
  1. 核心组件仓库:支持构造多种模式的内核。
  2. 扩展宏内核:与 Linux API 兼容,可运行 Linux 上的原生应用。
  3. 虚拟化:支持典型类型的虚拟化基础设施。

陈渝教授补充说明,这个项目最初是由清华大学的博士生在其博士课题期间发起的,现在已有许多师生参与其中进行扩展工作。该项目的特点是可以组合成具有不同架构和特性的定制化配置,这被认为是未来操作系统的发展方向之一。

关于会议更多内容,可访问:2024年秋冬季开源操作系统训练营开营仪式视频回放