From 735d9f9fa87c89caeb661a4a83e690764ae2d3c8 Mon Sep 17 00:00:00 2001 From: GZTime Date: Sun, 3 Dec 2023 01:17:27 +0800 Subject: [PATCH] refactor: docs struct --- docs/index.md | 60 +++---------------- docs/labs/0x00/index.md | 4 +- docs/labs/0x01/index.md | 29 +++++++++ docs/labs/{0x01-boot.md => 0x01/tasks.md} | 0 docs/labs/0x02/index.md | 29 +++++++++ .../labs/{0x02-interrupt.md => 0x02/tasks.md} | 0 docs/labs/0x03/index.md | 28 +++++++++ .../tasks.md} | 0 docs/labs/0x04/index.md | 29 +++++++++ .../labs/{0x04-userspace.md => 0x04/tasks.md} | 0 docs/labs/0x05-fork-and-lock.md | 1 - docs/labs/0x05/index.md | 28 +++++++++ docs/labs/0x05/tasks.md | 1 + docs/labs/0x06/index.md | 29 +++++++++ .../{0x06-filesystem.md => 0x06/tasks.md} | 0 docs/labs/0x07/index.md | 28 +++++++++ .../tasks.md} | 1 + docs/labs/0x08-further.md | 1 - docs/labs/0x08/index.md | 5 ++ mkdocs.yml | 31 +++++++--- 20 files changed, 241 insertions(+), 63 deletions(-) create mode 100644 docs/labs/0x01/index.md rename docs/labs/{0x01-boot.md => 0x01/tasks.md} (100%) create mode 100644 docs/labs/0x02/index.md rename docs/labs/{0x02-interrupt.md => 0x02/tasks.md} (100%) create mode 100644 docs/labs/0x03/index.md rename docs/labs/{0x03-kernel-threads-and-page-fault.md => 0x03/tasks.md} (100%) create mode 100644 docs/labs/0x04/index.md rename docs/labs/{0x04-userspace.md => 0x04/tasks.md} (100%) delete mode 100644 docs/labs/0x05-fork-and-lock.md create mode 100644 docs/labs/0x05/index.md create mode 100644 docs/labs/0x05/tasks.md create mode 100644 docs/labs/0x06/index.md rename docs/labs/{0x06-filesystem.md => 0x06/tasks.md} (100%) create mode 100644 docs/labs/0x07/index.md rename docs/labs/{0x07-memory-management.md => 0x07/tasks.md} (97%) delete mode 100644 docs/labs/0x08-further.md create mode 100644 docs/labs/0x08/index.md diff --git a/docs/index.md b/docs/index.md index ee697e6..02502ca 100644 --- a/docs/index.md +++ b/docs/index.md @@ -11,55 +11,11 @@ 每一次实验区间为两周。 - [实验零:环境搭建与实验准备](./labs/0x00/index.md) - - 1. Rust 学习和巩固,了解标准库提供的基本数据结构和功能。 - 2. QEMU 与 Rust 环境搭建,尝试使用 QEMU 启动 UEFI Shell。 - 3. 了解 x86 汇编、计算机的启动过程,UEFI 的启动过程,实现 UEFI 下的 `Hello, world!`。 - -- [实验一:操作系统的启动](./labs/0x01-boot.md) - - 1. 了解页表的作用、ELF 文件格式、操作系统在 x86 架构的基本启动过程。 - 2. 尝试使用 UEFI 加载并跳转到内核执行内核代码。 - 3. 实现基于 uart16550 的串口驱动,使用宏启用输出能力、并启用日志系统。 - 4. 学习并尝试使用调试器对内核进行调试。 - -- [实验二:中断处理](./labs/0x02-interrupt.md) - - 1. 了解中断的作用、中断的分类、中断的处理过程。 - 2. 实现基于 APIC 的中断处理程序,编辑 IDT 实现时钟中断,实现一个跑马灯。 - 3. 注册内核堆分配器。(不实现内存分配算法,使用现有代码赋予内核堆分配能力) - 4. 实现串口驱动的输入能力,尝试进行基础的 IO 操作和交互。 - -- [实验三:内核线程与缺页异常](./labs/0x03-kernel-threads-and-page-fault.md) - - 1. 了解进程与线程的概念、相关结构和实现。 - 2. 实现内核线程的创建、调度、切换。(栈分配、上下文切换) - 3. 了解缺页异常的处理过程,实现进程的栈增长。 - -- [实验四:用户程序与系统调用](./labs/0x04-userspace.md) - - 1. 了解用户态与内核态的区别、用户程序的加载与执行。 - 2. 补充页表、内存分配相关知识,了解使用链接器脚本编译能够被加载执行的程序。 - 3. 实现基本的系统调用。 - 4. 实现用户程序的加载与执行,并切换到用户态。 - -- [实验五:fork 的实现、并发与锁机制](./labs/0x05-fork-and-lock.md) - - 1. 了解 fork 的实现原理,实现 fork 系统调用。 - 2. 了解并发与锁机制的概念,实现基于操作系统的自旋锁、信号量。 - 3. 编写基于 fork 的并发程序,并测试自旋锁、信号量的正确性。 - -- [实验六:硬盘驱动与文件系统](./labs/0x06-filesystem.md) - - 1. 了解文件系统的概念、作用。 - 2. 实现块设备、磁盘、分区、文件系统的抽象。 - 3. 了解 ATA 硬盘的工作原理、实现基本的读写驱动。 - 4. 实现 FAT16 文件系统的读取和只读文件访问。 - -- [实验七:更好的内存管理](./labs/0x07-memory-management.md) - - 1. 实现帧分配器的内存回收,操作系统的内存统计。 - 2. 实现操作系统栈的自动增长。 - 3. 尝试实现 mmap 系统调用,实现用户态的内存管理算法。 - -- [实验八:扩展实验](./labs/0x08-further.md) +- [实验一:操作系统的启动](./labs/0x01/index.md) +- [实验二:中断处理](./labs/0x02/index.md) +- [实验三:内核线程与缺页异常](./labs/0x03/index.md) +- [实验四:用户程序与系统调用](./labs/0x04/index.md) +- [实验五:fork 的实现、并发与锁机制](./labs/0x05/index.md) +- [实验六:硬盘驱动与文件系统](./labs/0x06/index.md) +- [实验七:更好的内存管理](./labs/0x07/index.md) +- [实验八:扩展实验](./labs/0x08/index.md) diff --git a/docs/labs/0x00/index.md b/docs/labs/0x00/index.md index a3eb98d..760cdc6 100644 --- a/docs/labs/0x00/index.md +++ b/docs/labs/0x00/index.md @@ -1,6 +1,8 @@ # 实验零:环境搭建与实验准备 -!!! tip "代码是一场无声的交流,有些人是优秀的诗人,能够将抽象的想法转化为优雅的语言,而有些人则是忠实的翻译者,将逻辑转换成计算机可理解的语言。" +!!! tip "代码是一场无声的交流
有些人是优秀的诗人,能够将抽象的想法转化为优雅的语言
而有些人则是忠实的翻译者,将逻辑转换成计算机可理解的语言。" + +

