原创 【译】主板芯片组和内存映射

发布时间:2021-06-18 08:08:55 浏览 769 来源:猿笔记 作者:虫鸣

    第一篇文章就让我们来描述下基于Intel的主板结构布局、CPU如何访问内存以及系统内存映射吧:CPU使用一些引脚发送它要读写的物理内存地址:IntelCore2QX6600处理器有33个引脚用来传送物理内存地址(所以,它可以访问233个存储单元)和64个引脚用来收发读写数据(因此,这可以让CPU寻址64GB(233*8字节)的物理内存尽管大部分芯片组只能处理8GBRAM,我们习惯于只从RAM的角度来考虑内存,来自程序的大部分内存请求都通过北桥路由到了RAM模块?


    #主题列表:juejin,github,smartblue,cyanosis,channing-cyan,fancy,hydrogen,condensed-night-purple,greenwillow,v-green,vue-pro,healer-readable,mk-cute,jzman,geek-black,awesome-green,qklhk-chocolate

    #投稿主题:

    theme:juejin

    highlight:

    翻译自:[MotherboardChipsetsandtheMemoryMap](

    为了说明现代内核的工作原理,我打算写几篇关于计算机内部的文章。对这些东西感兴趣的发烧友和程序员往往经验不足,希望对这些人有所帮助。我们专注于Linux、Windows和英特尔处理器。探索内部结构是我的爱好。我写过很多运行在kernelmode上的代码,但是很久没有写了。让我们在第一篇文章中描述基于英特尔的主板结构布局、CPU如何访问内存和系统内存映射。

    首先,我们来看看今天英特尔电脑的组件是如何连接的。下图是主板的主要部件,辅以难看的配色(译者认为这是作者的自嘲):

    *现代主板原理图,北桥、南桥构成芯片组。*

    看这张图,要记住的关键是**CPU对它连接到* *的东西一无所知。通过它的引脚](

    在主板上,中央处理器与外界的网关是前端总线,一端连接到北桥。只要CPU读写内存,就要经过这条总线。CPU使用一些管脚发送自己想要读写的物理内存地址,其他管脚负责发送和接收读写数据。英特尔酷睿2QX6600处理器有33个引脚用于传输物理内存地址(因此,它可以访问2 \ u 003 sup > 33 \ u 003 c/sup >内存单元)和64个引脚用于接收和读取数据(因此,数据以64位或8字节块传输)。这允许CPU处理64 GB(2 \u 003 csup > 33 \u 003 c/sup > * 8字节)的物理内存,尽管大多数芯片组只能处理8 GB的RAM。

    译者注:地址总线是单向的。

    现在问题来了。我们习惯只从RAM的角度去思考内存,也就是程序一直在读和写的东西。诚然,来自程序的内存请求大部分是通过北桥路由到RAM模块的,但大部分并不等于全部。物理内存地址也用于与主板上的各种设备通信(这种通信称为内存映射I/O](

    北桥收到物理地址请求,会决定物理地址去哪里:RAM?还是显卡?这种路由策略由内存地址映射决定。对于物理内存地址的每个区域,内存映射知道该区域属于哪个设备。大多数地址被映射到内存,但是当它们没有被映射时,内存映射将告诉北桥哪个设备应该为这些地址提供请求服务。这些远离RAM模块的内存地址映射,在PC内存中造成了640 KB到1 MB之间的历史空洞。为显卡和PCI设备预留内存地址时,孔会比较大。这就是为什么32位操作系统4GB内存的问题](

    *英特尔系统前4GB的内存布局*

    实际地址和范围取决于电脑中具体的主板和设备,但大多数Core2系统都非常接近上述布局。所有棕色区域都从内存中映射出来。请记住,这些是主板总线上使用的*物理地址*。在CPU* *(比如我们运行和编写的程序)内部,内存地址指的是逻辑地址* *,在总线上访问内存之前,必须由CPU翻译成物理地址。

    逻辑地址到物理地址的转换规则相当复杂,这取决于CPU运行在哪种模式下(实模式、32位保护模式、64位保护模式)。不管转换机制如何,CPU模式决定了可以访问多少物理内存。比如CPU在32位保护模式下运行,只能寻址4GB(当然,PAE](

    以上就是下一篇文章所需要的有关内存的全部预备知识了,下篇文章描述了从开机到BootLoader将跳入内核的启动过程。如果你想了解更多与本文主题相关的内容,那么我墙裂推荐你阅读Intel手册。I’mbigintoprimarysourcesoverall,buttheIntelmanualsinparticulararewellwrittenandaccurate.这里列了一些:

    -[DatasheetforIntelG35Chipset](

    -[DatasheetforIntelCore2Quad-CoreQ6000Sequence](

    -[IntelSoftwareDeveloper’sManuals](

    -[PádraigBrady](

作者信息

虫鸣 [等级:3] 程序员
发布了 11 篇专栏 · 获得点赞 77 · 获得阅读 6775

相关推荐 更多