你好,这里是中国科学技术大学2024春季学期操作系统原理与设计(H)课程的大作业仓库之一!
我们的目标是用Rust重写FreeRTOS并使其支持MMU!
- 阎昶澍 - 组长
- 周翟恩和 - 组员
- 薄震宇 - 组员
- 郭东昊 - 组员
- 王劲博 - 组员
- Saint XK - 技术顾问
FreeRTOS(Free Real-Time Operating System)是一个开源的实时操作系统内核,专为嵌入式系统和实时应用设计。它提供了一套轻量级的多任务调度、内存管理、任务通信和同步机制等功能,适用于各种嵌入式平台和设备。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
为了兼顾跨平台性和可移植性,以及对嵌入式系统资源的高效利用,FreeRTOS 使用 C 语言编写。但是使用 C 语言编写的 FreeRTOS 也存在一些缺点:
- 内存管理复杂性: C 语言本身对内存管理需要程序员手动管理,包括动态内存分配和释放。在 FreeRTOS 中,需要开发人员自行管理任务堆栈、消息队列、内核对象等资源,容易出现内存泄漏、内存溢出等问题。
- 指针操作风险: C 语言中的指针操作是一种强大但也容易出错的特性。在 FreeRTOS 中,对指针的不正确使用可能导致数据错误、内存破坏等问题,需要开发人员具备丰富的 C 语言编程经验和技能。
- 安全性风险: C 语言在内存管理、指针操作等方面容易引入安全性风险,如缓冲区溢出、空指针引用等问题。这些问题在嵌入式系统中可能导致系统崩溃或安全漏洞,需要谨慎处理。
我们的目标是使用以兼顾高安全性与高效率著称的Rust语言来改写FreeRTOS的核心代码。
此外,作为世界上最流行的实时操作系统,为了追求轻量级和高效性能,FreeRTOS却并不支持MMU。因此我们在改写的同时令其支持MMU功能,以提供虚拟内存支持、内存保护与隔离、内存共享、动态内存管理、多进程支持,增强系统的安全性、稳定性和扩展性。
项目阶段 | 阶段时间 | 阶段简介/成果 | 分工安排 |
---|---|---|---|
选题阶段 | 2.27 - 3.11 | 讨论一系列方向包括但不限于用Rust重写Linux内核部分代码,优化WSL,优化安卓手机杀后台情况,优化Windows内存管理,但因方向不明确,任务量过大或是已经有前人做过均被否决,但是确定了Rust改写这一主题。最终向老师求助,确定了用Rust改写FreeRTOS并使其支持MMU这一项目。 | |
调研阶段 | 3.12 - 4.13 | 小组成员自行调研。4.1日小组成员讨论调研结果,初步完成调研报告,但较为粗糙。此后小组成员分工完善调研报告并完成可行性报告,具体分工见分工安排。 | 阎昶澍:负责可行性报告大部分内容 郭东昊:完善调研报告背景与结论部分 薄震宇:完善调研报告Rust部分及可行性报告技术依据和创新部分,整合调研报告 周翟恩和:完善调研报告及可行性报告MMU部分 王劲博:完善调研报告FreeRTOS部分 |
中期汇报 | 4.14 - 4.20 | 小组成员为中期汇报做准备,分工完成中期汇报PPT | 王劲博:FreeRTOS部分 薄震宇:Rust介绍及技术依据部分 郭东昊:Rust与C的相互调研 周翟恩和:MMU部分 王劲博,阎昶澍:整合 |
小组讨论 | 5.3 | 5月3日小组成员进行了长时间讨论,总结了前半学期的工作进展并对以后的工作做了初步安排,会上确定了以下几点内容: 1. 在QEMU上试运行FreeRTOS 小步快跑学习Rust 2. 增加会议次数,尽量一周一次 联系咨询去年的队伍成员如何在QEMU上运行FreeRTOS 3. 读FreeRTOS源码 4. 轮流维护github仓库 薄震宇 - 郭东昊 - 王劲博 - 周翟恩和 - 阎昶澍 5. 小组成员分工阅读知乎文章(https://zhuanlan.zhihu.com/p/491470061)并于下周会议汇报进展。 |
知乎文章阅读分工: 3-6:周翟恩和 7-12:王劲博 13-18:阎昶澍 19-23:薄震宇 郭东昊负责进一步学习rust和c的交叉编译 |
小组讨论 | 5.12 | 组员学习了FFI,bindgen等工具的使用,完成了Rust与C的交叉编译 | 接下来的计划:将Demo中的main改写为rust,并成功编译 |
小组讨论 | 5.14 | 组员认真学习了往年的相关实验并与学长取得联系,发现往年的实验还有许多问题需要解决: 1. 改写代码的测试问题:去年的实验只为改写的代码专门编写了测试程序,并没有把所有的代码整合到一起运行,这不是我们的目标。 2. 交叉编译与上板:我们发现上板时为no-std环境,不支持std库。 更为深入的研究之后,我们发现实验的难度比我们想象的要大,并不是只需要完成MMU的部分。 |
先研究Rust与C的交叉编译,并在QEMU模拟器上运行,然后再上板,最后解决MMU的问题。 |
改写与交叉编译 | 5.14-7.5 | 组员进行对FreeRTOS源码的改写并研究如何进行交叉编译以在QEMU模拟器上运行 | 阎昶澍:改写与交叉编译 薄震宇:改写 郭东昊:改写 周翟恩和:改写 |
期末汇报 | 7.5-7.14 | 组员制作期末汇报的PPT与总结报告 | 阎昶澍:参与完成交叉编译与上板部分 薄震宇:参与完成大纲,引言与Rust改写部分 郭东昊:参与完成大纲,引言与Rust改写部分 周翟恩和:参与完成引言,Rust改写与MMU部分 王劲博:参与完成MMU部分 |