File tree Expand file tree Collapse file tree 3 files changed +8
-10
lines changed
Expand file tree Collapse file tree 3 files changed +8
-10
lines changed Original file line number Diff line number Diff line change @@ -60,7 +60,7 @@ function sidebarGuide(): DefaultTheme.Sidebar {
6060 { text : 'Lab 1: Allocator' , link : '/lab/lab1' } ,
6161 { text : 'Lab 2: Process (Kernel Part)' , link : '/lab/lab2' } ,
6262 { text : 'Lab 3: Process (User Part)' , link : '/lab/lab3' } ,
63- { text : 'Lab 4: Async IO ' , link : '/lab/lab4' } ,
63+ { text : 'Lab 4: VirtIO Driver ' , link : '/lab/lab4' } ,
6464 { text : 'Lab 5: Logging File System' , link : '/lab/lab5' } ,
6565 { text : 'Lab 6: Inode-based File System' , link : '/lab/lab6' } ,
6666 ]
Original file line number Diff line number Diff line change 1- # Lab 4: Async I/O
1+ # Lab 4: VirtIO Driver
22
33负责助教:[ 唐傑伟] ( mailto:22302010060@m.fudan.edu.cn )
44
@@ -32,21 +32,19 @@ git merge lab3-dev
3232
3333硬盘、SD卡等一类设备都是块设备。块设备的特点是数据的读写以块(block)为单位,一次性读取或写入固定大小的数据块。为了实现对块设备的高效管理和操作,操作系统通常会提供一个 I/O 框架,用于抽象和管理这些块设备的访问。
3434
35- 在现代操作系统中,I/O 框架主要分为同步 I/O 和异步 I/O 两种模式。同步 I/O 会阻塞调用的进程,直到 I/O 操作完成。而异步 I/O 则允许进程发起 I/O 操作后立即返回,不会阻塞进程的执行流,从而提高系统的并发度。在本实验中,我们将重点关注异步 I/O 的实现。
35+ 在现代操作系统中,I/O 框架主要分为同步 I/O 和异步 I/O 两种模式。同步 I/O 会阻塞调用的进程,直到 I/O 操作完成。而异步 I/O 则允许进程发起 I/O 操作后立即返回,不会阻塞进程的执行流,从而提高系统的并发度。在本实验中,我们将重点关注同步 I/O 的实现。
3636
37- ### 2.1 基本逻辑
38-
39- 异步 I/O 的基本逻辑如下:
37+ I/O 的基本逻辑如下:
4038
4139* ** 读** :块设备驱动向设备发送读请求和目标地址,然后等待请求完成。此时发起请求的进程可以休眠,调度器可以调度其他进程(异步)。请求完成后,内核通知休眠进程读请求已完成,数据已准备好。
4240* ** 写** :块设备驱动向设备发送写请求、目标地址以及待写入的数据,等待直到设备完成写入。
4341
4442> [ !important]
4543> ** 思考** :对于写操作,你能设计出一种机制,让我们无需等待中断,且不会引发一致性问题吗?即 A 发起了写 DATA 到 ADDR 请求后立刻返回,不等待写操作完成,此时 B 读 DATA 可以读出 A 刚刚写入的内容。
4644
47- ### 2.2 本实验具体逻辑
45+ ### 2.1 本实验具体逻辑
4846
49- 本实验异步 I/O 的具体逻辑如下:
47+ 本实验 I/O 的具体逻辑如下:
5048
5149<figure ><img src =" /assets/lab4-1.png " alt =" " ><figcaption ></figcaption ></figure >
5250
@@ -64,7 +62,7 @@ git merge lab3-dev
6462> [ !info]
6563> ** OS (H) Labs 的历史**
6664>
67- > 在 2023 秋季及以前版本的实验中,我们面向的平台是树莓派3B,块设备驱动包含了在树莓派上读写 SD 卡的逻辑。然而,[ 读写 SD 卡的逻辑非常复杂,多达千余行] ( https://github.com/FDUCSLG/OS-23Fall-FDU/blob/lab5/src/driver/sddef.h ) ,缺乏可读性和可维护性。因此,从 2024 秋季开始,我们转向 virt 平台(Lab 0 中简要介绍过),极大简化了块设备驱动的逻辑,以期帮助大家更好地理解异步 I/O 的相关知识。
65+ > 在 2023 秋季及以前版本的实验中,我们面向的平台是树莓派3B,块设备驱动包含了在树莓派上读写 SD 卡的逻辑。然而,[ 读写 SD 卡的逻辑非常复杂,多达千余行] ( https://github.com/FDUCSLG/OS-23Fall-FDU/blob/lab5/src/driver/sddef.h ) ,缺乏可读性和可维护性。因此,从 2024 秋季开始,我们转向 virt 平台(Lab 0 中简要介绍过),极大简化了块设备驱动的逻辑,以期帮助大家更好地理解 I/O 的相关知识。
6866
6967VirtIO 是一种现代化的虚拟设备接口,它广泛用于虚拟机中,以提供高效的 I/O 设备模拟。本实验中,我们将利用 ` virtio-blk-device ` 作为我们的块设备。这意味着我们的块设备是一个虚拟的块设备,块设备内的数据由宿主机共同提供。
7068
Original file line number Diff line number Diff line change 1- # Lab 6: Inode
1+ # Lab 6: Inode-based File System
22
33负责助教:[ 唐傑伟] ( mailto:22302010060@m.fudan.edu.cn )
44
You can’t perform that action at this time.
0 commit comments