从上电到内核初始化:一、主板芯片组和内存映射(英文博客翻译)

您所在的位置:网站首页 芯片组与io总线的关系 从上电到内核初始化:一、主板芯片组和内存映射(英文博客翻译)

从上电到内核初始化:一、主板芯片组和内存映射(英文博客翻译)

2023-03-14 07:47| 来源: 网络整理| 查看: 265

本系列以 Linux 、Windows 系统和 Intel 芯片为例,通过解释现代系统内核的运行方式来介绍计算机的内部知识。

原文地址:https://manybutfinite.com/post/motherboard-chipsets-memory-map/ 注:文章发布于 2008.6.4,部分内容可能已经过时 为使阅读顺畅,在翻译的过程中进行了一些删改和补充。修改较小处不单独标出,只有较大量的补充会进行标注

这是一个系列文章的第一篇——该系列以 Linux 、Windows 系统和 Intel 芯片为例,通过解释现代系统内核的运行方式来介绍计算机的内部知识,希望能对那些喜欢这类知识却没有经验的程序员和爱好者提供些帮助。第一篇博客将描述现代基于英特尔CPU的主板,来介绍 CPU 如何访问内存以及系统内存映射。

首先来看一下现代 Intel 电脑的构成。下面这张图展示了主板上的主要部件:

现代主板的结构图。“芯片组”由北桥、南桥组成

对于 CPU 而言,它其实并不知道自己连接到部件是什么:CPU 通过针脚与外界进行通信,但它并不关心外部世界的实际情况,当然也不关心自己被装在了哪里:一个 CPU 可能装在一个真正的电脑的主板上,但还有可能是装在一个烤箱里、一个路由器中、一个大脑植入物中或者一个CPU测试平台上。无论被装在哪里,CPU 和外界主要通过三种方式来进行通信:内存地址空间、I/O 地址空间、中断。在本篇博客中,我们只关心 CPU 如何通过主板和内存进行通信。

在主板上,CPU 通过连接到北桥的前向总线来对外进行访问:对内存进行的所有读写操作,都需要经过这条总线。CPU 使用一些针脚来传输它想读写的内存的物理地址,使用另一些针脚来传输想要在这些地址写入或从这些地址中读出的值。以 Intel Core 2 QX6600 这款 CPU 为例,其有 33 个用于传输物理内存地址的针脚(可访问2^33个内存地址),有 64 个用于接收或发送数据的针脚(数据以 64 位宽的路径进行传输,64 位宽路径也称 8-byte chunks)。因此,该 CPU 可以物理寻址 64GB 的内存(2^33 * 8bit),尽管此时的绝大多数芯片组只能支持最多 8GB 的内存。

我们通常认为程序在运行时需要通过“内存地址” 去访问的 “内存 memory ” 指的就是 RAM —— 然而事实并非如此 —— 虽然绝大多数来自 CPU 对某个物理内存地址的读写请求都会通过北桥路由到 RAM 模块,但除此之外,还有一些物理内存地址用于主板上各种设备之间的通信:这种通信方式称为【内存映射 I/O】,也就是让 CPU 把主板上的一些设备当成内存来用,使用和访问内存相同的方式来访问这些设备。这类设备包括显卡、绝大多数 PCI 卡(比如 SCSI 卡扫描器),还包括存储 BIOS 的闪存。

译注:这里的物理内存地址指的是“内存地址空间”中的某一个值。内存地址空间是一个抽象的概念,其指代的是本 CPU 可以访问到的所有内存地址的集合,这些地址中的一部分可以对应到主板上的设备上,而另一部分未必有与之对应的设备。那么,如果地址空间很大,我们就可以人为规定这个地址空间中的某些段可以对应到某些设备上,然后当 CPU 给出它要访问的地址时,我们就可以根据这个地址值落在哪一个范围内,来确定该地址对应到具体哪一个设备。以下面的内存布局图为例,对物理地址 0~640 KB 的访问都是到 RAM 中,因为这个地址空间映射给了 RAM ;对于 960KB~1MB 的物理地址访问,就会访问到 BIOS 的闪存,因为这段地址空间映射给了 System BIOS。这个地址空间中的大部分都对应给了 RAM ,其他的部分则可以对应到 RAM 之外的设备上,物理内存地址和 RAM 之外的设备的映射关系,就是“内存映射 I/O”

