QEMU網絡虛擬化(二):主事件循環

主事件循環

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事件循環狀態機如下:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章