by ChatGPT

## 实验目的 diff --git a/docs/labs/0x01/index.md b/docs/labs/0x01/index.md new file mode 100644 index 0000000..154b188 --- /dev/null +++ b/docs/labs/0x01/index.md @@ -0,0 +1,29 @@ +# 实验一:操作系统的启动 + +!!! tip "就像宇宙的大爆炸,操作系统的启动是一切的起点。
在这个微妙的瞬间,一切从无到有,从混沌到秩序。" + +

by Copilot

+ +## 实验目的 + +1. 了解页表的作用、ELF 文件格式、操作系统在 x86 架构的基本启动过程。 +2. 尝试使用 UEFI 加载并跳转到内核执行内核代码。 +3. 实现基于 uart16550 的串口驱动,使用宏启用输出能力、并启用日志系统。 +4. 学习并尝试使用调试器对内核进行调试。 + +## 实验基础知识 + +!!! note "善用 LLM 进行学习" + + 对于现代计算机专业的学生,我们建议并要求大家学习借助 LLM(Large Language Model)进行学习,这是一种非常有效的学习方法,可以帮助你更快的学习到知识。 + + 对于不理解的知识点和概念,我们建议优先参考文档、借助 LLM 进行实践,在仍然无法解决的情况下再向他人提问。 + +对于本次实验内容,你需要参考学习如下实验资料: + + +## 实验任务与要求 + +1. 请各位同学独立完成作业,任何抄袭行为都将使本次作业判为 0 分。 +2. 请参考 [代码规范](../../general/coding_convention.md) 进行实验代码编写。 +3. 依据 [实验任务](./tasks.md) 完成实验。 diff --git a/docs/labs/0x01-boot.md b/docs/labs/0x01/tasks.md similarity index 100% rename from docs/labs/0x01-boot.md rename to docs/labs/0x01/tasks.md diff --git a/docs/labs/0x02/index.md b/docs/labs/0x02/index.md new file mode 100644 index 0000000..fe7c478 --- /dev/null +++ b/docs/labs/0x02/index.md @@ -0,0 +1,29 @@ +# 实验二:中断处理 + +!!! tip "一场未预知的风暴,突如其来,改变了原本平静的世界。" + +

