From 224918d2e4ca1fec3d2b44cf0f777207672ea913 Mon Sep 17 00:00:00 2001 From: Thousand Oaks <77325437+1000oaks@users.noreply.github.com> Date: Sat, 4 Nov 2023 19:54:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A01000oaks=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E4=BA=8C=E9=98=B6=E6=AE=B5=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6\265\346\200\273\347\273\223-1000oaks.md" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\344\270\200\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223-1000oaks.md" diff --git "a/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\344\270\200\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223-1000oaks.md" "b/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\344\270\200\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223-1000oaks.md" new file mode 100644 index 00000000000..a0363dadc36 --- /dev/null +++ "b/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\344\270\200\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223-1000oaks.md" @@ -0,0 +1,65 @@ +--- +title: 1000oaks的rCore前二阶段小结 +date: 2023-11-04 16:08:16 +tags: + - author:1000oaks + - repo:https://github.com/LearningOS/2023a-rcore-1000oaks +--- + +# 1000oaks的rCore前二阶段小结 + +> 写小结一刻, 却不知写些什么. + +- 这已经是我第二次报名了rCore训练营了. 第一次报名于2020年夏季, 然而那个暑假我去研究托福的备考了, 所以第一次报名之后什么也没有做(虽然托福倒是速成成功, 但是这导致我下学期没有修读校内开设的操作系统研讨课). 要不是D同学督促我, 怕不是第二次报名也只停留于一阶段了. + +- 过分杞人忧天, 不如在rCore上静心研究. + + + +## 一阶段 & Rust + +- 一阶段主要是Rust语言的学习. 实话实说, 我仍认为自己属于"Rust初(中)级水平", 离"Rustaceans"相距甚远. 之前我足足花了一学期线下体验DeNero的CS61A, 才真正入门并理解Python基础. 这件事情在二阶段, 主要是在`use crate::...`上我花了些时间研究. + +- Rustlings很丰富, 但是阅读死灵书后, 我仍然对自己的Rust水平感到黯然失色. + +- 我曾经感到恐惧的所有权转移这件事情, 事实上在二阶段并没有真正影响个人的开发. + +- VSCode的`rust-analyzer`插件可以智能的分析依赖关系和语法错误(顺道提句, 我在Rustlings快做完之后才意识到Rustlings可以一键为`rust-analyzer`生成文件用以分析), 其中的一些提示可以触发解答练习的思考. + +> `rust-analyzer`实在太有用了, 比如自动标注变量类型. 没有它, 我很难顺利完成前三个实验. + +- 真正让我感到妙哉的是rCore中定义的`UPSafeCell`数据结构, 起被后续的`...Inner`反复使用. + +## 二阶段 & rCore + +- 受到本科三年的学校校内课程的影响, RISC-V汇编倒是不那么困难, 虽然我应该承认RISC-V的特权态机制没有做到100%理解和记忆. 在读The RISC-V Reader中文版第10章的时候, 我发现了一翻译错误, 然而中文译者暂没有回复我的GitHub Issues(后来我就去读英文原版了). 此外, 我发现了Rust by Example(英文原版)的一处撰稿错误, 然而Rust官方也没有回复我. 不过, 倒是有好心人跟进了我的GitHub Issues甚至提交了Pull Request: https://github.com/rust-lang/rust-by-example/issues/1755 + +> 虽然我觉得这是Rust by Example的错误, 但不排除我**自身**理解错误的可能. 如果是这样, 敬请批评指正! + +- 顺便说句, RISC-V的GitHub仓库的官方ISA手册(新版), 相比于正式发行的旧版ISA手册, 删除了不少有价值好理解的内容. 我不知道他们为什么这么做. + +- 阅读第一章时, 对于"为什么进入`rust_main`之前要设置`sp`指针一事, 我感到难以理解. 后来用GDB进行了步步跟踪, 才弄明白问题的原因: Rust编译器编译出的函数代码均带有`sp`指针的加减和对应内存区域的访问, 如果不设置`sp`, 那么`$sp=0`, 实际运行就会访问不允许被访问的区域(`0x0`)而被杀死, 然后QEMU进入死循环. 研究此事之时, 顺便研究了`wfi`指令, 其可以让陷入死循环的QEMU以低功耗模式"沉睡"; 体现在x86虚拟机中是CPU占用的大幅减少. + +- 做Lab 1的时候, 我正处于感冒难受的一个周末. 虽然第三章的文档我阅读了很久, 但是Lab 1要求实现的内容不难. + +> Lab 1的背后是`UPSafeCell`(及其高层封装)的支撑, 这大幅简化了完成rCore练习的难度和时间. + +- 做Lab 2的时候, 我发现`munmap`的实现总是无法通过测试. 然后分析发现, 通过`PageTable::from_token()`函数创建的页表对于内存空间管理没有实际控制权. 这一点已经很清楚的写在了讲义中, 这是读讲义不细致造成的. 最好认真阅读文档找到了问题所在. + +> 实现内存映射和取消映射没有涉及到页表的过多细节. rCore的练习之后, 还需要阅读既有框架的源码, 才能更好理解rCore, 而非局限于练习. rCore Tutorial Book评论区的很多讨论我仍没有完全弄通, 需要逐个消化. + +- 做Lab 3的时候, 我发现`spawn`的实现总是不正确. 然后分析发现, 我对`fork`函数如何区分父子进程的理解是完全不对的. 正确的分析了`fork`的工作原理之后, `spawn`就能得以实现了. 至于对于前两章代码框架的调整试配, 到并不那么苦难, 参考`get_user_token`函数的实现就可知一二. + +> 我曾经试图通过直接调用`fork`和`exec`函数, 通过几行实现. 但后来发现, 这样似乎行不通. 实现`spawn`需要直接修改`new_task`的内部. 也许有更简洁优雅的实现, 仍待之后进一步探索. + +- 不得不指出的是, 尽管完成了Lab 1 - Lab 3, 但是部分实现可能不是很好, 而且`ci-user`的测试也不涵盖所有情况(也就是说, 我自己的实现还有很多不"完备"的地方). 由于做实验的时间仓促, 部分边界情况没有考虑(比如`TimeVal`横跨两页), 而且还把某些不应该暴露的函数接口给设置成`pub`类型了. 这些事情仍有待完善. + +> 虽然rCore本身不对练习的实现加以硬性限制, 但是是否让新实现的接口`pub`出来, 则关乎操作系统的设计理念. + +- 听说Lab 5较麻烦, 显然这周周末之前我无法完成了. + +> 最近确实有些懒惰了, 尤其是感冒结束和推免烦事突然**淡化**之后. 心态可能是能否顺利完成rCore三阶段的关键. + +## 致谢 + +- 在广受赞誉的rCore Tutorial Book v3之前, 是rCore Tutorial Book v2和久负盛名的uCore Tutorial 2015/2020. 在此对rCore Tutorial v2/v3以及uCore Tutorial 2015/2020的所有作者的辛勤付出表示深深的感谢(以及督促我认真工作的D同学), 是你们让我在操作系统上真正"开窍", 虽然我离"精通"还差得很远. From edddef012686aa1852832ac069ee5694af0b9e76 Mon Sep 17 00:00:00 2001 From: Thousand Oaks <77325437+1000oaks@users.noreply.github.com> Date: Sat, 4 Nov 2023 20:39:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Update=202023=E5=BC=80=E6=BA=90=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E7=B3=BB=E7=BB=9F=E8=AE=AD=E7=BB=83=E8=90=A5=E4=B8=80?= =?UTF-8?q?=E4=BA=8C=E9=98=B6=E6=AE=B5=E6=80=BB=E7=BB=93-1000oaks.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...351\230\266\346\256\265\346\200\273\347\273\223-1000oaks.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\344\270\200\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223-1000oaks.md" "b/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\344\270\200\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223-1000oaks.md" index a0363dadc36..ea90a36f2c5 100644 --- "a/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\344\270\200\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223-1000oaks.md" +++ "b/source/_posts/2023\345\274\200\346\272\220\346\223\215\344\275\234\347\263\273\347\273\237\350\256\255\347\273\203\350\220\245\344\270\200\344\272\214\351\230\266\346\256\265\346\200\273\347\273\223-1000oaks.md" @@ -10,7 +10,7 @@ tags: > 写小结一刻, 却不知写些什么. -- 这已经是我第二次报名了rCore训练营了. 第一次报名于2020年夏季, 然而那个暑假我去研究托福的备考了, 所以第一次报名之后什么也没有做(虽然托福倒是速成成功, 但是这导致我下学期没有修读校内开设的操作系统研讨课). 要不是D同学督促我, 怕不是第二次报名也只停留于一阶段了. +- 这已经是我第二次报名了rCore训练营了. 第一次报名于2022年夏季, 然而那个暑假我去研究托福的备考了, 所以第一次报名之后什么也没有做(虽然托福倒是速成成功, 但是这导致我下学期没有修读校内开设的操作系统研讨课). 要不是D同学督促我, 怕不是第二次报名也只停留于一阶段了. - 过分杞人忧天, 不如在rCore上静心研究.