购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 CPU架构

在讨论内核组件之前,让我们先回顾一个基本概念——计算机架构或CPU系列,这两个术语我们可以互换使用。Linux可以在大量不同的CPU架构上运行,这可以说是它如此受欢迎的原因之一。

除了通用代码和驱动程序之外,Linux内核还包含特定于架构的代码。这种分离允许它移植Linux,并使其可以快速地在新硬件上使用。

有许多方法可以确定Linux运行的是哪个CPU。让我们依次来看几个。

BIOS和UEFI

传统上,UNIX和Linux使用基本I/O系统(Basic I/O System,BIOS)进行引导。当你打开你的Linux笔记本计算机时,它完全是由硬件控制的。首先,硬件被连接以运行开机自检(POST),这是BIOS的一部分。POST确保硬件(RAM等)按照指定的方式运行。我们将在6.2节详细介绍机制。

在现代环境中,BIOS功能已经被统一可扩展固件接口(UEFI, https://oreil.ly/JBwSm )有效地取代,这是一个公共规范,定义了操作系统和平台固件之间的软件接口。你仍然会在文档和文章中遇到BIOS这个术语,所以我建议你在脑海中简单地将其替换为UEFI,然后继续前进。

一种方法是使用一种名为dmidecode的专用工具与BIOS交互。如果这没有产生结果,那么你可以尝试以下代码(输出被缩短):

❶我们在这里看到的架构是x86_64。

❷看起来有四个可用的CPU。

❸CPU型号名称为Intel Core Processor(Haswell)。

在前面的命令中,我们看到CPU架构报告为x86_64,模型报告为“Intel Core Processor(Haswell)”。我们将在稍后学习更多关于如何解码的内容。

收集类似架构信息的另一种方法是使用cat /proc/ cpuinfo,或者,如果你只对架构感兴趣,则只需调用uname -m。

现在我们已经掌握了在Linux上查询架构信息的方法,让我们看看如何解码它。

2.2.1 x86架构

x86( https://oreil.ly/PoQOT )是最初由Intel开发的指令集家族,后来授权给Advanced Micro Devices(AMD)。在内核中,x64指的是英特尔64位处理器,x86代表英特尔32位处理器。此外,amd64指的是AMD 64位处理器。

今天,x86 CPU家族主要用于台式计算机和笔记本计算机,但它也广泛用于服务器。具体来说,x86构成了公有云的基础。它是一种功能强大且广泛使用的架构,但并不是非常节能。部分原因是它严重依赖无序执行,最近它受到了关于Meltdown( https://oreil. ly/nkEVB )等安全问题的大量关注。

有关更多细节,例如Linux/x86引导协议或Intel和AMD特定的背景,请参阅x86特定的内核文档( https://oreil.ly/CBvRQ )。

2.2.2 ARM架构

ARM( https://oreil.ly/E9HIN )拥有30多年的历史,是精简指令集计算(RISC)架构的家族。RISC通常由许多通用CPU寄存器以及一组执行速度更快的指令组成。

因为Acorn(ARM的前身公司)的设计师从一开始就专注于最小化功耗,所以你可以在iPhone等许多便携式设备上找到基于ARM的芯片。它们也出现在大多数基于Android的手机和物联网中的嵌入式系统中,比如树莓派。

考虑到它们比x86芯片更快、更便宜、产生的热量更少,在数据中心中越来越多地发现基于ARM的CPU—比如AWS Graviton( https://oreil.ly/JpgdQ )—就不应该感到惊讶。虽然ARM比x86更简单,但也不能避免漏洞,比如Spectre( https://oreil.ly/M79Yu )。有关更多详细信息,请参阅ARM特定的内核文档( https://oreil.ly/i7kj4 )。

2.2.3 RISC-V架构

RISC-V( https://oreil.ly/wwnIA )是一种开放的RISC标准,最初由加州大学伯克利分校开发。截至2021年,已经有许多实现,从阿里巴巴集团和英伟达到SiFive等初创企业。虽然令人兴奋,但这是一个相对较新的、还没有被广泛使用的CPU家族,为了了解它的外观和感觉,你可能想要研究一下它——一个好的开始是Shae Erisson的文章“Linux on RISC-V”( https://oreil.ly/6senY )。

更多详细信息,请参见RISC-V内核文档( https://oreil.ly/LA1Oq )。 nK+bwnj0aCDGkDK4xKwKR9Kzh7RWdHHhDWxNnWpZjumhGdHi6AoGEAJU8SqBa0SH

点击中间区域
呼出菜单
上一章
目录
下一章
×