Browse Source

doc: 添加三个招新任务书 (#5)

* doc: 添加招新任务书

* add bss link

* modify pbl README.md

* 将move_to任务移动到源码阅读
黄铭涛 4 months ago
parent
commit
cdb5863765

+ 2 - 1
educational-learning-courses/00-contents.md

@@ -8,4 +8,5 @@
 
 ## 源码阅读任务
 
-- [task-kernel_init](task-kernel_init.md)
+- [task-kernel_init](task-kernel_init.md)
+- [task-move_to](task-move_to.md)

+ 1 - 1
educational-learning-courses/task-kernel_init.md

@@ -18,7 +18,7 @@
   - kernel/src/sched/mod.rs
   - kernel/src/time/timekeeping.rs
   - kernel/src/process/kthread.rs
-
+- bbs链接: https://bbs.dragonos.org.cn/t/topic/372
 
 ## 任务的简介
 

+ 31 - 0
educational-learning-courses/task-move_to.md

@@ -0,0 +1,31 @@
+# 分析 move_to 系统调用错误的修复
+
+**导师:** [Samuka007](https://github.com/Samuka007), Sig-Network, [email protected]
+
+**bbs链接:** https://bbs.dragonos.org.cn/t/topic/369
+
+## 任务说明
+
+查看bug修复的commit,知道为什么修改后行为正常了,[相关PR](https://github.com/DragonOS-Community/DragonOS/pull/673)
+
+## 初始化环境配置
+
+> 这里是其中一种基于worktree的分离做法,你也可以直接clone两次然后分别checkout到不同的commit
+
+首先 clone repo,但先不要像教程里那样跑bootstrap.sh部署环境,因为这个pr所属的开发环境比较旧,新旧工具链不兼容。进入repo文件夹根目录后,创建以下两个commit的worktree
+
+- 39203abc4c0c31f8f86586db75bd73ebc6194bf1
+- 9d9a09841ce2d650a41fed776916c0a11d52f92e
+
+然后像[部署文档](https://docs.dragonos.org.cn/introduction/build_system.html)那样,进入 new/old 的 worktree 文件夹,然后执行命令
+
+```bash
+cd tools && bash bootstrap.sh
+```
+
+这样就部署好了你的工作环境,并且可以同时在old/new分支之间进行比较/开发
+
+## 任务要求
+
+- 理解 move_to 在index node中的实现,比较新旧commit的区别
+- 有能力的可以再对文件系统相关的部分进行理解、解构乃至完善。

+ 2 - 1
project-based-mentorship/README.md

@@ -1,3 +1,4 @@
 # PBL 基于项目的学习
 
-// todo
+- [用rust写个能再DragonOS上跑的简易命令行程序](feat-cmd_program.md)
+- [重写部分UNIX socket](rewrite-unix_socket.md)

+ 49 - 0
project-based-mentorship/feat-cmd_program.md

@@ -0,0 +1,49 @@
+# 用rust写个能再DragonOS上跑的简易命令行程序
+
+**导师:** [val213](https://github.com/val213), Sig-Main, [email protected]
+
+**bbs链接:** https://bbs.dragonos.org.cn/t/topic/371
+
+> v0.1.0,后续需要的话可能会有补充
+
+> 这是一个相对灵活的任务,你可以尽情探索每个命令的高级用法和各种参数的灵活配置,依照工具的官方文档(例如Gnu xxx Manul),尽可能的实现该工具的各种参数。
+
+## 前置知识
+
+- 如何配置和启动DragonOS
+- Rust 基本语法
+- 对于常见系统调用的基本了解
+- RTFM & STFW
+
+## 具体要求
+
+首先你需要参照官方文档:如何为 DragonOS 创建一个Rust 应用:
+
+[Rust应用开发快速入门 — DragonOS dev 文档](https://docs.dragonos.org.cn/userland/appdev/rust-quick-start.html)
+
+然后使用 rust 编写一个 用户空间程序,并为其编写测试样例脚本或者程序,展示其效果。
+
+## 开发目标以及建议
+
+DragonOS 现有的命令可以进系统后在 `/usr/local/bin` 中 查看,不过由于这部分命令没有进行完备的测试,有可能存在错误或者未实现的命令。如果你有兴趣也可以进行测试并找到存在bug(与预期不符合的命令)的命令并试着找出问题所在和可能的解决方法。
+
+以下是我们暂时还没有实现但是 Linux 中又很常用的命令,可供你参考。如果你有别的自己想开发的命令行工具也可以。比如一个相对更加复杂的DNS解析命令行工具。
+
+> 注意,在开始之前,你需要先调研并确定你所需要的系统调用,在当前主线最新版本的 DragonOS 中是被支持的。
+
+- grep
+  - 从文件或标准输入中搜索并匹配特定的文本模式。
+- find
+  - 在目录中查找符合特定条件的文件或目录。
+- file
+  - 用于识别文件类型。
+- ps
+  - 显示当前运行的进程及其相关信息,如进程ID、状态、CPU/内存占用等。
+
+## 考察点
+
+1. 能够通过编译器的检查,并通过 DADK 部署到 DragonOS 上
+2. 在 DragonOS 上能够跑起来,但是部分功能不符合预期/跟Linux不一致
+3. 在 DragonOS 上能够跑起来,且功能符合预期,与Linux一致
+
+> 注:你有可能会遇到部分功能可以通过调用外部 crate 实现的情况,例如`grep` 本身的模式匹配(如正则表达式匹配)通常是通过编写程序逻辑来实现,而非依赖内核的直接支持。Rust 可以使用 crates(例如 `regex`)实现这一部分的逻辑。

+ 15 - 0
project-based-mentorship/rewrite-unix_socket.md

@@ -0,0 +1,15 @@
+# 重写部分UNIX socket
+
+**导师:** [smallcjy](https://github.com/smallcjy), Sig-Network, [email protected]
+
+**bbs链接:** https://bbs.dragonos.org.cn/t/topic/373
+
+**难度:** 中等
+
+**前置学习目标:**
+
+rust基本语法、智能指针以及常见锁的使用、tcp握手流程及其状态机
+
+**重写内容:**
+
+重写unix stream socket 握手过程。代码位于net/socket/unix下,需要尝试重写Inner内的Init、Listener、Connected状态结构体及其涉及建立握手的方法,重写Socket接口中的bind接口、connect接口、listen接口、accept接口。