-
Notifications
You must be signed in to change notification settings - Fork 452
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #119 from Suzukaze7/master
2023开源操作系统训练营第二阶段总结报告-金烜宇
- Loading branch information
Showing
2 changed files
with
41 additions
and
28 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
--- | ||
title: 2023开源操作系统训练营第二阶段总结报告-金烜宇 | ||
date: 2023-11-02 14:05:11 | ||
categories: | ||
- report | ||
tags: | ||
- author: Suzukaze7 | ||
- repo: https://github.com/LearningOS/2023a-rcore-Suzukaze7 | ||
--- | ||
|
||
## 前言 | ||
偶在某个群里听说了开源公开课的存在,讲OS就带你实现一个小型OS,讲计网就带你实现计网的5层架构。作为一个对底层感兴趣,又忍受不了学校课程的照本宣科的人,心想这样的课程也太有意思了吧,于是开启了我自学公开课的旅途。 | ||
|
||
## 关于开源操作系统训练营 | ||
说来很巧,在我将要把6.s081刷完的时候,在相关互助群里听说了这个开源操作系统训练营,于是自然地抱着进一步学习的想法就报了名。现在看来这门课确实符合我的期待: | ||
- 和学校课程最大的不同也是开源课程共同的优点,不会单讲理论,而是结合实践真正地实现一个能够使用的程序 | ||
- 能够学习更加现代化的rust语言,其中的包管理器和所有权确实很实用 | ||
- 由于xv6和rCore都是基于riscv的,很多功能的实现方式都是差不多的,所以学习难度很平缓,又能巩固之前所学 | ||
|
||
<!-- more --> | ||
|
||
## rust | ||
这门语言刷新了我对计算机语言的理解,以往了解的 cpp, py, java, js 给我的感觉都是换汤不换药,基本熟悉了一门其他的都能很快上手。但rust很特别,第一次看到变量默认不可变,以及赋值就不可使用的所有权等机制,让我感到很神奇。但仔细想想也合理,从来没有人说过计算机语言一定就要是什么样子,而只是为了更好的写出好用的代码而服务。这或许也是计算机让我着迷的地方,在这个世界里一切皆有可能,只取决于你是否有想象力与能力将其构建出来。 | ||
|
||
而学习的过程花了大概一周的时间,基本是跟着rustling的题目去学习对应的知识点,就是感觉做完之后也只是很粗略的过了一遍,并不能灵活的运用,所以决定等第二阶段遇到了问题再继续学 | ||
|
||
## rCore | ||
#### 总结 | ||
rCore的实验总体上不算难,将文档和代码结合着看基本就能理解然后实现: | ||
- ch1让我了解了裸机平台以及如何在其上运行程序,ch2让我明白了riscv中断的具体流程,这两章补全了081没有提及的两个关键的机制 | ||
- ch3通过向TCB添加两个字段记录对应信息即可 | ||
- ch4关键要理解用户空间和内核空间的区别,需要先在用户空间找到对应的物理地址,再写入内容 | ||
- ch5的`sys_spwan()`是参照`sys_fork()&sys_exec()`结合实现的,`sys_proi`向TCB添加的字段要放在`inner`里 | ||
- ch6的api非常多,需要结合代码中的使用来理解每个api的作用与使用方式,相较于前面的实验难度大了很多 | ||
|
||
总体来说,循序渐进逐步将rCore变成一个功能越来越丰富的内核,从一开始的批处理到后面的交互式,非常有意思。 | ||
|
||
#### 建议 | ||
作为第一次参加这个训练营,感觉在某些需要有明确引导的地方并没有,于是绕了挺多弯路,~~当然也可能是我比较笨~~,例如: | ||
- 可以在项目的`README`里对如何开始实验多一点说明,一开始非常迷茫不知道该干嘛 | ||
- 然后是对测试多一点说明:由于文档里并没有提到可以本地 Grading 的`ci-user`,我在ch4云端多次重测后回看`README`才知道可以在本地 Grading;而 Grading 会把 rCore 的输出都存在`stdout-ch*`中,于是不明白为什么没有输出错误原因 |