Linux MIPS64:探究地址空间 (linux mips64 地址空间)

地址空间是一个操作系统中的重要概念。在操作系统内核中,地址空间是用来区分不同进程内存空间的一个概念。对于不同的进程来说,它们的地址空间应该是分离的。这样才能保证进程之间的内存不会发生冲突,从而保证系统的稳定性和可靠性。

在本文中,我们将探究Linux MIPS64平台下的地址空间。我们将会讨论MIPS64体系结构下的地址空间特点,以及Linux内核如何管理这些地址空间。

MIPS64地址空间的特点

MIPS64架构是基于32位地址空间的,但它支持使用64位物理地址。这意味着MIPS64架构可以寻址的内存空间非常大。在Linux MIPS64平台下,进程的地址空间大小为48位,其中高16位被保留,并且实际上只有44位被用于寻址。这使得MIPS64架构可以访问高达16EB的内存空间。

与任何其他架构一样,MIPS64体系结构也为每个进程保留了地址空间。在Linux中,每个进程都有自己的地址空间,这个地址空间在进程被创建时就被初始化和分配。这些地址空间包括用户空间、内核空间和栈空间。

用户空间是进程的主要内存区域。它包括了各种用户代码和数据段,以及堆空间和共享库的映射。内核空间是内核代码和数据段的区域。内核可以在进程的上下文中访问该空间,从而进行系统级别的操作。栈空间是用于保存局部变量、函数调用堆栈以及其他相关数据的内存区域。

Linux内核对地址空间的管理

Linux内核在MIPS64平台下通过使用页表来管理地址空间。页表是一张数据结构,用于存储虚拟地址和物理地址之间的映射关系。它将虚拟地址映射到物理地址,从而让程序可以访问内存。在MIPS64平台下,内存被分成固定大小的页面。每个页面的大小通常为4KB。

Linux内核将进程的地址空间划分成多个区域,每个区域都有一定的保护属性。例如,代码段通常是只读的,而数据段则可以被读写。内核可以通过设置页面保护属性来实现这些限制。在进程执行的不同阶段,内核可以动态地改变页面保护属性,以确保进程可以访问其需要的内存。

在Linux MIPS64平台下,内核还可以使用可重定位的代码,以便在不同进程之间共享代码段。共享代码可以节省内存,但同时也增加了代码修改时的复杂度。

Linux MIPS64平台下的地址空间是一个极其重要的概念。Linux内核通过使用页表和保护属性来管理各个进程的地址空间。每个进程都有自己独立的地址空间,这确保了不同进程之间的内存空间分离,从而提高了Linux系统的稳定性和可靠性。了解地址空间的工作原理对于理解操作系统内部运作十分重要,希望本文能够帮助你更好地理解这个概念。

相关问题拓展阅读:

64位简介及详细资料

概述

一个 64 位的 CPU,内部可能有外部数据汇流排或不同大小的地址汇流排,可能比较大或比较小;术语”64位”也常用于描述这些汇流排的大小。例如,目前有许多机器有着使用 64 位汇流排的 32 位处理器(如最初的 Pentium 和之后的 CPU),因此有时会被称作”64位”。同样的,某些 16 位处理器(如 MC68000,摩托罗拉公司生产的一款16位处理器,因集成约68000个电晶体而得名)指的是 16/32 位处理器具有 16 位的汇流排,不过内部也有一些 32 位的性能。这一术语也可能指计算机指令集的指令长度,或其它的数据项(如常见的 64 位双精度浮点数)。去掉进一步的条件,”64位”计算机架构一般具有 64 位宽的整数型暂存器,它可支持(内部和外部两者) 64 位”区块”(chunk)的整数型数据。

架构影响

处理器中的暂存器通常可分为三种︰整数、浮点数、其它。在所有常见的主流处理器中,只有整数暂存器(integer register)才可存放指针值(记忆体数据的地址)。非整数暂存器不能存放指针来读写记忆体,因此不能用来避开任何受到整数暂存器大小所影响的记忆体限制。

