【问题标题】:64 bit vs 16 bit mode for my program if I have only 320 KB RAM? [closed]如果我只有 320 KB RAM,我的程序是 64 位还是 16 位模式? [关闭]
【发布时间】:2021-01-05 17:15:15
【问题描述】:

假设如果我在一个只有 320KB 的嵌入式系统中有一个 x86-64 处理器 内存。那么,我应该使用长模式(64 位模式)还是应该 更喜欢使用实模式(16 位模式)来运行您的程序?

PS~我在博客的评论中看到了这个问题。这就是我掌握的所有信息。

非常感谢。

【问题讨论】:

  • 我想知道为什么有人会设计这样一个带有 x86-64 CPU 的系统,而这么多其他选项会更简单、更便宜几个数量级?
  • 我认为唯一可能的原因是您想要运行以汇编语言编写的现有代码,或者您只有二进制文件。在这种情况下,您必须以现有代码编写的任何模式运行;你别无选择。
  • 顺便说一句,我不确定您为什么要标记此linuxwindows,因为您无法在 320KB 的 RAM 中运行这两个操作系统。您的选择是某种嵌入式操作系统、非常古老的 x86 操作系统(例如 MS-DOS)或裸机。当然,前两个中的任何一个都会对你运行的模式增加更多限制(例如 MS-DOS 只会在实模式下运行)。

标签: linux windows memory operating-system ram


【解决方案1】:

假设我在一个只有 320KB RAM 的嵌入式系统中有一个 x86-64 处理器。那么,我应该使用长模式(64 位模式)还是更喜欢使用实模式(16 位模式)来运行您的程序?

大多数 x86-64 处理器都有数 MiB 的缓存,并且此缓存可以配置为“回写,不获取”,因此它实际上最终表现得像 RAM。实际上使用 320 KiB 的 RAM 会很愚蠢(不会帮助您存储更多数据,但会比缓存慢);所以最好是降低硬件成本,根本不用任何内存。

实模式不能使用超过 1088 KiB 的“伪装成 RAM 的缓存”,所以这相当糟糕。长模式需要分页,这可能会消耗大约 12 KiB 的内存。

最好的选择可能是 32 位保护模式,因为您可以使用所有“伪装成 RAM 的缓存”而不消耗任何用于分页;但这取决于代码本身和可以从 64 位数据中受益的软件,或者两倍于 64 位的寄存器将具有更高的性能。

请注意,“64 位代码”不需要使用 64 位指针或 64 位数据。 “64 位代码”中的大多数指令都是 32 位的(如果要使用 64 位,则带有大小覆盖前缀)。

【讨论】:

  • 令人着迷。有没有这样做的项目?
  • @thatotherguy:据我所知,没有任何项目——x86-64 处理器不用于 RAM 很少的小型嵌入式系统。对于“缓存伪装成 RAM”,固件通常在设置内存控制器之前使用该技巧(因为在此之前它无法使用 RAM)。
  • 是什么东西,例如实时操作系统会利用它来保证快速访问数据吗?
  • @thatotherguy:我认为任何非常关心(硬)实时的人都需要保证最坏情况时间(不受“是否缓存”的影响)无法使用 80x86(由于 SMM)。对于“(软)实时”,没有人会如此严重地削弱性能(通过使所有 RAM 不缓存)。
【解决方案2】:

这取决于你想做什么:

64 位 Sparc CPU 在 64 位 x86 CPU 之前可用;在此类 CPU 的最常见操作系统之一的程序员文档中,我读过如下内容:

如果你的程序使用小于 3 GB 的内存并且 32 位整数运算就足够了,那么你应该编写 32 位程序,因为内存消耗更少,速度更快。如果需要 64 位运算,则应该编写 64 位程序,因为用 32 位指令执行 64 位运算很慢。

所以问题是:你需要 64 位算术吗?

如果您想进入长模式,您必须考虑必须使用分页 - 这将花费您额外的内存。

另一方面,实模式意味着您可能必须使用段,这会使您的程序更加复杂——尤其是当您需要 32 位整数运算时。

但是,您也可以使用 32 位(伪)保护模式并关闭分页,并且仅使用“平面”内存布局并且仅使用权限级别 0。

如果要切换到 64 位长模式,无论如何都必须进入此模式。

那么为什么不永久使用这种模式呢?

【讨论】:

    【解决方案3】:

    我猜是 16 位,因为 64 位需要更多 RAM...不太清楚为什么会这样

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 2019-10-04
      • 2018-01-21
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 2010-12-23
      • 2011-04-13
      相关资源
      最近更新 更多