File tree Expand file tree Collapse file tree 1 file changed +8
-5
lines changed
Expand file tree Collapse file tree 1 file changed +8
-5
lines changed Original file line number Diff line number Diff line change 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
53581 . 进程调用 ` virtio_blk_rw ` 向块设备驱动发起读写请求。
54592 . 块设备驱动(即上述 ` virtio_blk_rw ` )通过相关接口控制设备。在我们的实验中,块设备驱动主要通过读写特殊寄存器的方式(memory-mapped I/O)来控制设备。
55- 3 . 块设备驱动发起请求后,进程休眠,等待请求的完成。在 Lab 4.1 中,我们通过条件变量的 ` pthead_cond_wait ` 来进行休眠。然而,在我们的内核中并没有提供条件变量 ,需要我们使用 ` Semaphore ` 替代条件变量。
60+ 3 . 块设备驱动发起请求后,进程休眠,等待请求的完成。我们的内核中并没有提供条件变量 ,需要我们使用 ` Semaphore ` 替代条件变量。
56614 . 经过一段时间后,设备完成读写请求。
57625 . 设备发起中断,块设备驱动中的中断处理函数处理此中断。
58636 . 块设备驱动中的中断处理函数** 通知** 进程请求已完成(即唤醒进程)。
@@ -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 ` 请求已完成。
You can’t perform that action at this time.
0 commit comments