几乎所有常见的主流处理器(大部分的 ARM 和 32 位 MIPS 实作是明显的例外)集成了浮点数硬体,它有可能使用 64 位暂存器保存数据,以供处理。例如,x86 架构包含了 x87 浮点数指令,并使用 8 个 80 位暂存器构成堆叠结构。后来的 x86 修改版和 x86-64 架构,又加入 SSE 指令,它使用 8 个 128 位宽的暂存器(在 x86-64 中有 16 个暂存器)。与之相较,64 位 Alpha 系列处理器,除了 32 个 64 位宽整数暂存器以外,也定义了 32 个 64 位宽型戚的浮点数暂存器。

记忆体限制

截至2023 年,大部分的 CPU,其单个暂存器可存放虚拟记忆体中任意数据的记忆体地址(本机)。因此,虚拟记忆体(计算机在程式的工作区域中所能保留的数据总量)中可用的地址取决于暂存器的宽度。自 1960 年的 IBM System/360 起,然后1970年的 DEC VAX微型计算机,以及1980年中期的 Intel 80386,在事实上一致开发合用的 32 位大小的暂存器。32 位暂存器意味着 2^32 的地址,或可使用 4 GB 的记忆体。当时在设计这些架构时,4 GB 的记忆体远远超过一般所安装的可用量,而认为已足够用于定址。认为 4 GB 地址为合适的大小,还有其它重要的理由︰在应用程式中,如资料库,42 亿多的整数已足够对大部分可计算的实例分配唯一的参考引用。

然而在 1990年初,成本不断降低的记忆体,使安装的记忆体数量逼近 4 GB,且在处理某些类型的问题时,可以想像虚拟记忆体的使用空间将超过 4 GB 上限。为此,一些公司开始释出新的 64 位架构晶片家族,最初是提供给超级计算机、顶级工作站和伺服器机器。64位运算逐渐流向个人计算机则出现在 2023 年,某些型号的 Apple Macintosh 生产线转向 PowerPC 970 处理器(Apple 称为”G5″),并在 2023 年,转向 EM64T 处理器,且 x86-64 处理器在顶级的 PC 中遂渐普及。64 位架构的出现,有效的将记忆体上限提升至 2^64 地址,16 EB 的记忆体。从这个角度来看,在 4 MB 主记忆体很普遍时,更大的记忆体上限 2^32 的地址大约是一般安装记忆体的 1000 倍。如今,当 16 GB 的主记忆体很普遍时,2^64 的地址上限大约是 10亿倍。

今天市面上大部分的消费迟源级 PC 存在着人为的记忆体限制,因受限于实例上的限制,而几乎不太可能需要完整支持 16 GB 容量。举例来说,Apple的 Mac Pro 最多可安装实例记忆体至 16 GB,而无必要支持超过的大小。最新的Linux核心(版本 2.6.16)可编译成更高支持 64 GB 的记忆体,Windows VistaUltimate支持超过128G记忆体。

32位比较

从32位到64位架构的改变是一个根本的改变,因为大多数作业系统必须进行全面性修改,以取得新架构的优点。其它软体也必须进行移植,以使用新的性能;较旧的软卜旦陵体一般可借由硬体兼容模式(新的处理器支持较旧的 32 位版本指令集)或软体模拟进行支持。或者直接在 64 位处理器里面实作 32 位处理器核心(如同 Intel 的 Itanium 处理器,其内含有 x86 处理器核心,用来执行 32 位 x86 应用程式)。支持 64 位架构的作业系统,一般同时支持 32 位和 64 位的应用程式。

明显的例外是 AS/400,其软体执行在虚拟的指令集架构,称为 TIMI(技术独立机器界面),它会在执行之前,以低阶软体转换成本地机器码。低阶软体必须全部重写,以搬移整个 OS 以及所有的软体到新的平台。例如,当 IBM 转移较旧的 32/48 位”IMPI”指令集到 64 位 PowerPC(IMPI 完全不像 32 位 PowerPC,所以这比从 32 位版本的指令集转移到相同指令集的 64 位版本的规模还要庞大)。

