横峰网站建设,芜湖中凡网站建设公司,做网站时默认字体是微软雅黑,网站的子域名怎么设置存储虚拟化的场景下#xff0c;整个写入的过程。
在虚拟机里面#xff0c;应用层调用 write 系统调用写入文件。write 系统调用进入虚拟机里面的内核#xff0c;经过 VFS#xff0c;通用块设备层#xff0c;I/O 调度层#xff0c;到达块设备驱动。虚拟机里面的块设备驱动…存储虚拟化的场景下整个写入的过程。
在虚拟机里面应用层调用 write 系统调用写入文件。write 系统调用进入虚拟机里面的内核经过 VFS通用块设备层I/O 调度层到达块设备驱动。虚拟机里面的块设备驱动是 virtio_blk它和通用的块设备驱动一样有一个 request queue另外有一个函数 make_request_fn 会被设置为 blk_mq_make_request这个函数用于将请求放入队列。虚拟机里面的块设备驱动是 virtio_blk 会注册一个中断处理函数 vp_interrupt。当 qemu 写入完成之后它会通知虚拟机里面的块设备驱动。blk_mq_make_request 最终调用 virtqueue_add将请求添加到传输队列 virtqueue 中然后调用 virtqueue_notify 通知 qemu。在 qemu 中本来虚拟机正处于 KVM_RUN 的状态也即处于客户机状态。qemu 收到通知后通过 VM exit 指令退出客户机状态进入宿主机状态根据退出原因得知有 I/O 需要处理。qemu 调用 virtio_blk_handle_output最终调用 virtio_blk_handle_vq。virtio_blk_handle_vq 里面有一个循环在循环中virtio_blk_get_request 函数从传输队列中拿出请求然后调用 virtio_blk_handle_request 处理请求。virtio_blk_handle_request 会调用 blk_aio_pwritev通过 BlockBackend 驱动写入 qcow2 文件。写入完毕之后virtio_blk_req_complete 会调用 virtio_notify 通知虚拟机里面的驱动。数据写入完成刚才注册的中断处理函数 vp_interrupt 会收到这个通知。 此文章为12月Day1学习笔记内容来源于极客时间《趣谈Linux操作系统》推荐该课程。