码迷,mamicode.com
首页 > 其他好文 > 详细

QEMU-System mode emulation分析(1)

时间:2015-07-22 14:49:34      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

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,以后会有详细介绍它的实现机制。



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

QEMU-System mode emulation分析(1)

标签:

原文地址:http://blog.csdn.net/lulu901130/article/details/47001401

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!