64 位架构无疑可套用在需要处理大量数据的应用程式,如数码视频、科学运算、和早期的大型资料库。在其它工作方面,其 32 位兼容模式是否会快过同等级的 32 位系统,这部分已有很多争论。在 x86-64 架构(AMD64 和 Intel 64)中,主要的 32 位作业系统和应用程式,可平滑的执行于 64 位硬体上。

Sun 的 64 位 Java虚拟机的启动速度比 32 位虚拟机还慢,因为 Sun 仍假定所有的 64 位机器都是伺服器,而且只有为 64 位平台实作”伺服器”编译器(C2)。”客户端”编译器(C1)产生较慢的代码,不过编译较快速。所以尽管在 64 位 JVM 的 Java 程式在一段很长的周期会执行的较好(一般为长时间运作的”伺服器”应用程式),它的启动时间可能更久。对于短生命期的应用程式(如 Java 编译器 javac) 增加启动时间可控制执行时间,使 64 位的 JVM 整体变慢。

应当指出,在 32 位和 64 位处理器时,速度并不是唯一的考量因素。应用程式,如多任务、压力测试(stress testing)、丛集(clustering)(用于HPC)可能更适合 64 位架构以正确部署。为了以上原因,64 位丛集已广泛部署于大型组织,如 IBM、Vodafone、HP、微软。

优缺点

一个常见的误解是:除非计算机安装的记忆体大于 4 GB,否则 64 位架构不会比 32 位架构好。这不完全正确。

部分作业系统保留了一部分进程地址空间供作业系统使用,造成使用者程式可用于映射记忆体的地址空间减少。例如,Windows XP DLL 以及 userland OS 组件映射到每一个进程的地址空间,即使计算机装有 4 GB 的记忆体,也仅留下 2 至 3.8 GB(端视其设定)的可用地址空间。这个限制在 64 位 Windows 中并不会出现。

档案的记忆体映射对 32 位的架构而言不再合用,尤其是相对便宜的 DVD 烧录技术的引入。大于 4 GB 的档案不再罕见,且如此大的档案无法简单的映射到 32 位架构的记忆体;只能映射档案的一部分范围到地址空间上,并以记忆体映射存取档案,当有需要时,就必须将这些范围映射进或映射出地址空间。这是一个问题,因为充裕的记忆体映射仍是从磁碟至记忆体最有效率的存取方法,如果作业系统能适当实行的话。

64 位架构主要的缺点是,相对于 32 位架构,占用相同的数据会消秏更多的记忆体空间(由于肿胀的指针,以及其它型态和对齐补白等可能)。这会增加进程对记忆体的需求,且可能会影响高效能处理器高速快取的使用。维持一部分的 32 位模型是一个处理方法,且大致合理有效。实际上,高效能导向的 z/OS 作业系统便采取这个方法,要求程式代码存放在 32 位地址空间的任一数字,数据对象则可(选择性)存放在 64 位区域。

目前主要的商业软体是建立在 32 位代码,而非 64 位代码,所以不能取得在 64 位处理器上较大的 64 位地址空间,或较宽的 64 位暂存器和数据路径的优点。然而,免费或自由软体作业系统的使用者已经可以使用专有的 64 位运算环境。并非所有的应用程式都需要大量的地址空间或操作 64 位数据项,所以这些程式不会享受到较大的地址空间或较宽的暂存器和数据路径的好处;主要受益于 64 位版本的应用程式,并不会享受到使用 x86 的版本,会有更多的暂存器可以使用。

可用性

64位系统有时缺乏对应的软体,那些软体是写给 32 位架构。最严重的问题是不兼容的驱动程式。尽管大部分软体可执行于 32 位兼容模式(又称作模拟模式,即微软 WoW64(Windows 32 bit on Windows 64 bit) 技术),其通常无法执行驱动程式(或类似软体),因为程式通常执行于作业系统和硬体之间,在此直接模拟无法使用。许多开放源始码软体封包可简单的从源始码编译为可执行于 64 位环境作业系统,如 Linux。所需的条件是供给 64 位机器的编译器(通常是 g)。目前 64 位版本的驱动程式还不能用,由于缺少可用的驱动程式,所以使用 64 位作业系统会有挫折,推荐使用预装64位版本的windows 7的电脑,一般会解决驱动问题。

