模拟技术学习

描述

QEMU架构和内部

快速模拟(QEMU)

机器模拟器+虚拟器

模式:

用户模式模拟:允许为一个CPU构建的进程被另一个CPU执行

QEMU作为进程模拟器

系统模式模拟:允许模拟一个完整的系统,包括处理器和各种外围设备

QEMU作为系统模拟器

常用:

用于交叉编译开发环境

虚拟化,特别是设备模拟,象xen和kvm

安卓模拟器(SDK的一部分)

动态二进制翻译

动态翻译

第一种解释

以副产品的形式执行代码发现

翻译代码

象它被发现的那样递增的

将翻译后的块放入代码缓存中

把源到目标主机的映射保存到地址查询表中

模拟过程

运行完已经翻译的块

在表里寻找下一个资源主机

如果已经翻译了,跳转到目标主机

没有就直接翻译

象JIT编译器一样工作,但是不包括解释器

所有的客户代码都要经过二进制翻译

客户代码被划分成翻译块

一个翻译块和基本块相似,因为都是作为一个整体执行(整个块中没有跳转)

翻译块被翻译成一个单独的主机指令序列,被缓存到翻译缓存中。

缓存块使用客户虚拟地址(PC计数),所以他们能很容易的被发现

翻译块的缓存大小能够改变(通常是32M)

一旦缓存用完,整个缓存区清零

C语言

先将源指令流(二进制)转换成更短小且更加简易的操作,即微指令(C语言),被GCC编译成对象文件(二进制),最后QEMU将对象文件链接成目标的指令流(二进制)。

C语言

功能模拟

模拟处理器做的工作,而不是处理器怎么做

动态二进制翻译

解释器一次执行一条指令

固定的开销显著降低

反而,QEMU根据需要转换代码

翻译基本块 产生本地主机代码‘

把翻译块存储到翻译缓存中

微小代码发生器(TCG)

微操作(微指令)

固定的寄存器映射能够降低负载和存储字符串

翻译块

一个TCG基本块对应着一个被分支指令终止的指令列表

块链接

C语言

C语言

cpu_exec() 在主函数的每一步都被调用

项目会一直执行除非遇到一个未连接的块

通过 结尾返回cpu_exec()

块链接

通常来说,每一个翻译块的执行都伴随这很多特殊代码块的执行

开始时初始化处理器来执行产生的主机代码,并跳转到代码块

结束时恢复正常状态并返回到主循环

返回主循环后,每一个块显著的增加了开销,增长的还很快

当一个块返回主循环,下一个块已经知道并且已经被翻译,QEMU能够修改源代码来直接跳转到下一个块,而不是跳转到结尾

直接在基本块之间跳转

为跳转准备空间,然后回到结尾

每一次一个块返回,都要尝试链接它

当是发生在几个连续的块上时,这些块会形成链接和循环

这允许QEMU模拟紧密的循环,而不需要运行额外的代码

在循环的条件下,这也意味除非执行到一个没有翻译或者没有链接的块,这个控件不会返回到QEMU

异步中断

如果一个硬件中断被挂起,QEMU不会检查每一个基本块。反而,用户必须要调用一个特殊的功能来告诉说有个中断被挂起

这个功能重置了当前执行的块的链接,返回到控制CPU模拟的主循环

寄存器映射

如果目标寄存器的数目大于源寄存器的数目(例如:翻译x86的二进制到RISC)(RISC精简指令集)

当目标寄存器的数量不够时,可能会基于每一个块,或者每一个追踪,或者每一个循环

不常用的寄存器(源)可能没有映射

如何处理项目计数器

目标主机不同于源主机

对于间接的分支,寄存器持有源主机 一定会提供一种将源主机映射到目标主机的方法

翻译系统需要时刻追踪源主机

其它主要组件

内存地址转换

由软件控制的MMU(模型)将目标虚拟地址翻译成主机虚拟地址

两级客户物理页描述符表

客户虚拟地址和主机虚拟地址之间的映射

地址转换缓存(tlb_table)直接将目标虚拟地址翻译成主机虚拟地址

客户虚拟地址和该设备注册的I/O功能之间的映射

用于内存I/O映射的缓存(iotlb)

设备模拟

i440FX主机PCI网桥,Cirrus CLGD 5446 PCI VGA卡,PS/2鼠标和键盘,PCI IDE接口(HDD, CDROM), PCI和ISA网络适配器,串口,PCI UHCI USB控制器和虚拟USB hub,…

软件地址转换

虚拟到物理地址的转换时在每一次内存访问时完成的

地址转换缓存加速了转换

为了避免每次MMU映射改变时刷新已经翻译代码的缓存,QEMU使用的是物理索引的翻译缓存

每一个基础块都使用他的物理地址索引

当MMU映射改变时,只有基础块的链接被重置,(例如一个基础块不能直接跳转到另一个)

C语言

QEMU存储堆栈

C语言

应用和客户内核的工作类似于裸金属

客户通过仿真硬件与QEMU对话

QEMU代表客户对一个镜像文件执行I/O

主机内核对待客户I/O就像任何用户应用程序一样

C语言

来源:csdn,qq_40316844

审核编辑 :李倩

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分