我已经搜索了这些主题,但是不确定我是否正确理解了它们之间的关系。 我总结了以下几点,请纠正/补充。

  • 32位或64位处理器意味着该处理器可以一次处理32/64位。 使用32位或64位处理器表示基础寄存器,地址总线或数据总线的大小也相同。

  • 为了在32/64位处理器上工作,我们有32/64位操作系统

  • 为了在32/64位操作系统上工作,我们开发了32/64位应用程序

  • 可以在64位OS中运行32位应用程序,也可以在32位OS中运行64位应用程序( LinuxPAE64

  • 无法在32位处理器上运行64位应用程序/操作系统


另外,我有两个与记忆有关的问题。

  1. 处理器的内存映射的布局似乎与处理器的指令大小无关。 例如,大多数Intel Core 2系统(64位)的内存映射都非常接近下图。 为什么 64位处理器不选择更大范围的内存映射?

    在此处输入图片说明

  2. 是什么限制了64位OS最多使用(2 ^ 64-设备/总线地址)RAM大小?

===============>>#1 票数:3

那里有许多不同种类的处理器(ARM,MIPS,x86等)。

我只能谈论x86(32bit)/ x86-64(64bit)。

位数主要是指寄存器的大小。 对于x86,虚拟地址空间限制为32位(4GiB) 这意味着32位应用程序(假定该应用程序在32位CPU上运行的应用程序)一次只能看到4GiB。

对于x86-64,所有虚拟地址的大小均为64位。 但是,通过要求所有不受支持的位与最高支持的位具有相同的值,CPU可以自由地不支持所有64位。 操作系统必须查询支持的位数。 (我的Core i5在这里支持48位)

物理地址空间(即CPU实际可以处理的内存量)最初是32位,用于x86。 但是自奔腾1以来,CPU支持物理地址扩展(PAE),允许多达36位(64GiB)的RAM。 (操作系统必须启用扩展)

目前,x86-64将物理地址空间限制为52位(4PiB) 在这里,CPU再一次免费支持更少的位。 (我的Core i5在这里支持36位)

由于x86和x86-64都使用相同的操作码,但含义稍有不同,因此32位应用程序不能仅在64位CPU(64位模式/长模式)上运行。

但是x86-64具有所谓的兼容模式(长模式的子模式),它可以执行32位应用程序。 (操作系统必须切换模式。)

处理器未选择内存映射。 这是mainbord和BIOS的责任,可以部分由OS配置。 Mainbord和BIOS制造商将所有内容保留在地址空间的较低4GiB中的原因是与32位OS兼容。 (由于与旧的16位DOS应用程序兼容的原因,默认情况下,即使x86-64 CPU也会默认禁用对物理地址空间的每个第二MiB的访问)

如前所述,x86-64根据规范将物理地址空间限制为52位。 更远的是受CPU实现限制的地址空间,甚至受mainbord实现限制的地址空间。 (这样做是为了减少实施成本)。 因此,无法寻址2⁶⁴RAM。

  ask by sliter translate from so

未解决问题?本站智能推荐:

5回复

处理器和虚拟/物理地址

简而言之,据我了解内存管理,处理器生成虚拟地址。 MMU使用每个进程的地址表将这些地址转换为相应的物理地址(必要时在它们之间具有TLB和页面错误)。 我的问题是处理器是否总是产生虚拟地址? 就地址空间(用户/内核),处理器模式(用户/内核)和上下文(进程/系统)而言,处理器何时始终产生
6回复

32对64位......或者,'处理信息'究竟是什么意思

我无法理解32位处理器和64位处理器之间的区别。 我知道32位处理器一次可以访问32位,而64位处理器一次可以访问64位。 但是,一次访问一定数量的位究竟意味着什么呢?
2回复

操作系统代码和用户应用程序代码如何在同一处理器上运行

我们都知道操作系统负责处理用户应用程序所需的资源。 操作系统也是一段运行的代码,那么它如何管理其他用户程序? OS是否在专用处理器上运行并在其他处理器上监视用户程序? 操作系统实际上如何处理用户应用程序?
1回复

为什么现代操作系统需要那么多内存?

我要保留一个旧的大学朋友屋。 我发现我们曾经用来破解的两台旧计算机。 它们甚至没有那么老,例如2003年类型。 单核,256MB,80GB硬盘。 或者至少这些贴纸自豪地宣称。 所以我去:大奖! 我将安装Ubuntu,并从中获得一些乐趣。 但是这些机器有256MB的ram。 加
1回复

为什么操作系统说当内存足够时它无法为jvm分配内存

我正在尝试使用以下命令启动新的jvm: java -version ,但它报告错误: # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation
4回复

0x08048000用于32位机器之前的内存是多少?

在Linux中,我了解到每个进程都在32位机器中存储从0x08048000开始的数据(在64位机器中存储0x00400000)。 但我不知道从那里开始的原因。 在0x08048000用于之前的内存是多少? 更新 :有些人认为它是为内核映射的。 但据我所知,Linux内核使用在用户
1回复

Linux内存使用量是否大于所有应用程序使用的内存总和?

我正在使用“ free -m -t”命令来监视我的Linux系统并获取 这意味着用户进程使用了​​30GB的物理内存。 但是当使用top命令并按内存使用量排序时,所有应用程序进程仅使用3〜4GB的内存。 为什么会发生这种不一致?
1回复

应用程序可以使用的最大内存空间是否等于(物理内存+交换空间)?

从这篇文章中 ,我知道交换空间与物理内存相关。 所以假设物理内存和交换空间都是4 GB。 虽然从理论上讲,64位应用程序的内存空间接近2 ^ 64(当然,内核会占用一些空间),但根据我的理解,应用程序可以使用的实际内存只有8 GB。 所以我的问题是:对于在Unix / Linux上运行
3回复

是否需要将程序带到主存储器中执行?

为什么需要将程序从辅助存储器引入主存储器中以便执行? 为什么我们不能从辅助存储器执行程序? 虽然,目前可能尚不可行,但将来是否可以通过某种机制通过某种方式直接从辅助存储器执行程序?
2回复

操作系统是为特定处理器还是所有类型的处理器设计的?

我需要知道操作系统是否针对特定处理器类别进行设计? 并且任何操作系统都可以在任何微处理器上运行吗?