1.i386 和 x86 的故事
(1)x86 的由来
x86架构
首度出现在 1978 年推出的 Intel 8086 中央处理器,它是从 Intel 8008 处理器中发展而来的,而 8008 则是发展自 Intel 4004 的。在 8086 之后,Intel 又推出了包括 80186、80286、80386 以及 80486。
在设计上,这些后续的处理器使用的指令集都是在 8086
的基础上添加新支持的指令进行改进的,因此可以说都是 ** 向下兼容(backward compatibility)** 的,即能在 8086 上运行的程序在 80486 上也一定能运行。
向下兼容(Downward Compatibility)
,又称作向后兼容(Backward Compatibility),指在一个程序或者类库更新到较新的版本后,用旧的版本程序创建的文档或系统仍能被正常操作或使用,或在旧版本的类库的基础上开发的程序仍能正常编译运行的情况。例如较高档的计算机或较高版本的软件平台可以运行较为低档计算机或早期的软件平台所开发的程序
由于都是以 86 结尾(不过 8088 也是 x86),所以把这一系列的指令集,称之为 x86指令集(架构)
。准确的来讲,x86
这一术语并不是指的某一个(具体 CPU 使用的)具体的指令集,而是在 8086(的指令集)基础上发展而来的所有指令集的泛称。
x86 与 CPU 的位数无关,包括 16 位、32 位、64 位的 CPU。
实际上,在 80486 以后 Intel 推出的绝大多数 CPU 都是 x86
的,包括 Pentium 、Pentium Pro 、Pentium MMX ,Pentium 2 ,还有后面的 Pentium 3、Pentium 4 、Pentium D 、Core 全系列,(x86 系列的) Xeon。另外,使用 x86 架构的处理器制造商远非 Intel
一家,最著名的就是 AMD
,其他的还有 VIA、Cyrix。
(2)x86-32(x86、i386、IA-32)
从 1985 年 80386 开始,intel 通过对 x86 架构进行 32位
的扩展,实现了 32 位 CPU,而之前的都是 16 位。Intel 把支持 32 位的 x86 指令集架构命名为 ia-32 (Intel Architecture 32bit)。实际上由于 32 位 x86 处理器的统治性,术语 “x86” 几乎等于 IA-32
,即 32位的x86
或 x86-32
,例如 Windows 和 Linux 发行版的 32 位版本命名都是 x86(而不是 x86-32 或 IA-32)。后来的 “x86-64” 名称也继续强化了这种约定方式。
这里还是要强调, x86 是一系列架构的泛称,支持 16 位、32 位和 64 位的指令都有。
(3)x86-64(x64、AMD64)
该来的还是会来,在 1999 年,AMD 宣布了 x86-64
架构。其实现方式与之前的 80386 思路一致,继续对 IA-32 扩展,增加 64 位通用寄存器、证书预算单元和逻辑操作,支持 64 位虚地址,向前兼容 ia-32。
2003 年第一款 x86-64 处理器发布,AMD Operon。同时 AMD 也将 x86-64 正式命名为 AMD64
。这下 Intel 彻底 2B 了,以前都是 AMD 小弟追随者 Intel 大哥的脚步,如今 AMD 先实现了 64 位民用桌面级 CPU。
其实 Intel 也有其 64 位计划,在 2004 年的 IDF 上,Intel 承认其 64 位计划,命名为 ia-32e,即 ia-32 extension,之后又改成 EM64T,Extended Memory 64 Technology,最终命名为 Intel64。 实际上 EM64T 与 AMD64 几乎相同。早期 EM64T 不兼容 AMD64 的少量指令,但是由于 AMD 在 64 位技术中的领先地位,Intel2005 年不得不宣布将完全兼容 AMD64。
所以现在装的 64 位版本操作系统从没有说是面向 Intel 还是 AMD 的。不过在称谓上,大多数厂商还是使用 x86-64
(x86_64
、x64
,或者 AMD64
)来称呼此架构,从而保持中立。
2. 关于 32 和 64 的说明
(1)操作系统
- 32 位的操作系统:32 位的操作系统可以运行在 32 位 or 64 位的 CPU 上。
- 64 位的操作系统:只有 64 位的 CPU 才能运行 64 位的操作系统,当然现在市面上几乎所有消费级 CPU 都已经是 64 位的了。
32 位的操作系统只能支持最大 4GB 的内存。这意味着,如果你安装多于 4GB 的内存条,那么超过 4GB 的那部分并不会被操作系统所使用。
(2)应用程序
- 32 位的应用程序:32 位的应用程序可以运行在 32 位 or 64 位的操作系统上。
- 64 位的应用程序:64 位的应用程序只能运行在 64 位的操作系统上。
3. 参考
- Wikipedia - x86
- Wikipedia - x64
- What are the differences between 32-bit and 64-bit, and which should I choose?
- i386 different from x86? [closed]
- i386 和 x86-64 有什么区别?
- x86, i386, x86-64, x64, and amd64? Oh My!
- 32bit_and_64bit