|
|
|
@ -32,6 +32,9 @@
|
|
|
|
|
- [给定应用](#lab4_challenge3_app)
|
|
|
|
|
- [实验内容](#lab4_challenge3_content)
|
|
|
|
|
- [实验指导](#lab4_challenge3_guide)
|
|
|
|
|
- [6.8 challengeX :Put it all together(难度:★★★★★)](#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 相对路径(难度:★★★☆☆)
|
|
|
|
|
## 6.5 lab4_challenge1 相对路径(难度:★★★☆☆,[头歌实验链接](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 重载执行(难度:★★★★☆)
|
|
|
|
|
## 6.6 lab4_challenge2 重载执行(难度:★★★★☆,[头歌实验链接](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(难度:★★★★★)
|
|
|
|
|
## 6.7 lab4_challenge3 简易Shell(难度:★★★★★,[头歌实验链接](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(难度:★★★★★)
|
|
|
|
|
|
|
|
|
|
<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性能等;
|
|
|
|
|
|
|
|
|
|