我将写一些关于计算机内部的文章,目的是解释现代内核的工作原理。
我希望对那些对这些东西感兴趣但没有经验的发烧友和程序员有用。
重点是Linux,Windows和Intel处理器。
内部结构对我来说是一种爱好,我已经编写了很多内核模式代码,但是有一段时间没有这样做了。
第一篇文章介绍了基于Intel的现代主板的布局,CPU如何访问内存以及系统内存映射。

首先,让我们看看当今的英特尔计算机是如何连接的。
下图显示了主板中的主要组件和可疑的颜色味道:
在这里插入图片描述
现代主板的示意图。
北桥和南桥组成芯片组。

当您查看此内容时,要记住的关键是CPU对连接的东西一无所知。
它通过自己的别针与外界对话,但并不关心外界是什么。
它可能是计算机中的主板,但也可能是烤面包机,网络路由器,大脑植入物或CPU测试台。
CPU与外部进行通信的主要方式有三种:内存地址空间,I / O地址空间和中断
我们现在只担心主板和内存。

在主板中,CPU通往世界的网关是将其连接到北桥的前端总线
每当CPU需要读取或写入内存时,都会通过此总线进行。
它使用一些引脚发送要写入或读取的物理内存地址,而另一些引脚发送要写入的值或接收要读取的值。
英特尔酷睿2 QX6600具有33个引脚来传输物理内存地址(因此有2 ^ 33 ^个存储位置选择)和64个引脚来发送或接收数据(因此数据在64位数据路径中传输,或8个字节的块)。
尽管大多数芯片组最多只能处理8 GB的RAM,但这使CPU可以物理寻址64 GB的内存(2 ^ 33 ^个位置* 8字节)。

现在问题来了。
我们习惯于仅根据RAM来考虑内存,而RAM程序则一直在读取和写入数据
实际上,处理器的大多数内存请求都是由北桥路由到RAM模块的。
但并非所有人。
物理内存地址也用于与主板上的各种设备进行通信(此通信称为内存映射I / O)。
这些设备包括视频卡,大多数PCI卡(例如,扫描仪或SCSI卡)以及存储BIOS的闪存
当北桥接收到物理内存请求时,它会决定将其路由到何处:它应该进入RAM吗?
显卡也许?
此路由通过内存地址映射决定
对于物理内存地址的每个区域,内存映射都知道拥有该区域的设备。
地址的大部分被映射到RAM,但是当地址不是映射时,内存映射会告诉芯片组哪个设备应该为这些地址的请求提供服务。
内存地址与RAM模块之间的这种映射导致PC内存的经典漏洞在640KB和1MB之间。
当内存地址保留用于视频卡和PCI设备时,会出现一个更大的漏洞。
这就是为什么32位操作系统在使用4 GB RAM时出现问题的原因。
在Linux中,文件/ proc / iomem巧妙地列出了这些地址范围映射。
下图显示了英特尔PC中前4G物理内存地址的典型内存映射:
在这里插入图片描述
英特尔系统中前4 GB的内存布局。

实际地址和范围取决于计算机中使用的特定主板和设备,但是大多数Core 2系统都与上述情况非常接近。
所有棕色区域均映射为远离RAM。
请记住,这些是主板总线上使用的物理地址。
在CPU内部(例如,在我们运行和编写的程序中),内存地址是逻辑的,在总线上访问内存之前,它们必须由CPU转换为物理地址。

将逻辑地址转换为物理地址的规则很复杂,并且取决于CPU运行的模式(实模式,32位保护模式和64位保护模式)。
不管转换机制如何,CPU模式都会确定可以访问多少物理内存。
例如,如果CPU在32位模式下运行,则它只能以物理方式寻址4 GB(嗯,有一个称为物理地址扩展的异常,但现在忽略它)。
由于前1 GB左右的物理地址已映射到主板设备因此CPU只能有效地使用约3 GB的RAM(有时更少-我有一台Vista机器,只能使用2.4 GB)。
如果CPU处于实模式,则它只能寻址1 MB的物理RAM(这是早期Intel处理器能够支持的唯一模式)。
另一方面,以64位模式运行的CPU可以物理访问64GB(尽管很少有芯片组支持那么多的RAM)。
在64位模式下,可以使用系统中total RAM上方的物理地址来
访问与主板设备窃取的物理地址相对应的RAM区域

这称为回收内存,它是在芯片组的帮助下完成的。

这就是我们下一篇文章所需的全部内存,它描述了从加电到引导加载程序即将进入内核的引导过程。
如果您想了解更多有关此内容的信息,我强烈建议您参阅英特尔手册。
总体来说,我非常了解主要资源,但是特别是Intel手册写得好并且准确。
这里有一些:

英特尔G35芯片组的数据表记录了Core 2处理器的代表性芯片组。
这是这篇文章的主要来源。

英特尔酷睿2四核Q6000序列数据表是一个处理器数据表。
它记录了处理器中的每个插针(实际上并没有很多,将它们分组后,实际上没什么用了)。
令人着迷的东西,尽管有些奥秘。

英特尔软件开发人员手册非常出色。
他们远离神秘的事物,很好地解释了有关该架构的各种事情。
第1卷和第3A卷的内容不错(不要用名字来拖延,“卷”很小,可以有选择地阅读)。

PádraigBrady建议我链接到Ulrich Drepper关于memory的出色论文。
好东西
我在等待有关内存的文章中链接到它,但更多的是快乐。

Logo

更多推荐