后续学习指引
正式实验题目列表
基础阶段
编号 | 位置 | 简介 | 考察点 | 难度 |
---|---|---|---|---|
01 | src/exercise-01 | 编写第一个 Makefile | 程序构建 | 入门 |
02 | src/exercise-02 | 编写第一个测试 | 程序构建 | 入门 |
03 | src/exercise-03 | 使用 Makefile 静态链接程序 | 程序构建 | 入门 |
04 | src/exercise-04 | 使用 Makefile 构建第一个静态链接库 | 程序构建 | 入门 |
05 | src/exercise-05 | 使用 Makefile 构建第一个动态链接库 | 程序构建 | 入门 |
11 | src/exercise-11 | 编写一个简单的 ld 文件并指定内存区域 | 程序构建 | 基础 |
12 | src/exercise-12 | 编写一个简单的 ld 文件并指定 text 起始地址 | 程序构建 | 基础 |
13 | src/exercise-13 | 编写一个简单的 ld 文件并指定自定义 symbol | 程序构建 | 基础 |
14 | src/exercise-14 | 编写一个简单的 ld 文件并指定自定义 section | 程序构建 | 基础 |
20 | src/exercise-20 | 合并两个任务队列 | 数据结构 | 基础 |
21 | src/exercise-21 | 按组反转一个任务队列 | 数据结构 | 基础 |
30 | src/exercise-30 | 编写一个内核模块打印 hello world | 内核模块 | 入门 |
31 | src/exercise-31 | 编写一个内核模块实现阶乘计算 | 内核模块 | 基础 |
32 | src/exercise-32 | 编写一个内核模块实现字符串反转 | 内核模块 | 基础 |
33 | src/exercise-33 | 编写一个内核模块实现平均数计算 | 内核模块 | 基础 |
34 | src/exercise-34 | 编写一个内核模块实现线性查找 | 内核模块 | 基础 |
35 | src/exercise-35 | 编写一个内核模块延时打印字符串 | 内核模块 | 入门 |
40 | src/exercise-40 | 使用 RISC-V 内联汇编实现条件返回 | RISC-V 基础指令 | 基础 |
41 | src/exercise-41 | 使用 RISC-V 内联汇编实现最大公因数求解 | RISC-V 基础指令 | 基础 |
42 | src/exercise-42 | 使用 RISC-V 内联汇编实现数组元素查找 | RISC-V 基础指令 | 中等 |
进阶阶段
编号 | 位置 | 简介 | 考察点 | 难度 |
---|---|---|---|---|
22 | src/exercise-22 | 矩阵相乘 | 矩阵 | 基础 |
23 | src/exercise-23 | 2D 卷积操作 | 矩阵 | 基础 |
24 | src/exercise-24 | 矩阵的原地转置 | 矩阵 | 基础 |
25 | src/exercise-25 | 包含 0 的行列进行矩阵置零 | 矩阵 | 基础 |
26 | src/exercise-26 | 查找矩阵中第 K 个最小的元素 | 矩阵 | 基础 |
36 | src/exercise-36 | 编写一个内核模块求最大值 | 内核模块 | 基础 |
37 | src/exercise-37 | 编写一个内核模块启动一个定时器 | 内核模块 | 基础 |
38 | src/exercise-38 | 编写一个内核模块创建一个虚拟字符设备 | 内核模块 | 中等 |
39 | src/exercise-39 | 编写一个内核模块实现一个简单的文件操作函数 | 内核模块 | 中等 |
43 | src/exercise-43 | 使用内联 RISCV 汇编实现计算斐波那契数列的第 n 个数 | RISC-V 基础指令RISC-V 基础指令 | 中等 |
44 | src/exercise-44 | 使用内联 RISCV 汇编实现整数数组求和 | RISC-V 基础指令 | 中等 |
45 | src/exercise-45 | 使用内联 RISCV 汇编实现查找整数数组最大值 | RISC-V 基础指令 | 中等 |
46 | src/exercise-46 | 使用内联 RISCV 汇编实现判断给定数组是否有序 | RISC-V 基础指令 | 中等 |
47 | src/exercise-47 | 使用内联 RISCV 汇编实现给定数组目标元素个数 | RISC-V 基础指令 | 中等 |
50 | src/exercise-50 | 模拟 FIFO 页面置换算法 | 操作系统 | 中等 |
51 | src/exercise-51 | 模拟 LRU 页面置换算法 | 操作系统 | 中等 |
52 | src/exercise-52 | 获取容器主机名 | 操作系统 | 基础 |
53 | src/exercise-53 | 简单虚拟地址到物理地址的转换 | 操作系统 | 中等 |
54 | src/exercise-54 | 模拟时间片轮转调度算法 | 操作系统 | 中等 |
55 | src/exercise-55 | 模拟虚拟内存限制 | 操作系统 | 中等 |
学习指引
基础阶段
- Makefile 基础
- 实验编号:01, 02, 03, 04, 05
- 学习目标:掌握 Makefile 的基本使用,包括编写简单的 Makefile、静态和动态链接库的构建。
- 学习步骤:
- 阅读相关文档,了解 Makefile 的基本语法和结构。
- 逐步完成每个实验,理解每个命令的作用。
- 尝试修改 Makefile,观察构建结果的变化。
- 链接器脚本编写
- 实验编号:11, 12, 13, 14
- 学习目标:学习如何编写链接器脚本,指定内存区域、text 起始地址、自定义符号和节。
- 学习步骤:
- 理解链接器脚本的基本概念和作用。
- 完成实验,注意观察链接结果与脚本的关系。
- 数据结构应用
- 实验编号:20, 21
- 学习目标:掌握基本的数据结构操作,如队列的合并和反转。
- 学习步骤:
- 复习队列的基本操作。
- 实现代码,测试不同情况下的队列操作。
- 内核模块开发
- 实验编号:30, 31, 32, 33, 34, 35
- 学习目标:学习内核模块的基本开发流程,包括打印信息、实现简单算法等。
- 学习步骤:
- 了解内核模块的基本概念和开发环境配置。
- 逐步完成每个实验,理解内核模块与用户态程序的区别。
- RISC-V 内联汇编
- 实验编号:40, 41, 42
- 学习目标:学习 RISC-V 内联汇编的基本使用,实现简单的算法。
- 学习步骤:
- 学习 RISC-V 指令集基础。
- 编写汇编代码,理解汇编与 C 语言的交互。
进阶阶段
- 矩阵操作
- 实验编号:22, 23, 24, 25, 26
- 学习目标:深入理解矩阵操作,包括矩阵乘法、卷积、转置和元素查找。
- 学习步骤:
- 学习矩阵的基本数学性质。
- 实现代码,优化算法性能。
- 内核模块高级应用
- 实验编号:36, 37, 38, 39
- 学习目标:学习内核模块的高级应用,如定时器、虚拟设备和文件操作。
- 学习步骤:
- 深入理解内核模块的工作原理。
- 完成实验,注意安全性和稳定性。
- RISC-V 内联汇编高级应用
- 实验编号:43, 44, 45, 46, 47
- 学习目标:掌握 RISC-V 内联汇编的高级应用,实现复杂算法。
- 学习步骤:
- 深入学习 RISC-V 指令集。
- 编写复杂的汇编代码,优化性能。
- 操作系统原理
- 实验编号:50, 51, 52, 53, 54, 55
- 学习目标:理解操作系统的基本原理,如页面置换算法、地址转换和调度算法。
- 学习步骤:
- 学习操作系统的基本概念和原理。
- 实现模拟算法,理解操作系统的工作机制。