@ -32,6 +32,9 @@
- [给定应用 ](#lab4_challenge3_app )
- [给定应用 ](#lab4_challenge3_app )
- [实验内容 ](#lab4_challenge3_content )
- [实验内容 ](#lab4_challenge3_content )
- [实验指导 ](#lab4_challenge3_guide )
- [实验指导 ](#lab4_challenge3_guide )
- [6.8 challengeX : Put it all together( 难度: ★★★★★) ](#challengeX )
- [实验内容 ](#challengeX_content )
- [加分内容 ](#challengeX_bonus )
< a name = "fundamental" > < / a >
< a name = "fundamental" > < / a >
@ -1037,7 +1040,7 @@ RFS给每个文件都分配了一个硬链接数nlinks, 在rfs_dinode的定义
< a name = "lab4_1_file" > < / a >
< 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 >
< 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."
$ git commit -a -m "my work on lab4_1 is done."
```
```
#### ** 参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
< a name = "lab4_2_dir" > < / a >
< 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 >
< 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."
$ git commit -a -m "my work on lab4_2 is done."
```
```
#### ** 参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
< a name = "lab4_3_hardlink" > < / a >
< 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 >
< 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."
$ git commit -a -m "my work on lab4_3 is done."
```
```
#### ** 参考答案**
请参考本文档的[纸质书](https://www.ryjiaoyu.com/book/details/50200)。
< a name = "lab4_challenge1_pwd" > < / a >
< a name = "lab4_challenge1_pwd" > < / a >
## 6.5 lab4_challenge1 相对路径(难度:★ ★ ★ ☆ ☆ )
## 6.5 lab4_challenge1 相对路径(难度:★ ★ ★ ☆ ☆ , [头歌实验链接](https://www.educoder.net/shixuns/wfne9cxb/challenges))
< a name = "lab4_challenge1_app" > < / a >
< 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 >
< a name = "lab4_challenge2_exec" > < / a >
## 6.6 lab4_challenge2 重载执行(难度:★ ★ ★ ★ ☆ )
## 6.6 lab4_challenge2 重载执行(难度:★ ★ ★ ★ ☆ , [头歌实验链接](https://www.educoder.net/shixuns/b3zijkmx/challenges))
< a name = "lab4_challenge2_app" > < / a >
< 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 >
< a name = "lab4_challenge3_shell" > < / a >
## 6.7 lab4_challenge3 简易Shell( 难度: ★ ★ ★ ★ ★ )
## 6.7 lab4_challenge3 简易Shell( 难度: ★ ★ ★ ★ ★ , [头歌实验链接](https://www.educoder.net/shixuns/oc8kfqb2/challenges))
< a name = "lab4_challenge3_app" > < / a >
< 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( 难度: ★ ★ ★ ★ ★ )
< 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性能等;