Files
rust-based-os-comp2022/scheduling-1.md
2023-07-04 19:58:10 +08:00

135 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2023年春夏季开源操作系统训练营第一阶段
- [新闻与纪要](./news.md)
- [常见问题解答](./QA.md)
- [Learning Resource](./relatedinfo.md) (训练营学习资源)
- Online Ranking (训练营在线排行榜)
- [第一阶段排行Rust Lang](https://learningos.github.io/rust-rustlings-ranking/)
- [rustlings Rust编程训练教室](https://classroom.github.com/a/H1iQ2GNX)
欢迎在校学生/工程师在2023年春夏季参加清华大学、CSDN、阿图教育等共同举办的**2023年春夏季开源操作系统训练营**活动2022.04.012023.08.01),本次活动分为两个阶段:
- 第一阶段2023.04.012023.05.01线上自学Rust编程和OS基础并进行[Rust语言编程自学](https://github.com/LearningOS/rust-based-os-comp2023/blob/main/scheduling-1.md#step-0-%E8%87%AA%E5%AD%A6rust%E7%BC%96%E7%A8%8B%E5%A4%A7%E7%BA%A6714%E5%A4%A9)、[Rust语言编程实验](https://github.com/LearningOS/rustlings-template)、[RISC-V处理器学习](https://github.com/LearningOS/rust-based-os-comp2023/blob/main/scheduling-1.md#step-1-%E8%87%AA%E5%AD%A6risc-v%E7%B3%BB%E7%BB%9F%E7%BB%93%E6%9E%84%E5%A4%A7%E7%BA%A627%E5%A4%A9) **注意如第二阶段选择基于C语言的uCore Tutorial做OS Kernel实验可跳过Rust语言编程自学和实验。**
- 第二阶段2023.05.012023.07.01OS内核学习与实验
- [C-based uCore Tutorial Kernel学习&实验](https://github.com/LearningOS/uCore-Tutorial-Guide-2023S)
- [Rust-based rCore Tutorial Kernel学习&实验](https://github.com/LearningOS/rCore-Tutorial-Guide-2023S)
- 可选完成第二阶段后2023.08.20OS竞赛级实战模拟训练[OS Kernel supporting Linux Apps实验](https://github.com/LearningOS/oscomp-kernel-training) ,主要是**用Rust语言设计实现支持Linux APP的OS Kernel**,大约要支持<100个左右的Linux Syscalls能通过上百个动静态链接的Linux App测试用例。
- 可选完成第二阶段后2023.08.20[组件化操作系统设计与实现](https://github.com/rcore-os/arceos)设计实现可灵活组合的内核模块可灵活定制的内核框架以及基于组合态OS的用户态应用程序。
- 可选完成第二阶段后2023.08.20[可定制的hypervisor](https://github.com/LearningOS/RVM-Tutorial)设计实现可在裸机或Linux中运行的Hypervisor支持x86/ARM/RISC-V等多种硬件平台。
- 可选完成第二阶段后2023.08.20如果有其它有趣的想法或愿意参加更有挑战的训练比如实现支持Rust协程的OS支持unikernel&微库形态的OS等欢迎提出联系LearningOS开源社区负责人李明老师微信idlimingth和助教。
如有兴趣参加请在2023年04月01日前请在填写[训练营报名登记表](http://chyyyuuu.mikecrm.com/2zxG8dp)填写相关个人信息,并加入[相关微信群](./2023os2train.jpg)。获得邀请后将开始参与本次训练营活动。完成本次活动第一阶段2023.04.012023.05.01的同学如果通过review将可在2023.05.012023.07.01,开展第二阶段[OS Kernel supporting Linux Apps实验](https://github.com/LearningOS/oscomp-kernel-training)。训练营结束后,部分表现突出的同学将获得训练营优秀证书。鼓励同学继续以开源社区的方式参与到企业/科研院所的操作系统实习/实践/工作/学习等相关的活动。
> 我们也在持续探索和改进开源操作系统训练营,即这个活动不仅仅局限在 2022.11.012023.02.01。我们希望建立的是一种长期持续发展的操作系统训练营模式,即各种学习资源都开源并整理集中在一起,导师/助教和学生/爱好者之间基于要做的实验或项目不定期/定期的进行交流。学生/爱好者完成了一定程度的学习和训练后,除了自身得到能力的提升外,还可获得相关证书和就业/学习等机会和相关推荐等,推动他在未来的进一步发展。
## 目标:
**培养具有开源思想的合作者,搭建开源合作平台。**
**探索把现代系统语言Rust和灵活开放的系统结构RISC-V带入到操作系统的架构与设计的创新中来思考未来的操作系统应该是什么样。**
## 宗旨:
**希望本活动的组织能为操作系统爱好者提供一个活跃的开源社区环境为对Rust、RISC-V和操作系统感兴趣的人士营造一个平等的学习与交流空间吸引更多对操作系统感兴趣的人士参与。**
## 相关信息:
- [参加2020--2022 OS训练营学生的blog](https://rcore-os.github.io/blog/)鼓励参加2023 OS训练营的同学把自己在学习过程中的感悟/收获等写成blog生成pr并提交到 <https://github.com/rcore-os/blog> 上,让更多人看到你的进步!
- **注意** 为及时了解和指导同学的学习和实践情况并推动学生相互帮助本次活动要求学生把每周学习实践的过程记录Markdown格式放在github上自己的公开repo中。可参见[每日学习实践的具体例子](https://github.com/GCYYfun/DailySchedule)和[2020年OS训练营同学的每日学习情况汇总](https://github.com/rcore-os/rCore-Tutorial/issues/18 ) 。请参加实习的同学把记录每天的进展的git repo网址 更新到[2023年OS训练营同学的每日学习情况汇总](https://github.com/LearningOS/rust-based-os-comp2023/issues/1) 中。要求每位同学在自己的git repo中记录自己的每周进展其他同学也可以参考学习。
- **注意** 第一阶段学习中的技术问题,建议基于[OS训练营github discussion](https://github.com/LearningOS/rust-based-os-comp2023/discussion) 发出并讨论。
## 第一阶段活动安排
### 总体学习要求和成绩考核方式
- 在[学习实践过程记录表](https://github.com/LearningOS/rust-based-os-comp2023/discussions/170)上登记自己每日/周学习记录情况的repo网址并在这个repo上记录每日/周学习记录情况 (成绩分数20%)
- [学习记录的标杆1](https://github.com/LearningOS/record)浙江大学本科生徐文浩的2020开源操作系统训练营的过程记录是大家学习的榜样供大家学习参考。
- [学习记录的标杆2](https://kiprey.github.io/tags/uCore/)湖南大学本科生肖政杭的自学ucore for x86的过程记录是大家学习的榜样供大家学习参考。
- 在[第一阶段学习的讨论](https://github.com/LearningOS/rust-based-os-comp2023/discussions/)上的提问和回答问题情况 (成绩分数30%)
- 要求的[Rust-lang Lab Test based on Rustlings采用Github Classroom模式的Rustling小练习](https://classroom.github.com/a/H1iQ2GNX) 的完成情况 (成绩分数70%)
#### step 0 自学rust编程大约7~14天
前提条件: 要求有基本数据结构算法基础相对了解或熟悉C语言等编程.
1. 自学基础知识:[阅读书籍/课程/视频等资源汇总](https://github.com/rcore-os/rCore/wiki/study-resource-of-system-programming-in-RUST)
- 推荐:[Rust语言圣经(Rust教程 Rust Course和配套练习)](https://course.rs/)
- 推荐:[半小时快速了解Rust](https://fasterthanli.me/articles/a-half-hour-to-learn-rust)
- 推荐:[Rust速查表cheatsheet](https://cheats.rs/) 该项目不仅提供了基础的语法速查还有执行顺序详解和编写时需要关注的注意事项。项目还包含了示例代码EX、书籍BK、标准STD等相关资料的扩展。
- 推荐:[清华计算机系大一学生2022暑期课程Rust程序设计训练有课程视频](https://lab.cs.tsinghua.edu.cn/rust/)
2. 自学编程
- [2023春夏季OS训练营--rustling训练](https://classroom.github.com/a/H1iQ2GNX)采用Github Classroom模式的Rustling小练习点击上述链接形成自己的练习用repo
- 要求:**必须完成** 。完成所有练习后,执行 ``git add; git commit -m"update"; git push`` 命令把更新提交到GithubClassroom的CI进行自动评测。要求小练习全部通过GithubClassroom的CI自动评测。
- [学习系列视频Rust中文社群线上学习室--通过 Rustlings 学 Rust](https://space.bilibili.com/24917186/video)
**提示基于github classroom的开发方式**
基于github classroom可方便建立开发用的git repository并可基于github的 codespace在线版ubuntu +vscode在线开发使用。整个开发环境仅仅需要一个网络浏览器。
> codespace 不是必须的。如果是本地的ubuntu中建立开发环境可在shell中执行 `make ubuntu_local_setenv` 来自动安装配置开发环境(执行需要 `sudo` root 权限,仅需要执行一次)。
1. 在网络浏览器中用自己的 github id 登录 github.com。
2. 接收 [Rust-lang Lab Test based on Rustlings 的github classroom在线邀请](https://classroom.github.com/a/H1iQ2GNX) 根据提示一路选择OK即可。
3. 完成第二步后你的rustings实验练习 的 github repository 会被自动建立好点击此github repository的链接就可看到你要完成的实验了。
4. 在你的第一个实验练习的网页的中上部可以看到一个醒目的 `code` 绿色按钮,点击后,可以进一步看到 `codespace` 标签和醒目的 `create codesapce on edu` 绿色按钮。请点击这个绿色按钮就可以进入到在线的ubuntu +vscode环境中
5. 再按照下面的环境安装提示在vscode的 `console` 中安装配置开发环境rustc等工具。
6. 然后就可以基于在线vscode进行测试 (执行命令 `rustlings watch` ),编辑代码的循环实验过程了。
7. 如果使用本地的环境进行rustlings的练习请按照接下来的步骤进行首先需要安装一个Linux的环境对于windows的用户推荐使用wsl2也可以使用vmware等虚拟机进行安装。如果在这一步存在问题请联系助教。
8. 创建ssh key。在linux环境下使用` ssh-keygen -t rsa -b 4096 -C "你的邮箱" `命令创建ssh key下面的选项全部直接敲回车即可。
随后使用` cat ~/.ssh/id_rsa.pub` 命令查看生成的公钥,并完整的复制下来。
在github仓库界面点击自己的头像选择`settings`。进入到设置页面后,点击左侧的`SSH and GPG keys`选项。点击`New SSH key`选项并将复制下来的内容粘贴上去添加该ssh key的描述。随后点击`Add SSH key`,并一路点击确认即可。
9. 在本地安装rust。进入linux环境下参考rcore 教程 http://rcore-os.cn/rCore-Tutorial-Book-v3/ 中, 第零章操作系统概述实验环境配置的内容找到Rust 开发环境配置的章节,相应配置即可,你可以同时将后续需要的环境也配置好。
10. clone实验仓库到本地。在前面点击链接生成的仓库中同样点击醒目的 `code` 绿色按钮,选择`local`下的`ssh`选项复制下面的链接。随后回到本地linux环境下使用`git clone 复制的链接`的方式将目标仓库clone到本地。随后使用`ls`命令查看自己clone下来的文件夹再使用`cd`命令进入到该文件夹下,使用`cargo install --force --path .`安装rustlings。
11. 练习rustlings。使用vscode等编辑器进入clone下来的目录下的`exercises`文件夹,依次完成对应的练习。使用`rustlings run 练习名称`去运行对应练习,也可以使用`rustlings hint 练习名称`查看题解。
12. 提交。当做完部分或所有练习之后,执行 ``git add; git commit -m "update"; git push`` 命令把更新提交到GithubClassroom的CI进行自动评测。你可以在github仓库页面的actions页面看到你的CI提交结果或者 https://learningos.github.io/rust-rustlings-ranking/ 上面查看自己的评分。
13. 上述步骤有任何问题都可以找助教。
- Option[32 Rust Quizes](https://dtolnay.github.io/rust-quiz/1)
- 要求:小练习全部通过。(**非必须完成**
- Option[exercisms.io 快速练习(88+道题目的中文详细描述)](http://llever.com/exercism-rust-zh/index.html)
- 要求:大部分练习会做或能读懂。(**非必须完成**
- [exercism.io官方站点](https://exercism.io/)
#### step 1 自学risc-v系统结构大约2~7天
前提条件:要求有基本计算机组成原理,计算机系统结构基础。
阅读《计算机组成与设计RISC-V版》第一、二章可以在整体结构上对 RISC-V 体系建立基本认知。再进行后面的学习比较有效果。
#### 自学材料和练习要求:
1. 阅读书籍和在线课程
- 自学[PPT for RISC-V特权指令级架构](https://content.riscv.org/wp-content/uploads/2018/05/riscv-privileged-BCN.v7-2.pdf)
- 自学[RISC-V手册一本开源指令集的指南](http://riscvbook.com/chinese/RISC-V-Reader-Chinese-v2p1.pdf) 重点是第10章
- Option自学[RISC-V特权指令级规范](https://riscv.org/technical/specifications/) 重点是与OS相关的特权硬件访问的规范内容Privileged Spec
- Option自学[RISC-V汇编手册](https://github.com/riscv-non-isa/riscv-asm-manual/blob/master/riscv-asm.md)
- Option[计算机组成与设计RISC-V 教材](https://item.jd.com/12887758.html) 这是完整的课程教材,不要求全部看完,请根据自己的需求选择。
- Option[计算机组成与设计RISC-V 浙大在线课程](http://www.icourse163.org/course/ZJU-1452997167) 这是完整的一门课,不要求全部看完,请根据自己的需求选择。
2. 其他参考学习信息
- Option[Berkeley CS61C: Great Ideas in Computer Architecture (Machine Structures)](http://www-inst.eecs.berkeley.edu/~cs61c/sp18/)
> Option的含义是如果有足够的时间建议看看否则在后续要用到时或需要查询进一步信息时再查阅这些内容。
3. 通过要求
- 掌握RUST编程理解RISC-V与OS相关的硬件特性中断异常系统调用寄存器特权级MMU...)。
One More Thing当你看到这感觉第一阶段还没开始还在想下一步要干啥时我们的建议是**Just Do It NOW!**