add link, book and challengeX

add link, book and challengeX
master
Zhiyuan Shao 3 months ago
parent 35346f83a3
commit 74fb18d6ff

@ -892,9 +892,10 @@ spike基于HTIF内存的传递定义了一组HTIF调用类似于操作系
<a name="syscall"></a>
## 3.2 lab1_1 系统调用
## 3.2 lab1_1 系统调用[头歌实验链接](https://www.educoder.net/shixuns/lawkz324/challenges)
<a name="lab1_1_app"></a>
#### **给定应用**
- user/app_helloworld.c
@ -1117,11 +1118,13 @@ System is shutting down with exit code 0.
$ git commit -a -m "my work on lab1_1 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="exception"></a>
## 3.3 lab1_2 异常处理
## 3.3 lab1_2 异常处理[头歌实验链接](https://www.educoder.net/shixuns/tznof6hx/challenges)
<a name="lab1_2_app"></a>
@ -1323,11 +1326,13 @@ lab1_2实验需要读者了解和掌握操作系统中异常exception
$ git commit -a -m "my work on lab1_2 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="irq"></a>
## 3.4 lab1_3 (外部)中断
## 3.4 lab1_3 (外部)中断 [头歌实验链接](https://www.educoder.net/shixuns/wp4ys5ag/challenges)
<a name="lab1_3_app"></a>
@ -1619,11 +1624,13 @@ System is shutting down with exit code 0.
$ git commit -a -m "my work on lab1_3 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab1_challenge1_backtrace"></a>
## 3.5 lab1_challenge1 打印用户程序调用栈(难度:&#9733;&#9733;&#9733;&#9734;&#9734;
## 3.5 lab1_challenge1 打印用户程序调用栈(难度:&#9733;&#9733;&#9733;&#9734;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/9i8lur4h/challenges)
<a name="lab1_challenge1_app"></a>
@ -1798,11 +1805,13 @@ uint64 elf_fpread(elf_ctx *ctx, void *dest, uint64 nb, uint64 offset)
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab1_challenge2_errorline"></a>
## 3.6 lab1_challenge2 打印异常代码行(难度:&#9733;&#9733;&#9733;&#9734;&#9734;
## 3.6 lab1_challenge2 打印异常代码行(难度:&#9733;&#9733;&#9733;&#9734;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/5apy6ojf/challenges)
<a name="lab1_challenge2_app"></a>
@ -1883,11 +1892,13 @@ $ git merge lab1_3_irq -m "continue to work on lab1_challenge1"
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab1_challenge3_multicore"></a>
## 3.7 lab1_challenge3 多核启动及运行(难度:&#9733;&#9733;&#9733;&#9733;&#9734;
## 3.7 lab1_challenge3 多核启动及运行(难度:&#9733;&#9733;&#9733;&#9733;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/2znkcmh9/challenges)
之前的实验都在单核环境下进行。在本次实验中,你需要修改操作系统内核使其支持两核并发运行,并且在每个核上加载一个程序运行,等到两个程序都执行完毕后退出并关闭模拟器。
@ -2000,3 +2011,6 @@ spike模拟器支持`-p`选项来模拟多个核在pke中通过`spike -p2
1. 对于riscv处理器有一个寄存器`tp (thread pointer)`是专门用来保存hart相关信息的可以利用此寄存器存储每个核关于自身的信息。
2. `kernel/sync_utils.h`提供了一个简单的同步屏障的实现,你可以通过这个同步原语实现并发控制,或者自行设计其它同步原语。
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。

@ -321,7 +321,7 @@ load_user_program()函数对于应用进程逻辑空间的操作可以分成以
<a name="lab2_1_pagetable"></a>
## 4.2 lab2_1 虚实地址转换
## 4.2 lab2_1 虚实地址转换[头歌实验链接](https://www.educoder.net/shixuns/l87hxkyb/challenges)
<a name="lab2_1_app"></a>
@ -457,11 +457,13 @@ System is shutting down with exit code 0.
$ git commit -a -m "my work on lab2_1 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab2_2_allocatepage"></a>
## 4.3 lab2_2 简单内存分配和回收
## 4.3 lab2_2 简单内存分配和回收[头歌实验链接](https://www.educoder.net/shixuns/hbmok6cf/challenges)
<a name="lab2_2_app"></a>
@ -612,11 +614,13 @@ System is shutting down with exit code 0.
$ git commit -a -m "my work on lab2_2 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab2_3_pagefault"></a>
## 4.4 lab2_3 缺页异常
## 4.4 lab2_3 缺页异常[头歌实验链接](https://www.educoder.net/shixuns/zepyv5fu/challenges)
<a name="lab2_3_app"></a>
@ -801,11 +805,13 @@ System is shutting down with exit code 0.
$ git commit -a -m "my work on lab2_3 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab2_challenge1_pagefault"></a>
## 4.5 lab2_challenge1 复杂缺页异常(难度:&#9733;&#9734;&#9734;&#9734;&#9734;
## 4.5 lab2_challenge1 复杂缺页异常(难度:&#9733;&#9734;&#9734;&#9734;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/xtyf8qwr/challenges)
<a name="lab2_challenge1_app"></a>
@ -917,9 +923,13 @@ $ git merge lab2_3_pagefault -m "continue to work on lab2_challenge1"
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab2_challenge2_singlepageheap"></a>
## 4.6 lab2_challenge2 堆空间管理 (难度:&#9733;&#9733;&#9733;&#9733;&#9734;
## 4.6 lab2_challenge2 堆空间管理 (难度:&#9733;&#9733;&#9733;&#9733;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/ljzygpmb/challenges)
<a name="lab2_challenge2_app"></a>
@ -1040,11 +1050,13 @@ $ git merge lab2_3_pagefault -m "continue to work on lab2_challenge2"
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab2_challenge3_multicoremem"></a>
## 4.7 lab2_challenge3 多核内存管理(难度:&#9733;&#9733;&#9734;&#9734;&#9734;
## 4.7 lab2_challenge3 多核内存管理(难度:&#9733;&#9733;&#9734;&#9734;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/fitplahw/challenges)
<a name="lab2_challenge3_app"></a>
@ -1241,3 +1253,6 @@ void *alloc_page(void) {
在实验的基础代码中,有一些打印分配内存地址的代码,你需要将这部分代码改为支持多核执行的版本,然后便可以阅读执行后的输出来判断是否为每个进程分配得到的物理内存页和对应的虚拟内存。
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。

@ -447,7 +447,7 @@ PKE操作系统内核通过调用schedule()函数来完成进程的选择和换
<a name="lab3_1_naive_fork"></a>
## 5.2 lab3_1 进程创建fork
## 5.2 lab3_1 进程创建fork[头歌实验链接](https://www.educoder.net/shixuns/lf3vgx7c/challenges)
<a name="lab3_1_app"></a>
@ -684,11 +684,13 @@ user/app_naive_fork.c --> user/user_lib.c --> kernel/strap_vector.S --> kernel/s
$ git commit -a -m "my work on lab3_1 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab3_2_yield"></a>
## 5.3 lab3_2 进程yield
## 5.3 lab3_2 进程yield[头歌实验链接](https://www.educoder.net/shixuns/e7q4csmt/challenges)
<a name="lab3_2_app"></a>
@ -879,11 +881,13 @@ System is shutting down with exit code 0.
$ git commit -a -m "my work on lab3_2 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab3_3_rrsched"></a>
## 5.4 lab3_3 循环轮转调度
## 5.4 lab3_3 循环轮转调度[头歌实验链接](https://www.educoder.net/shixuns/3cvhjfw4/challenges)
<a name="lab3_3_app"></a>
@ -1089,11 +1093,13 @@ System is shutting down with exit code 0.
$ git commit -a -m "my work on lab3_3 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab3_challenge1_wait"></a>
## 5.5 lab3_challenge1 进程等待和数据段复制(难度:&#9733;&#9733;&#9734;&#9734;&#9734;
## 5.5 lab3_challenge1 进程等待和数据段复制(难度:&#9733;&#9733;&#9734;&#9734;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/hwtam4is/challenges)
<a name="lab3_challenge1_app"></a>
@ -1225,9 +1231,13 @@ $ git merge lab3_3_rrsched -m "continue to work on lab3_challenge1"
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab3_challenge2_semaphore"></a>
## 5.6 lab3_challenge2 实现信号量(难度:&#9733;&#9733;&#9733;&#9734;&#9734;
## 5.6 lab3_challenge2 实现信号量(难度:&#9733;&#9733;&#9733;&#9734;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/ehb5zf9f/challenges)
<a name="lab3_challenge2_app"></a>
@ -1427,11 +1437,13 @@ $ git merge lab3_3_rrsched -m "continue to work on lab3_challenge1"
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab3_challenge3_cow"></a>
## 5.7 lab3_challenge3 写时复制Copy On Write难度&#9733;&#9733;&#9733;&#9734;&#9734;
## 5.7 lab3_challenge3 写时复制Copy On Write难度&#9733;&#9733;&#9733;&#9734;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/lfhrecys/challenges)
<a name="lab3_challenge3_app"></a>
@ -1585,3 +1597,6 @@ System is shutting down with exit code 0.
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。

@ -32,6 +32,9 @@
- [给定应用](#lab4_challenge3_app)
- [实验内容](#lab4_challenge3_content)
- [实验指导](#lab4_challenge3_guide)
- [6.8 challengeX Put it all together难度&#9733;&#9733;&#9733;&#9733;&#9733;](#challengeX)
- [实验内容](#challengeX_content)
- [加分内容](#challengeX_bonus)
<a name="fundamental"></a>
@ -1037,7 +1040,7 @@ RFS给每个文件都分配了一个硬链接数nlinks在rfs_dinode的定义
<a name="lab4_1_file"></a>
## 6.2 lab4_1 文件
## 6.2 lab4_1 文件[头歌实验链接](https://www.educoder.net/shixuns/jali46cf/challenges)
<a name="lab4_1_app"></a>
@ -1328,9 +1331,13 @@ System is shutting down with exit code 0.
$ git commit -a -m "my work on lab4_1 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab4_2_dir"></a>
## 6.3 lab4_2 目录文件
## 6.3 lab4_2 目录文件[头歌实验链接](https://www.educoder.net/shixuns/wn83kmuv/challenges)
<a name="lab4_2_app"></a>
@ -1688,9 +1695,13 @@ RFS的读目录函数由rfs_readdir实现按照上文跟踪opendir_u的过程
$ git commit -a -m "my work on lab4_2 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab4_3_hardlink"></a>
## 6.4 lab4_3 硬链接
## 6.4 lab4_3 硬链接[头歌实验链接](https://www.educoder.net/shixuns/bg6cpqtk/challenges)
<a name="lab4_3_app"></a>
@ -2024,9 +2035,13 @@ System is shutting down with exit code 0.
$ git commit -a -m "my work on lab4_3 is done."
```
#### **参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab4_challenge1_pwd"></a>
## 6.5 lab4_challenge1 相对路径(难度:&#9733;&#9733;&#9733;&#9734;&#9734;
## 6.5 lab4_challenge1 相对路径(难度:&#9733;&#9733;&#9733;&#9734;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/wfne9cxb/challenges)
<a name="lab4_challenge1_app"></a>
@ -2214,9 +2229,13 @@ $ git commit -a -m "my work on lab4_3 is done."
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab4_challenge2_exec"></a>
## 6.6 lab4_challenge2 重载执行(难度:&#9733;&#9733;&#9733;&#9733;&#9734;
## 6.6 lab4_challenge2 重载执行(难度:&#9733;&#9733;&#9733;&#9733;&#9734;[头歌实验链接](https://www.educoder.net/shixuns/b3zijkmx/challenges)
<a name="lab4_challenge2_app"></a>
@ -2364,9 +2383,13 @@ $ git commit -a -m "my work on lab4_3 is done."
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="lab4_challenge3_shell"></a>
## 6.7 lab4_challenge3 简易Shell难度&#9733;&#9733;&#9733;&#9733;&#9733;
## 6.7 lab4_challenge3 简易Shell难度&#9733;&#9733;&#9733;&#9733;&#9733;[头歌实验链接](https://www.educoder.net/shixuns/oc8kfqb2/challenges)
<a name="lab4_challenge3_app"></a>
@ -2706,3 +2729,35 @@ shell是Linux中的一个重要概念主要用于和用户的交互。其基
**另外,后续的基础实验代码并不依赖挑战实验,所以读者可自行决定是否将自己的工作提交到本地代码仓库中(当然,提交到本地仓库是个好习惯,至少能保存自己的“作品”)。**
#### **更多指导**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
<a name="challengeX"></a>
## 6.8 challengeX Put it all together难度&#9733;&#9733;&#9733;&#9733;&#9733;
<a name="challengeX_content"></a>
#### 实验内容
本实验为综合实验,给定的应用为**前面四个实验的所有挑战实验**。有以下注意事项:
- 开始本实验前应至少完成[lab4_challenge3 简易Shell](#lab4_challenge3_shell)
- 考虑将之前的挑战实验融入简易Shell每个挑战对应的程序作为app可在简易shell中通过命令行调用执行
- app可预先编译、链接好放在host端的根目录或bin子目录通过PKE的VFS对它们进行访问
- 执行app即之前的挑战实验给定应用验证PKE内核对app的支持
- 在完成以上内容后,可考虑以下[加分内容](#challengeX_bonus)
<a name="challengeX_bonus"></a>
#### 加分内容
本挑战实验为**线下检查**,检查时可考虑对以下内容进行加分:
- 通过ls命令参考前面的实验自行编写列出hostfs文件系统里面的文件
- 通过后台执行app命令行间加入”&“符号)同时启动和运行多个进程;
- 管道功能("|"),即一个进程的输出作为另一个进程的输入;
- 命令历史、环境变量等;
- 对所得到的系统进行压力测试比如测试系统能同时启动的进程的最大个数、系统的I/O性能等

Loading…
Cancel
Save