七月
Mon | Tues | Wed | Thur | Fri | Sat | Sun |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 (D1) |
5 (D2) |
||
6 (D3) |
7 (D4) |
8 (D5) |
9 (D6) |
10 (D7) |
11 (D8) |
12 (D9) |
13 (D10) |
14 (D11) |
15 (D12) |
16 (D13) |
17 (D14) |
18 (D15) |
19 (D16) |
20 (D17) |
21 (D18) |
22 (D19) |
23 (D20) |
24 (D21) |
25 (D22) |
26 (D23) |
27 (D24) |
28 (D25) |
29 (D26) |
30 (D27) |
31 (D28) |
- Day 0
- Day 1 (2020-07-4)
- Day 2 (2020-07-5)
- Day 3 (2020-07-6)
- Day 4 (2020-07-7)
- Day 5 (2020-07-8)
- Day 6 (2020-07-9)
- Day 7 (2020-07-10)
- Day 8 (2020-07-11)
- Day 9 (2020-07-12)
- Day 10 (2020-07-13)
- Day 11 (2020-07-14)
- Day 12 (2020-07-15)
- Day 13 (2020-07-16)
- Day 14 (2020-07-17)
- Day 15 (2020-07-18)
- Day 16 (2020-07-19)
- Day 17 (2020-07-20)
- Day 18 (2020-07-21)
- Day 19 (2020-07-22)
- Day 20 (2020-07-23)
- Day 21 (2020-07-24)
- Day 22 (2020-07-25)
- Day 23 (2020-07-26)
- Day 24 (2020-07-27)
- Day 25 (2020-07-28)
- Day 26 (2020-07-29)
- Day 27 (2020-07-30)
- Day 28 (2020-07-31)
开始学操作系统(RISC-V)清华在线课程,2020春季课程,购买操作系统概念的书
阅读https://github.com/rcore-os/rCore/wiki/os-tutorial-summer-of-code 的文档,先全面了解第一阶段实习的任务
电脑的VMvare虚拟机一直上不了网,卸载重装的时候出现了问题,电脑开不了机了,重置系统,重新安装软件,心态有点崩,好在已经把基本的软件下回来了,而且虚拟机重装后可以上网了
要开始着手学习Rust语言
开始学习Rust语言,阅读Rust 程序设计语言 简体中文版,完成到
- 入门指南
- 猜猜看游戏教程
- 常见编程概念
- 认识所有权
目前来看,基本的语法和C语言相差不大,也都比较好理解,值得注意的是Rust语言基于表达式的特征,第四章所有权是Rust语言的重点,还没有完全理解,进行了一部分,还没有学完,明天继续。我一直有手写笔记的习惯,学新东西也还是愿意在本子上写写画画一些重点
虚拟机上安装Rust,小练习题完成下载到虚拟机上,家里的网有些慢,常报timeout的错误,所以安装花了比较久的时间。通过命令行实现了基本的Hello,World和Hello,Cargo的程序,知道了Rust语言编译运行的基本流程
继续安装电脑重置后消失的软件
继续看Rust 程序设计语言 简体中文版;开始解决小练习题
虚拟机上安装Rust语言编译器,可能因为我的虚拟机版本过低,开始安装intellij和Vscode都没有成功,后来按照教程通过Ubuntu make安装成功,在Vscode平台完成了Rust语言环境配置,并且运行了几个小程序,但是总的来说安装和配置环境不太顺利,浪费了比较久的时间
继续看Rust 程序设计语言 简体中文版,完成到
- 认识所有权
- 使用结构体来组织相关联的数据
因为事件1花了大部分时间,导致进度有点慢
编写了一部分小练习题,巩固了一下Rust的语法规范,完成到
- variables
- if
- functions
- test1
- primitive_types
- structs
继续看Rust 程序设计语言 简体中文版;继续解决小练习题
今天有点杂事,学习时间比较短,继续看了Rust 程序设计语言 简体中文版,完成到
- 枚举与模式匹配
- 使用包、Crate和模块管理不断增长的项目
其中match具有绑定值的模式,可以从枚举成员中提取值的特点很巧妙,但是刚刚接触不太适应,还要继续熟练
继续解决小练习题,完成到
- strings
- test2
- enums
其中涉及到match绑定元组、字符串的测试,认识到模式中的变量数必须和待匹配的变量数一致,丰富了教程里绑定枚举的例子
今天学习时间比较少,要追赶一下进度,尽量往后看Rust 程序设计语言 简体中文版;继续解决小练习题
继续学了Rust 程序设计语言 简体中文版,完成到
- 常见集合
- 错误处理
- 泛型、trait 与生命周期
- 测试
因为练习题遇到,还额外看了宏,感觉这几章的任务量都有点大,而且泛型和trait的概念也不太好理解,所以进度不太快
继续解决小练习题,完成到
- tests
- modules
- macros
- test4
今天看书的时间太久了,导致练习题没能如期做完,明天应该可以做完了
继续看Rust 程序设计语言 简体中文版;解决完小练习题;开始用Rust语言编中小型程序
继续学习Rust 程序设计语言 简体中文版,完成到
- 一个 I/O 项目:构建命令行程序
- Rust 中的函数式语言功能:迭代器与闭包
其中第十二章:一个 I/O 项目:构建命令行程序与《Rust 编程之道》第十章的示例代码相关,因此也进行了一部分《Rust 编程之道》第十章的示例代码的学习。但是始终觉得对引用、copy trait那里理解的不太透彻,查了一些资料,也还没有完全弄明白,主要是引用位于函数返回值或参数时没有找到通用的规则,还要继续研究一下
继续解决小练习题,完成到
- move_semantics
- error_handling
还有尚未看完的语法,小练习也还没做完,拖了好几天了,立flag,明天一定要做完了
学习了一部分《Rust 编程之道》第十章的示例代码
继续看Rust 程序设计语言 简体中文版;解决完小练习题;开始用Rust语言编中小型程序;解决引用、copy trait的问题;改一下DailySchedule的格式
继续学习Rust 程序设计语言 简体中文版,完成到
- 智能指针前四节
- 无畏并发
线程、共享状态都是很新的概念,以前从来没有见到过,现在感觉理解还是比较浅显,随着学习的深入应该会有更深的理解
终于解决了所有的小练习题,今天完成了
- option
- clippy
- standard_library_types
- traits
- generics
- threads
- conversations
练习题的代码和README提交在DailySchedule/exercises一栏,一开始提交到GitHub时遇到了报错failed to push some refs to git,后来通过教程成功解决,完成全部练习的截图如下
DailySchedule的格式修改的好看了一点
继续学习《Rust 编程之道》第十章的示例代码;开始用Rust语言编中小型程序;解决引用、copy trait的问题;复盘一下小练习题
继续学习Rust 程序设计语言 简体中文版,完成到
- Rust 的面向对象编程特性
完成了编写5道中小型练习题,Rust版本和原Python或C语言版本已打包在一起上传
- Learn C The Hard Way 中文版的ex10.c、ex16.c
- Learn-Python-3-the-Hard-Way的ex18.py、ex35.py、ex40.py
感觉LeetCode上面的题目以算法为主,不太适合用现在学的Rust来编程,所以就打算使用笨方法系列了,但是Learn-Python-3-the-Hard-Way上面的题目有的太简单了,Learn C The Hard Way 中文版的题目又有很多大型的数据结构的实现,要精挑细选15道左右还比较困难
自己编了几个程序,初步搞懂了copy trait;又复习了一下之前做的比较坎坷的小练习题DailySchedule/exercises,有不少收获
//DailySchedule/exercises/enums/enums3.rs
enum Message {
ChangeColor(u8, u8, u8),
...
}
fn process(&mut self, message: Message) {
match message{
Message::ChangeColor(r, g, b) => {self.change_color((r,g,b));},//认识到match绑定要求模式中的变量数要和待匹配的变量数一致,即匹配的是一个元组中的三个变量,而不是一个元组
...
} }
//DailySchedule/exercises/error_handling/errorsn.rs
fn read_and_validate(b: &mut dyn io::BufRead) -> Result<PositiveNonzeroInteger, Box<dyn error::Error>> {
let num: i64 = line.trim().parse()?;//认识到?运算符在Result<_,_>是Ok时,返回的是Ok中的值,而不是Ok(_)
...
}
//DailySchedule/exercises/traits/traits2.rs
impl AppendBar for Vec<String> {
fn append_bar(self) -> Self{
let mut v=self;
v.push("Bar".to_string());//这个做了比较久,一开始就是写self.push("Bar".to_string());提示返回值类型不匹配才明白
v
} }
还有就是threads、arc的部分觉得比较难,而且不太熟练,在做实验中遇到再继续巩固,关于迭代器的方法看标准库有点慢,感觉这个教程还讲的比较细致
完成了《Rust 编程之道》第十章的示例代码,上传到了DailySchedule/csv_challenge,根据这个示例代码对Rust的模块化编程有了更深入的了解。另外,按照书上的代码我开始不能正确运行,会提示main error:Program("column name doesn't exist in the input file"),发现是core/write.rs的问题,debug发现headers都可以正常输出,那么就是和修改的目标column匹配的问题,应该是输入的参数还要通过trim方法去掉空格等才能和column匹配,经过修改,运行正确
//let column_number=columns.iter().position(|&e| e==column);
let column_number=columns.iter().position(|&e| e.trim()==column);
开始step1 risc-v系统结构的学习;继续用Rust语言编中小型程序
基本完成阅读《Rust 编程之道》第三章的内容,因为已经仔细过了一遍Rust 程序设计语言 简体中文版,所以看的比较快
完成了step2 实验的环境部署,在虚拟机进行实验,配置环境花了比较多的时间
开始step1 risc-v系统结构的学习;继续用Rust语言编中小型程序
阅读了一部分《计算机组成与设计(RISC-V版)》,今天事情比较多,学习的时间少,要追赶一下进度
参加第一次线上交流
继续step1 risc-v系统结构的学习;继续用Rust语言编中小型程序
完成阅读《计算机组成与设计(RISC-V版)》的前两章,很多内容都是和计算机系统基础有重合的,看的比较顺利
学习了一部分RISC-V手册:一本开源指令集的指南的第十章内容
观看了操作系统(RISC-V)前三章的内容,刚开始入门操作系统的内容,进展不是很快,结合RISC-V手册:一本开源指令集的指南,初步搞懂了中断的处理机制,还需要实验检验,计划实验和视频结合的形式学习,看完一部分的视频就去进行对应的实验操作,以加深对知识的印象
完成阅读《Rust 编程之道》第四章的内容
按照step2 实验的gdb调试方法安装了riscv64-unknown-elf-gdb
继续学习RISC-V手册:一本开源指令集的指南;继续用Rust语言编中小型程序;继续观看操作系统(RISC-V);开始实现Lab0的内容
完成了编写1道中小型练习题
- Learn-Python-3-the-Hard-Way的ex33.py
按照Lab0 实验指导--rcore tutorial教程第三版实现了Lab0的内容,得到了正确的输出,并且按照GDB调试方法实现了调试的界面,手动使用 GDB 对 rCore 进行 debug,一开始的时候不理解让 QEMU在 1234 端口等待调试器接入的含义,后来才明白是开两个终端,一个运行QEMU,另一个运行GDB,GDB连接QEMU来进行调试,但是对Lab0的代码不是完全理解,还要继续看一下相关的知识点
大致完成阅读《Rust 编程之道》第十三章的内容
实现Lab0的过程中,结合阅读了部分《使用 Rust 编写操作系统》
继续学习RISC-V手册:一本开源指令集的指南;继续用Rust语言编中小型程序;实现Lab1
完成了编写2道中小型练习题
又重新按照Lab0 实验指导--rcore tutorial教程第三版捋了一遍Lab0的流程,回看了部分操作系统(RISC-V)第二章的内容,基本理解了Lab0每一步的目的和代码
按照Lab1 实验指导--rcore tutorial教程第三版完成了Lab1时钟中断之前的内容,发现了几处教程的错误
- os/src/interrupt/handler.rs
//global_asm!(include_str!("./interrupt.asm"));
global_asm!(include_str!("interrupt.asm"));
//use riscv::register::stvec;
use riscv::register::{stvec,scause::Scause};
- 输出结果
/*Hello rCore-Tutorial!
mod interrupt initialized
panic: 'Interrupted: Exception(Breakpoint)'*/
mod interrupt initialized
panic: 'Interrupted: Exception(Breakpoint)'
继续用Rust语言编中小型程序;继续实现并理解Lab1
完成了编写2道中小型练习题
按照Lab1 实验指导--rcore tutorial教程第三版完成了Lab1时钟中断的内容,发现了几处教程的错误
- os/src/main.rs 其中rust_main函数去掉unreachable!()之后,还要将返回类型的!去掉
//pub extern "C" fn rust_main() -> ! {}
pub extern "C" fn rust_main() {}
- os/src/interrupt/handler.rs
//use riscv::register::{stvec,scause::Scause};
use riscv::register::{stvec,scause::{Scause,Trap,Exception,Interrupt}};
use super::timer;
/*panic!(
"Unresolved interrupt: {:?}\n{:x?}\nstval: {:x}",
scause.cause(),
context,
stval
);*/
/* panic!(
"Unresolved interrupt: {:?}\n{:x}\nstval: {:x}",
scause.cause(),
context.sepc,
stval
);*/
系统学习了一下git的用法,之前本地仓库和远程仓库一直没有很好的实现同步,向GitHub上传文件有时会出问题,修改好了之后,上传文件更加方便,建立了同步的本地仓库,随时更新,随时上传
继续学习RISC-V手册:一本开源指令集的指南;继续用Rust语言编中小型程序;完成Lab1的学习报告
完成了编写1道中小型练习题
- Learn C The Hard Way 中文版的ex13.c
仔细理解Lab1的实现流程,一些遇到的困难和解决办法会整理在Lab1的学习报告,应该还需要一天才能写完
继续学习RISC-V手册:一本开源指令集的指南;继续用Rust语言编中小型程序;完成Lab1的学习报告
整理完成了Lab1的代码和学习报告,提交在DailySchedule/Lab/Lab1
观看了操作系统(RISC-V)第四讲前四节的内容,开始学习了内存分配的知识,今天学习时间不是太多,视频还没有看完,明天继续
继续学习RISC-V手册:一本开源指令集的指南;继续用Rust语言编中小型程序;继续观看操作系统(RISC-V)
参加了第二次线上交流,和大家做了分享,时间比较仓促,没来得及好好准备什么,但是看大家的进度,感觉自己稍微有点落后,要加快速度呀
观看完操作系统(RISC-V)第四讲和第五讲的内容,学习了物理内存管理的连续内存分配和非连续内存分配,比较容易理解,还是要结合实验去巩固这些知识,明天开始做实验,视频上还提出了RISC-V手册:一本开源指令集的指南的第十章内容比较有帮助,明天也会辅助看一下
继续学习RISC-V手册:一本开源指令集的指南;继续用Rust语言编中小型程序;开始学习Lab2
基本阅读完RISC-V手册:一本开源指令集的指南第十章的内容,后面虚拟内存的部分和操作系统(RISC-V)第五讲视频的内容有很多重合,所以只是大致过了一遍
按照Lab2 实验指导--rcore tutorial教程第三版实现Lab2的内容,发现代码有很多缺失,在rCore-Tutorial仓库里面找到了完整的代码,实现了Lab2,得到了正确的运行结果,但是感觉代码量比Lab1大了很多,还没能好好理解
试图用Rust编一下双向链表,但是我尝试用Box和Rc都各种报错,borrowed、mutable、copy trait等等,改了太久,花了太多时间了,就战略性放弃了,打算再选几个Learn-Python-3-the-Hard-Way的练习题做完15道,然后专心看Lab
整理Lab2的学习报告;用Rust语言编中小型程序结束
完成了编写4道中小型练习题
- Learn-Python-3-the-Hard-Way的ex32.py
- Learn-Python-3-the-Hard-Way的ex17.py
- Learn-Python-3-the-Hard-Way的ex21.py
- Learn-Python-3-the-Hard-Way的ex26.py 已经完成了15道中小型练习题的编写,都上传在DailySchedule/rust-code,编写完整的代码以后,对rust的语法更加熟悉,对Option、match、Result等rust的特有语法也掌握的比较熟练了,但是为了节省时间,没有成功编写复杂的数据结构的代码,总是遇到所有权方面的报错,当时编双向链表的时候就是感觉怎么写都能巧妙的遇上error,也就先放弃了,毕竟还是要以Lab的实现为主
整理完成了Lab2的代码和学习报告,提交在DailySchedule/Lab/Lab2
开始实现Lab3;继续观看操作系统(RISC-V)
实现部分Lab3,同步写学习报告,内容比较多,应该还要一天才能完成,但是虽然知识点多,但是感觉代码和知识点的对应比较好,理解起来比较容易
学习了writing-an-os-in-rust的内存分页简介相关内容
完成Lab3的代码和学习报告;继续观看操作系统(RISC-V)
整理完成了Lab3的代码和学习报告,提交在DailySchedule/Lab/Lab3
学习了操作系统(RISC-V)第九讲的部分内容,为Lab4做准备,还没有学完,明天继续
继续观看操作系统(RISC-V);开始实现Lab4
按照Lab4 实验指导--rcore tutorial教程第三版开始实现Lab4
学习了操作系统(RISC-V)第九讲和第十讲的部分内容,这几天学校来这边招生,会去帮一下忙,进度可能要拖慢了
继续观看操作系统(RISC-V);继续实现Lab4
按照Lab4 实验指导--rcore tutorial教程第三版继续实现Lab4
继续观看操作系统(RISC-V);继续实现Lab4
按照Lab4 实验指导--rcore tutorial教程第三版继续实现Lab4,明天Lab4一定要完成了,ddl很紧迫的情况下,学习时间又偏偏少了,1号之前还有2个Lab,不慌不慌,应该还是来得及的
完成rCore的总结报告,通过pr提交
继续观看操作系统(RISC-V);继续实现Lab4
整理完成了Lab4的代码和学习报告,提交在DailySchedule/Lab/Lab4
开始实现Lab5
继续实现Lab5和Lab6
观看操作系统(RISC-V)第十七讲的内容,准备学习Lab5的文件系统
开始实现Lab5,Lab5的内容和前几次实验相比不算多,但是很多概念都不太熟悉,所以大概还要一天才能完成
收到通知,通过了第一阶段的学习,有点小激动~虽然学校开不了复课证明,但是还是可以参加 Hackathon 的活动,那么就马上要去深圳啦
继续实现Lab5和Lab6
整理完成了Lab5代码和学习报告,提交在DailySchedule/Lab/Lab5
实现Lab6