Skip to content

Commit 7861fe3

Browse files
authored
docs(lab): fix markdown format in tasks.md (#61)
* docs(lab0): fix markdown format in tasks.md Fixes #60 * docs: fix remaining markdown format issues across the repo
1 parent 14fa840 commit 7861fe3

6 files changed

Lines changed: 12 additions & 0 deletions

File tree

docs/labs/0x00/tasks.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@
127127
输出一些带有颜色的字符串,并尝试直接使用 `print!` 宏输出一到两个相同的效果。
128128

129129
尝试输出如下格式和内容:
130+
130131
- `INFO: Hello, world!`,其中 `INFO:` 为绿色,后续内容为白色
131132
- `WARNING: I'm a teapot!`,颜色为黄色,加粗,并为 `WARNING` 添加下划线
132133
- `ERROR: KERNEL PANIC!!!`,颜色为红色,加粗,并尝试让这一行在控制行窗口居中
@@ -137,6 +138,7 @@
137138
4. 使用 `enum` 对类型实现同一化
138139

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

162164
使得每次调用 `UniqueId::new()` 时总会得到一个新的不重复的 `UniqueId`。
165+
163166
- 你可以在函数体中定义 `static` 变量来存储一些全局状态
164167
- 你可以尝试使用 `std::sync::atomic::AtomicU16` 来确保多线程下的正确性(无需进行验证,相关原理将在 Lab 5 介绍,此处不做要求)
165168
- 使得你的实现能够通过如下测试:

docs/labs/0x02/tasks.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ impl XApic {
211211
Local Vector Table 寄存器用于设置中断向量号和触发模式。它们的位描述如下:
212212

213213
<table class="inst"><tr><td class="inst-numnode"colspan="4"><td class="inst-numnodel">31<td class="inst-numnode"colspan="8"><td class="inst-numnoder">18<td class="inst-numnoder">17<td class="inst-numnoder">16<td class="inst-numnoder">15<td class="inst-numnoder">14<td class="inst-numnoder">13<td class="inst-numnoder">12<td class="inst-numnoder">11<td class="inst-numnode"colspan="2"><td class="inst-numnoder">8<td class="inst-numnode"colspan="3"><td class="inst-numnoder">0<tr><td colspan="4">Timer<td class="inst-node-little"colspan="10">-<td class="inst-node-little"colspan="1">TP<td class="inst-node-little"colspan="1">M<td class="inst-node-little"colspan="3">-<td class="inst-node-little"colspan="1">DS<td class="inst-node-little"colspan="4">-<td class="inst-node-little"colspan="4">Vector<tr><td colspan="4">LINT0<td class="inst-node-little"colspan="11">-<td class="inst-node-little"colspan="1">M<td class="inst-node-little"colspan="1">TM<td class="inst-node-little"colspan="1">RI<td class="inst-node-little"colspan="1">IP<td class="inst-node-little"colspan="1">DS<td class="inst-node-little"colspan="1">-<td class="inst-node-little"colspan="3">DMode<td class="inst-node-little"colspan="4">Vector<tr><td colspan="4">LINT1<td class="inst-node-little"colspan="11">-<td class="inst-node-little"colspan="1">M<td class="inst-node-little"colspan="1">TM<td class="inst-node-little"colspan="1">RI<td class="inst-node-little"colspan="1">IP<td class="inst-node-little"colspan="1">DS<td class="inst-node-little"colspan="1">-<td class="inst-node-little"colspan="3">DMode<td class="inst-node-little"colspan="4">Vector<tr><td colspan="4">ERROR<td class="inst-node-little"colspan="11">-<td class="inst-node-little"colspan="1">M<td class="inst-node-little"colspan="3">-<td class="inst-node-little"colspan="1">DS<td class="inst-node-little"colspan="4">-<td class="inst-node-little"colspan="4">Vector<tr><td colspan="4">PCINT<td class="inst-node-little"colspan="11">-<td class="inst-node-little"colspan="1">M<td class="inst-node-little"colspan="3">-<td class="inst-node-little"colspan="1">DS<td class="inst-node-little"colspan="1">-<td class="inst-node-little"colspan="3">DMode<td class="inst-node-little"colspan="4">Vector</table>
214+
214215
- Vector 为中断向量号,当中断发生时,CPU 会跳转到中断向量表中对应处理程序执行。
215216
- DModeDelivery Mode)为中断传递模式,本实验中不做理解要求。
216217
- DSDelivery Status)为中断传递状态,只读。
@@ -240,6 +241,7 @@ impl XApic {
240241
- 设置计时器相关寄存器。
241242

242243
APIC 中控制计时器的寄存器包括 TDCRTICRLVT Timer。其中,TDCR 用于设置分频系数,TICR 用于设置初始计数值。
244+
243245
- TDCR(0x3E0) 的分频系数决定了总线时钟与计时器时钟的比例,也即计时器的计数频率。
244246
- TICR(0x380) 的初始计数值决定了计时器的计数周期,每当计数到 0 时,就会触发中断。
245247

@@ -279,6 +281,7 @@ impl XApic {
279281
<table class="inst"><tr><td class="inst-numnode"colspan="3"><td class="inst-numnodel">63<td class="inst-numnode"colspan="3"><td class="inst-numnoder">56<td class="inst-numnode"colspan="17"><td class="inst-numnoder">32<tr><td colspan="3">0x310<td class="inst-node-little"colspan="5">DF<td class="inst-node-little"colspan="18">-<tr><td class="inst-numnode"colspan="3"><td class="inst-numnodel">31<td class="inst-numnode"colspan="4"><td class="inst-numnoder">20<td class="inst-numnode"colspan="1"><td class="inst-numnoder">18<td class="inst-numnode"colspan="1"><td class="inst-numnoder">16<td class="inst-numnoder">15<td class="inst-numnoder">14<td class="inst-numnoder">13<td class="inst-numnoder">12<td class="inst-numnoder">11<td class="inst-numnode"colspan="2"><td class="inst-numnoder">8<td class="inst-numnode"colspan="4"><td class="inst-numnoder">0<tr><td colspan="3">0x300<td class="inst-node-little"colspan="6">-<td class="inst-node-little"colspan="2">DSH<td class="inst-node-little"colspan="2">-<td class="inst-node-little"colspan="1">TM<td class="inst-node-little"colspan="1">LV<td class="inst-node-little"colspan="1">-<td class="inst-node-little"colspan="1">DS<td class="inst-node-little"colspan="1">DM<td class="inst-node-little"colspan="3">DMode<td class="inst-node-little"colspan="5">Vector</table>
280282

281283
具体的配置配置细节这里不做理解要求,只需要按照如下描述进行配置即可:
284+
282285
- DSHDestination Shorthand):设置为 2,始终将中断发送给所有 APIC
283286
- DModeDelivery Mode):设置为 5INIT De-assert 模式
284287
- LVLevel):设置为 0INIT De-assert 模式

