我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

在通用PC领域,无论是Linux还是Linux世界,我们经常听到“32位”和“64位”这些术语,类似于“x86”和“”、“i386”和“amd64”,这些两组概念之间有何联系和区别?

事实上,这两套概念涉及三个层面:硬件、系统和软件。

1. 硬件

早期Intel处理器的CPU架构,如i386、486、586、系列等,都是32位的(32位寄存器,32位虚拟地址空间),统称为x86架构。

随着技术的发展,32位CPU已经不能满足需求。 Intel和AMD采用不同的方法来开发64位架构CPU。 Intel采用了与x86完全不同的IA64架构。由于它完全不兼容,原来的没有被使用,只在服务器域中有一些使用。

AMD开发的架构称为amd64(将寄存器扩展到64位并支持64位虚拟地址)。它完全兼容x86指令集,无需任何修改即可运行旧操作系统和应用软件。它已广泛应用于PC行业。应用方面,现在市面上几乎所有的PC CPU都支持amd64指令集。

当然,Intel很快就开发出了支持该指令集的CPU,不过Intel将其称为x64架构,而不是使用amd64这个名字。在Linux中,它被称为x86架构的64位扩展。

详细介绍请参考《深入理解计算机系统》一书。

Linux中如何检查CPU是否是64位:如果/proc/中的flags字段包含“lm”,则表示使用的是64位CPU(运行“grep 'lm' /proc/”命令,输出不为空)。

2、系统

系统也可以分为32位和64位。在CPU架构出现之前,PC操作系统都是32位的,比如当时的2000、xp、unix、linux等。

该架构出现后,系统也有两个版本:32位和64位。两者的主要区别在于与硬件架构相关的操作。

由于该架构完全兼容x86架构,因此32位系统完全可以运行在x86架构上,但它只使用了x86部分,并没有充分利用硬件的能力。

64位系统是专门为64位的扩展功能而开发的,以最大限度地发挥硬件的能力。它不能运行在x86架构的CPU上。

另外,无论是Linux还是Linux,驱动程序都需要加载到内核空间中,因此其类型(32位或64位)需要与系统完全一致。

系统与CPU的关系如下图所示:

如何检查Linux系统是32位还是64位:执行shell命令“arch”。如果显示,则说明当前系统是64位的。如果显示,则说明当前系统是64位的。如果显示则说明系统是32位的。

3、软件

系统上运行的应用软件也分为32位和64位。旧的应用软件运行在32位CPU和32位系统上,是32位软件。

64位系统出现后,也出现了专门运行在64位系统上的原生64位程序,可以最大限度地利用64位系统的扩展功能。

对于C程序来说,64位程序和32位程序最大的区别就是int、long、数据类型的长度都是64位,可以使用64位的虚拟地址空间。

现实远不止于此。当编译器将64位C程序翻译成汇编语言或机器语言时,它会尝试使用64位处理器的寄存器,并尽量避免访问内存。例如,它会优先考虑函数参数和局部变量。注册,而不是在用户堆栈上。

另外,在64位系统中,为了兼容大量旧的应用程序,系统会添加一个虚拟层来翻译x86指令,使得32位程序也可以在64位系统中运行(支持Linux 和 Linux 均适用)。

同样在64位系统中,一般可以选择使用64位编译器编译成32位程序(gcc使用-m32编译成32位可执行文件)。

另外,在PC上,软件能否运行只取决于系统是否支持,而不必担心CPU架构。软件与系统的关系如下图所示:

在Linux中如何检查可执行文件是32位还是64位:执行shell命令“file /usr/bin/xxx”。如果是32位程序,会显示为“ELF 32位...”;如果是64位,则显示为:“ELF 64位...”。

4.Linux发行版和内核

在Linux发行版中,一般会针对不同的架构发布不同的安装光盘。例如,有两个适用于 PC 的版本:i386 和 amd64。

根据上面的描述,两个版本的系统都可以安装在64位CPU的机器上,而只有i386版本的系统可以安装在32位CPU的机器上。

amd64 CD中包含的内核和软件包都是64位版本,而i386 CD包含32位和64位内核以及32位软件。这可能是因为某些用户希望使用 64 位内核运行。 32 位程序。

内核源码不分32位和64位。编译内核时,可以使用ARCH参数手动指定编译到哪个架构。例如:“make ARCH=i386”,“make ARCH=i386”用于配置和编译32位内核;

而“make ARCH=”、“make ARCH=”用于配置和编译64位内核。

但amd64光盘上安装的系统中编译的32位内核无法启动,因为系统中安装的所有软件包都是原生64位程序,无法在32位内核上运行。一个典型的错误是启动时找不到它。到可以运行的init程序;

不过,使用i386光盘安装的系统中编译的64位内核是可以使用的,但在配置内核时需要添加IA32支持(即:“file/”-->“IA32”)。

为此,我原本使用amd64光盘安装系统(),但现在使用i386光盘安装,这样可以同时编译新的32位和64位官方内核进行对比测试。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/7743.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线