专栏名称: 码小辫
给程序员和编程爱好者分享计算机编程电子书以及相关的学习资源
目录
相关文章推荐
大河报  ·  可怕!常喝的饮品里加进了布洛芬 ·  13 小时前  
大河报  ·  可怕!常喝的饮品里加进了布洛芬 ·  13 小时前  
青岛新闻网  ·  可怕!饮品里添加布洛芬! ·  15 小时前  
青岛新闻网  ·  可怕!饮品里添加布洛芬! ·  15 小时前  
中国食品药品监管杂志  ·  悦读 | 千磨万击还坚劲,任尔东西南北风 ·  19 小时前  
中国食品药品监管杂志  ·  关注 | “食品安全与监管”专题约稿函 ·  19 小时前  
海西晨报  ·  非法添加硼砂!石狮两家餐饮店被查 ·  22 小时前  
51好读  ›  专栏  ›  码小辫

这个问题99%的人会答错!包括我

码小辫  · 公众号  ·  · 2025-05-10 17:10

主要观点总结

本文主要探讨了不同CPU和操作系统之间的兼容性,以及实现跨平台运行程序的技术手段,包括Rosetta技术、Universal双架构、Wine软件以及虚拟机技术等。文章还涉及了编译器和虚拟机的关系,以及Java虚拟机等中间产物的跨平台运行方式。

关键观点总结

关键观点1: 不同的CPU和操作系统之间存在不兼容性,因为它们的系统调用和库不同。

CPU的不兼容性源于机器语言的差异,操作系统的差异则体现在系统调用和提供的接口上。

关键观点2: Rosetta技术是一种实现跨平台运行程序的方法,它可以在运行时将x86_64的机器指令转换成ARM架构的指令。

Rosetta技术在苹果电脑的CPU架构变迁中两次被使用,从PowerPC向Intel转型和Intel向自研M系列转型时都发挥了作用。

关键观点3: Universal双架构技术是将两套架构的程序打包到一起,以实现在不同平台上的运行。

这种技术同样是苹果在CPU架构变化后的兼容性手段。

关键观点4: Wine软件可以在操作系统层把Windows的API转换成Mac的,从而实现Windows程序在Mac系统上的运行。

Wine的原理是把Windows操作系统的API调用翻译成Mac系统的调用。

关键观点5: 虚拟机技术可以通过运行中间代码来实现跨平台运行程序。

虚拟机内部将中间代码转换成不同平台的指令。Java虚拟机是最经典的例子。


正文

请到「今天看啥」查看全文


后来苹果用了自家的 M 系列芯片,是基于 ARM 架构实现的,所以新版的 mac 相当于在 ARM 架构 CPU 上,运行着 MacOS 操作系统的电脑。

所以这个问题本质上是说。

不同的 CPU 和不同的操作系统之间,是否能互相兼容?

CPU

我们先来看不同的 CPU。

一个软件,不论上面经历了啥,最终都要被搞成 0101 这种机器语言,运行在 CPU 上。

这里说的不同的体系结构,指的就是这种 0101 的机器语言不同,即指令集是不一样的。

这里的 0101 让这里的 CPU 去运行,肯定是不行的,识别不了。

所以,不同的体系结构的 CPU 之间不兼容。

操作系统

CPU 说完了,那不同的操作系统呢?

从操作系统的本质看,它就是在 CPU 上封装的一层软件。

除了自身的一套机制外,还提供了给上层应用程序使用的接口,包括系统调用和一堆库。

不同的操作系统,系统调用和库是不一样的。

把软件从一个操作系统迁移到另一个操作系统,软件依然按照原来的格式调用之前操作系统的方法,所以也是运行不起来的。

所以,不同操作系统上的软件,也是不兼容的。

最终结论就是,只要 CPU 和操作系统有一个是不一样的,软件就跑不起来。

大功告成了!吗?

新旧苹果 Rosetta

你可别欺负我记性不好,我怎么记着刚刚有一个是 YES 呢?

看来事情没那么简单呀。

我们聚焦于这两台新旧苹果电脑,为什么它们连最底层的 CPU 都不同,软件却能成功运行呢?

来,一起想想。

行了别想了,都什么年代了。随便找个没有广告嫌疑的 AI,直接问:

为什么新版 mac 能运行旧版 mac 上的软件?

回答一目了然,有个叫 Rosetta 的东西,可以在运行时把 x86_64 的机器指令转换成 ARM 架构的,这也是当时新版 mac 出现后解决很多人担心的软件生态问题的杀手锏。

原本不同 CPU 架构是不兼容的,但 Rosetta 技术让这一层变得兼容了。

诶等等,刚刚这是不是写 Rosetta2?怎么难道还有 1 吗?

没错,这就涉及到苹果电脑的 CPU 架构变迁史了。

可以看到从 PowerPC 架构向 Intel 架构转型时就用到了 Rosetta 技术,同样是 CPU 指令的动态翻译。

到了 Intel 架构向自研的 M 系列转型时,Rosetta 技术再次派上了用场,改吧改吧就变成了 Rosetta2。

这就告诉我们一个极为深刻的道理:别光顾着解决眼嘛前这点事儿,多琢磨琢磨以后咋整。

好了,所以刚刚新 mac 之所以能运行旧 mac 的软件,就是因为有了 Rosetta 技术!

大功告成了!吗?

Universal 双架构

按理说,我们刚刚从旧版电脑上复制的计算器程序,应该是 Intel x86 架构的可执行文件。

那我们用 file 命令看一下是不是。

Calculator.app/Contents/MacOS/Calculator: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
Calculator.app/Contents/MacOS/Calculator (for architecture x86_64): Mach-O 64-bit executable x86_64
Calculator.app/Contents/MacOS/Calculator (for architecture arm64e): Mach-O 64-bit executable arm64e






请到「今天看啥」查看全文


推荐文章
大河报  ·  可怕!常喝的饮品里加进了布洛芬
13 小时前
大河报  ·  可怕!常喝的饮品里加进了布洛芬
13 小时前
青岛新闻网  ·  可怕!饮品里添加布洛芬!
15 小时前
青岛新闻网  ·  可怕!饮品里添加布洛芬!
15 小时前
中国食品药品监管杂志  ·  悦读 | 千磨万击还坚劲,任尔东西南北风
19 小时前
中国食品药品监管杂志  ·  关注 | “食品安全与监管”专题约稿函
19 小时前
海西晨报  ·  非法添加硼砂!石狮两家餐饮店被查
22 小时前
电影菌落  ·  内涵漫画污因为不举
7 年前