by Copilot

+ +## 实验目的 + +1. 了解中断的作用、中断的分类、中断的处理过程。 +2. 实现基于 APIC 的中断处理程序,编辑 IDT 实现时钟中断,实现一个跑马灯。 +3. 注册内核堆分配器。(不实现内存分配算法,使用现有代码赋予内核堆分配能力) +4. 实现串口驱动的输入能力,尝试进行基础的 IO 操作和交互。 + +## 实验基础知识 + +!!! note "善用 LLM 进行学习" + + 对于现代计算机专业的学生,我们建议并要求大家学习借助 LLM(Large Language Model)进行学习,这是一种非常有效的学习方法,可以帮助你更快的学习到知识。 + + 对于不理解的知识点和概念,我们建议优先参考文档、借助 LLM 进行实践,在仍然无法解决的情况下再向他人提问。 + +对于本次实验内容,你需要参考学习如下实验资料: + + +## 实验任务与要求 + +1. 请各位同学独立完成作业,任何抄袭行为都将使本次作业判为 0 分。 +2. 请参考 [代码规范](../../general/coding_convention.md) 进行实验代码编写。 +3. 依据 [实验任务](./tasks.md) 完成实验。 diff --git a/docs/labs/0x02-interrupt.md b/docs/labs/0x02/tasks.md similarity index 100% rename from docs/labs/0x02-interrupt.md rename to docs/labs/0x02/tasks.md diff --git a/docs/labs/0x03/index.md b/docs/labs/0x03/index.md new file mode 100644 index 0000000..8368956 --- /dev/null +++ b/docs/labs/0x03/index.md @@ -0,0 +1,28 @@ +# 实验三:内核线程与缺页异常 + +!!! tip "在无尽的时间舞台上,微妙的轮转编织成了某种无形的序曲,舞者轮番上场,演绎着各自的生命。" + +

by ChatGPT

+ +## 实验目的 + +1. 了解进程与线程的概念、相关结构和实现。 +2. 实现内核线程的创建、调度、切换。(栈分配、上下文切换) +3. 了解缺页异常的处理过程,实现进程的栈增长。 + +## 实验基础知识 + +!!! note "善用 LLM 进行学习" + + 对于现代计算机专业的学生,我们建议并要求大家学习借助 LLM(Large Language Model)进行学习,这是一种非常有效的学习方法,可以帮助你更快的学习到知识。 + + 对于不理解的知识点和概念,我们建议优先参考文档、借助 LLM 进行实践,在仍然无法解决的情况下再向他人提问。 + +对于本次实验内容,你需要参考学习如下实验资料: + + +## 实验任务与要求 + +1. 请各位同学独立完成作业,任何抄袭行为都将使本次作业判为 0 分。 +2. 请参考 [代码规范](../../general/coding_convention.md) 进行实验代码编写。 +3. 依据 [实验任务](./tasks.md) 完成实验。 diff --git a/docs/labs/0x03-kernel-threads-and-page-fault.md b/docs/labs/0x03/tasks.md similarity index 100% rename from docs/labs/0x03-kernel-threads-and-page-fault.md rename to docs/labs/0x03/tasks.md diff --git a/docs/labs/0x04/index.md b/docs/labs/0x04/index.md new file mode 100644 index 0000000..56c8d87 --- /dev/null +++ b/docs/labs/0x04/index.md @@ -0,0 +1,29 @@ +# 实验四:用户程序与系统调用 + +!!! tip "" + +

by

