在通用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位官方内核进行对比测试。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。