因为设备的驱动程式通常执行于作业系统核心(kernel)的内部,有可能以 32 位进程执行核心,同时支持 64 位的使用者进程。以在核心里的额外消耗为代价,如此可为使用者提供受益于 64 位的记忆体和效能,且不破坏现存 32 位驱动程式的二进制兼容性。这个机制源于 Mac OS X 启用 64 位进程,同时支持 32 位的驱动程式。

数据模型

以高阶语言编写的套用软体,从 32 位架构转换到 64 位架构的各种困难。一个共同的问题是,部分程式设计师假定指针如同其它数据型态一样有相同的长度。程式设计师假定他们可以在数据型态之间传送数量而不遗失信息。这些假定只在一部分 32 位机器上如此(甚至是一部分 16 位机器),不过在 64 位机器上就不再如此。C 语言及其后代 C++ 尤其容易产生这种错误。

要在 C 和 C++ 中避免这种错误,如果确定原始类型的大小为所需的基础,sizeof 操作符可用来确定原始类型的大小,无论是在编译以及执行时期。此外,在 C99 标准中的 表头,以及在 C++ 标准中的 表头的 numeric_limits 类,可提供更多有用的信息;sizeof 只返回字元大小。这个用法使人产生误解,因为一个字元(CHAR_BITS)的大小是由自身决定,在所有的 C 或 C++ 实作中并未以相同方式定义。然而,除了这些编译器目标 DSP 以外,”64 位 = 8 字元(每一字元有 8 位)”已成标准。

必须谨慎使用 ptrdiff_t 型态(在标准表头 中)两个指针相减的结果;太多代码宁可不正确的使用”int”或”long”。表示一个指针(而不是指针差异)为一个整数,在此可以使用 uintptr_t(它只定义在 C99 中,不过某些编译器另外集成较早版本的标准以提供之,作为一个扩充)。

C 和 C++ 并未定义指针、整数型(int)、长型(long)为特定的位数目。

在主要的 32 位机器程式设计环境中,指针、”int”变数、”long”变数全部都是 32 位长。

然而,在 64 位机器下的许多程式设计环境,”int”变数仍然是 32 位宽,不过”long”和指针是 64 位宽,上述内容称为 LP64 数据模型。另一个选择是 ILP64 数据模型,三种数据型态都是 64 位宽,甚至 SILP64 连”short”变数也是 64 位宽。然而,大多数情况下所需的修改是相对次要且简单,而且许多编写良好的程式可以简单的重新编译给新的环境,而无须修改。另一个选择是 LLP64 模型,其维持 32 位代码的兼容性,使 int 和 long 为 32 位。”LL”指”long long”型态,其在所有平台下至少是 64 位,包括 32 位环境。

今天有许多 64 位编译器使用 LP64 模型(包括 Solaris、AIX、HP、Linux、Mac OS X、IBM z/OS 本地编译器)。微软的 VC++ 编译器使用 LLP64 模型。其缺点是在 LP64 模型中将 long 存放到 int 可能会溢出。另一方面,还会使强制转型一个指针为 long 可以作用;在 LLP 模型下,情况则刚好相反。两者皆不应该出现在合乎 C99 的代码中。

注意,程式设计模型是在预编译器底层选择的,且数个模型可共存于同一作业系统。然而一般由 OS API 选择程式设计模型作为原始模型。

另一个考量是用于驱动程式的数据模式。在现代的作业系统中,驱动程式弥补了大多数的作业系统代码(尽管许多代码可能不会载入,当作业系统执行时)。许多驱动程式大量使用指针操控数据,且在某些情况下必须读入一定大小的指针进入支持 DMA 的硬体。举个例子,提供给 32 位 PCI 设备的驱动程式,请求设备的 DMA 数据进入 64 位机器记忆体的较高区域,可能无法满足来自作业系统从设备到大于 4 GB 记忆体读入数据的要求。因为对于这些地址的指针,将不适合设备的 DMA 暂存器。这个问题可如下解决,当向设备发出 DMA 请求时,OS 采用与设备相符的记忆体限制,或者使用 IOMMU。

