在一个往届参赛内核上支持 busybox mv
本实验不需要其他前置知识。
实验准备
本实验使用 Starry
内核的 467c73f
commit 版本,它基于 Arceos
实现,获得了 2023 年全国大学生计算机系统能力大赛操作系统设计赛内核实现组的二等奖。
你可以 fork
这个代码仓库:https://github.com/Azure-stars/Starry
,然后在 467c73f
建立一个新分支:
git checkout 467c73f
git checkout -b lab3
随后就可以开始实验了。
不用害怕代码量太大,编者也不是完成这个内核的参赛队伍的成员,我们会带你以一个完全陌生的视角走进 Starry
,并在上面完成一个小功能。你也可以用本章的技巧去学习、改进往届比赛的其他内核。
实验概述
在比赛开发过程中,还有许多本教程中没有提及的难点,涉及许多课内未曾提及的规范和约束。通常来说,当你不知道如何实现一个新测例时,最简单的办法是看看之前参加操作系统比赛的同学是如何实现的。
“运行一个陌生的内核并读懂它的代码”并不是一个简单的任务,况且据大部分比赛内核是为了通过测例而设计的,只包含少量介绍其特性和内核架构的文档或开发日志。所以相较于有指导书和大量注释的 rCore-Tutorial
,阅读它们的代码要困难许多。在本章节中,我们将
- 简单介绍往届的操作系统比赛获奖内核,以及运行旧内核时的一些常见问题
- 以
Starry
为例,带大家了解如何运行、读懂、简单修改一个陌生的内核 - 介绍如何利用
strace
进行调试和对拍 - 尝试在
Starry
进行syscall
层面的调试,以添加一个新功能(而不需要阅读它的所有代码)
我们仍会在介绍的过程中提供一些关于 Starry
的信息,以便你了解它的实现。另外,实验中不仅在 Starry
目录下操作,偶尔也会让你在本机系统或者前两章实验的 rCore-Tutorial
下操作。当出现这样的情况时,我们会具体说明。
另外,比赛鼓励大家使用已有实现作为 baseline
,所以你不一定要把所有别人写过的功能都重新写一遍,也可以选择以现有内核为基础继续开发。事实上往届获奖内核中就有很多这样的例子。
更多关于 Starry
的文档
如果你有兴趣了解关于 Starry
的信息,可以看看它的设计文档