7.7.3. 事件处理机制

7.7.3.1. 简介

QEMU是事件处理设计架构,所有的事件都在事件循环中被处理。实现基础就是Glib事件循环。Glib的核心是poll机制,通过poll检查用户注册的事件源,并执行对应的回调。

7.7.3.2. 主事件循环

QEMU的主事件循环是 main_loop_wait() ,它执行以下任务:

  • 等待文件描述符变得可读或可写

  • 运行到期的计时器,计时器使用 qemu_mod_timer() 函数添加

  • 运行 bottom-halves

7.7.3.3. 状态机

Glib对一个事件源的处理分为4个阶段:初始化、准备、poll和调度。每个阶段都提供了接口供用户注册处理函数,分别为prepare、query、check、dispatch,函数在事件后被调用。