jmguo的个人博客分享 http://blog.sciencenet.cn/u/jmguo

博文

【代发】动态二进制代码转换器的黄金时代

已有 1052 次阅读 2021-8-24 16:49 |系统分类:观点评述

【注:本文是华东师范大学数据科学与工程学院系统优化实验室黄波特聘教授于2021年6月写的随笔。黄老师作为编译优化和动态二进制代码转换领域的老兵,有许多亲历者的深刻感悟和独到见解。经原作者同意,代为发表到科学网博客,以飨读者。转载请注明出处,谢谢。】


      2020年11月苹果Apple M1处理器的发布正式宣布了MacBook Air, MacBook Pro和Mac Mini从英特尔x86架构芯片到苹果自研Arm架构芯片的切换,同时宣布的还有基于Apple M1处理器的新Mac设备对原来运行在基于英特尔芯片的Mac设备上常见应用程序的无缝迁移,这个跨平台(从x86到Arm)的应用支持无疑激发起业界对苹果后台支撑技术的强烈好奇。无独有偶,2021年6月份微软发布Windows 11时,也宣布在英特尔或AMD的x86芯片上对原生安卓应用的跨平台(从Arm到x86)支持,再次激发起大家对跨平台应用无缝迁移技术的强烈兴趣。


从技术上来说,支撑Mac应用从英特尔x86芯片到苹果自研Arm芯片无缝迁移的关键是苹果的Rosetta 2,其本质是动态二进制代码转换技术,即在程序运行的过程中动态地把Intel x86指令转换成Apple M1上的Arm指令,从而完成应用的跨平台运行。Rosetta 2是在Rosetta的基础上发展过来的,而Rosetta在2005年苹果从PowerPC芯片切换到英特尔酷睿芯片时就发挥了重要作用,帮助原来运行在Mac OS X上的软件不用修改就运行在英特尔酷睿芯片上。苹果的Rosetta技术起源于从英国Transitive公司授权的二进制代码转换技术,迄今为止这一技术帮助苹果公司成功实现了两次平台切换。


同样地支撑原生安卓应用运行于x86芯片和Windows 11之上的关键技术Intel® Bridge也是渊源已久。作为编译优化和动态二进制代码转换领域的老兵,笔者在2000年就曾参与到英特尔 IA-32 EL(Intel Architecture 32-bit Execution Layer)项目中。研发IA-32 EL的目的是实现IA-32程序在全新的英特尔64位安腾(Itanium)架构上的无缝执行。在安腾处理器的设计中,由于安腾处理器的指令集架构(ISA)跟IA-32不兼容,最初的设计是在安腾处理器的芯片中搭载一个IA-32应用的硬件解释器IVE(Intel Value Engine)来保证IA-32应用在安腾上的正确运行。但是,由于解释执行的效率比较低,并且硬件解释器IVE的主频不能随着安腾芯片的迭代而同步升频,最终英特尔采取了动态二进制代码转换的技术,即用IA-32 EL替代了安腾上IA-32应用的硬件解释器IVE。执行上,当操作系统检测到需要运行的是IA-32应用时,会把控制权转交给IA-32 EL,由IA-32 EL来实现IA-32指令到安腾指令的转换并确保IA-32应用在安腾上的正确运行。不过,当年英特尔希望通过安腾处理器来推广全新的64位架构的战略执行得并不顺利,2004年英特尔继AMD之后也推出了从IA-32自然扩展到64位的x86-64架构,全新64位的安腾处理器的研发也随之逐步停滞。


IA-32 EL随着安腾处理器的研发停滞也进入维护状态,以支持已有的安腾客户为主要任务。非常有趣的是,上帝在关上一扇门的同时,也悄悄打开了另外一扇窗。随着英特尔进入移动终端战略的推进以及安卓应用生态的迅猛发展,确保围绕Arm移动芯片开发的安卓应用能在基于Intel Atom®(英特尔凌动处理器)的移动设备上正确高效地运行成为了那个年代的当务之急。对于不含JNI(Java Native Interface)调用的纯粹安卓应用,英特尔凌动处理器上的安卓虚拟机能够很好地运行。然而,如果原来运行在基于Arm芯片的手机上的安卓应用包含JNI调用(如,对Arm本地指令的调用),英特尔凌动处理器上的安卓虚拟机无疑需要一个特殊的机制去运行这些Arm代码。IA-32 EL的研发团队正是抓住了这个难得的机遇,把原来IA-32 EL研发的动态二进制代码转换技术用在了从Arm到Intel Atom®指令的动态二进制代码转换上,开发出了Intel Houdini,与英特尔凌动处理器上的安卓虚拟机无缝配合共同完成Arm上原生安卓应用在英特尔移动设备上的正确高效执行。


从IA-32 EL的第一个发布到Intel Houdini的第一个发布大约经历了十年。巧合的是,从Intel Houdini的第一个发布到Intel® Bridge技术的发布也经历了大约十年。与在英特尔的移动设备上运行原生安卓应用的目的相似,在基于Windows 11的x86芯片个人电脑上流畅运行安卓原生应用是Intel® Bridge技术的设计目标,虽然操作系统的不一致(安卓 vs. Windows 11)会带来额外的技术挑战,Intel Houdini中对安卓应用内原生Arm指令的动态转换及优化在Intel® Bridge技术中还是得到了很好的沿用。借助Intel® Bridge技术,x86架构的个人电脑上的应用生态即将拥抱更加广泛的移动应用生态,这是这一技术的重要战略意义。


苹果和英特尔这两个国际大厂拥抱动态二进制代码转换技术实现应用程序的跨平台迁移可以给我们很好的启示。在解决芯片及系统卡脖子问题的过程中,无疑会涌现越来越多的新的平台,这里的平台是指硬件系统和基础系统软件构成的应用软件(或服务)的运行平台,而应用程序的跨平台迁移是把在某个平台上运行的应用程序在另外一个平台上使能,这无疑是构建新平台应用生态的必经之路。在独立软件提供商围绕新平台提供相应版本之前,动态二进制代码转换技术是一个确实可行的快速打造新平台应用生态的方案。此外,以动态二进制代码转换技术为基础,平台仿真以及一些系统方面的相关科研也可以高效地进行。


在举全国之力为解决芯片及系统卡脖子问题而拼搏的大背景下,系统软件的研发需要同步并行。苹果之所以能够比较好地解决平台切换时的应用迁移,这个与苹果统控芯片设计、平台设计、操作系统、程序运行时、开发工具链及应用商店是息息相关的。微软解决安卓移动应用在Windows 11上的无缝运行也是和英特尔在硬件及软件方面通力合作的结果。笔者相信,作为系统软件中的一个重要分支,动态二进制代码转换技术是一个很重要的突破口,在国产芯片及系统即将奔涌的不久的未来,动态二进制代码转换技术一定会为新平台的生态建设做出重大的贡献。让我们一起来倡导软硬件协同设计的实践、打造动态二进制代码转换的开放平台,助力应用的跨平台迁移,迎接动态二进制代码转换技术带来的快速高效应用跨平台迁移的黄金时代。




https://blog.sciencenet.cn/blog-3485575-1301241.html


1 闫江毓

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-12-1 22:45

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部