- 2024春夏OS训练营:所有阶段的blog笔记
因为学长的推荐,正准备自己开始做rcore lab的时候突然在rcore的官方repo里面看到news:
开源操作系统训练营报名!
wow,看到里面的正是自己想要了解学习的内容,一下子打起了12分精神,感觉很切合自己所在的嵌入式方向,并且完美的满足自己想要在更深平台上学习的想法(之前是在stm32的机器上跑过简单的ucOSII 实时操作系统)。
感觉自己花在学rust的时间挺长的,主要是想更深入的学习这个语言(正巧大二上学了编译原理),在rustlings上花了不少时间,不想一个个说语法了,只是记得smart_pointers的特性很有意思狠狠的理解了,当然还有所有权(第一次见到在编译阶段去强调这个概念的语言,之前写malloc实验的时候有想过能不能在写语言的时候把内存的管理考虑好),option之类的东西和c++真的很像,前面的智能指针也是c++那一套的东西(有种写cs144的感觉)。范型的使用我就类比之前学java的时候的用法了,让我记忆深刻的还有rust对于错误处理包装成一个enum,居然是个枚举,还有它的宏,也太多了吧(学c的时候确实体会过宏的强大)。
最后10个algorithms花了小半天写完,确实算是对之前的学习合起来应用了一下。
记录的笔记我就留在个人博客上了,因为用的notion写博客,试试推送很方便,所以习惯了:
参考资料(放在reference dir): RISC-V手册(训练营给的版本老了点)
学了一点ANSI转义序列,还有bss清零的骚操作(直接用rust写而不是之前用汇编完成)
还有调用rustsbi接口实现打印(不过这里感觉还没看的很仔细),
今天参加成电杯足球赛去了,做的不多(最近也在忙着复习操作系统半期考试😥)
因为想和我们学校半期考试复习结合,所以就跳着先看看这里的并发(chapter8)
peterson算法感觉tutorial讲的少了点手动,建议是看看南大jyy的OS课里面讲的
详细笔记我归在lab部分博客了:lab1 blog
这个lab1没有需要写的部分,主要是把一些基本内容学习,跟着敲一遍做好笔记就好了。
看了lab2 的前两个小节,重新去认识了链接脚本里面的细节(Entry的作用、如何保证的_start在第一个位置等)收藏一个回答:Entry的作用
有个incorrect usage of slice::from_raw_parts
生病住院了,只是把lab2看完了,lab3开了头
完成lab3的全部,包括简答题,感觉学到了很多东西,和之前的实时操作系统的内容也联系上了不少。
感觉好难,主要是这部分文档感觉写的有点抽象,代码给的支离破碎。
这次反复的参考文档,阅读代码,大脑快不够用了,主要是很多东西之前没有连成片,花时间反复看,记忆才能把它们串联起来,memory area 、memoryset 分页的映射模式,内核的地址空间,跳转到用户程序的地址空间,切换过程,好多好多,不过慢慢看懂了真的挺有意思的。
但是感觉速度慢了,的确感觉可以不是很仔细的看文档,直接做lab,主要是时间太紧张了,打算后续的lab就这样来提升速度。
加油啊
冲刺了,改变策略过后速度有一定提升,不过我想还有个原因是进程这部分本身也学过,而且比前面的内容要简单(我感觉)
开始搞文件系统了
感觉现在的方法变成先做题,先移植上一个lab的功能,然后遇到不懂的地方再回去查看文档,这样做速度的确提升了,但是感觉有些地方也的确有遗漏,做完了再来补,还有问答题没做呀。
主要是马上要考arm处理器架构的半期,数据库的期末还有嵌入式操作系统的期末,得花不少时间去复习呀。
接下来我得去准备我的期中考试(arm处理器)和期末考试(嵌入式操作系统、数据库)
后面应该是边写写问答题,大部分时间转到课内的任务了。
这个lab我感觉做的有瑕疵,我写在博客记录里面了,后续我想我还会来修改这部分代码的,还是不能一直留着屎山
不过没花太多时间,最近在赶学校里面的作业,实验,文档,唉,感觉没用又必须做,
lab的问答题得开始补了,不过我现在还没动太多,想先再多看看文档里面写的,感觉又能学到不少东西,不过马上9号要考半期考试,同时也在复习:crying_cat_face:
重新阅读了concise和detail book以及代码(进度大概为一半)
完成了ch6、ch7的问答题,部分完成ch4的问答题,后续会完善,重心调整为复习数据库的期末考试(5.21号)
ch4问答还剩一个小末尾,又看了一些rcore的实现(非lab部分),感觉mmap的lazy方式好像也不难,有时间可以试试。
总算是算收尾了,不过还有课程没有看,打算把关于acore的课程看了
现在走入第三阶段,然而也是期末考试集中的一个月,只能穿插着做了,学校课程第一,不过也希望能把第三阶段好好完成
好多语法啊,主要是概念很抽象,以前也没有用c++,看它的一些类比,虚函数表、dynamic dispatch这些之前没有什么了解,现在就多花了时间去看,不过收获满满。这几周接着都是穿插考试和训练营,看着群里大家的进度也挺快,感觉得调整一下思路,不用每个点扣得很细,主要还是在我们异步编程,使用到操作系统的设计上,比较目前自己时间不太多,得有规划。
200行实现future的文档读完了,一边调试一边读代码,之前的reactor、executor和future的内容变得清晰了,但是有点困惑,这个异步的实现也是依赖于线程,而且它的表现和同步一样,明明一个future走入模拟的IO了,应该切到别的future进行,但是它并没有,而是把整个线程阻塞了,在单线程里面没有表现什么异步特征,这部分我没能理解,可能对于异步这个概念我还是有点没搞明白,我就去看向老师提供的视频,看看能不能找到答案。
从webserver来讲解rust future这个部分我发现的确特别好,主要是它终于把async和await到底做了什么讲明白了,写了可行的和编译器结果对应的上的,展开的async和await,并且后面它这种实现方式居然也就是future写异步的另一种非使用async和await语法的方式,这里再结合前面200行讲的pin的内容,我对整个部分自我感觉是了解了。感觉收获真的很大,以前从来没有接触过异步编程的语法,只是手动使用的多线程。