发展历程

1961︰IBM 发表 IBM 7030 Stretch 超级计算机。它使用 64 位数据字组,以及 32 或 64 位的指令字组。

1974︰Control Data Corporation 推出 CDC Star-100 向量超级计算机,它使用 64 位字组架构(先前的 CDC 系统是以 60 位架构为基础)。

1976︰Cray Research 发表之一台 Cray-1 超级计算机。它以 64 位字组架构为基础,它成为后来的 Cray 向量超级计算机的基础。

1983︰Elxsi 推出 Elxsi 6400 平行微型超级计算机。Elxsi 架构具有 64 位数据暂存器,不过地址空间仍是 32 位。

1991︰MIPS科技公司生产之一台 64 位微处理器,作为 MIPS RISC 架构 R4000 的第三次修订版本。该款 CPU 使用于以 IRIS Crimson 启动的 SGI 图形工作站。然而,IRIX 作业系统并未包含对 R4000 的 64 位支持,直到 1996 年释出 IRIX 6.2 为止。Kendall Square Research 发表他们的之一台 KSR1 超级计算机,以专有的执行于 OSF/1 的 64 位 RISC 处理器架构为基础。

1992︰Digital Equipment Corporation(DEC)引入纯 64 位 Alpha 架构,其诞生自 PRI 项目。

1993︰DEC 释出 64 位 OSF/1 AXP 类Unix 作业系统(后来改名为 Tru64 UNIX)和 OpenVMS 作业系统给 Alpha 系统。

1994︰Intel 宣布 64 位 IA-64 架构的进度表(与 HP 共同开发)作为其 32 位 IA-32 处理器的继承者。以 1998–1999 推出时间为目标。SGI 释出 IRIX 6.0,即支持 64 位的 R8000 CPU。

1995︰Sun 推出 64 位 SPARC 处理器 UltraSPARC。富士通所有的 HAL 计算机系统推出以 64 位 CPU 为基础的工作站,HAL 独立设计的之一代 SPARC64。IBM 释出 64 位 AS/400 系统,能够转换作业系统、资料库、应用程式的升级。DEC 释出 OpenVMS Alpha 7.0,之一个全 64 位版本的 OpenVMS for Alpha。

1996︰HP 释出 PA-RISC 处理器架构的 64 位 2.0 版本的实作 PA-8000。 任天堂引入 Nintendo 64 电视游戏主机,以低成本的 MIPS R4000 变体所打造。

1997︰IBM 释出 RS64 全 64 位 PowerPC 处理器。

1998︰IBM 释出 POWER3 全 64 位 PowerPC/POWER 处理器。Sun 释出 Solaris 7,以完整支持 64 位 UltraSPARC。

1999︰Intel 释出 IA-64 架构的指令集。AMD 首次公开 64 位集以扩充给 IA-32,称为 x86-64(后来改名为 AMD64)。

2023︰IBM 推出他自己的之一个兼容 ESA/390 的 64 位大型计算机 zSeries z900,以及新的 z/OS 作业系统。紧接着是 64 位 Linux on zSeries。

2023︰Intel 终于推出他的 64 位处理器产品线,标记为 Itanium,主打顶级伺服器。它无法满足人们的期待,因一再拖延 IA-64 市场而导致失败。Linux 是之一个可执行于该处理器的作业系统。

2023︰Intel 引入 Itanium 2 作为 Itanium 的继承者。

2023︰AMD 产出他的 AMD64 架构 Opteron 以及 Athlon 64 处理器产品线。Apple 也推出 64 位”G5″PowerPC 970 CPU courtesy of IBM,并连同升级他的 Mac OS X 作业系统,其增加对 64 位模式的部分支持。若干 Linux 发行版本释出对 AMD64 的支持。微软宣布将为 AMD 晶片建立新的 Windows 作业系统。Intel 坚持 Itanium 晶片仍维持只有 64 位的处理器。

