代码之家  ›  专栏  ›  技术社区  ›  Shubham

机器依赖性是什么意思?

  •  5
  • Shubham  · 技术社区  · 16 年前

    高级语言如何克服这个问题?

    2 回复  |  直到 12 年前
        1
  •  5
  •   Nicholas Knight    16 年前

    在最深层次上,这意味着指令集不同。把一个特定的位序列放到x86处理器上会得到完全不同的结果,而不是把同一组位放到ARM处理器上。

    所有高级构造最终都可以简化为一组基本的操作,这些操作可以由所有通用机器执行(尽管有些构造在某些cpu上可能比在其他cpu上更有效)。

    编译器就是这样做的。它们解析高级语言,并以某种方式将其简化为目标系统的机器语言。对于新的CPU,通常只需要重新编写编译器的选定位。一些编译器(GCC是一个很好的例子)构建在层中,大大简化了这项工作。一个熟悉编译器和目标平台的高技能开发人员可以相当容易地生成一个基本的端口。

    当然,除了简单地将结构简化为本机语言之外,还有一些问题,如输入/输出、文件系统访问等。。这些通常也是分层处理的,通常只有最底层的驱动程序被重写以用于新的平台,从而保持与上层的一致接口。

    甚至驱动程序也可以在不同的机器类型之间共享,部分或全部!x86平台并不是唯一拥有PCI总线的平台。即使在总线不同的地方,连接到总线上的设备也往往是相同的。Linux在几种机器类型之间共享许多设备驱动程序,几乎没有改变。编译器负责处理转换成机器代码的细节,内核的更多内层试图抽象出它们可以实现的其他行为差异,驱动程序编写者只需坚持已建立的接口即可。

    在此之后,您会遇到这样的问题:在给定的平台中,任何特定的系统是否具有特定的可选设备(或设备类别)。例如,对于大多数服务器来说,使用3D加速器是愚蠢的。有些系统可能有硬件随机数生成器,有些可能没有。有些可能没有固定的存储空间。然而,不合格的“机器依赖性”通常不是指这种程度的依赖性。

        2
  •  0
  •   Will A    16 年前

    必要地 不过,视频卡、外部存储器、鼠标/键盘等是其中的一部分。

    这是通过使用具有公共接口的驱动程序抽象出硬件的复杂性来解决的—例如,DirectX通过提供定义良好的接口抽象出与视频卡的交互。