- daily_documents:每日笔记
- part1-exercises-for-rust:rust的一些小练习
- practice:rust写的一些小程序
- labs:rCore的lab
在此阶段实现的简易操作系统仓库:https://github.com/yunwei37/MyrCore
后续将会继续完善。
可供检查的具体实现目录:
zCore 开发的最终报告:https://github.com/yunwei37/zcore_migration_notes/blob/master/report.md
七月
Mon | Tues | Wed | Thur | Fri | Sat | Sun |
---|---|---|---|---|---|---|
1 (D1) |
2 (D2) |
3 (D3) |
4 (D4) |
5 (D5) |
||
6 (D6) |
7 (D7) |
8 (D8) |
9 (D9) |
10 (D10) |
11 (D11) |
12 (D12) |
13 (D13) |
14 (D14) |
15 (D15) |
16 (D16) |
17 (D17) |
18 (D18) |
19 (D19) |
20 (D20) |
21 (D21) |
22 (D22) |
23 (D23) |
24 (D24) |
25 (D25) |
26 (D26) |
27 (D27) |
28 (D28) |
29 (D29) |
30 (D30) |
(D31) |
八月
Mon | Tues | Wed | Thur | Fri | Sat | Sun |
---|---|---|---|---|---|---|
1 (D32) |
2 (D33) |
3 (D34) |
4 (D35) |
5 (D36) |
||
6 (D37) |
7 (D38) |
8 (D39) |
9 (D40) |
10 (D41) |
11 (D42) |
12 (D43) |
13 (D44) |
14 (D45) |
15 (D46) |
16 (D47) |
17 (D48) |
18 (D49) |
19 (D50) |
20 (D51) |
21 (D52) |
22 (D53) |
23 (D54) |
24 (D55) |
25 (D56) |
26 (D57) |
27 (D58) |
28 (D59) |
29 (D60 | 30 |
前天就在github上面看到了活动信息,然后立马就投了简历和报名表;正好一直以来就对系统相关的信息很感兴趣,也很早就看到了rcore这样一个项目,暑假也没啥别的事情,这样的好机会当然不能错过啦。(就是今天傍晚才收到回复...所以今天算第一天吧)
相关的计算机原理知识大致都了解过一遍,但没有什么很好的实践;学校教的是MIPS体系结构,rust大名如雷贯耳,但也未曾上手。大概还是有挺多东西要学的。
对于课程的计划时间表,也许有点希望尝试一下把这几个部分进行一定的交叉(?),从了解rust语法和RISC-V的原理开始,结合rcore labs相关的源代码阅读和一定的rust实践工作交叉进行...
今天大部分时间还是花在了mit的6.828上面(继续之前的学习),晚上才算是真正开始(入坑)rust。
主要参考资料:Rust 程序设计语言
- 安装并配置环境;换到国内源
- Hello, World!
- 简单的猜猜看游戏
参考今日文档记录:Day1_rust_beginner.md
顺带瞻仰了一下rcore的设计论文,晚上去了一家还不错的日料店(吃到了河豚锅、海胆刺身还有很不错的土瓶烧!)
rust看起来真好玩
waiting for file lock on package cache lock
折腾了一会,虽然解决了问题但并不很清楚其发生的原因;- 大概了解了一下rust的设计理念,但语法还需要更深入地学习;
- 睡个好觉,明天继续看rust基本知识;
- 简单了解一下 RISC-V 体系结构;
- 翻翻rCore的论文和tutorial,大概了解一下lab是要做什么怎么做的;
主要参考资料:Rust 程序设计语言
继续阅读 Rust程序设计语言,梳理相关语法;
- 常见编程概念
- 所有权
- 结构体
- 枚举、方法匹配
- 使用包和crate
- 集合
- 错误处理
- 泛型、trait 和生命周期
编程:小练习题:
Small exercises to get you used to reading and writing Rust code!
- quiz 1-4
- variables
- if
- function
- primitive_types
- structs
- strings
- enums
- tests
- modules
- macros
- move_semantics
晚上去吃了甲鱼生蚝火锅x
参考资料:
Rust语言操作系统的设计与实现,王润基本科毕设论文,2019
- 大致了解了一下rCore的基本架构和设计实现思路;
- 大致了解了一下rust设计操作系统的相关语言特性和能力;
- 不知道现在rCore相比于2019年的这篇文章,具体做了哪些演进呢
- 对于rust的一些语法特性并没有特别清晰熟练,还需要更多的阅读和练习
- 部分笔记还没有整理
- 好好睡觉,明天继续深入rust(应该可以完成 Small exercises 的部分,并看完 PL,再考虑下一步计划
- 简单了解一下 RISC-V 体系结构;
- 尝试编译一下rCore,简单翻翻源代码长啥子样
Rust程序设计语言:
- 函数式与闭包
- 测试
- 智能指针
- 并发
- 模式
练习:做完了rustlings的部分;
Small exercises to get you used to reading and writing Rust code!
★ All exercises completed! ★
- (深刻感受到了如何和编译器编译器作斗争)
感觉还是比预想的要久一点的,主要是后面的一些练习(边看语法书边瞎蒙编译器结果)...不过感觉还是收获满满的
- 感觉大概了解了一下语法,接下来需要更多的练习和多部分特性更深入的理解和运用;
- 需要解决一下开发环境的问题(图形化连接qemu调试等等)
- 整理笔记和README
- 开始看lab和RISC-V;
- 继续练习和解决一些自己还不是特别清晰的语法特性;
- 补学校作业。
算是正式开始啦(可是还有作业没补完
今天由于有别的事情在忙,所以实际完成的部分并不多。
整理了先前的一些笔记;
阅读Rust程序设计语言:
- 部分高级特性;
- unsafe rust
参考资料:
- 第一到三章:
- 第十章:
- 尝试完成lab0;
- 完成部分rust的练习相关;
- 继续学习RISC-V
今天在写别的课的最后一点论文,没怎么整活qwq
(没有实际操作的话并没有挑战性啦...不过这是lab0)
尽量一个命令都不漏的详细记录,包含lab0和安装环境:
lab0的代码可以参考:
尝试整理了 RISC-V 的笔记;
顺手翻了翻这本书其他部分(真简短)
- 一些参考资料还没很仔细阅读,我希望先做lab1,边做边看;
- rust还不能说很熟练(虽然看懂lab0的部分没啥问题),需要继续做题;
- 需要对rust的配置了解多一点;
- 试试lab1
- 做题家x
- 把调试工具能不能弄得更顺手一点
这部分参考的是 27-labdoc 分支的内容,可能并不稳定;(补充:第二天被合并到了主分支了
实验报告笔记,以及添加的练习内容:
另外也阅读了一下lab2的实验教程,准备明天继续看看;
lab1 :
大致了解了中断的实现方式,也自己尝试实现了一小部分的中断实验;
把rust程序设计语言
复习了一下(以及之前跳过的部分),顺带翻了翻 rust by example
,以及 hard way,考虑了一下要写什么:
明天开始写小习题;
- 感觉之前看书可能有些略过并不是很仔细的地方,还需要再巩固一下;
- lab的教程相对还是有一点简略(没有更新过的版本,似乎文档的改进工作正在进行中,可能还是结合实际代码阅读的效果会好一些;还有一些练习题的部分也不是很完善,不知道后续会不会被放进考核内容里面去;
- (希望有空可以继续 xv6 的学习,能更深入地理解操作系统原理,也可相互对照;
- 感觉自己表达的能力可能并不是很好...
- lab我还是希望先阅读代码,在此基础上尝试做一些改进(可以自己尝试写一点模块,比如线段树,和最终代码相互对照?不过实验指导似乎还是教程性质的,并不是什么题目);
- 整整 lab2;
- 整整 rust的中长练习实践;
继续根据 42 - labdoc 分支(还未合并)的代码学习lab2:
lab2实验指导笔记:
大致了解了一下,打算等代码合并以后开始写线段树和伙伴系统相关;
尝试开始写了一小部分 rust 的 hardway 练习,完成了双向链表的建造;
- 感觉对rust的智能指针等内容还是有一些不熟悉的地方;
- 大致浏览了一下基本的代码组成,但需要进行lab2的实验才会有比较深刻的理解:
- 这里是从数据结构(双向链表、树等等开始写的,感觉对 rust 的智能指针、内部可变性的一些主题之前理解还是不够深刻,看书也不够仔细,还需要再补一补;
- 继续今天的两个任务;
今日 lab2 的分支已经合并进去了,把代码拉下来阅读一下;
- 查阅了一些线段树和伙伴算法相关的资料,阅读了一下代码,准备明天开始写;
目录:
part1-exercises-for-rust\hardways\README.md
用 rust 完成 笨办法学c语言
中的排序算法,二叉树、堆栈等;
这两天在忙学校短学期的一点点事情...进展有点慢qwq
感觉 笨办法学c语言
的简单题目似乎还不如去写leetcode;
完成了数道 rust 的 leetcode 习题,附加代码使用c语言编写;应该明天就可以结束rust的小练习部分
完成了15道 rust 练习题的部分:
具体记录可参考:
part1-exercises-for-rust\hardways\README.md
如果之后有做其他的小练习,比如leetcode这样的,也会记录过来的啦
- 练习题做完15道之后确实对 rust 的理解更上一层楼了,也能尝试用rust实现一些算法,但是感觉还是挺浅薄的...可能还是需要一些工程上的练习
今天短学期有不少事,所以没怎么整
- 感觉真是大佬云集...不胜惶恐...;
- 感觉要加紧做了;
- os lab的部分暂时感觉还并没有很深入地探讨过,可能打算先跟着教程实现一遍代码;
- 今天短学期ddl,所以做的也并没有很多
- 就这两天比较忙...接下来应该可以专心做os的事情了...
- 今天也好忙qwq
- 看完了tutorial剩下的几章,大致对整个实验有个初步的了解
- 今天也好忙qwq
- 仔细研读了一下lab2的代码,和实验教程对应起来;
- 自己尝试参考代码和教程手写实现了部分 lab2 的内容;
- 今天也好颓qwq
- 使用线段树进行内存分配可以参考 https://github.com/mufeng964497595/seg_tree_memory_management
- 写了 lab2 线段树的代码(单个页面分配),但实际上在这种情况下并没有多大意义,时间和空间复杂度都更大(除了最坏情况下的空间复杂度);
- 笙笙啊笙笙 - 你不能再这样下去了qwq
- 今天好颓,不想干活(前几天在写短学期的MC项目)
- 更新了一部分lab2的内容;
- 完成了页面分配算法的测试工作;
- 基本完成 lab2(参照代码示例
- 我好惨,今天生病了
整理完成 lab3 学习笔记和代码
代码部分可参考 lab3 文件夹
开始整理部分 lab4
- lab3 的实验框架还没有整理完成,因此打算延迟一小段时间再开始完成实验题;
修改了一些 lab3 的内容
基本整理完成 lab4 学习笔记和代码;
还留有一些 bug 还没有解决
回过头看了一下伙伴系统的实现方式;如果采用链表实现的话,可能也会涉及动态分配内存的方式(或者采用数组分配的链表);因此可能采用数组方式进行实现。
- tutorial中存在一些定义不兼容;
- 代码版本似乎比较混乱;现有根据 toturial 实现的部分并不能编译运行;
- 尝试根据lab4分支中进行观察和调整,但lab4分支中的代码实际上包含完成 lab6 用户进程之后的部分;根据教程一步步手写完成的版本则不应当包含 lab5 和 lab6 的内容(但实际上后期耦合和修改的部分很多
- ( lab4好像是尝试根绝 toturial 复现代码过程中第一个遇到困难的
- 解决今天lab4遗留的一些问题;
- 做lab5
- lab4实验题
- 更新了一下 lab4 ,修复了一下昨天没法编译的问题(代码有很多不兼容的地方)
- 现在应该基本没问题了(尝试跑起来了多线程),虽然线程终止的时候似乎还是有一点问题没有解决;
打算解决掉 lab5 再回过头来看实验题;
这里先做完了lab4的实验part1:
完成了一部分;
- 对于简单的main函数进行fork不会出现问题,对于notebook程序可能会发生错误;(有可能是因为此时该线程被阻塞,在等待中断的过程中fork,这里复制的是内核线程:
Thread {
thread_id: 0x3,
stack: Range {
start: VirtualAddress(
0x1080000,
),
end: VirtualAddress(
0x1100000,
),
},
context: None,
} terminated: unimplemented interrupt type: Exception(InstructionPageFault)
cause: Exception(InstructionPageFault), stval: 0
- 调试工具掌握还不熟练(不过打log倒是挺熟的
完成了 lab5 的笔记和代码整理;
基本完成了 lab6 的笔记和代码整理;
- 感觉 lab4-6 和前期相比省略的内容还是比较多,可能还是有不少不完善的地方吧...
- 对于整个 lab 实验的代码和实现基本过了一遍,接下来打算做完实验题看看有没有什么自己想改进的地方;
- 感觉了解的操作系统具体实现还是比较少,可以先看看其他的书和rcore的实现;
- 还有一些细节问题和思考不全面的地方需要回头再整理清楚一下;
完成了 lab4 实验题 part2 部分
daily_documents\Day21_lab4_practice.md
完成了 lab6 的实验题:
daily_documents\Day23_lab6_practice.md
顺带关于 lab5-6 的小细节发了一点pr
整理了一下最终的报告文档;目前基本上 lab 的部分也已经接近尾声了,从头到尾自己根据文档实现了一遍,也完成了大部分实验题的内容(除了一点挑战实验和框架还没打好的页面置换算法)
daily_documents\云微的-rCore-阶段性总结报告.md
尝试阅读了一下 rCore 和 zCore 的源代码;
学堂在线《Linux 内核分析与应用》课程:概述、中断、进程
感觉自己具体操作系统工程实践方面还是了解的不够多,与其去测试一些新增加的算法,不如先学一点别的东西,可以互相对比照应;
- rcore-os/zCore#75 遇到了和这个issue一样的bug
看起来实验框架终于整理好了,把这个剩下的也完成一下;
参考这里:
daily_documents\Day18_lab3_practice.md
另外也大致了解了一下 rCore 和 zCore 的整个架构;
好像有一点问题...(被公开处刑了)...要去修复一下
之前实现的好像并不是标准的时钟页面置换算法,有一点偏差
- 今天忙了一点小学期的收尾工作,所以没做太多
- 继续看《Linux 内核分析与应用》;
是摸鱼的一天呢
中啦
深入分析Linux内核源代码阅读笔记 第一章、第二章
深入分析Linux内核源代码阅读笔记 第三章、第四章、第五章
《Linux 内核分析与应用》系统调用
- 继续看了部分《rust编程之道的章节》
- 《Linux 内核分析与应用》
- 尝试运行 rCore 和 zCore,浏览了一下相关文档;
- 准备出发
- 在火车上浏览了部分 zCore-Tutorial 的教程;
- 看了看 zCore 的系统调用部分;
今天是 Hackthon 的第一天
大致浏览了一遍相关资料(虽然很大一部分没看懂),目前对整个 zCore 的大致框架已经有了一个概念
晚上去吃了好吃的
- 继续浏览代码,准备开始干活;
- 不知道为什么头很晕...可能强度有点大
相关 pull-request: rcore-os/zCore#125
这一部分主要参考linux的文档:system reference manuals section 2: System calls
另外也尝试简单地修复了一下 uname
的系统调用,似乎要把 rCore
换成 Linux
才可以;
- 还有很大一部分
syscall
并没有完成移植,这部分可能是接下来的主要目标;希望能跑起来gcc
作为这一个月的目标; - 需要进一步完善相关单元测试,可以以单元测试驱动开发;
- 尝试补全 Linux-loader 和 Linux-object 的代码;
- 目前只是实现了
linux syscall
的一个小子集,很多部分的代码也并不完善;接下来打算先整理一个TODO
的列表出来:- GCC 需要使用哪些系统调用;
- 哪些系统调用可以用空调用函数蒙混过关;
- 哪些系统调用需要继续完善;
- 哪些系统调用可以很方便地移植;
- 哪些系统调用很复杂但是一定需要实现(实现一个子集);
- 哪些系统调用有 bug
- 在跑起来 GCC 和 make 之后,可以尝试 libc-test
- 之前的 pull-request 被合并啦
相关 pull-request: rcore-os/zCore#128
- 系统调用的错误处理似乎并不是特别完善;感觉可以再想想会不会有更好的错误处理方案;
- 感觉 pipe 的 syscall 似乎并不是很复杂,也许可以尝试一下;
-
搭建了相关的单元测试框架,但还没有得到合并;
大概是这样的:
Currently you can add c language unit test like this:
- add c files in
linux-syscall/test/
; - add a cargo unit test in
linux-loader
like ( the program name is the same as source file )
#[async_std::test] async fn test_pipe() { test("/bin/testpipe1").await; }
- if you want to run the unit test locally right away, you can run
make rootfs
again. - if you want to inspect the output of program, maybe output the content to a file and read it in rust can be helpful.
- add c files in
-
完善了
pipe
的 syscall,并增加了相关测试; -
具体内容可以参考 pull-request;
- 对于 rCore 异步相关的代码有更多的了解,向勇老师提及的将操作系统内部的 syscall 等机制全部替换为 async 的异步协程确实是个非常有趣的话题,值得进一步探究
- 对于 zCore 来说,我们需要用这种机制完成信号量等内容;
- 测试覆盖和文档内容还需要继续增加,同时通过测试来发现 bug ;
这几天的内容结束啦
这是我第一次参加这样的活动,感觉认识了非常多厉害的朋友,收获也非常丰富呢
- 尝试跑起来了 libc-test
- 加了点 time 的系统调用
- libc-test 似乎还是有一点编译上面的问题?某些测试可以运行但是并不能正常测试,可能是并没有正确调用系统调用函数;math部分可以正常运行;也可能是编译环境的问题
- 另外补上了 sys_utimensat,现在可以正常使用 touch 创建文件;
- 修改了一点之前犯蠢的测试代码,现在可以使用c语言进行正常的单元测试;
- pull-request: #135 ,包含time和touch相关的被合并啦
- 一些文档和杂七杂八的系统调用接口以及测试的打杂的活,具体参考这里:#142
- 已经被合并
- 目前的状态是 rustc 可以运行输出帮助信息,但还暂时没有办法进行正常编译;通过查日志可以发现可能是 pipe 之后跟着的 poll 的问题,显示有事件阻塞;
- ly 大佬已经把 eventbus 修好了,之后去加一下 pipe 的 eventbus 相关内容;
- 准备去修复一下 rcore-fs 里面 symbol link 相关, 可能要实现 create2 函数;
- ly 大佬编译好了 gcc 并成功在上面跑起来啦!
- libc-test 目前的想法是写个脚本先试着运行一下并查看输出;
- 这两天也有些时候在解决测量学实验和计算机组成课程的内容,以及其他杂七杂八的考试,所以时间有可能会稍微不那么多一点...
- 着手修复 pipe 的相关问题,加上了 async-poll 但还是不能正常使用;
- 可以考虑把libc-test在zcore上面编译运行
- 例会;
- wrj学长解决了 libc-test 的 github ci 部署的事情;
- 提交了一个相关的pr,解决了一下 shell 里面命令执行 path 的问题:#149 ,顺带加了一下pipe
- 今天去试着跑了一下 libc-test:
- #152 解决了一个小测试,顺带补了一点文档;
- 似乎很多没办法通过的测试还是和 symlink 的绝对路径相关;
- 浮点数运算差异应该可以不用管
- 部分是系统调用还没有实现或者实现有部分差异;
- 感觉接下来可以做一些 ipc 共享内存相关的部分?
- 共享内存部分需要虚拟内存的支持,实现差异可能有点大;
- 先从信号量部分入手,相关 PR:
- #156
- 完善了一下 #156 的文档,并进行了一定的重构修改和相关测试
- #156 已合并到主分支
今天是摸鱼的一天呢...
- 主要是学校计算机组成的实验要验收了,细节需要补一补
- 还有一门短学期的GIS课也要验收了
- 接下来九月初还有五门考试要考,所以可能时间不那么多了...
- 再回过头来翻了翻 rust 编程之道,主要是之前忽略掉的一些小细节...
-
今天是看看代码的一天
-
大概看了看相关的内容,似乎大块的可以迁移部分已经基本完成,或者就是需要硬件层的支持(比如网络部分);
-
接下来大概可以尝试的有三个小部分:
- 共享内存:需要虚拟内存支持,rcore中间是使用类似 toturial 的做法,zcore 中间是面向对象的包装方式;
- epoll等 io多路复用,尝试了一下,也涉及到一些文件相关的概念转换;
- 内存锁机制的完善,目前我们只有信号量相关和eventbus,同时mutex也并不是原子性的,可能需要完善一下关中断的自旋锁;
-
另外好像 libc-test 的测试又有点奇怪的问题了?
-
之前说的 symlink 写了一点也还没继续...
-
以及我觉得接下来也可以把这段时间的一些工作,比如文档,新增加和改善的功能,整合到rcore里面去?
- pull request: #160
- 大概写了一下关于共享内存的支持,参考mmap采用 vmObject 完成对虚拟内存段的映射(虽然理解还不是很深刻,也需要再看看具体有什么差异;
- shmctl还没有,看看能不能整个(类似sem
- 继续完善之前的 PR,完成了shmctl系统调用,并添加了对shmget的flag处理;
- 基本可以通过 libc-test 的相关测试;
- 去看了一下 io多路复用 的内容;
- 目前不清楚 条件变量等的使用方式是否可以被 async 代替;
- select 和 poll 的差异并不是很大,基本可以做;
- (这两天有点晕晕的...而且下周就要考试了也要抓紧时间复习一下了...
- 上一个pr已经被合并了;
- 复习ing
- 继续深入学习了一下 async/await 的相关知识;
- PR: 164
- 在 zcore 中完成 async、await 的 select syscall;
- 添加相关的测试和文档;
- 复习考试;
- 参考:Asynchronous Programming in Rust,完善在 async select/poll 中设置定时器相关的工作;
- 完成相关的 PR 并提交审核;
- 基本从 rCore 到 zCore 的迁移就吿一个段落了。
- 准备报告。