Skip to content

Commit fb681ec

Browse files
committed
Update grading criteria and evaluation mechanism in README
1 parent c879c91 commit fb681ec

File tree

1 file changed

+67
-57
lines changed

1 file changed

+67
-57
lines changed

README.md

Lines changed: 67 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
# ShellLab:构建 Unix Shell 🐚
22

3-
## 实验说明文档
4-
5-
### 1. 实验目标 🎯
3+
## 1. 实验目标 🎯
64

75
通过编写一个支持作业控制的 Unix Shell 程序,深入理解进程控制和信号处理的核心概念。
86

9-
### 2. 实验概述 📝
7+
## 2. 实验概述 📝
108

119
Shell 是一个交互式命令行解释器,负责接收用户指令并执行相应程序。本实验要求实现一个简化版的 Shell,包含基本的命令解析、进程创建、信号处理、作业控制和I/O重定向功能。实验提供了骨架代码和完整的命令解析器,你需要实现核心执行逻辑和控制机制。
1210

1311
关于 Shell 原理和实现方法的详细指导,请参阅[实验指导文档](docs/guide.md)
1412

15-
### 3. 实验要求 📋
13+
## 3. 实验要求 📋
1614

17-
#### 3.1 基本功能(必做)
15+
### 3.1 基本功能(必做)
1816