docs/labs/0x03/tasks.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ pub const STACK_INIT_TOP: u64 = STACK_MAX - 8;
437437
2. 创建内核结构体
438438

439439
调用 `Process::new` 函数,创建内核进程,它会返回一个 `Process` 的智能指针。
440+
440441
- 在上述的假设中,实验使用 `0` 表示无进程(正在运行),内核进程的 PID 应为 `1`
441442
- 内核进程没有父进程,可以直接传入 `None`
442443
- 内核进程的页表就是当前 `Cr3` 寄存器的内容,使用 `PageTableContext::new()` 加载。

docs/labs/0x04/tasks.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,6 +953,7 @@ The factorial of 999999 under modulo 1000000007 is 128233642.
953953
**经过<s>近三个小时的</s>排查,发现他将 TSS 中的 `privilege_stack_table` 相关设置注释掉了。**
954954

955955
请查阅资料,了解特权级栈的作用,实验说明这一系列中断的触发过程,尝试解释这个现象。
956+
956957
- 可以使用 `intdbg` 参数,或 `ysos.py -i` 进行数据捕获。
957958
- 留意 `0x0e` 缺页异常和缺页之前的中断的信息。
958959
- 注意到一个不应当存在的地址……?

docs/labs/0x05/tasks.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -963,6 +963,7 @@ pub fn sys_sem(args: &SyscallArgs, context: &mut ProcessContext) {
963963
RAII(Resource Acquisition Is Initialization)是一种资源获取即初始化的技术,它通过在对象的构造函数中获取资源,然后在析构函数中释放资源的方法,来保证资源的正确释放。
964964

965965
对于 Rust,也即实现 `MutexGuard` 类似的结构,它在构造时获取锁,然后在此结构体被移出作用域时释放锁。
966+
966967
-`acquire` 时候返回 `MutexGuard` 对象。
967968
- 移除 `release` 函数,使用 `MutexGuard``Drop` trait 来释放锁。
968969

docs/labs/0x06/tasks.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ pub enum Resource {
342342
1. procfs
343343

344344
`/proc` 中,你可以找到一系列的文件和文件夹,探索他们并回答如下问题:
345+
345346
- 解释 `/proc` 下的数字目录代表什么,其内部存在什么内容?
346347
- `/proc/cpuinfo``/proc/meminfo` 存储了哪些信息?
347348
- `/proc/loadavg``/proc/uptime` 存储了哪些信息?
@@ -353,6 +354,7 @@ pub enum Resource {
353354
2. devfs
354355

355356
Linux 将设备也作为“文件”,默认挂载于 `/dev` 目录下,探索他们并回答如下问题:
357+
356358
- `/dev/null``/dev/zero``/dev/random``/dev/urandom` 分别有什么作用?
357359
- 尝试运行 `head /dev/kmsg` 并观察输出,结合搜索引擎,解释这一文件的作用。
358360
- `/dev/sdX``/dev/sdX1` (X 为一个字母,1 为数字)是什么?有什么区别?如果你正在使用的 Linux 系统中不存在这样的文件,请找到功能类似的文件,并解释。
@@ -363,6 +365,7 @@ pub enum Resource {
363365
3. tmpfs
364366

365367
在 Linux 中 `/dev/shm``/run` 或者 `/var/run` 目录下,存储了一个特殊的文件系统,它是一个内存文件系统,探索它并回答如下问题:
368+
366369
- 列出这些目录,尝试找到扩展名为 `pid` 的文件。应用程序如何利用它们确保**某个程序只运行一个实例**
367370
- 列出这些目录,尝试找到扩展名为 `lock` 的文件。应用程序如何利用它们确保**某个资源只被一个程序访问**
368371
- 列出这些目录,尝试找到扩展名为 `sock``socket` 的文件。应用程序如何利用它们实现**进程间通信**

0 commit comments

Comments
 (0)