在计算机中,内核位于应用程序和硬件 (CPU) 之间,它允许软件与硬件交互。
那么在 Microsoft Surface X(SQ1 和 SQ2 处理器)上,为什么开发人员不能从 x86 Windows 移植他们的应用程序呢?例如Chrome、Firefox、一些基准测试工具和游戏...我认为微软只需要将他们的x86-64内核替换为ARM版本,大多数应用程序就可以正常运行。
Linux 也是如此。
在这种情况下,内核所做的事情比您预期的要少。特别是,内核不会翻译/解析/解释/破坏编译后的二进制文件所包含的机器代码。
当有人将源代码编译为二进制文件时,他们所做的实际上是将源代码转换为CPU 可以理解的机器代码指令。
使x86成为平台的因素之一是所有兼容硬件之间的共享指令集。这样,编译器就可以期望任何 x86 CPU 都能理解该PUSH指令,并在您通过线程执行该指令时执行预期的操作。
ARM使用不同的指令集。在这种情况下,需要将源代码编译(翻译)为 ARM CPU 可以理解的指令(在其指令集中定义的指令)。
并非所有程序都使用“本机”二进制文件(仅由 CPU 指令集实现的格式良好的指令组成的二进制文件)。Java 和 C# 等语言编译为虚拟汇编语言,并在运行时 JIT 编译为本机指令。其他人使用为给定平台定制的解释器。
总而言之,ARM CPU 无法识别 x86 编译程序使用的语言,反之亦然。虽然内核将控制硬件访问和 CPU 调度等事务,但它不会更改系统上执行的程序的指令。它只是创建进程,开始执行,并授予 CPU 执行时间,以便许多进程可以半同时共享它。
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |