Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/leonardodalinky/dailysche
日常打卡 rcore 2020夏
https://github.com/leonardodalinky/dailysche
Last synced: about 1 month ago
JSON representation
日常打卡 rcore 2020夏
- Host: GitHub
- URL: https://github.com/leonardodalinky/dailysche
- Owner: leonardodalinky
- License: mit
- Created: 2020-06-28T08:42:52.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2020-08-15T18:48:35.000Z (over 4 years ago)
- Last Synced: 2024-10-28T04:48:26.849Z (3 months ago)
- Language: Rust
- Size: 1.53 MB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DailySche
用于日常打卡 rcore 2020 夏## 日程总表 表格版
*七月*
| Sun | Mon | Tues | Wed | Thu | Fri | Sat |
| :-----------------: | :------------------: | :------------------: | :-----------------: | :-----------------: | :-----------------: | :-----------------: |
| 28
([D1](#Day1)) | 29
([D2](#Day2)) | 30
([D3](#Day3)) | 1
([D4](#Day4)) | 2
([D5](#Day5)) | 3
([D6](#Day6)) | 4
([D7](#Day7)) |
| 5
([D8](#Day8)) | 6
([D9](#Day9)) | 7
([D10](#Day10)) | 8
([D11](#Day11)) | 9
([D12](#Day12)) | 10
([D13](#Day13)) | 11
([D14](#Day14)) |
| 12
([D15](#Day15)) | 13
([D16](#Day16)) | 14
([D17](#Day17)) | 15
([D18](#Day18)) | 16
([D19](#Day19)) | 17
([D20](#Day20)) | 18
([D21](#Day21)) |
| 19
([D22](#Day22)) | 20
([D23](#Day23)) | 21
([D24](#Day24)) | 22
([D25](#Day25)) | 23
([D26](#Day26)) | 24
([D27](#Day27)) | 25
([D28](#Day28)) |
| 26
([D29](#Day29)) | 27 | 28 | 29 | 30 | 31 | |*八月*
| Sun | Mon | Tues | Wed | Thu | Fri | Sat |
| :--: | :--: | :-------------------: | :-------------------: | :--------------------: | :--------------------: | :--------------------: |
| | | | | | | 1 |
| 2 | 3 | 4
([D30](#Day30)) | 5
([D31](#Day31)) | 6
([D32](#Day32)) | 7
([D33](#Day33)) | 8 |
| 9 | 10 | 11 | 12 | 13
([D34](#Day34)) | 14
([D35](#Day35)) | 15
([D36](#Day36)) |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| | 31 | | | | | |##
## 日程总表 文字版
* [Day 1(2020/06/28)](#Day1)
* [Day 2(2020/06/29)](#Day2)
* [Day 3(2020/06/30)](#Day3)
* [Day 4(2020/07/01)](#Day4)
* [Day 5(2020/07/02)](#Day5)
* [Day 6(2020/07/03)](#Day6)
* [Day 7(2020/07/04)](#Day7)
* [Day 8(2020/07/05)](#Day8)
* [Day 9(2020/07/06)](#Day9)
* [Day 10(2020/07/07)](#Day10)
* [Day 11(2020/07/08)](#Day11)
* [Day 12(2020/07/09)](#Day12)
* [Day 13(2020/07/10)](#Day13)
* [Day 14(2020/07/11)](#Day14)
* [Day 15(2020/07/12)](#Day15)
* [Day 16(2020/07/13)](#Day16)
* [Day 17(2020/07/14)](#Day17)
* [Day 18(2020/07/15)](#Day18)
* [Day 19(2020/07/16)](#Day19)
* [Day 20(2020/07/17)](#Day20)
* [Day 21(2020/07/18)](#Day21)
* [Day 22(2020/07/19)](#Day22)
* [Day 23(2020/07/20)](#Day23)
* [Day 24(2020/07/21)](#Day24)
* [Day 25(2020/07/22)](#Day25)
* [Day 26(2020/07/23)](#Day26)
* [Day 27(2020/07/24)](#Day27)
* [Day 28(2020/07/25)](#Day28)
* [Day 29(2020/07/26)](#Day29)
* [Day 30(2020/08/04)](#Day30)
* [Day 31(2020/08/05)](#Day31)
* [Day 32(2020/08/06)](#Day32)
* [Day 33(2020/08/07)](#Day33)
* [Day 34(2020/08/13)](#Day34)
* [Day 35(2020/08/14)](#Day35)
* [Day 36(2020/08/15)](#Day36)
## Day 1
### 任务1:完成rustling练习(100%)
前几天和今天大体阅读完Rust官方Tutorial手册,并且完成Rustlings的初学者练习。代码位于项目`/rust-exercise`下。一连学了10个小时,有一点吃不消了。
### 明日预定任务:完成Learn C The Hard Way中15道习题
## Day 2
### 任务1:完成Learn C The Hard Way中15道习题(8/15)
用rust模拟c的行为,容易遭到各种操作上的困难,不过再参考了std库中的linked_list的实现后,同时自己实际实现了链表、循环缓冲区和二叉搜索树后,感到自己对rust的unsafe块的理解更进一步。不过这个过程耗费了我许多时间来理解,预定任务也只能完成一半。
### 明日预定任务:继续完成Learn C The Hard Way中剩下的习题
## Day 3
### 任务1:完成LCTHW的习题(15/15)
由于LCTHW中有些东西实现起来过于麻烦且无意义,故其中3、4道题换成了自定义的习题。
### 任务2:阅读COAD Risc-V前两章(70%)
因为大部分和已有知识重合,故阅读速度较快。
### 明日预定任务:完成COAD前两章阅读,并阅读RISC-V指令集。
## Day 4
### 任务1:阅读完COAD Risc-V前两章(100%)
完成COAD的阅读,对已有知识巩固。
### 任务2:阅读Risc-V中文手册(50%)
阅读完普通部分,准备阅读Privilege部分。
### 明日预定任务:完成Risc-V中文手册
## Day 5
### 任务1:Risc-V中文手册
大致过了一遍Risc-V中文手册,发现其中的Privilege部分属于重点,这部分在之后用到的时候更需要深入看一看。
### 任务2:看B站上Thu的Risc-V相关(40%)
有在Bilibili网站上发现前几个月贵系关于Risc-V操作系统和rCore的课程,于是打算先搁置手头上的任务,并看完。之后再打算进行Lab。[视频网址](https://www.bilibili.com/video/BV1GE41157Hc)
### 明日预定任务:学习Thu的Risc-V相关课程
预计视频剩余时长为8小时,需要在两天内完成。
## Day 6
### 任务1:Thu的Risc-V相关视频(90%)
剩下内存分配和页面置换算法部分未看。打算之后在Tutorial遇到的时候再补上。
### 任务2:搭设环境
忘记上次重装系统后,Vmware直接没了,就把剩下的时间重新搭了Ubuntu虚拟机。
### 明日预定任务:搭建环境+Lab0
明天搭完环境后,就准备开始Lab了。
## Day 7
### 任务1:搭建环境
原生的ubuntu 18.04系统几乎什么库都没有,修修补补装了起来。编译rCore-Tutorial时发现失败,绕了很久的圈子,才知道要先按照Lab 0来写一会,才能慢慢搭建完,感觉到浪费了人生。
### 任务2:Lab 0
完成了Lab 0。
由于在risc-v的asm手册上没有发现` .space `标记,于是使用` .size `实现了相同的初始化栈功能。
```assembly
.section .bss.stack
.global boot_stack
boot_stack:
# 16K 启动栈大小
.zero 1024 * 16
.global boot_stack_top
boot_stack_top:
# 栈结尾
```教程中的` llvm_asm! `宏在现在的rust版本中,已经逐渐逐渐被新式` asm! `宏取代,于是自己将Lab 0中的相关的内嵌汇编代码修正了。例如,
```rust
/// SBI 调用
#[inline(always)]
fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize {
let ret;
unsafe {
asm!("ecall",
inout("x10") arg0 => ret,
in("x11") arg1,
in("x12") arg2,
in("x17") which);
}ret
}
```### 明日预定任务:阅读Privilege文档+Lab1
准备补读之前的Privilege部分的文档,在进入异常机制前需要仔细研读CSR相关部分。
## Day 8
### 任务1:阅读Privilege文档
花了一个下午,大致明白了其中的关系。不过硬知识太多,用的时候需要频繁查阅。
### 任务2:Lab1+Lab2
Lab 1跟着教程走,很快就复现了。
问题在于Lab 2。因为我没找到Lab 2对应的源码,估计要git换一下commit号,但我懒惰了。而现有的rCore-Tutorial中的物理内存源码部分已经和虚拟内存部分糅合在一起,所以这部分还需要等明天完成Lab 3后才能正常工作。
### 明日预定任务:Lab2+Lab3
明天搞完Lab2和Lab3后,要整理一下整个内存模块。顺便深入一下线段树和SLAB分配算法。可能还得看一看页置换算法了。这就是个大坑了。
## Day 9
### 任务1:Lab 3
这一章完全理清关系,耗了一天。一半原因是IDE的智能类型判断出了问题,而且代码跳转功能不完善,使得我在TUtorial中看了很久才理清了各个文件中的关键所在。
这一章实现了最基础的页表,并且完成了内核重映射。不过也因此里面没有缺页错误的处理,也没有页置换,只能算是实现了最基本的功能,前路漫漫。
没有时间看内存的各种分配算法。决定先建立起对Tutorial内核的整体理解后,再深入到细枝层面钻研。
### 明日预定任务:Lab 4
嗯,准备看线程调度,这也是个大坑。
## Day 10
### 任务1:Lab4
Lab 4里面把调度器封装好了,那我就先跳过调度器吧。
这一章节有关于基本线程的运行方式,我基本上理解透彻了。
不过中间有一点卡了我很久,现在想来,问题出现在对RISC V的汇编语法和指令集不熟悉。
我之前认为RISC V中的` JAL rd, offset `跳转语句是需要指定返回地址的寄存器的,而asm源码中出现的是
```assembly
.globl __interrupt
__interrupt:
... ...
jal handle_interrupt # 不含rd的JAL语句.globl __restore
__restore:
... ...
```所以我在` Context `的` __interrupt `和` __restore `环节卡了很久,我怎么也想不透为什么进入了` handle_interrupt `函数后,最后还能返回到` __restore `部分。
直到我查了指令集才发现,原来` JAL rd, offset `语句默认指定` x1 `,也就是` ra `(返回地址寄存器)作为返回地址的寄存器,我人直接傻了。也就是相当于源码中` jal handle_interrupt `这一句,默认以下面一句指令的地址,存入` ra `中,相当于调用了一个函数的过程。
虽说上面那个失误卡了我很久,不过得亏这个问题,让我把这部分源码起码翻阅了5次,也加深了我对这一块的印象。
### 任务2:Rust代码练习
最近手都有点生疏了,敲了一道Leetcode中等题练练手。顺便现在的评价标准中,好像对Rust代码实现挺严格的。趁这个期间补几道题吧。
### 明日预定任务:Lab 5
明天准备进入设备树部分了,可以感受一下IO到底是怎么实现的,不过看到有一小节有关于文件系统,感觉很不友好。
## Day 11
### 任务1:Lab 5
设备树这一章节,跟着教程走比较容易理解。但是关于设备树和virtio那些概念的规范,完全没看。代码中又都是各种调包和封装,内部细节完全看不到,以后再补一补。
### 明日预定任务:Lab 6
看完这一章,就应该回到Lab 0开始重新写文档了。之前搁置的内存分配等东西准备实现了。
## Day 12
### 任务1:Lab 1文档
Lab 6基本都是调库,搁置了。于是写Lab 1的文档吧,不知道写什么,就把自己对各个关键步骤的理解写了下来,并且回答了一下问答题。
除此之外,调整了一下myRcore的文档结构,准备分章节来写。
### 明日预定任务:Lab 2文档
写Lab 2,感觉最近有点累,可能要gap一下。
## Day 13
今日我gap一天,搞一些其他东西。和dotnet、docker斗智斗勇一整天,心力憔悴。dotnet所谓的跨平台,难道真的不是跨windows和windows-server吗(笑
### 明日预定任务:Lab 2文档
回到rCore上,认真起来了。
## Day 14
### 任务1:Lab 2文档(65%)
完成了Lab 2文档的大部分。打算看一下线段树的物理页分配算法,就这样加进明天的日程里。
### 明日预定任务:内存分配器
看看明天能不能做出一个自己的动态内存分配器出来。
## Day 15
### 任务1:Lab 2 内存分配器
遇到了未知的问题,gdb排查两个小时后发现,是内核栈爆栈了,也算理解了为什么 `VectorBitmapAllocator` 中要指定 `4096K` 的大小,应该就是为了防止爆栈。
### 明日预定任务:Lab 1实验题
今天突然发现Lab 1和Lab 2有了实验题,该好好整一整了。
## Day 16
### 任务1:Lab 1实验题
完成了。这一章的实验题相对简单。
### 任务2:Lab 2实验题(50%)
做了基础的概念性实验题,实践类型的实验题明天再整。今天也顺便补齐了一下昨天自己写的内存分配器的文档记录,血的教训。
### 明日预定任务:Lab 2实验题
明天学习并实现线段树的物理页面分配算法。
## Day 17
### 任务1:Lab 2实验题(95%)
完成了实验题中的线段树分配,同时写完了对应的文档。不过挑战实验可能没时间了,后半个月的事情就很多了,只能留着以后再说了。
Lab 2的文档位于 `myRcore/lab2/doc`。
不得不发表一下对 rust 的感想。它的运行时编译真的事情多多,有些时候我都想替他编译了。不过这样严格的规范确实能够减少大部分的低级错误,只能说有利有弊。我这也算是在付出学习成本了,虽然这个过程很痛苦。不过当编译成功后,直接就 AC 了,属实快乐。
唯一卡到我的一点,就是 `lazy_static!` 部分。因为 `lazy_static!` 需要创建的对象实现了 `Send` 特性,而我所使用的 `NonNull` 类型和 `*mut T` 类型,都是不允许跨线程移动的。因此,需要在我定义的线段树上,手动实现一个 `unsafe` 的 `Send` 特性,才能继续使用。
### 明日预定任务:Lab 3文档
明天把Lab 3中的非实验性文档解决。准备和好兄弟去温泉一日游了。
## Day 18
### 任务1:Lab 3文档(50%)
完成了基本的文档叙述,虽然感觉大部分都是在抄文档。不过现在还看不到Lab 3的实验题。
### 明日预定任务:玩
明后两天约好兄弟出去玩了,爽。
## Day 19
玩。
## Day 20
继续玩。
晚上回到家了,累了。
### 明日预定任务:Lab 4基础文档
7月下旬就没多少时间搞rCore了,现在要赶快把一些边边角角的东西写完了。
## Day 21
### 任务1:Lab 4基础文档
重新过了一边Lab 4的流程。基本文档也写了,剩下思考题和实验题的部分。
不过目前都是从 Tutorial 自己提取 Lab 4 相关代码,感觉和文档中有些许区别。
### 明日预定任务:实现一种线程调度算法
明天实现一种线程调度算法。现在Lab 4里面有 FIFO 和 HRRN 算法,如果找不到新的好算法,那就自己重新实现一次。
如果可以的话,最好还能整理一下文档。
7月20号开始要学习英语了,每天花在这里的时间要大幅减少了。
## Day 22
### 任务1:实现一种线程调度算法
由于调度器的 `Schedule` 特性的限制,因此无法实现完整的多级反馈队列算法,只能对其部分修改,以适配接口。
### 任务2:Lab 3 + 4 的实验题
发现实验题终于发了出来。但是明天开始学英语,能花在这一方面上的时间就减少了。
Lab 3的实验题框架还没出来,只能先整Lab 4。
### 明日预定任务:Lab 3 + 4 的实验题
累。
## Day 23
### 任务1:完成Lab 4(上)实验题 + 文档
文档写的七七八八,之后再修补。
### 明日预定任务:Lab 4(下)实验题
把Lab 4解决,然后恶补一下设备树和文件系统。
## Day 24
### 任务1:完成Lab 4(下)实验题
实现 Stride Scheduling 调度算法,比较轻松。
### 明日预定任务:Lab 5文档
Lab 5的内容还需要进一步加深理解。
## Day 25
### 任务1:学习设备树和文件系统
看了看linux文档,还看了一些csdn。基本理解了设备树和文件系统的原理,补回了这两个方面上的缺漏。
### 明天预定任务:Lab 5+6 大体文档
这两章的文档由于基本都基于现有的工具,对现有的规范进行实现,所以基本上都以 Tutorial 上的文档为主。先把大体文档和流程过一遍,然后准备做实验题。
## Day 26
### 任务1:Lab 5+6 大体文档
复制黏贴复制黏贴复制黏贴......
### 明日预定任务:实验六
一边学托一边实验,有点难顶。
## Day 27
### 任务1:实验六
除了实验六的挑战实验以及实验三的页表置换实验,其他都做了。下阶段还是整理整理文档吧。
### 明日预定任务:整理文档
快到ddl了,要准备整理文档了。
## Day 28
### 任务1:整理文档
补充了一下文档,加了一下运行结果。
### 明日预定任务:整理文档
整理一下文档,然后提交了。
## Day 29
### 任务1:整理文档
最后添加了一个总结性的文档。不过也没写什么有用的。暂时休工一会。
## Day 30
emmmm,今天忙着学英语,只把 zCore 环境搭好了,然后通过了编译,用了 busybox 。
## Day 31
学英语。然后今天剩余时间把*王润基*学长的[zCore论文](https://raw.githubusercontent.com/wiki/rcore-os/zCore/files/pql-thesis.pdf)看了。
## Day 32
学英语。看了一下 hal 层和其 bare 的代码实现,linux 的实现没看。
## Day 33
由于半年前的一份代码出了问题,被人催着改了一整天,很困,没心情看 zCore。
## Day 34
### 任务1:阅览完 Fuchsia 的 Kernel-Object 文档部分
感觉非常不好意思。过了这么久才看完 Fuchsia 的 Kernel-Object 文档,还是因为最近事情有点多,不过开始能够将部分时间匀回来了。
### 任务2:阅读 zircon-object 源代码
由于个人打算处理 Signal 部分,所以不可避免地需要先将前面的内容全部看一遍,困难++。
目前今天看完了 `zircon-object/object` 部分的代码,同时看了 `zircon-object/task/thread` 的代码。
`thread` 部分的内容,可以看见[论文](https://raw.githubusercontent.com/wiki/rcore-os/zCore/files/pql-thesis.pdf)中的 `Future` 机制的使用,现在大致能够理解。
### 明日预定任务:继续阅读 zircon-object 源代码
需要将 `zircon-object/task` 部分全部看完。因为这一块和 Signal 的部分非常的紧密。
考虑到 `thread` 部分已经看完了,估计剩余的部分应该不会太耗时。
之后打算再看 `zircon-object/ipc` 部分,才能够开始进军 Signal 的部分。
不过明天下午需要模拟考,可能时间不太够。加油吧,希望能在返校前(08/25/2020)至少做出一点文档注释来。
## Day 35
英语考试。鸽了。
## Day 36
### 任务1:阅读 zircon-object 源代码
今天大致看完了 `zircon-object/task/thread` 的代码。
其实很多部分都是互相嵌在一起的。下一步正是要想办法一步一步解开这些步骤。
### 明日预定任务:继续阅读 zircon-object 源代码
需要将 `zircon-object/ipc` 部分全部看完。这一块和 Signal 的部分更是非常的紧密。