## 2021年开源操作系统夏令营:第一阶段 [doc](./doc) :每日记录 [rustling](./src/rustling-ex) :rustling的练习代码 [csv_challenge](./src/csv_challenge) :《Rust编程之道》第10章的csv_challenge [quiz](./src/quiz) : quiz的代码及注释 [leetcode](./src/leetcode-ex/README.md) :leetcode一些题目的解 [exercismio](./src/exercismio) :部分exercismio的解 [tutorial](./src/tutorial) :教程章节代码(目前到chapter6) [report](./report) :放每章report的目录(目前到chapter6) ### step 0 已了解rust基本语法,故在该步中的任务有: 1. 《Rust编程之道》的3,4,5,9,13章; 2. 完成《Rust编程之道》第十章的完整示例代码,掌握Cargo和模块系统; 3. 尝试完成编程小练习 ### [day1-20210702](./doc/day1.md) 《Rust编程之道》看了3,4,5章,第5章看到了生命周期参数部分。 其中对生命周期参数理解的不是很好。 明天再看一遍,如果依然理解不了,以后在实践的时候只能尽量 不用生命周期参数🤪,或者是遇到该场景的时候再尝试去理解。 ### [day2-20210703](./doc/day2.md) 《Rust编程之道》看了9,13章。unsafe的代码理解起来太耗心智了。 直接用leetcode上面的题目来练习(虽然这和第9,13章没啥关系) [代码](./src/leetcode-ex/README.md) ### [day3-20210704](./doc/day3.md) 以leetcode上的题来进行练习 ex4~ex15 [代码](./src/leetcode-ex/README.md) ### [day4-20210705](./doc/day4.md) rustlings编程小练习(51/75) ### [day5-20210706](./doc/day5.md) rustlings编程小练习(75/75) ### [day6-20210707](./doc/day6.md) 《Rust编程之道》第10章的csv_challenge (外加吐槽下rust的插件) [csv_challenge](./src/csv_challenge/src/main.rs) ### [day7-20210708](./doc/day7.md) quiz1~quiz14 主要是参考了张汉东老师的习题解答 [quiz习题解答](https://github.com/RustStudy/rust_daily_news/tree/master/RustQuiz) 不得不说这些题目刚见到时 (我虽然不懂,但我大受震撼).jpg ### [day8-20210709](./doc/day8.md) quiz15~quiz33 (33/33) 这33题绝大部分看完注释后都能懂,但是对个别题的理解还是存在困难([11](./src/quiz/src/quiz11.rs),[27](./src/quiz/src/quiz27.rs) [32](./src/quiz/src/quiz32.rs),[24](./src/quiz/src/quiz24.rs)) ### [day9-20210710](./doc/day9.md) 完成了exercism.io的部分题目。由于Rust Track上的题目需要被审核(大致是这么个意思),而且时间还不短。 所以不打算继续这上面的题目了,计划开始进入下一步。 练习题目在src/exercismio目录下,已完成的详细题目列表在这[day9-20210710](./doc/day9.md) ### day10-20210711 基于docker的开发环境,用的是其它同学提供的docker镜像。[这里面](https://github.com/yjcyxky/rcore-tutorial-v3) 提供了自己构建 docker镜像的过程,也可以拉取现成的镜像。我在win10系统上构建失败了(不知道是不是windows的锅),所以用的是现成的镜像。 对照着[rCore-Tutorial-Book-v3](https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter0/index.html) 上面的教程, 成功打印出了hello world!😭 (走了好多弯路,不容易啊)。 按[移除标准库依赖](https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter1/2remove-std.html) 的流程走了一遍 x86_64平台,期间确实有几个步骤不一样,不过[BlogOS的相关内容](https://os.phil-opp.com/freestanding-rust-binary/) 里面都有 解决方法 我的经历在[这](./doc/day10.md) ### [day11-20210712](src/tutorial/chapter1/README.md) 参照[教程](https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter1/index.html) 第一章顺利的在裸机上打印出了hell world 也实现了彩色输出,不过实现的比较辣眼睛,只能简单的彩色输出,没有level控制啥的 ### day12 按照教程第二章的流程进行,发现最后的输出结果和教程不一样。 教程代码中的输出是这样的 ``` [rustsbi] Kernel entry: 0x80200000 [kernel] Hello, world! [kernel] num_app = 3 [kernel] app_0 [0x8020b028, 0x8020c050) [kernel] app_1 [0x8020c050, 0x8020d108) [kernel] app_2 [0x8020d108, 0x8020e4c0) [kernel] Loading app_0 Hello, world! scause=0x2 [kernel] IllegalInstruction in application, core dumped. [kernel] Loading app_1 Into Test store_fault, we will insert an invalid store operation... Kernel should kill this application! [kernel] PageFault in application, core dumped. ... ``` 而我的输出是这样的 ``` [rustsbi] Kernel entry: 0x80200000 [ INFO]->[kernel] num_app = 3 [ INFO]->[kernel] app_0 [0x8020b028,0x8020c068] [ INFO]->[kernel] app_1 [0x8020c068,0x8020d138] [ INFO]->[kernel] app_2 [0x8020d138,0x8020e4f8] [ INFO]->[kernel] Loading app_0 [ INFO]->Hello, world! [ERROR]->Unsupported trap Interrupt(VirtualSupervisorSoft),stval = 0x0! [ INFO]->[kernel] Loading app_1 [ INFO]->Into Test store_fault, we will insert an invalid store operation... [ INFO]->Kernel should kill this application! [ERROR]->[kernel] IllegalInstruction in application,core dumped ... ``` 这里出现了一个`Interrupt(VirtualSupervisorSoft)`(但是我还是继续让它`run_next_app`了) 明天继续探究下到底是什么原因 ### day13 昨天产生Interrupt的原因还没找到,觉得自己的基础有点弱,教程理解起来有点困难,补几天的基础知识😩。 今天看了下汇编语言,参考的是《汇编语言(第三版)》(王爽)。这本书真不错,对之后看RISC-V的手册应该很有帮助。 对应的[笔记](./doc/day13-汇编语言.md) ### day14 原来前天的错误是因为rustsbi的版本不对,我直接用的是第一章代码里的版本,教程第二章的用rustsbi与第一章是不同的😭 今天看了RISC-V的中文手册,但是感觉没有《汇编语言》那样循序渐进,毕竟只是一本手册。 ### day15 今天看的是[计算机组成与设计:RISC-V](https://www.icourse163.org/course/ZJU-1452997167) 的课程,计划明天再看一天 笔记明天一起提交 ### day16 计算机组成与设计:RISC-V 前几章的[笔记](./doc/day16-RISCV指令.md) ### day17-20210718 完成chapter1和chapter2的[report1](./report/report1.md) 和[report2](./report/report2.md)。 顺便说一句,chapter2中的[测试用例](https://github.com/DeathWish5/rCore_tutorial_tests/tree/master/user/src/bin) 如果是用make all CHAPTER=2获取bin文件,然后把这些bin文件放到自己的user/target对应的目录下, 再把源文件放到user/src/bin目录下(为了通过build.rs生成link_app.S文件),之后进到自己的os目录下执行会出现莫名其妙的错误。 (应该是程序地址的问题,复制到target后我并没有删除原来bin文件夹下的代码) 后来把源文件放到user/src/bin目录下,然后再编译(当然可能会有一些错误,不过都很好解决)就好了。 ### day18-20210719 chapter3。report未完成 ### day19-20210720 [report3](./report/report3.md) chapter4未完成 ### day20-20210721 chapter4的实验未完成 ### day21-20210722 [chapter4](./src/tutorial/chapter4),[report4](./report/report4.md) ### day22-20210723 [chapter5](./src/tutorial/chapter5),[report5](./report/report5.md) ### day23-20210724 [chapter6](./src/tutorial/chapter6) , [report6](./report/report6.md) ### day24-20210725 chapter7正在进行中,代码量有点大,估计得好几天。 ### day25-20210726 实验室停电,休息一天。 ### day26-20210727 chapter7实验接口已声明,但未实现 ### day27-20210728 [chapter7](./src/tutorial/chapter7) [report](./report/report7.md)