2021年开源操作系统夏令营:第一阶段
doc :每日记录
rustling :rustling的练习代码
csv_challenge :《Rust编程之道》第10章的csv_challenge
quiz : quiz的代码及注释
leetcode :leetcode一些题目的解
exercismio :部分exercismio的解
tutorial :教程章节代码(目前到chapter6)
report :放每章report的目录(目前到chapter6)
step 0
已了解rust基本语法,故在该步中的任务有:
- 《Rust编程之道》的3,4,5,9,13章;
- 完成《Rust编程之道》第十章的完整示例代码,掌握Cargo和模块系统;
- 尝试完成编程小练习
day1-20210702
《Rust编程之道》看了3,4,5章,第5章看到了生命周期参数部分。 其中对生命周期参数理解的不是很好。
明天再看一遍,如果依然理解不了,以后在实践的时候只能尽量 不用生命周期参数🤪,或者是遇到该场景的时候再尝试去理解。
day2-20210703
《Rust编程之道》看了9,13章。unsafe的代码理解起来太耗心智了。
直接用leetcode上面的题目来练习(虽然这和第9,13章没啥关系)
day3-20210704
以leetcode上的题来进行练习 ex4~ex15
day4-20210705
rustlings编程小练习(51/75)
day5-20210706
rustlings编程小练习(75/75)
day6-20210707
《Rust编程之道》第10章的csv_challenge (外加吐槽下rust的插件)
day7-20210708
quiz1~quiz14
主要是参考了张汉东老师的习题解答
不得不说这些题目刚见到时 (我虽然不懂,但我大受震撼).jpg
day8-20210709
quiz15~quiz33 (33/33)
这33题绝大部分看完注释后都能懂,但是对个别题的理解还是存在困难(11,27 32,24)
day9-20210710
完成了exercism.io的部分题目。由于Rust Track上的题目需要被审核(大致是这么个意思),而且时间还不短。 所以不打算继续这上面的题目了,计划开始进入下一步。
练习题目在src/exercismio目录下,已完成的详细题目列表在这day9-20210710
day10-20210711
基于docker的开发环境,用的是其它同学提供的docker镜像。这里面 提供了自己构建 docker镜像的过程,也可以拉取现成的镜像。我在win10系统上构建失败了(不知道是不是windows的锅),所以用的是现成的镜像。
对照着rCore-Tutorial-Book-v3 上面的教程,
成功打印出了hello world!
按移除标准库依赖 的流程走了一遍 x86_64平台,期间确实有几个步骤不一样,不过BlogOS的相关内容 里面都有 解决方法
我的经历在这
day11-20210712
参照教程 第一章顺利的在裸机上打印出了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的手册应该很有帮助。
对应的笔记
day14
原来前天的错误是因为rustsbi的版本不对,我直接用的是第一章代码里的版本,教程第二章的用rustsbi与第一章是不同的
今天看了RISC-V的中文手册,但是感觉没有《汇编语言》那样循序渐进,毕竟只是一本手册。
day15
今天看的是计算机组成与设计:RISC-V 的课程,计划明天再看一天
笔记明天一起提交
day16
计算机组成与设计:RISC-V 前几章的笔记
day17-20210718
完成chapter1和chapter2的report1 和report2。
顺便说一句,chapter2中的测试用例 如果是用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
chapter4未完成
day20-20210721
chapter4的实验未完成
day21-20210722
day22-20210723
day23-20210724
day24-20210725
chapter7正在进行中,代码量有点大,估计得好几天。
day25-20210726
实验室停电,休息一天。
day26-20210727
chapter7实验接口已声明,但未实现