Skip to content

Commit 95c488c

Browse files
committed
chore: maintaining documentation
1 parent b956f34 commit 95c488c

21 files changed

Lines changed: 36 additions & 79 deletions

File tree

docs/labs/0x00/index.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
2. 请参考 [代码与提交规范](../../general/specification.md) 进行实验代码编写。
3636

3737
3. 依据 [实验任务](./tasks.md) 完成实验。
38-
3938
- 代码编写任务:观察提供的代码,完善所有标记为 `FIXME:` 的部分,并验证结果是否符合预期。**请在报告中介绍实现思路,截图展示关键结果。**
4039
- 思考任务:完成 “思考题” 和 “实验任务” 部分的内容,**在报告中简要进行回答**_注:思考题可能也是理解代码、实现功能的重要提示。_
4140
- Bonus 加分项:学有余力的同学可以任选 Bonus 部分完成,尝试完成更多的功能,并在报告中进行展示。这部分内容不是必须的要求。

docs/labs/0x00/tasks.md

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
我们推荐在以下环境进行实验:
1616

17-
- Ubuntu 22.04 LTS (jammy) on WSL 2 **(推荐 Windows 用户选择)**
17+
- Ubuntu 24.04 LTS (Noble) on WSL 2 **(推荐 Windows 用户选择)**
1818
- Windows 10/11 **(Windows 原生备选,GDB 相关功能无法使用)**
19-
- Ubuntu 22.04 LTS (jammy)
19+
- Ubuntu 24.04 LTS (Noble)
2020
- macOS with Apple Silicon
2121