1917
- 命令提示符为 `"tsh> "`
2018
- 执行命令行程序(前台或后台运行)
@@ -23,19 +21,19 @@ Shell 是一个交互式命令行解释器,负责接收用户指令并执行
2321
- 实现基本的 I/O 重定向(`<``>`
2422
- 回收终止的子进程
2523

26-
#### 3.2 内建命令
24+
### 3.2 内建命令
2725

2826
- `quit`/`exit`:终止 shell
2927
- `jobs`:列出所有后台作业
3028
- `bg <job>`:将一个停止状态的后台作业转为运行状态
3129
- `fg <job>`:将一个后台作业转为前台运行
3230
- `cd <dir>`:切换当前工作目录
3331

34-
#### 3.3 输出格式规范 📋
32+
### 3.3 输出格式规范 📋
3533

3634
为了确保自动化测试的正确性,你的 Shell 必须严格遵循以下输出格式:
3735

38-
##### 作业状态消息
36+
#### 作业状态消息
3937

4038
- 后台作业启动:`[%d] (%d) %s &`
4139
- 例如:`[1] (12345) /bin/ls -l &`
@@ -46,22 +44,22 @@ Shell 是一个交互式命令行解释器,负责接收用户指令并执行
4644
- 作业被信号终止:`Job [%d] (%d) terminated by signal %d`
4745
- 例如:`Job [1] (12345) terminated by signal 2`
4846

49-
##### `jobs` 命令输出
47+
#### `jobs` 命令输出
5048

5149
- 运行中的作业:`[%d] (%d) Running %s`
5250
- 例如:`[1] (12345) Running /bin/ls -l &`
5351

5452
- 停止的作业:`[%d] (%d) Stopped %s`
5553
- 例如:`[1] (12345) Stopped /bin/ls -l`
5654

57-
##### `bg`/`fg` 命令输出
55+
#### `bg`/`fg` 命令输出
5856

5957
- `bg` 命令输出:`[%d] (%d) %s &`
6058
- 例如:`[1] (12345) /bin/ls -l &`
6159

6260
- `fg` 命令输出:不需要特殊输出,只显示命令本身
6361

64-
##### 错误消息
62+
#### 错误消息
6563

6664
- 命令未找到:`%s: Command not found.`
6765
- 例如:`foo: Command not found.`
@@ -78,7 +76,7 @@ Shell 是一个交互式命令行解释器,负责接收用户指令并执行
7876
- 作业 ID 不存在:`%%%d: No such job`
7977
- 例如:`%1: No such job`
8078

81-
### 3.4 附加任务(选做)🌟
79+
## 3.4 附加任务(选做)🌟
8280

8381
本实验提供多项选做任务,你需要**任选两项**完成:
8482

@@ -119,7 +117,7 @@ Shell 是一个交互式命令行解释器,负责接收用户指令并执行
119117

120118
每项选做任务的详细要求及参考实现方法可参阅[实验指导文档](docs/guide.md)
121119

122-
### 4. 文件结构与接口 🗂️
120+
## 4. 文件结构与接口 🗂️
123121

124122
项目采用模块化设计,文件结构如下:
125123

@@ -166,7 +164,7 @@ int parse_command_line(const char *cmdline, command_t **cmd, int *bg);
166164
- `shell.c`: `eval`
167165
- `signals.c`: `sigchld_handler`, `sigint_handler`, `sigtstp_handler`
168166
169-
### 5. 测试方法 🧪
167+
## 5. 测试方法 🧪
170168
171169
本实验提供了一个自动评测脚本,可以帮助你验证 Shell 实现的正确性。脚本支持多种测试模式,能够模拟用户输入、检查程序输出并提供详细反馈。
172170
@@ -181,7 +179,7 @@ python grader.py 5-jobs # 只运行特定测试点
181179
./tshref
182180
```
183181

184-
#### 查看测试内容 🔍
182+
### 查看测试内容 🔍
185183

186184
如果想了解每个测试点具体执行的内容,可以运行:
187185

@@ -192,7 +190,7 @@ python grader.py -d 5-jobs
192190

193191
你也可以直接查看测试点目录内容,每个测试点包含一个 config.toml 配置文件,描述了测试的元数据和执行步骤。
194192

195-
#### 实用调试功能 🐛
193+
### 实用调试功能 🐛
196194

197195
这些功能可能也会对你有所帮助:
198196

@@ -215,38 +213,50 @@ python grader.py -d 5-jobs
215213
```
216214
这将为失败的测试生成VS Code调试配置,让你能够在调试器中步进执行代码,观察变量值和程序状态。
217215

218-
### 6. 评分标准 💯
219-
220-
- 基础功能实现(60%)
221-
- 命令执行与进程管理
222-
- 信号处理
223-
- 作业控制
224-
- I/O 重定向
225-
- 代码风格与注释
226-
227-
- 选做任务(20%)
228-
- 任选两项[选做任务](#34-附加任务选做)完成
229-
- 或使用 Rust 实现
230-
231-
- 实验报告与代码质量(20%)
232-
- 实现思路清晰
233-
- 关键功能分析
234-
- 测试结果
235-
- 代码结构合理
236-
- 注释完善
237-
- 错误处理充分
238-
239-
#### 6.1 实验评优机制 🏆
240-
241-
为鼓励同学们追求卓越,本实验将评选出 3 份优秀实现并进行奖励:
242-
243-
评选将综合考虑必做部分的完整性与正确性、代码质量(包括架构设计、可读性和可维护性)、错误处理的全面性与健壮性、功能的完善度与实用性,以及实现的创新性与技术深度。这不仅仅关注选做任务的完成数量,更注重你对 Shell 核心功能的理解深度和实现质量。
244-
245-
获选的优秀实现将进行公示,并在征得作者同意后开源,供同学们参考学习。同时,优秀实现的作者将直接在平时成绩中获得 5 分附加分作为奖励。
246-
247-
参与评优无需额外申请,所有按时提交的作业都将自动纳入评选范围。我们期待看到你富有创意且高质量的 Shell 实现,展现你对操作系统概念的深刻理解和实际应用能力。
248-
249-
#### 6.2 学术诚信 🔍
216+
## 6. 评分标准 💯
217+
218+
### 6.1 评分构成
219+
220+
实验总分由以下三个部分组成:
221+
1. **功能正确性(50%)**
222+
- 评分依据:自动化测试通过率
223+
- 计算公式:$50 \times \frac{\text{测试得分}}{\text{测试总分}}$
224+
2. **实现方式与扩展功能(20%)**
225+
- 满分条件(二选一):
226+
- 使用 Rust 语言完成基础功能实现
227+
- 或使用 C 语言实现并完成至少两项[选做任务](#34-附加任务选做)
228+
- 评分方法:
229+
- Rust 实现:基础功能完整即可获得全部分数
230+
- C 语言实现:每完成一项选做任务得 10 分,上限 20 分
231+
3. **实验报告与代码质量(30%)**
232+
- 实验报告评分要点(15%):
233+
- 实现思路清晰完整
234+
- 关键功能设计与分析深入
235+
- 测试结果分析全面
236+
- 问题解决过程与经验总结
237+
- 代码质量评分要点(15%):
238+
- 代码结构设计合理
239+
- 命名规范与注释完善
240+
- 错误处理机制健全
241+
- 实现的技术深度与创新性
242+
243+
### 6.2 实验评优机制 🏆
244+
245+
为了鼓励同学们追求卓越,本实验将对成绩排名前三的优秀实现进行特别奖励:
246+
247+
评优标准将基于实验总评分,包含以下所有评分维度:
248+
- 自动化测试的功能正确性(50%)
249+
- 实现方式与扩展功能完成情况(20%)
250+
- 实验报告质量与代码设计水平(30%)
251+
252+
获选的优秀实现将:
253+
1. 进行公示表彰
254+
2. 在征得作者同意后开源,作为学习参考资源
255+
3. 为作者提供平时成绩 5 分附加分作为奖励
256+
257+
参与评优无需额外申请,所有按时提交且功能完整的作业均自动纳入评选范围。我们期待看到你精心打造的高质量 Shell 实现,展现你对操作系统概念的深刻理解与应用能力。
258+
259+
### 6.3 学术诚信 🔍
250260

251261
我们高度重视学术诚信,它是计算机科学教育的基石。我们期望你能够独立完成实验,真正掌握系统编程的核心概念和技能。
252262

@@ -264,7 +274,7 @@ python grader.py -d 5-jobs
264274
>
265275
> 我们使用代码相似度检测工具对所有提交的代码进行检查。一旦发现抄袭或其他学术不端行为,将严格按照学校相关规定处理。
266276
267-
#### 6.3 关于 AI 工具使用 🤖
277+
### 6.4 关于 AI 工具使用 🤖
268278

269279
在现代编程环境中,ChatGPT、Claude、DeepSeek 等大型语言模型以及基于它们的工具(如 GitHub Copilot、Cursor 等)已成为许多开发者的辅助工具。我们认可这些工具在学习过程中的价值,同时也希望你合理使用它们:
270280

@@ -275,7 +285,7 @@ python grader.py -d 5-jobs
275285

276286
合理使用AI工具可以增强学习效果,但最终的理解和代码实现应反映你自己的努力和思考。操作系统是计算机科学的核心领域,亲自实现这些机制将为你的技术成长奠定坚实基础。
277287

278-
### 7. 提交方式 📤
288+
## 7. 提交方式 📤
279289

280290
使用 GitHub Classroom 进行提交。请你确保所有代码已提交到你的对应仓库,GitHub Actions 会自动运行测试,其输出作为我们的评分依据。
281291

@@ -287,11 +297,11 @@ python grader.py -d 5-jobs
287297

288298
请确保在截止日期前完成最终提交。GitHub 会记录你的所有提交历史,我们将以截止日期前的最后一次提交作为最终版本进行评分。
289299

290-
# 8. 探索方向 🚀
300+
## 8. 探索方向 🚀
291301

292302
完成基础实验后,你可能会对 Shell 的原理和实现产生更浓厚的兴趣。本节提供一些探索方向,帮助你将实验 Shell 逐步打磨成一款真正可用的现代 Shell 工具。你可以在完成必做与选做后,根据自身兴趣与时间投入进行深度拓展。
293303

294-
## 8.1 交互体验增强 ✨
304+
### 8.1 交互体验增强 ✨
295305

296306
现代 Shell 的一大特色是提供丰富的交互体验。你可以考虑实现命令提示符的自定义与主题化,让用户能够展示当前时间、用户名、主机名、路径等信息,甚至支持彩色显示和动态更新。
297307

@@ -303,7 +313,7 @@ python grader.py -d 5-jobs
303313

304314
语法高亮则能让用户在输入时直观地区分命令、参数、字符串等不同元素,甚至可以实时提示语法错误,大大降低使用门槛。
305315

306-
## 8.2 脚本与语言特性 📝
316+
### 8.2 脚本与语言特性 📝
307317

308318
Shell 不仅是执行命令的工具,也是一种编程语言。你可以为你的 Shell 添加内建函数或脚本模块化加载功能,让用户能够编写并调用复杂的功能模块。
309319

@@ -313,19 +323,19 @@ Shell 不仅是执行命令的工具,也是一种编程语言。你可以为
313323

314324
高级管道和进程间通信机制也是 Shell 脚本能力的重要组成部分,你可以探索如何支持多重管道、管道与子 Shell 的结合使用等。
315325

316-
## 8.3 系统集成扩展 🔌
326+
### 8.3 系统集成扩展 🔌
317327

318328
真正实用的 Shell 需要与操作系统深度集成。PATH 管理与命令查找优化是一个很好的切入点,你可以支持在运行时动态添加、删除PATH中的条目,并将其持久化到配置文件。还可以使用缓存或哈希表对 PATH 下的可执行文件进行索引,加速命令查找。
319329

320330
配置文件与插件系统可以大大增强 Shell 的可定制性和扩展性。你可以设计读取 `~/.tshrc` 这样的配置文件,在启动时加载用户的环境变量、自定义函数、别名等设置。更进一步,你可以定义插件接口,允许用户通过动态库扩展 Shell 的能力。
321331

322-
## 8.4 性能与安全 🛡️
332+
### 8.4 性能与安全 🛡️
323333

324334
对于实际使用的 Shell,性能和安全同样重要。优化 Shell 的启动速度和内存占用是一个值得探索的方向,可以考虑懒加载部分功能,避免在初始化时进行大量预加载。同时,良好的内存管理可以防止在执行复杂命令或脚本时出现内存泄漏。
325335

326336
在安全方面,你可以实现命令执行的权限控制和安全检查,如白名单/黑名单机制,防止执行某些高危操作。对命令执行路径和权限的严格检查则可以预防路径注入攻击。
327337

328-
## 8.5 参考资源 📚
338+
### 8.5 参考资源 📚
329339

330340
- [POSIX Shell 标准](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html)
331341
有助于理解 Shell 语法的最小通用规范和关键特性。

0 commit comments

Comments
 (0)