此次训练营需要依照提供的os代码框架,完成一些练习,主要是补全函数的实现,整体难度并不大。比较困难的点,一是实验环境的配置,对git,qemu,makefile,cargo等工具的陌生,很容易导致无法理解工作环境。例如实验要拷贝的仓库并不是按照官方仓库的readme里的git clone https://github.com/LearningOS/rCore-Tutorial-Code-2023A.git
,而是自己的作业仓库,ci-user这个测试文件夹应与os文件夹平级;二是刚上手代码框架时容易迷失在繁多的文件和文件夹里;三是部分代码比较晦涩,比如涉及到trap的部分,而这些对于理解整个操作系统是至关重要的。
练习中的几个实验只要求实现基本的功能,只要熟悉框架代码就很容易写出来,部分更困难的部分并没有作为必做的练习,比如实现写时复制、缺页异常等等。某些关键细节比如开启分页并不要求自己填写,因此,完成这次训练营只能算是一张入门系统的入场券。
不同于xv6,rcore的实验框架是递进式的,从裸机应用到批处理系统到多道程序系统,相当后面才有了文件系统。我对这种安排是否是合适保持一点疑问,因为链接时陌生的,在有文件系统前把用户应用链接到内核反而增添了很多复杂性。我觉得rcore的框架像是把用c翻译成的rust代码写成的,缺乏一些用rust重写的必要性,反而增添了很多复杂性。比如虚拟内存那章的MapArea等抽象我琢磨了很久,但是由c写成的xv6的虚拟内存代码我却很容易看懂,直至现在我依然觉得这种抽象是不必要的(也可能是个人水平欠缺,尚不能理解)。rcore的多进程、多线程也是仿linux的经典设计,这部分能否更有一些rust特色,比如让语言自身来管理一部分并发的功能呢?我希望今后能探索这部分的答案