2222
以上环境经过我们的测试和验证,可以正常进行实验。对于其他常用的 Linux 发行版,通常也可以正常进行实验,但我们不提供技术支持。
@@ -51,7 +51,6 @@
5151
- 你还可以通过配置文件 `rustfmt.toml` 和 `taplo.toml` 自定义你的代码 `*.rs` 和配置文件 `*.toml` 如何格式化,[实验 0x00 代码](https://github.com/YatSenOS/YatSenOS-Tutorial-Volume-2/tree/main/src/0x00/)已经给出了这样 2 个配置文件供参考。
5252

5353
1. 使用 Rust 编写一个程序,完成以下任务:
54-
5554
1. 创建一个函数 `count_down(seconds: u64)`
5655

5756
该函数接收一个 u64 类型的参数,表示倒计时的秒数。
@@ -75,7 +74,6 @@
7574
!!! tip "尝试将 `std::io::Result` 转换为 `std::Result`,你可能需要 `map_err` 等函数。"
7675

7776
4.`main` 函数中,按照如下顺序调用上述函数:
78-
7977
- 首先调用 `count_down(5)` 函数进行倒计时
8078
- 然后调用 `read_and_print("/etc/hosts")` 函数尝试读取并输出文件内容
8179
- 最后使用 `std::io` 获取几个用户输入的路径,并调用 `file_size` 函数尝试获取文件大小,并处理可能的错误。
@@ -85,7 +83,6 @@
8583
注意:在处理文件操作时,需要使用到 Rust 的文件处理相关库,如 `std::fs``std::io`。在处理错误时,需要使用到 Rust 的错误处理机制,如 `expect``unwrap` 等。
8684

8785
2. 实现一个进行字节数转换的函数,并格式化输出:
88-
8986
1. 实现函数 `humanized_size(size: u64) -> (f64, &'static str)` 将字节数转换为人类可读的大小和单位
9087

9188
使用 1024 进制,并使用二进制前缀(B, KiB, MiB, GiB)作为单位
@@ -129,7 +126,6 @@
129126
输出一些带有颜色的字符串,并尝试直接使用 `print!` 宏输出一到两个相同的效果。
130127

131128
尝试输出如下格式和内容:
132-
133129
- `INFO: Hello, world!`,其中 `INFO:` 为绿色,后续内容为白色
134130
- `WARNING: I'm a teapot!`,颜色为黄色,加粗,并为 `WARNING` 添加下划线
135131
- `ERROR: KERNEL PANIC!!!`,颜色为红色,加粗,并尝试让这一行在控制行窗口居中
@@ -140,7 +136,6 @@
140136
4. 使用 `enum` 对类型实现同一化
141137

142138
实现一个名为 `Shape` 的枚举,并为它实现 `pub fn area(&self) -> f64` 方法,用于计算不同形状的面积。
143-
144139
- 你可能需要使用模式匹配来达到相应的功能
145140
- 请实现 `Rectangle` 和 `Circle` 两种 `Shape`,并使得 `area` 函数能够正确计算它们的面积
146141
- 使得你的实现能够通过如下测试:
@@ -164,7 +159,6 @@
164159
5. 实现一个元组结构体 `UniqueId(u16)`
165160

166161
使得每次调用 `UniqueId::new()` 时总会得到一个新的不重复的 `UniqueId`。
167-
168162
- 你可以在函数体中定义 `static` 变量来存储一些全局状态
169163
- 你可以尝试使用 `std::sync::atomic::AtomicU16` 来确保多线程下的正确性(无需进行验证,相关原理将在 Lab 5 介绍,此处不做要求)
170164
- 使得你的实现能够通过如下测试:
@@ -394,15 +388,13 @@ BdsDxe: starting Boot0002 "UEFI QEMU HARDDISK QM00001 " from ...
394388
1. 😋 基于控制行颜色的 Rust 编程题目,参考 `log` crate 的文档,为不同的日志级别输出不同的颜色效果,并进行测试输出。
395389

396390
2. 🤔 基于第一个 Rust 编程题目,实现一个简单的 shell 程序:
397-
398391
- 实现 `cd` 命令,可以切换当前工作目录(可以不用检查路径是否存在)
399392
- 实现 `ls` 命令,尝试列出当前工作目录下的文件和文件夹,以及有关的信息(如文件大小、创建时间等)
400393
- 实现 `cat` 命令,输出某个文件的内容
401394

402395
!!! question "路径的切换是很容易出现问题的操作,你的程序能正常处理 `cd ../../././../a/b/c/../.././d/` 吗?"
403396

404397
3. 🤔 尝试使用线程模型,基于 `UniqueId` 的任务:
405-
406398
- 尝试证明 `static mut` 变量在多线程下的不安全(可能获得相同的 `UniqueId`
407399
- 尝试验证 `AtomicU16` 来实现 `UniqueId` 时的正确性
408400

docs/labs/0x01/index.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
2. 请参考 [代码与提交规范](../../general/specification.md) 进行实验代码编写。
3434

3535
3. 依据 [实验任务](./tasks.md) 完成实验。
36-
3736
- 代码编写任务:观察提供的代码,完善所有标记为 `FIXME:` 的部分,并验证结果是否符合预期。**请在报告中介绍实现思路,截图展示关键结果。**
3837
- 思考任务:完成 “思考题” 和 “实验任务” 部分的内容,**在报告中简要进行回答**_注:思考题可能也是理解代码、实现功能的重要提示。_
3938
- Bonus 加分项:学有余力的同学可以任选 Bonus 部分完成,尝试完成更多的功能,并在报告中进行展示。这部分内容不是必须的要求。

docs/labs/0x01/tasks.md

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,23 @@
3434

3535
```json
3636
{
37-
"llvm-target": "x86_64-unknown-none",
38-
"data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128",
39-
"arch": "x86_64",
40-
"target-endian": "little",
41-
"target-pointer-width": "64",
42-
"target-c-int-width": "32",
43-
"os": "none",
44-
"executables": true,
45-
"linker-flavor": "ld.lld",
46-
"linker": "rust-lld",
47-
"panic-strategy": "abort",
48-
"disable-redzone": true,
49-
"features": "-mmx,-sse,+soft-float",
50-
"rustc-abi": "x86-softfloat",
51-
"pre-link-args": {
52-
"ld.lld": ["-Tcrates/kernel/config/kernel.ld", "-export-dynamic"]
53-
}
37+
"llvm-target": "x86_64-unknown-none",
38+
"data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128",
39+
"arch": "x86_64",
40+
"target-endian": "little",
41+
"target-pointer-width": "64",
42+
"target-c-int-width": "32",
43+
"os": "none",
44+
"executables": true,
45+
"linker-flavor": "ld.lld",
46+
"linker": "rust-lld",
47+
"panic-strategy": "abort",
48+
"disable-redzone": true,
49+
"features": "-mmx,-sse,+soft-float",
50+
"rustc-abi": "x86-softfloat",
51+
"pre-link-args": {
52+
"ld.lld": ["-Tcrates/kernel/config/kernel.ld", "-export-dynamic"]
53+
}
5454
}
5555
```
5656

@@ -187,14 +187,14 @@ unsafe {
187187

188188
!!! note "使用 `.gdbinit` 方便你的调试过程"
189189

190-
以下是一个 `.gdbinit` 的例子,你可以将其放置在你的工作目录下,这样每次进入 GDB 调试环境时,它都会自动加载。请注意部分指令是 `gef` 所提供的,详情请见调试文档。
190+
以下是一个 `.gdbinit` 的例子,你可以将其放置在你的工作目录下,这样每次进入 GDB 调试环境时,它都会自动加载。请注意部分指令是 `gef` 所提供的,详情请见调试文档。
191191

192-
```bash
193-
file esp/KERNEL.ELF
194-
gef-remote localhost 1234
195-
tmux-setup
196-
b ysos_kernel::init
197-
```
192+
```bash
193+
file esp/KERNEL.ELF
194+
gef-remote localhost 1234
195+
tmux-setup
196+
b ysos_kernel::init
197+
```
198198

199199
- 使用 `c` 命令继续执行,你将会看到 QEMU 窗口中的输出,同时 GDB 将会在断点处停下。
200200
- 查看断点处的汇编和符号是否正确,使用 `vmmap``readelf` 等指令查看内核的加载情况。
@@ -514,7 +514,6 @@ println!("{}", record.args());
514514
3. 串口驱动是在进入内核后启用的,那么在进入内核之前,显示的内容是如何输出的?
515515

516516
4. 在 QEMU 中,我们通过指定 `-nographic` 参数来禁用图形界面,这样 QEMU 会默认将串口输出重定向到主机的标准输出。
517-
518517
- 假如我们将 `Makefile` 中取消该选项,QEMU 的输出窗口会发生什么变化?请观察指令 `make run QEMU_OUTPUT=` 的输出,结合截图分析对应现象。
519518
- 在移除 `-nographic` 的情况下,如何依然将串口重定向到主机的标准输入输出?请尝试自行构造命令行参数,并查阅 QEMU 的文档,进行实验。
520519
- 如果你使用 `ysos.py` 来启动 qemu,可以尝试修改 `-o` 选项来实现上述功能。
@@ -534,7 +533,6 @@ println!("{}", record.args());
534533
3. 🤔 尝试添加字符串型启动配置变量 `log_level`,并修改 `logger` 的初始化函数,使得内核能够根据启动参数进行日志输出。
535534

536535
4. 🤔 尝试使用调试器,在内核初始化之后(`ysos::init` 调用结束后)下断点,查看、记录并解释如下的信息:
537-
538536
- 内核的栈指针、栈帧指针、指令指针等寄存器的值。
539537
- 内核的代码段、数据段、BSS 段等在内存中的位置。
540538

docs/labs/0x02/index.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
2. 请参考 [代码与提交规范](../../general/specification.md) 进行实验代码编写。
3535

3636
3. 依据 [实验任务](./tasks.md) 完成实验。
37-
3837
- 代码编写任务:观察提供的代码,完善所有标记为 `FIXME:` 的部分,并验证结果是否符合预期。**请在报告中介绍实现思路,截图展示关键结果。**
3938
- 思考任务:完成 “思考题” 和 “实验任务” 部分的内容,**在报告中简要进行回答**_注:思考题可能也是理解代码、实现功能的重要提示。_
4039
- Bonus 加分项:学有余力的同学可以任选 Bonus 部分完成,尝试完成更多的功能,并在报告中进行展示。这部分内容不是必须的要求。

0 commit comments

Comments
 (0)