我们的PC机里通常有很多系统软件,比如操作系统(其中包含不同的中断处理程序等)、汇编器和编译器、驱动程序。我的问题是,我们如何将这些信息存储在计算机中?这些软件是否都存储在计算机内部的机器指令格式中,在PC-ROM中的特定位置?或者,它们存储在高级语言(如C)中,每次调用程序时都用它编写并编译?
发布于 2014-08-16 13:23:21
计算机的处理器只能理解特定机器语言的指令。因此,正如您所猜测的,大多数程序(包括操作系统本身)都以机器语言格式存储在硬盘或其他存储设备上,或者存储在计算机的永久EPROM内存中。当需要时,程序代码被加载到内存中,然后可以执行。
但是有一些程序(通常称为“脚本”),它们以源代码格式存储在磁盘上,然后在需要运行它们时由合适的编译器进行解释。然而,编译器本身的代码必须由系统直接执行,因此它必须在机器代码中。
这两个选项之间也存在一个交叉,称为字节码。在这种情况下,编译器将原始的、人类可读的源代码转换成一种更短、更低级别的二进制格式,不再是人类可读的,但也不能直接解释给物理处理器。因此,这需要在特殊环境中的另一个编译器或解释器在物理设备上执行它。这种特殊的环境称为虚拟机。例如,这就是Java或C#的工作方式。
与直接编译到机器代码相比,这种方法的优点是机器代码是特定于处理器家族的,因此它只能在具有正确处理器类型的计算机上运行。虽然字节码可以独立于任何特定的处理器体系结构或机器语言格式,所以它可以在许多不同类型的计算机上运行,使用特定于该类型计算机的虚拟机变体。
与解释脚本相比,字节码具有更简洁和更标准化的优点,因此进一步将字节码编译成机器代码比解释脚本更简单、更快。此外,字节码编译器在将代码部署到运行它的物理机器之前,已经可以在很大程度上验证代码的正确性。
如果你想更好地理解计算机是如何从头开始构建的,我推荐查尔斯·佩托德( Charles )的书“代码”。
https://softwareengineering.stackexchange.com/questions/253520
复制相似问题