主事件循环
qemu是基于glib事件循环机制
main ->
| -> qemu_init_main_loop : 初始化创建了两个事件源,分别是qemu_aio_context和iohandler_ctx
main_loop : 是一个while循环
-> main_loop_wait
-> os_host_main_loop_wait
| -> glib_pollfds_fil -> g_main_context_prepare -> g_main_context_query:检索事件源中待监控的fd集合
qemu_poll_ns
| -> g_poll(glib库中实现) : 监控fd状态
glib_pollfds_poll : 有事件发生,准备开始执行回调
| -> g_main_context_check -> aio_ctx_check -> aio_pending : 有关注的读写状态准备好则返回True,执行dispatch
g_main_context_dispatch -> aio_dispatch -> aio_dispatch_handlers : 遍历AioConetx中的AioHandler节 点,根据读写状态调用io_read或者io_write,对于网络tap设备,则对应最终的tap_send和tap_writable
glib事件循环状态机如下:

本文详细解析了QEMU如何使用GLib事件循环机制进行主事件循环的管理。从初始化到事件源创建,再到主循环中的等待和事件处理流程,深入探讨了QEMU在I/O操作中的调度机制。
70

被折叠的 条评论
为什么被折叠?