+ +## 实验目的 + +1. 了解用户态与内核态的区别、用户程序的加载与执行。 +2. 补充页表、内存分配相关知识,了解使用链接器脚本编译能够被加载执行的程序。 +3. 实现基本的系统调用。 +4. 实现用户程序的加载与执行,并切换到用户态。 + +## 实验基础知识 + +!!! note "善用 LLM 进行学习" + + 对于现代计算机专业的学生,我们建议并要求大家学习借助 LLM(Large Language Model)进行学习,这是一种非常有效的学习方法,可以帮助你更快的学习到知识。 + + 对于不理解的知识点和概念,我们建议优先参考文档、借助 LLM 进行实践,在仍然无法解决的情况下再向他人提问。 + +对于本次实验内容,你需要参考学习如下实验资料: + + +## 实验任务与要求 + +1. 请各位同学独立完成作业,任何抄袭行为都将使本次作业判为 0 分。 +2. 请参考 [代码规范](../../general/coding_convention.md) 进行实验代码编写。 +3. 依据 [实验任务](./tasks.md) 完成实验。 diff --git a/docs/labs/0x04-userspace.md b/docs/labs/0x04/tasks.md similarity index 100% rename from docs/labs/0x04-userspace.md rename to docs/labs/0x04/tasks.md diff --git a/docs/labs/0x05-fork-and-lock.md b/docs/labs/0x05-fork-and-lock.md deleted file mode 100644 index 13f5677..0000000 --- a/docs/labs/0x05-fork-and-lock.md +++ /dev/null @@ -1 +0,0 @@ -# 实验五:缺页异常、fork 的实现、并发与锁机制 diff --git a/docs/labs/0x05/index.md b/docs/labs/0x05/index.md new file mode 100644 index 0000000..f31f8db --- /dev/null +++ b/docs/labs/0x05/index.md @@ -0,0 +1,28 @@ +# 实验五:fork 的实现、并发与锁机制 + +!!! tip "" + +

by

+ +## 实验目的 + +1. 了解 fork 的实现原理,实现 fork 系统调用。 +2. 了解并发与锁机制的概念,实现基于操作系统的自旋锁、信号量。 +3. 编写基于 fork 的并发程序,并测试自旋锁、信号量的正确性。 + +## 实验基础知识 + +!!! note "善用 LLM 进行学习" + + 对于现代计算机专业的学生,我们建议并要求大家学习借助 LLM(Large Language Model)进行学习,这是一种非常有效的学习方法,可以帮助你更快的学习到知识。 + + 对于不理解的知识点和概念,我们建议优先参考文档、借助 LLM 进行实践,在仍然无法解决的情况下再向他人提问。 + +对于本次实验内容,你需要参考学习如下实验资料: + + +## 实验任务与要求 + +1. 请各位同学独立完成作业,任何抄袭行为都将使本次作业判为 0 分。 +2. 请参考 [代码规范](../../general/coding_convention.md) 进行实验代码编写。 +3. 依据 [实验任务](./tasks.md) 完成实验。 diff --git a/docs/labs/0x05/tasks.md b/docs/labs/0x05/tasks.md new file mode 100644 index 0000000..3334971 --- /dev/null +++ b/docs/labs/0x05/tasks.md @@ -0,0 +1 @@ +# 实验五:fork 的实现、并发与锁机制 diff --git a/docs/labs/0x06/index.md b/docs/labs/0x06/index.md new file mode 100644 index 0000000..f828262 --- /dev/null +++ b/docs/labs/0x06/index.md @@ -0,0 +1,29 @@ +# 实验六:硬盘驱动与文件系统 + +!!! tip "" + +

by

+ +## 实验目的 + +1. 了解文件系统的概念、作用。 +2. 实现块设备、磁盘、分区、文件系统的抽象。 +3. 了解 ATA 硬盘的工作原理、实现基本的读写驱动。 +4. 实现 FAT16 文件系统的读取和只读文件访问。 + +## 实验基础知识 + +!!! note "善用 LLM 进行学习" + + 对于现代计算机专业的学生,我们建议并要求大家学习借助 LLM(Large Language Model)进行学习,这是一种非常有效的学习方法,可以帮助你更快的学习到知识。 + + 对于不理解的知识点和概念,我们建议优先参考文档、借助 LLM 进行实践,在仍然无法解决的情况下再向他人提问。 + +对于本次实验内容,你需要参考学习如下实验资料: + + +## 实验任务与要求 + +1. 请各位同学独立完成作业,任何抄袭行为都将使本次作业判为 0 分。 +2. 请参考 [代码规范](../../general/coding_convention.md) 进行实验代码编写。 +3. 依据 [实验任务](./tasks.md) 完成实验。 diff --git a/docs/labs/0x06-filesystem.md b/docs/labs/0x06/tasks.md similarity index 100% rename from docs/labs/0x06-filesystem.md rename to docs/labs/0x06/tasks.md diff --git a/docs/labs/0x07/index.md b/docs/labs/0x07/index.md new file mode 100644 index 0000000..f566eff --- /dev/null +++ b/docs/labs/0x07/index.md @@ -0,0 +1,28 @@ +# 实验七:更好的内存管理 + +!!! tip "" + +

