【问题标题】:Machine Independency机器独立性
【发布时间】:2013-04-24 06:32:06
【问题描述】:

让我们考虑一个在 Windows 中编译的简单 C 程序。

我可以在 Intel CPU 机器上编译程序并在 AMD CPU 机器上运行它(相同的操作系统)。那么是不是说明CPU的指令集是一样的呢?

为什么同一个程序不能在不同操作系统和相同 CPU 的机器上运行?

【问题讨论】:

    标签: operating-system hardware computer-architecture


    【解决方案1】:

    目标文件的二进制设置完全不同。还有哪些库可用或如何调用它们。

    只需比较 ELF 或 EXE 文件的标头即可了解我的意思。

    如果你编写一个像 "main(){printf("Hello\n"); return 0;} 这样的简单程序,那么编译器会在后台执行很多操作来打印这些行。运行在同一个 CPU 上没有帮助,因为它可以执行汇编指令,但是一旦调用第一个 OS 函数就会严重失败。

    详细说明一下:

    作为一个例子。假设我们在 Amiga OS 上运行,带有 Motorola 68000 CPU。

    如果我没记错的话,调用系统库的调用约定涉及将指针加载到 CPU 的地址寄存器中,然后调用 OS 函数。

    现在假设我也使用摩托罗拉 68000 CPU 编写自己的操作系统。然而,当我设计我的操作系统时,我认为使用堆栈进行数据交换是一个更好的主意,所以当你在我自己的私有操作系统中调用类似的函数时,你不会传递地址寄存器中的地址,而是你把它推到堆栈上。 现在,当您的可执行文件将在我的操作系统中执行时(假设它可以加载,因为我使用相同的对象结构)您的可执行文件会将值放入寄存器中,而我的操作系统会尝试将它们从堆栈中弹出,因为它不知道它正在寻找的值应该是其他的。

    我希望这更详细一点,以便您理解它,但当然问题比这更深,因为这只是所涉及问题的一小部分。

    【讨论】:

    • 用一个例子来编辑文本来说明我的意思。
    • 哦,很好的插图..嘿,你知道什么好书可以从机器级别(数字逻辑)了解计算机是如何工作的吗?
    • 我想补充一点,这样做的原因是操作系统尽力提供硬件抽象。尤其是出于方便、便携和安全方面的考虑。
    • 对不起,我不能从头顶推荐一个。我会寻找“冯诺依曼架构”来帮助您入门,或者寻找有关操作系统设计的书籍。这个问题相当广泛,因此建议也可能取决于您的预期架构。
    【解决方案2】:

    您的 Intel 和 AMD 都使用 x86(或 x86-64)架构。这就是为什么您可以在两者上运行相同的软件的原因。然而,编译后的程序不仅包含对架构的依赖,还包含对底层操作系统的依赖。即使是 Linux 可执行文件的二进制格式也与 Windows 不同。

    但是,您可以使用一个使用 C 标准库的简单 C 程序,并在不同的操作系统和处理器架构上编译它。只要您的代码不包含依赖于操作系统的代码,它就会跨操作系统移植。同样,如果您的代码不依赖于底层架构字节序,例如,它将跨架构移植。

    约翰。

    【讨论】:

    • 谢谢。在运行时如何实现移植?
    • “运行时”是什么意思?如果您的意思是在运行时实现兼容性(Linux 上的 wine 就是一个很好的例子),这意味着有人编写了一个包装器,它知道如何加载可执行文件,然后拦截来自二进制文件的调用并将其转换为底层操作系统。否则无法在运行时移植可执行文件。你总是需要一个仿真层。
    • @ShankarNShankar 端口只有在操作系统有大量代码能够读取和执行 foreign 可执行文件时才能在运行时关闭。如今,这是一个虚拟机 (VM)。在某些平台上,如果两个平台足够相似以至于不需要完整的虚拟机,我就可以在没有虚拟机的情况下被淘汰。 Wine 在 Linux x86 或 Mac x86 上运行 Windows x86 就是一个例子。
    • @ShankarNShankar 运行时(例如,C 运行时)是在每个平台的基础上实现的。假设我们有两个微控制器,一个是 Renesas M16C,一个是 ARM (LPC2138)。两者都需要将 C 运行时移植到其特定要求,然后才能为相关微控制器编译任何 C 代码。
    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多