Skip to content

Commit 3501e6d

Browse files
Update lab4.md
1 parent 8660b71 commit 3501e6d

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

docs/lab/lab4.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
# Lab 4.2: Async I/O
1+
# Lab 4: Async I/O
22

33
负责助教:[唐傑伟](mailto:22302010060@m.fudan.edu.cn)
44

5+
6+
> [!important]
7+
> 本lab还在编辑中,内容仅供参考并随时可能发生变化。
8+
9+
510
到目前为止,我们已经实现了内核的一些重要组件:内存分配、内核/用户进程、页表等。从这个 Lab 开始,我们将关注操作系统中的持久化问题,最终实现一个功能较为完善的文件系统。
611

712
## 1. 服务器操作
@@ -52,7 +57,7 @@ git merge lab3-dev
5257

5358
1. 进程调用 `virtio_blk_rw` 向块设备驱动发起读写请求。
5459
2. 块设备驱动(即上述 `virtio_blk_rw`)通过相关接口控制设备。在我们的实验中,块设备驱动主要通过读写特殊寄存器的方式(memory-mapped I/O)来控制设备。
55-
3. 块设备驱动发起请求后,进程休眠,等待请求的完成。在 Lab 4.1 中,我们通过条件变量的 `pthead_cond_wait` 来进行休眠。然而,在我们的内核中并没有提供条件变量,需要我们使用 `Semaphore` 替代条件变量。
60+
3. 块设备驱动发起请求后,进程休眠,等待请求的完成。我们的内核中并没有提供条件变量,需要我们使用 `Semaphore` 替代条件变量。
5661
4. 经过一段时间后,设备完成读写请求。
5762
5. 设备发起中断,块设备驱动中的中断处理函数处理此中断。
5863
6. 块设备驱动中的中断处理函数**通知**进程请求已完成(即唤醒进程)。
@@ -106,8 +111,6 @@ VirtIO 是一种现代化的虚拟设备接口,它广泛用于虚拟机中,
106111
+------------------------------------+
107112
```
108113

109-
`virtqueue` 机制与 Lab 4.1`client``server` 通信的机制是十分相似的。
110-
111114
在我们的实验中,`virtqueue` 定义如下:
112115

113116
```c
@@ -190,7 +193,7 @@ MBR 位于设备的前 512 Byte,有多种格式,不过大同小异,一种
190193
> 提示:
191194
>
192195
> 1. 你可以自行为`Buf` 增加所需字段。
193-
> 2. 本任务本质上是用 Semaphore 实现一个条件变量,需要注意 Lab 4.1 文档中 2.1-2.3 节提出的条件变量需要注意的问题
196+
> 2. 本任务本质上是用 Semaphore 实现一个条件变量,需要注意条件变量的使用注意事项
194197
195198
> [!important]
196199
> **任务 2**: 完成 `src/driver/virtio_blk.c:143` TODO 内容,通知 `virtio_blk_rw` 请求已完成。

0 commit comments

Comments
 (0)