by

+ +## 实验目的 + +1. 实现帧分配器的内存回收,操作系统的内存统计。 +2. 实现操作系统栈的自动增长。 +3. 尝试实现 mmap 系统调用,实现用户态的内存管理算法。 + +## 实验基础知识 + +!!! note "善用 LLM 进行学习" + + 对于现代计算机专业的学生,我们建议并要求大家学习借助 LLM(Large Language Model)进行学习,这是一种非常有效的学习方法,可以帮助你更快的学习到知识。 + + 对于不理解的知识点和概念,我们建议优先参考文档、借助 LLM 进行实践,在仍然无法解决的情况下再向他人提问。 + +对于本次实验内容,你需要参考学习如下实验资料: + + +## 实验任务与要求 + +1. 请各位同学独立完成作业,任何抄袭行为都将使本次作业判为 0 分。 +2. 请参考 [代码规范](../../general/coding_convention.md) 进行实验代码编写。 +3. 依据 [实验任务](./tasks.md) 完成实验。 diff --git a/docs/labs/0x07-memory-management.md b/docs/labs/0x07/tasks.md similarity index 97% rename from docs/labs/0x07-memory-management.md rename to docs/labs/0x07/tasks.md index d5df781..921808e 100644 --- a/docs/labs/0x07-memory-management.md +++ b/docs/labs/0x07/tasks.md @@ -1 +1,2 @@ # 实验七:更好的内存管理 + diff --git a/docs/labs/0x08-further.md b/docs/labs/0x08-further.md deleted file mode 100644 index d5a1ee9..0000000 --- a/docs/labs/0x08-further.md +++ /dev/null @@ -1 +0,0 @@ -# 实验八:扩展实验 diff --git a/docs/labs/0x08/index.md b/docs/labs/0x08/index.md new file mode 100644 index 0000000..7fe5370 --- /dev/null +++ b/docs/labs/0x08/index.md @@ -0,0 +1,5 @@ +# 实验八:扩展实验 + +!!! tip "" + +

by

diff --git a/mkdocs.yml b/mkdocs.yml index ddecfd8..1293bae 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -37,14 +37,29 @@ nav: - 实验零:实验准备: - 概览: labs/0x00/index.md - 任务: labs/0x00/tasks.md - - 实验一:操作系统的启动: labs/0x01-boot.md - - 实验二:中断处理: labs/0x02-interrupt.md - - 实验三:内核线程与缺页异常: labs/0x03-kernel-threads-and-page-fault.md - - 实验四:用户程序与系统调用: labs/0x04-userspace.md - - 实验五:fork 与并发: labs/0x05-fork-and-lock.md - - 实验六:硬盘驱动与文件系统: labs/0x06-filesystem.md - - 实验七:更好的内存管理: labs/0x07-memory-management.md - - 实验八:扩展实验: labs/0x08-further.md + - 实验一:操作系统的启动: + - 概览: labs/0x01/index.md + - 任务: labs/0x01/tasks.md + - 实验二:中断处理: + - 概览: labs/0x02/index.md + - 任务: labs/0x02/tasks.md + - 实验三:内核线程与缺页异常: + - 概览: labs/0x03/index.md + - 任务: labs/0x03/tasks.md + - 实验四:用户程序与系统调用: + - 概览: labs/0x04/index.md + - 任务: labs/0x04/tasks.md + - 实验五:fork 与并发: + - 概览: labs/0x05/index.md + - 任务: labs/0x05/tasks.md + - 实验六:硬盘驱动与文件系统: + - 概览: labs/0x06/index.md + - 任务: labs/0x06/tasks.md + - 实验七:更好的内存管理: + - 概览: labs/0x07/index.md + - 任务: labs/0x07/tasks.md + - 实验八:扩展实验: + - 概览: labs/0x08/index.md - 实验资料: - Linux 使用指导: wiki/linux.md - Rust 语言基础: wiki/rust.md