2023︰Intel 承认 AMD 在市场上的成功,并着手开发 AMD64 延伸的替代品,称为 IA-32e,稍后改名为 EM64T。升级版本的 Xeon 和 Pentium 4 处理器家族支持了新推出的指令。Freescale 宣布 64 位 e700 core,以继承 PowerPC G4 系列。VIA Technologies 宣布 Isaiah 64 位处理器。

2023︰Sun 于 1 月 31 日释出支持 AMD64 和 EM64T 处理器的 Solaris 10。3 月,Intel 宣布其之一个双核心 EM64T 处理器 Pentium Extreme Edition 840 和新的 Pentium D 晶片将于 2023 第二季推出。4 月 30 日,微软公开释出提供给 AMD64 和 EM64T 处理器的 Windows XP Professional x64 Edition。5 月,AMD 引入他的之一个双核心 AMD64 Opteron 伺服器 CPU,并宣布其桌上型版本,称为 Athlon 64 X2。将原本的 Athlon 64 X2 (Toledo) 处理器改为两个核心,并为每个核心的 L2 配上 1 MB 高速快取记忆体,以大约 2.332 亿个电晶体组成。它有 199 mm² 那么大。7 月,IBM 宣布他最新的双核心 64 位 PowerPC 970MP (codenamed Antares),由 IBM 和 Apple 使用。微软释出 Xbox 360 游戏主机,其使用由 IBM 生产的 64 位、三核心 Xenon PowerPC 处理器。

2023︰双核心 Montecito Itanium 2 处理器进入生产。Sony、IBM、Toshiba 开始生产用于 PlayStation 3、伺服器、工作站以及其它套用的 64 位 Cell 处理器。苹果公司在新的 Mac Pro 和 Intel Xserve 计算机中采用 64 位 EM64T Xeon 处理器,稍后更新 iMac、MacBook、MacBook Pro 使用 EM64T Core 2 处理器。

当前架构

属于 64 位的微处理器架构(2023年)有︰

DEC Alpha 架构(查看 Digital Alpha timeline)

Intel 的 IA-64 架构(用于 Intel 的 Itanium CPU)

x86-64 架构,64 位版本的 x86 架构(又称作”x64″)

AMD 的 AMD64(用于 AMD 的 Athlon 64、Opteron、Sempron、Turion 64 CPU)

Intel 的 Intel64(用于 Intel 的新型 Pentium 4、Xeon、Core 2 CPU)

SPARC 架构(从 SPARC V9 开始的 64 位)

Sun 的 UltraSPARC 架构

Fujitsu 的 SPARC64 架构

IBM 的 POWER 架构(从 POWER3 和 RS64 变体开始的 64 位)

IBM/Motorola 的 PowerPC 架构(从 PowerPC 620 和 PowerPC 970 变体开始的 64 位)

IBM 的 z/Architecture,used by IBM zSeries 和 System z9 大型计算机,ESA/390 架构的 64 位版本

MIPS 科技公司的 MIPS IV、MIPS V、MIPS64 架构

HP 的 PA-RISC family(从 PA-RISC 2.0 开始的 64 位)

大部分 64 位处理器架构可本地执行 32 位版本架构的代码,而无任何效能损失。这种支持通常称为双架构支持或更普遍的多架构支持。

超越

直至 2023年,64位字组似乎已满足大部分的运用。不过仍应提到,IBM 的 System/370 及后继者使用 128 位浮点数,且许多现代处理器也内含 128 位浮点数暂存器。System/370 及后继者尤其显著,在这方面,他们也使用多达16位元组的可变长度十进制数(即128位)。

图像

在数码图像中,64 位为附有 16 位 Alpha 通道的 48 点阵图像。

处理器

这里的64位技术是相对于32位而言的,这个位数指的是CPU GPRs(General-Purpose Registers,通用暂存器)的数据宽度为64位,64位指令集就是运行64位数据的指令,也就是说处理器一次可以运行64bit数据。64bit处理器并非现在才有的,在高端的RISC(Reduced Instruction Set Computing,精简指令集计算机)很早就有64bit处理器了,比如SUN公司的UltraSparc Ⅲ、IBM公司的POWER5、HP公司的Alpha等。

