1 龙芯的二进制翻译类型
按照二进制的翻译类型,二进制翻译可以分成三大类,分别是:解释执行、静态二进制翻译以及动态二进制翻译。
解释执行:会对每条指令进行实时的解释,不进行优化和缓存;
静态二进制翻译:采用“离线”翻译方式,在程序不运行的情况下,对原二进制文件进行分析、翻译以及优化;
动态二进制翻译:采用“在线”翻译方式,在程序执行到某个片段时才会对该片段进行翻译;
龙芯的二进制翻译宣称采用的是结合上述几种优点的混合二进制翻译系统
2 实现机制
LoongArch 架构包含二进制翻译扩展指令,以支持龙芯二进制翻译系统对其他架构下二进制指令的高效翻译,
龙芯二进制翻译系统作为中间层,通过架构支持与软硬协同算法优化,充分利用本地硬件,
最大化提升翻译效率,为上层应用软件提供目标指令集的良好虚拟运行环境。
即:LATX非纯软件的实现,除了用户态来实现的翻译的模块,CPU中为二进制翻译增加了一些特殊指令和一些专门的硬件设计来加速翻译
整体的架构图如下:
LATX(LAT from X86):支持 X86 平台的应用在龙芯平台的安装运行
LATA(LAT from ARM):支持 ARM 平台的应用在龙芯平台的安装运行
3 支持异构X86应用具体实现
在龙芯平台上 运行LInux X86应用:需要LATX(x代表x86)
实现运行windows x86应用,需要LATX + wine结合使用,先通过wine将windows系统API 转换为linux x86指令,
再通过LATX转化为loongrach指令
LATX组件包括:LAT组件与i386-runtime为x86架构应用运行库,在UOS系统上安装如下:
i386-runtime包含了一些x86架构上的so库和Link等运行依赖
而LAT组件包含了例如latx-i386和latx-x86_64两个程序,
分别用于翻译32位和64位的X86程序
4 使用限制
使用限制 |
说明 |
补充 |
操作系统 |
支持UOS、kylin、Loongnix(Loongnix为龙芯的操作系统) |
因目前LAT的实现还没有完全commit到kernel主干,仅合入以上国产操作系统上 |
LAT组件 |
目前用户态组件主要支持各发行版的Desktop版本上,例如UOS/Loongnix server上不支持 |
在server版本上没有LAT相关的组件包可供下载 |
需要检查:guest os系统中CPU FLAGS中是否有lbt标志,如果没有需要确认host os内核版本是否符合要求,
UOS系统内核4.19.0-loongson-3-desktop以上,kylin内核不低于SP3,Loongnix内核为4.19.190-7.6以上