百科问答小站 logo
百科问答小站 font logo



理论上来讲,macOS的rosetta转译未来能不能直接转译Windows应用? 第1页

  

user avatar   MebiuW 网友的相关建议: 
      

首先明确一下:Rosetta/Rosetta2是指令集转译(X86-to-ARM), Crossover算是软件兼容层(Windows-to-macOS,并且也不算是转译),它们并不工作在一个层级,“Crossover利用Rosetta来转译Windows应用”或者“Rosetta转译Windows应用”都是不对的。Rosetta的出现与否,都不会影响苹果想不想做Windows软件兼容。

苹果官方是肯定不会这么搞的,又不是某个吊打安卓的系统。 一方面,苹果有自己的独立且还算可用的生态,没必要蹭别家的生态,也不能把肥水流到外人田。另一方面,这么做有法律风险,Windows并不开源,可能存在侵权的问题。苹果在用Intel芯片的时期都没提供支持,还指望换到ARM后提供么。

所以说,从Rosetta的定位上(指令集转译)来说,就不会去兼容Windows应用,而且苹果也不会以任何形式提供官方支持。


user avatar   saturnman-58 网友的相关建议: 
      

一个应用程序能运行,除了自己的代码之外还需要调用平台的api,除非苹果能实现全套的微软平台api,否则不可能直接转译运行windows的程序。

rosetta2 的工作方式其实经常让人误解,因为“转译”这个词的意思太模糊了,很多人会误以为rosetta2是把所有x86指令逐条转换成等效的arm指令,如果这样做肯定性能会非常差估计会不足原生的1/10。

rosetta2的工作原理基本如下:

  1. 设计一个逻辑上的虚拟机指令架构,这个虚拟机指令架构有自己的寄存器和寻址规范调用规范之类的,基本上就是设计一个虚拟的cpu了。
  2. 把app中x86的指令转换为在这个虚拟机指令架构上的指令,把api调用转换为对这个虚拟机指令架构的规范调用,规范和转换好所有的内存对齐之类的要求。
  3. 设计一个编译器,把这个虚拟机指令架构的所有汇编指令静态编译到arm指令上形成与x86对应的镜像模块。
  4. 设计一个动态精确模拟所有x86指令的可执行虚拟机来应付原来x86中动态生成x86汇编的代码,并能对动态x86指令操作结果进行变换,这部分是性能瓶颈并且很多程序崩溃由此导致,不过一般占比不高。
  5. 重新设计操作系统的程序loader,在应用启动时启动rosetta2进行翻译和符号映射,装载翻译好的模块替代原模块进行运行,运行到动态指令生成的时候就调用精确模拟的虚拟机进行执行动态指令并获取结果回填。

以上原理说起来简单,但是没有深厚的系统软件积累是做不到的,尤其是rosetta2转译的如此高效确实让人惊讶。




  

相关话题

  为什么苹果M1成功了,骁龙850却失败了? 
  预算1w+ 是买MAC还是windows笔记本? 
  现阶段最便宜的完美黑苹果配置是什么? 
  如何评价iPadPro(7000毫安时)和MacBook Pro(5000毫安时)电池容量相差大? 
  为什么在 macOS 下 Chrome 的流畅度比 Safari 差很多? 
  ClashX Mac无限闪退? 
  为什么目前x86的CPU的L1 Cache这么小? 
  学习 iOS 开发,刚准备起步,需要立即买 Mac 吗? 
  为什么苹果M1成功了,骁龙850却失败了? 
  选择哪款显示器做MacBook Pro外接显示器用以平时阅读文档呢? 

前一个讨论
古代男人可以通过毁掉贵族女子名声的方式高攀千金小姐吗?
下一个讨论
为什么KOL们清一色拿视频处理来证明苹果M1性能强大?





© 2024-12-27 - tinynew.org. All Rights Reserved.
© 2024-12-27 - tinynew.org. 保留所有权利