QEMU-System mode emulation分析(1)

1. 执行主流程简单分析

在该模式下,qemu除了模拟cpu执行,还要管理、模拟外围设备,因此系统模式模拟比用户模式模拟多出很多需要我们关心的地方,比如,机器管理,设备管理,总线模拟,中断模拟,mmu模拟,以及它们是如何协同工作的等等。本节主要简单分析下qemu系统模式的执行主流程。如下图所示:

上图主要描述整个模拟器执行过程的大体框架,由图可知,main_loop是模拟器运行时的主循环,cpu_exec_all()函数是用来执行cpu指令,main_loop_wait是用来执行外围设备模拟代码,当然这些并不是完全绝对的,比如cpu在对io设备的地址空间进行load/store操作时,就会调用io设备读写handler。

那cpu_exec_all函数的执行流程又是怎么样的呢?如下图:

由上图可知,在函数cpu_exec_all中,会去遍历和运行每个cpu,然后去调用qemu_cpu_exec函数,最后去调用cpu_exec函数,cpu_exec函数分析在前文的用户模式已经分析过,代码翻译、代码执行、异常产生都在那边完成,详细分析参考前文。

接下来,分析下main_loop_wait函数,该函数最主要的功能是响应外围输入,以及处理timer事件。见下图,该图是main_loop_wait执行的总体过程。这个过程中不断地去监听对应的host设备是否有输入输出,若有,则调用相应的回调函数去处理。

最后去扫描下所有的qemu_timer,若设定时间已经到达,则执行对应钩子函数进行处理。具体关于qemu_timer的实现机制和使用方法,会在后面有所介绍

.

分析到这里,你是否有个疑问,当cpu执行引擎在执行cpu指令的时候,它如何响应外围设备的输入?用alarm信号,qemu会根据qemu_timer链表里面的信息动态地设置下次发生alarm信号的时间,然后在signal_handler中断开tb链,并设置退出标志,从而中断cpu的执行,使qemu去处理外围的输入和timer事件的处理函数,从而实现外围设备的模拟和同步。这里也涉及到了qemu_timer,以后会有详细介绍它的实现机制。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 20:01:00

QEMU-System mode emulation分析(1)的相关文章

Qemu: User mode emulation and Full system emulation

转载: https://wiki.edubuntu.org/UbuntuDevelopment/Ports QEMU QEMU is a processor emulator and supports emulation of ARM, PowerPC, SPARC, x86, x86-64 and more. QEMU has two operating modes: User mode emulation: QEMU can launch Linux processes compiled f

libvirtError: no connection driver available for qemu:///system 解决办法

今天部署了一套K版的OpenStack环境后,启动nova-compute后,日志里狂报如下错误(因为其内部有定时任务需要去连libvirtd进程): 2015-08-14 10:01:00.061 28580 TRACE nova.virt.libvirt.host File "/usr/lib64/python2.7/site-packages/libvirt.py", line 105, in openAuth 2015-08-14 10:01:00.061 28580 TRAC

System.arraycopy()的分析

System.arraycopy()的分析 一.深度复制和浅度复制的区别 原文地址:https://www.cnblogs.com/lsswudi/p/11331133.html

QEMU-System mode emulation分析(2)

2. System mode下的机器(machine)管理 QEMU Sytem mode模拟的整个硬件平台,硬件平台最核心的是我们常说的板子,PC上常说是主板,其中包括了主要的元素如CPU.ROM空间.RAM空间等,而这里所说的machine就是对这个机器层次的模拟. 2.1 machine数据结构 qemu提供了通用的QEMUMachine结构用来描述machine,新增一个machine时只需在machine自己的文件中实例化该数据结构.实例化时最重要的是将自己的初始化函数注册在该数据结构

android Qemu GPS 模块简明分析

Android 的 gps module 是  gps.default.so 在system/lib/hw/ 目录上, 一般提供gps功能的手机应该实现这个module和真实gps硬件交互 Qemu中gps就是要构造一个gps.default.so,  但这个so并不和真的硬件打交道,只是个模拟接口,其代码在sdk/emulator/gps/gps_qemu.c中 Qemu 容器外部实现了一个gps设备,但这个设备和 Android 交互只能通过管道,所以gps_qemu.c的功能就是同管道打交

QEMU 中的QOM分析

QOM (QEMU Object Model) 类对象的意义: 1:每个类型在系统中都只有且只有一个类对象 2:当系统中的某个类型的实例对象都被销毁了,那么系统就会销毁该类对象了 3:类对象的作用:负责虚函数表的存储,如果没有类对象,每个实例对象都要存储一份一模一样的虚函数表,这完全是对存储空间的浪费

LUCI system reboot 范例分析

系统重启: \lua\luci\controller\admin\system.lua entry({"admin", "system", "reboot"}, call("action_reboot"), _("Reboot"), 90) 直接调用action_reboot接口: function action_reboot() local reboot = luci.http.formvalue(&qu

几篇QEMU/KVM代码分析文章

QEMU/KVM结合起来分析的几篇文章,代码跟最新的版本有些差异,但大体逻辑一样,写得通俗易懂.我把链接放这里主要是为自己需要查看时调转过去方便,感谢作者的付出! QEMU Source Code Study - 1 QEMU Source Code Study (2) - KVM_init QEMU Source Code Study (3) - KVM_CREATE_VCPU QEMU Source Code Study - KVM_RUN

Qemu 有用的链接

Qemu下载和编译 Download https://en.wikibooks.org/wiki/QEMU/Linux https://en.wikibooks.org/wiki/QEMU/Installing_QEMU QEMU Internals Manual http://qemu.weilnetz.de/qemu-tech.html#Introduction QEMU/Debugging with QEMU QEMU Emulator User Documentation KQemu Q