64bit计算主要有两大优点:可以进行更大范围的整数运算;可以支持更大的记忆体。不能因为数字上的变化,而简单的认为64bit处理器的性能是32bit处理器性能的两倍。实际上在32bit套用下,32bit处理器的性能甚至会更强,即使是64bit处理器,目前情况下也是在32bit套用下性能更强。所以要认清64bit处理器的优势,不可迷信64bit。

目前主流CPU使用的64位技术主要有AMD公司的AMD64位技术、Intel公司的EM64T技术、和Intel公司的IA-64技术。其中IA-64是Intel独立开发,不兼容现在的传统的32位计算机,仅用于Itanium(安腾)以及后续产品Itanium 2,一般用户不会涉及到,因此这里仅对AMD64位技术和Intel的EM64T技术做一下简单介绍。

AMD64位技术

AMD64的位技术是在原始32位X86指令集的基础上加入了X86-64扩展64位X86指令集,使这款晶片在硬体上兼容原来的32位X86软体,并同时支持X86-64的扩展64位计算,使得这款晶片成为真正的64位X86晶片。这是一个真正的64位的标准,X86-64具有64位的定址能力。

X86-64新增的几组CPU暂存器将提供更快的执行效率。暂存器是CPU内部用来创建和储存CPU运算结果和其它运算结果的地方。标准的32-bit x86架构包括8个通用暂存器(GPR),AMD在X86-64中又增加了8组(R8-R15),将暂存器的数目提高到了16组。X86-64暂存器默认位64-bit。还增加了8组128-bit XMM暂存器(也叫SSE暂存器,XMM8-XMM15),将能给单指令多数据流技术(SIMD)运算提供更多的空间,这些128位的暂存器将提供在矢量和标量计算模式下进行128位双精度处理,为3D建模、矢量分析和虚拟现实的实现提供了硬体基础。通过提供了更多的暂存器,按照X86-64标准生产的CPU可以更有效的处理数据,可以在一个时钟周期中传输更多的信息。

EM64T技术

Intel官方是给EM64T这样定义的:EM64T全称Extended Memory 64 Technology,即扩展64bit记忆体技术。EM64T是Intel IA-32架构的扩展,即IA-32e(Intel Architectur-32 extension)。IA-32处理器通过附加EM64T技术,便可在兼容IA-32软体的情况下,允许软体利用更多的记忆体地址空间,并且允许软体进行32 bit线性地址写入。EM64T特别强调的是对32 bit和64 bit的兼容性。Intel为新核心增加了8个64 bit GPRs(R8-R15),并且把原有GRPs全部扩展为64 bit,如前文所述这样可以提高整数运算能力。增加8个128bit SSE暂存器(XMM8-XMM15),是为了增强多媒体性能,包括对SSE、SSE2和SSE3的支持。

Intel为支持EM64T技术的处理器设计了两大模式:传统IA-32模式(legacy IA-32 mode)和IA-32e扩展模式(IA-32e mode)。在支持EM64T技术的处理器内有一个称之为扩展功能激活暂存器(extended feature enable register,IA32_EFER)的部件,其中的Bit10控制着EM64T是否激活。Bit10被称作IA-32e模式有效(IA-32e mode active)或长模式有效(long mode active,LMA)。当LMA=0时,处理器便作为一颗标准的32 bit(IA32)处理器运行在传统IA-32模式;当LMA=1时,EM64T便被激活,处理器会运行在IA-32e扩展模式下。

目前AMD方面支持64位技术的CPU有Athlon 64系列、Athlon FX系列和Opteron系列。Intel方面支持64位技术的CPU有使用Nocona核心的Xeon系列、使用Prescott 2M核心的Pentium 4 6系列和使用Prescott 2M核心的P4 EE系列。

linux mips64 地址空间的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux mips64 地址空间,Linux MIPS64:探究地址空间,64位简介及详细资料的信息别忘了在本站进行查找喔。


数据运维技术 » Linux MIPS64:探究地址空间 (linux mips64 地址空间)