【问题标题】:32 v/s 64 bit architecture - virtual address space32 位与 64 位架构 - 虚拟地址空间
【发布时间】:2014-04-12 21:45:26
【问题描述】:

我正在参加一个操作系统课程,其中讲师提到了 32 v/s 64 位架构。

我对这个与我的架构类的区别的理解是 32 位与 64 位表示 CPU 字大小、寄存器大小以及 ALU 可以执行计算的大小。

导师说:“今天使用的是64位架构,所以进程的虚拟地址空间大小是64位。”

请问32位v/s 64位是否也表示一个进程的虚拟地址空间大小是否是32位v/s 64位?如果不是,虚拟地址空间大小是否对架构类型(32 位/64 位)有任何依赖性。

【问题讨论】:

  • 好吧,是吗?我们是谁?这不是很具体。
  • 对不起,我正在编辑它。
  • @DavidHeffernan 我已经编辑了这个问题。
  • 视情况而定。大多数 32 位拱形有 32 位指针和 64 位拱形 64 位指针。不一定要那样。
  • 架构甚至可能具有 32 位数据寄存器但具有 64 位寻址寄存器。这几天不经常这样做。

标签: architecture 32bit-64bit virtual-address-space


【解决方案1】:

没有。即使您拥有 64 位架构,虚拟地址空间也需要小于总虚拟可寻址空间,以便为操作系统提供运行空间。

每个进程分配多少空间取决于操作系统。与 32 位架构相比,64 位架构表明操作系统将为进程使用更大的默认进程空间。分配多少默认进程空间取决于操作系统。在 Windows 64 位中,进程的默认虚拟地址空间为 8 TB(在 64 位字节可寻址系统上总共有 2 ^ 24 可寻址 TB),而在 32 位中,它只有 2 GB(4 GB 可寻址全部的)。其他剩余内存是为 32 位系统中的操作系统保留的(不确定为什么在 64 位系统中该进程被限制为相对较低的数量)。

在 32 位架构上,这些默认值 can be changed on Windows(在 Linux 上通过其他方法,我敢肯定)介于 2 GB 到 3 GB 之间,但必须始终为操作系统保留最后一个 GB。

这并不意味着进程必须是 64 位架构中的 64 位。 64 位操作系统可以通过兼容模式在 64 位架构上运行 32 位进程。正如 John Saunders 所指出的,有些 64 位体系结构具有 32 位处理器,无需兼容模式即可运行 32 位进程; Intel 的 Itanium 处理器就是一个例子。

32 位架构可以通过使用 Physical Address Extensions (PAE) 来扩展进程的内存空间以使用完整的 4 GB 内存,尽管 Windows PAE 允许 64 - 128 GB 的物理内存取决于处理器。

这意味着一个单个 32 位进程可能使用 PAE 可以“看到”多达 4 GB 的主内存,但仅此而已。据我所知,在可预见的未来,任何进程都不会使用接近 2 ^ 64 字节的空间,因此 PAE 不适用于 64 位系统。


所有超出您问题范围的内容:

存在虚拟地址空间,因此操作系统可以为每个进程分配比实际可用更多的进程空间。它还存在以允许保护进程空间并通过Virtual Machine Monitor (VMM) 启用虚拟化。使用 VMM 对进程空间的这种保护允许虚拟化指令集架构。这就是允许人们在 Windows 中的 VM 上运行 Linux 的原因(请注意,处理器硬件和操作系统都必须支持虚拟化才能实现这一点)。

64 位架构优于 32 位的最常见/最简单的示例是 RAM/主内存超过 4 GB 的系统。 32 位系统通过 PAE 最多只能使用 4 GB 的物理/主内存/RAM,但 64 位系统可以轻松地允许进程处理比不需要 PAE 更多的内存方式 .请记住,2^32 位 = 4 * 1024 * 1024 * 1024 = 4 GB。 32 位地址空间中的每一位代表字节可寻址系统中的 1 个字节。

【讨论】:

  • Each bit in the 32-bit address space represents 1 byte in a byte-addressable system. - 这是理解内存寻址方案的关键。这是许多人不会提到的最基本的概念。很高兴您将其包含在答案中。
  • 不是 8 TB,而是 8 GB。 “一个进程的默认虚拟地址空间是 8 TB(总共有 2 ^ 24 个可寻址 TB”。
【解决方案2】:

32 位与 64 位架构的限制来自您可以存储在 32 位 cpu 寄存器中以访问地址的数字的最大大小。即使内存可能在那里,您也需要将指向内存的地址值存储在寄存器中,以供汇编命令(push、mov、pop、store)使用,以便将值放入这些内存位置。一个 64 位寄存器可以存储 2^64 个不同的值 - 一个非常大的数字(16 exbibytes),32 位只能存储 2^32 个值 = 4GB。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2013-01-29
    • 2012-08-19
    • 1970-01-01
    • 2020-03-24
    相关资源
    最近更新 更多