22
33负责助教:
[ 唐傑伟
] ( mailto:[email protected] ) 44
5- > [ !important]
6- > 本lab还在编辑中,内容仅供参考并随时可能发生变化。
75
86本次实验的目的是熟悉日志文件系统和块设备缓存的实现。
97
@@ -44,7 +42,7 @@ git merge lab4-dev
4442* 为实现 unalertable wait,我们参考了 Linux 的 ` uninterruptable wait ` 的实现,为 ` procstate ` 添加了一项 ` DEEPSLEEPING ` ,` DEEPSLEEPING ` 与 ` SLEEPING ` 基本相同,区别仅在于 alert 操作对 ` DEEPSLEEPING ` 无效。** 你需要在调度器相关代码中将 ` DEEPSLEEPING ` 纳入考虑。** 除 activate 操作外,一般可以将 ` DEEPSLEEPING ` 视为 ` SLEEPING ` 处理。
4543* 将原先的 ` activate_proc ` 重命名为 ` _activate_proc ` ,添加了参数 ` onalert ` ,以指出是正常唤醒还是被动打断,并用宏定义 ` activate_proc ` 为 ` onalert = false ` 的 ` _activate_proc ` ,` alert_proc ` 为 ` onalert=true ` 的` _activate_proc ` 。** 你需要修改 ` _activate_proc ` 的代码,并在 ` kill ` 中换用 ` alert_proc ` 唤醒进程**
4644
47- ## 3. 文件系统扫盲
45+ ## 3. 文件系统
4846
4947### 3.1 . 从磁盘到块设备抽象
5048
@@ -99,7 +97,7 @@ void block_release(Block *block);
9997> [ !danger]
10098> ** 注意**
10199>
102- > 这里的 0 代表我们的文件系统的起始块号,不是实际的 SD 卡的起始块号。SD 卡布局参考 Lab 4.2 文档中相关布局 。
100+ > 这里的 0 代表我们的文件系统的起始块号,不是实际的虚拟存储的起始块号。文件存储布局请参考 Lab 4。
103101
104102| 起始块号 | 长度 | 用途 |
105103| -------------- | ---------------------------------------------- | -------- |
@@ -160,6 +158,11 @@ void block_free(int block_no);
160158
161159在日志文件系统中,我们将**一次文件系统操作**称为一个**事务**(Transaction)。一个事务中可能包含多个写块的操作,但是这些操作要么全部成功,要么全部失败。
162160
161+ > [!important]
162+ > **思考**
163+ >
164+ > 你能够举出“操作要么全部成功,要么全部失败”的例子吗?
165+
163166先看接口:
164167
165168```c
@@ -231,6 +234,11 @@ bcache->end_op(&ctx);
231234>
232235> 其余状态不需要更改。
233236
237+ > [ !important]
238+ > ** 思考**
239+ >
240+ > 我们为什么需要` DEEPSLEEPING ` 状态?
241+
234242> [ !important]
235243> ** 任务 3**
236244>
@@ -433,14 +441,25 @@ $ make clean
433441>
434442> 上述测试只用于检测` cache.c ` 中内容是否正确运行, 任务 1-3 的内容是否正确完成至少需要确保在 ` build/ ` 运行` make qemu ` 时能正确跑通(可以打开` core.c ` 中` proc_test() ` 和` user_proc_test ` 尝试运行)
435443
436- ## 6. 提交
444+ ## 6. 评分标准
445+
446+ 本次实验的评分标准如下:
447+
448+ - ** 核心实现** :70%
449+ - ** 前序 Lab2、Lab3 功能正确** :10%
450+ - ** 思考题** :40%
451+
452+ ## 7. 提交
437453
438454** 提交方式** :将实验报告提交到 elearning 上,格式为 ` 学号-lab5.pdf ` 。
439455
440456** 注意** :从 ` lab1 ` 开始,用于评分的代码以实验报告提交时为准。如果需要使用新的代码版本,请重新提交实验报告。
441457
442458** 截止时间** :<mark style =" color :red ;" >** 12月7日23:59** </mark >。
443459
460+
461+
462+
444463> [ !danger]
445464>
446465> ** 逾期提交将扣除部分分数**
@@ -450,13 +469,15 @@ $ make clean
450469报告中可以包括下面内容
451470
452471* 代码运行效果展示
453- * 实现思路和创新点(创新点如提高alloc效率等)
472+ * <mark style =" color :red ;" >** 讨论你的程序在事务执行的各个阶段(事务开始、块、写回)崩溃时,以及并发时下如何保证一致性。** </mark >
473+ * <mark style =" color :red ;" >** 讨论为了实现文件系统,你对调度做了哪些改动。** </mark >
474+ * 实现思路和创新点
454475* 对后续实验的建议
455476* 其他任何你想写的内容
456477
457478 > ~~ 你甚至可以再放一只可爱猫猫~~
458479
459- 报告中不应有大段代码的复制。如有使用本地环境进行实验的同学,请联系助教提交代码 。使用服务器进行实验的同学,助教会在服务器上检查,不需要另外提交代码。
480+ 报告中不应有大段代码的复制。如有使用本地环境进行实验的同学,请在elearning上提交代码,提交前执行 ` make clean ` 。使用服务器进行实验的同学,助教会在服务器上检查,不需要另外提交代码。
460481
461482在服务器上操作的同学,此次实验完成后请提交(或者说创建一个新分支)到 ` lab5-submission ` 分支,助教会使用你在此分支上提交记录来批作业。如果此分支最后提交时间晚于实验报告提交时间,助教会选择此分支上在实验报告提交时间前的最后一个提交作为批改代码。
462483
@@ -471,7 +492,7 @@ git commit -m "your final commit message"
471492git checkout -b lab5-submission
472493```
473494
474- ## 7 . 参考资料
495+ ## 8 . 参考资料
475496
4764971 . OS2020助教对Lab中涉及的xv6文件系统的介绍:https://github.com/FDUCSLG/OS-2022Fall-Fudan/blob/lab10/doc/filesystem-v4.pdf (可阅读其中关于本次实验(P. 26-P. 33)的部分,其中还包含了下次实验(inode等)的内容)
4774982 . 聊聊 xv6 中的文件系统:https://www.cnblogs.com/KatyuMarisaBlog/p/14366115.html
0 commit comments