-
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 #200 from Eternal60f3/master
要提交的变更:
- Loading branch information
Showing
1 changed file
with
47 additions
and
0 deletions.
There are no files selected for viewing
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,47 @@ | ||
--- | ||
title: rcore训练营总结 | ||
date: 2023-11-21 19:16:40 | ||
tags: | ||
- author:Eternal60f3 | ||
- repo:https://github.com/LearningOS/2023a-rcore-Eternal60f3/ | ||
--- | ||
|
||
#### 个人介绍 | ||
|
||
我本人是小学教育专业的初招定向师范生。小时候受到电影黑客帝国的感染,所以对于计算机从小就很向往。但在***中***考完之后,由于自己天真以及父母的建议就来了师范。大学期间也由于是定向的,不能转专业。大一开始就自学计算机了,后面也参加了一些程序设计竞赛以及区域赛,在我们这个普通师范学校里面倒是打赢我们这边计算机相关专业的所有学生。但由于纯粹自己自学,学习方法上存在很大的问题,过于急功急利等原因实际上自己水平还是很差,最好的奖项也就只有蓝桥杯B组国二。在报名这个之前的项目方面的经历只写过csapp的lab,以及xv6敲了前三个lab。但也因为学习方法的问题,真正吸收到的东西很少,lab很多也是借鉴参考答案完成的。在这之前操作系统的基础只有从xv6前三个实验get到的一些东西。然后我本身对于业务方面的东西也不是很感兴趣,所以也没怎么学习这相关的。 | ||
|
||
|
||
|
||
#### 对于这次训练营的体会 | ||
|
||
非常庆幸在当初在看群消息的时候,有群友提到了我们这个训练营。这几周的学习,我在操作系统方面还有个人的学习方法上改进了很多。在这之前我写lab的时候以及自己程序设计竞赛训练的时候,一开始的准备工作基本上都是先找到参考答案。然后在实际完成的时候会出现纠结于看不看答案的情况浪费时间,然后就是出现bug了,直接和参考答案逐行比对,而不是自己顺着代码思路找bug。这样子自己的编码和debug能力并没有提升上来,也没有体会到编程的乐趣。但这次rcore训练营没有参考答案。在第1个lab的时候,当时自己有点畏惧情绪,害怕出错。在完成了第三章的练习后,这种情绪才消减了。但在四章的学习过程中,我虽然之前写过xv6中对应的lab,但当时很多地方仍然是一知半解。在看文档的过程中,我陷入了细节的深渊。在很长的一段时间里面,我都是处于在看到这个函数的时候又想到某个问题,然后又去深究那个问题,然后在看那个问题的时候,又看到这个函数里面的细节不清楚,又去看这个函数的细节。如此反复。导致我的效率非常低下,且每一个问题都没有获得解答,看着每一个函数,脑海里面都是有点模糊,虽然脑海里面也有整体的大纲,但是对于细节来说很模糊。后面放下第四章,先去弄了第五章才意识到抽象出每个函数的接口,当看某个函数的逻辑时,对于它调用的函数里面的细节就可以暂时忽略,先有个大纲。 | ||
|
||
在实际写lab的过程中,第一个lab还比较顺利。第二个lab:在写munmap的实现的时候,因为我在实现mmap的时候是直接调用的insert_framed_area 添加了一个逻辑段,然后在memory_set中也正好看到删除以某个start_va开始的逻辑段的函数。当时就在想能不能借鉴这个函数,munmap的实现就直接删除与传入的start_va和end_va相匹配的段。但是转头一想,如果这个start_va和end_va要是在某个段中间或者是跨越多个段,那岂不是不行了。就在想办法解决这个问题。但是当时的我由于过去都是借鉴参考答案,所以当时的第一反应就是能不能找到参考答案看它有没有想这么多。有点害怕自己去尝试,然后这个感觉代码量也有点大。但后面发现测试样例很简单,就没考虑那么多。但是这里我还没有克服自己内心的障碍,因为我当时还是去借鉴了其他人的仓库(当时意外得知还可以这样干),来确定自己的想法。但是在实现第三个lab的时候:我算是克服了自己的这一内心障碍。当时自己写完之后,一make test就报time out了,当时的第一反应也是参考答案借鉴。但这次我坚持自己debug,最后花了一天半的时间找到了这个bug,仅仅只是一个地方少了一行代码。就是sys_spawn系统调用里面没有运行add_task函数, 导致一直运行的时候timeout. 就一行代码差不多两天半时间. 还是通过逐行和最开始能运行起来的ch5分支的代码进行比对才找到. 之前一直都找错方向了, 没有想到是测试样例调用了sys_spawn出的错误. 然后调bug的时候还遇到了一个问题, 当我直接用checkout回到ch5的初始提交记录的时候, 它在os文件夹里面make run的时候会报链接出错. 这个也花了好长时间去找原因, 但最后还是没有找到. 最后是通过直接重新clone仓库, 然后把初始ch5里面的文件复制过来才成功. 当找完bug,所以test全部通过的那一刻,内心确实是挺激动。但如果是放在以前的话,我花了一天半结果就这么一行代码,别说激动了,在自己内心没把自己pua死已经算好的了,也正是因为这种急功近利的心态,自己过去也是疯狂参考答案,但参考完答案之后,又由于不完全是自己写的,其实内心也还是会内耗,觉得这玩意没弄一样。但这次至少还是感觉挺有成就感,算是克服了内心的一重障碍,并且这种不借鉴答案的学习方式让我对于知识点本身的理解,以及自己内心的舒服程度上升了很多很多,至少不会内耗了。 | ||
|
||
这次rcore算是我真正意义上的入门lab。在完成这三个lab的过程中,我的完成速度再不断的加快,现在正在弄的第四个lab已经感觉比较得心应手了。之后也可以更加从容的面对其他lab。 | ||
|
||
然后rcore训练营,本身也是一份非常非常nice的操作系统学习手册,让我对于操作系统的各个部分的认识也上了一层楼。 | ||
|
||
|
||
|
||
rust 这门语言给我最大的感触就是它安全性,基本上所有可能出现的错误都帮你报错了,只要运行通过了很大程度上就不会有很大的问题,有也是逻辑上的问题了,不像c语言的指针,头大大的。然后它Option对于错误处理也非常nice。以及它的trait写起来很舒适,我在这之前并没有写过什么面向对象的项目,所以对于这个的认识可能也不是很深。 | ||
|
||
|
||
|
||
这次由于本专业要去小学实习,在加上自己的拖拉, 生病,以及一系列问题,就导致知道现在才完成了。希望还有机会能够第三阶段及格。加油. | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|