当北桥接到一个物理内存访问请求时,北桥需要决定将该请求路由到哪里去(例如,该内存地址可能存在于 RAM 或显卡)该路由通过【内存地址映射 Memory map 】来选择此次访问请求将要去到的设备。内存地址映射会保存每个物理内存地址区域到设备的映射:大部分的地址会被映射到 RAM ,但当被请求的地址并没有映射到 RAM 上时,内存映射会将芯片组所请求的地址对应的服务设备告知芯片组,让芯片组知道可以去哪个设备访问该地址。就是这个到 RAM 模块之外的内存地址映射机制,在 PC 内存的 640KB 到 1MB 之间造成了经典的空洞(hole)问题,随着计算机 RAM 的不断扩展,当 RAM 对应的地址超过 3GB 之后,就产生了新的问题——在为显卡和 PCI 设备保留的地址空间处产生了更大的空洞。这就是为什么 32 位操作系统在使用 4GB 内存时会出现可用内存少于 4GB 的问题

下图中展示了一个 Intel PC 中典型的前 4GB 物理内存地址的内存映射:

Intel 电脑中的前 4GB 内存布局。实际的地址和范围,与所在电脑所使用的的主板以及电脑中的设备有关。但在绝大多数的 Core2 电脑中应该都和上图基本一致。所有的棕色区域都映射到了 RAM 之外。需要注意,上面的地址都是在主板总线中所使用的物理地址。在 CPU 内部(例如,在我们自己写的、正在运行的程序)的地址都是逻辑地址,这些地址要在由 CPU 翻译为物理地址后才能放在总线上去访问设备。

在 Linux 中,可以通过 /proc/iomem 文件查看当前的内存映射情况

译注:下图是译者电脑的 /proc/iomem 文件内容。勤快的同学可以开个计算器算一下下面的地址,看看能和上图对上多少如果不勤快,那我帮你勤快一下吧地址 9f000,指向第 636 KB地址 a0000,指向第 640 KB地址 f0000,指向第 960 KB地址 100000,指向第 1024 KB这一部分,和上面的示意图是基本一致的

将逻辑地址转为物理地址的规则很复杂,而且与 CPU 当前的运行模式有关(模式有:实模式、32位保护模式、64位保护模式)。在不考虑转换机制的情况下,CPU 工作模式决定了 CPU 能够访问多大的内存。例如,若 CPU 工作在 32 位模式,那么 CPU 就只能寻址 4GB 的内存(不过,有一种被称为“物理地址扩展”的例外情况,但我们暂不考虑)。

然而,由于顶部的 1GB 物理地址被映射到了主板设备上,CPU 实际能够高效访问的内存只有大约 3GB(有时候会比 3GB 更少——我的一台 Windows Vista 电脑只有 2.4GB 的可用内存)。若 CPU 工作在实模式,则 CPU 只能访问 1MB 的物理 RAM(实模式也是早期 Intel CPU 支持的唯一模式),而运行在 64 位模式的一些 CPU 可以物理寻址 64GB 的 RAM (尽管只有少数芯片组支持 64GB 的 RAM )。在 64 位模式下,CPU 能够使用系统支持的总内存空间之外的物理地址,来对主板上的其他设备进行访问——这些设备的物理内存地址就可以安排在所有 RAM 的物理地址空间之外。这种方式名为【回收内存 reclaiming memory】,且需要芯片组与 CPU 相配合才能实现。

上面的这些就是读懂下一篇博客所需的全部知识了。下一篇博客将描述从上电到 bootloader 即将跳转到内核中的全过程。若你喜欢这些内容,我强烈推荐你阅读 Intel manuals。Intel manuals 写得非常好而且内容准确。下面是一部分:

Datasheet for Intel G35 Chipset documents a representative chipset for Core 2 processors. This is the main source for this post.Datasheet for Intel Core 2 Quad-Core Q6000 Sequence is a processor datasheet. It documents each pin in the processor (there aren’t that many actually, and after you group them there’s really not a lot to it). Fascinating stuff, though some bits are arcane.The Intel Software Developer’s Manuals are outstanding. Far from arcane, they explain beautifully all sorts of things about the architecture. Volumes 1 and 3A have the good stuff (don’t be put off by the name, the “volumes” are small and you can read selectively).Pádraig Brady suggested that I link to Ulrich Drepper’s excellent paper on memory . It’s great stuff. I was waiting to link to it in a post about memory, but the more the merrier.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3