Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update ch9 2device-driver-2.rst #238

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions source/chapter9/2device-driver-2.rst
Original file line number Diff line number Diff line change
Expand Up @@ -99,12 +99,12 @@ Qemu或Hypervisor中virtio 设备的主要功能包括:
I/O设备基本组成结构
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

virtio设备代表了一类I/O通用设备,为了让设备驱动能够管理和使用设备。在程序员的眼里,I/O设备基本组成结构包括如下恩利
virtio设备代表了一类I/O通用设备,为了让设备驱动能够管理和使用设备。在程序员的眼里,I/O设备基本组成结构包括如下部分

- 呈现模式:设备一般通过寄存器、内存或特定I/O指令等方式让设备驱动能看到和访问到设备;
- 特征描述:让设备驱动能够了解设备的静态特性(可通过软件修改),从而决定是否或如何使用该设备;
- 状态表示:让设备驱动能够了解设备的当前动态状态,从而确定如何进行设备管理或I/O数据传输;
- 交互机制:交互包括事件通知和数据传输;对于事件通知,让设备驱动及时获知设备的状态变化的机制(可基于中断等机制),以及让设备及时获得设备驱动发出的I/O请求(可基于寄存器读写等机制);对于数据传输,让设备驱动能处理设备给出的数据,以及让设备能处理设备驱动给出的数据,如(可基于DMA或virtqueue等机制)。
- 交互机制:交互包括事件通知和数据传输;对于事件通知,让设备驱动及时获知设备的状态变化的机制(可基于中断等机制),以及让设备及时获得设备驱动发出的I/O请求(可基于寄存器读写等机制);对于数据传输,让设备驱动能处理设备给出的数据,以及让设备能处理设备驱动给出的数据(可基于DMA或virtqueue等机制)。

virtio设备具体定义了设备驱动和设备之间的接口,包括设备呈现模式、设备状态域、特征位、通知、设备配置空间、虚拟队列等,覆盖了上述的基本接口描述。

Expand Down Expand Up @@ -190,7 +190,7 @@ virtio设备交互机制包括基于Notifications的事件通知和基于virtque

驱动程序和设备在交互过程中需要相互通知对方:驱动程序组织好相关命令/信息要通知设备去处理I/O事务,设备处理完I/O事务后,要通知驱动程序进行后续事务,如回收内存,向用户进程反馈I/O事务的处理结果等。

驱动程序通知设备可用``门铃 doorbell``机制,即采用PIO或MMIO方式访问设备特定寄存器,QEMU进行拦截再通知其模拟的设备。设备通知驱动程序一般用中断机制,即在QEMU中进行中断注入,让CPU响应并执行中断处理例程,来完成对I/O执行结果的处理。
驱动程序通知设备可用 ``门铃 doorbell`` 机制,即采用PIO(MMIO方式)访问设备特定寄存器,QEMU进行拦截再通知其模拟的设备。设备通知驱动程序一般用中断机制,即在QEMU中进行中断注入,让CPU响应并执行中断处理例程,来完成对I/O执行结果的处理。

**virtqueue虚拟队列**

Expand Down Expand Up @@ -261,13 +261,13 @@ virtqueue由三部分组成(如下图所示):

**3. I/O完成过程:(设备执行)**

3.1 virtio设备通过 `kick` 机制(知道有新的I/O请求,通过访问可用环的idx指针,解析出I/O请求;
3.1 virtio设备通过 `kick` 机制知道有新的I/O请求,通过访问可用环的idx指针,解析出I/O请求;

3.2 根据I/O请求内容完成I/O请求,并把I/O操作的结果放到I/O请求中相应的buffer中;
3.2 根据I/O请求内容完成I/O操作,并把I/O操作的结果放到I/O请求中相应的buffer中;

3.3 再把描述符(或描述符链的首描述符)的索引值写入到已用环中,更新已用环的idx指针;

3.4 设备通过再通过中断机制来通知设备驱动程序有I/O操作完成;
3.4 设备再通过中断机制来通知设备驱动程序有I/O操作完成;

**4. I/O后处理过程:(驱动程序执行)**

Expand Down
Loading