diff --git a/source/chapter9/2device-driver-2.rst b/source/chapter9/2device-driver-2.rst index d9a1dd5f..f072af0c 100644 --- a/source/chapter9/2device-driver-2.rst +++ b/source/chapter9/2device-driver-2.rst @@ -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设备具体定义了设备驱动和设备之间的接口,包括设备呈现模式、设备状态域、特征位、通知、设备配置空间、虚拟队列等,覆盖了上述的基本接口描述。 @@ -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虚拟队列** @@ -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后处理过程:(驱动程序执行)**