底板芯片组与内存映射(Motherboard Chipsets and the Memory Map) 【转】
转自:http://blog.chinaunix.net/uid-25909619-id-4194650.html
底板芯片组与内存映射
我打算写一些关于计算机内部构造(computer internal)的博文(post),以解释现代操作系统内核是如何工作的。希望对一些在这方面没有经验,又感兴趣的程序员和爱好者(enthusiasts and programmers)提供些帮助。这些博文主要关注于Linux,Windows,以及Intel处理器。计算机的内部构造是我的兴趣之一。我曾经写过一些类似于内核-模式的代码,但已经很久没有做了。这第一篇博文介绍下现代的基于Intel的底板布局(the layout of modern Intel-based motherboard),CPU如何访问内存(access memory)以及系统内存映射(system memory map)。
在开始之前,让我们看一看当今的Intel计算机是如何构成的。下面的图表展示了底板的主要构成:

Diagram for modern motherboard. The northbridge and southbridge make up the chipset.
在查看上述图表时,你需要记忆的关键点是:CPU并不知道它连接着什么东西。CPU通过针脚(pin)与外界(outside world)通信,但并不关心外界是什么。可能是计算机上的一块底板(a motherboard in a computer),也许是一个烤面包机(toaster),网络路由器,脑移植物(brain implant)或者CPU测试仪。CPU与外界有三种主要的通信方式:内存地址空间(memory address space),IO地址空间(I/O address space)以及中断(interrupt)。这里我们仅关注底板与内存。
在底板上,CPU通过前端总线(front-side bus)连接到北桥(north-bridge),无论任何时候,CPU均通过该总线读取或写入内存。它通过一些管脚(pin)来传递欲写入或读取的物理内存地址(physical memory addres),另一些管脚则用于发送待写入的值(the value to be written)或者接受待读取的值。Intel双核QX660芯片用33个管脚来传输物理内存地址(physical memory address)(因而共有233个内存地址),用64个管脚来发送或读取数据(因而数据是按照64位数据宽度或8字节块(8 byte chunks)传输的)。这允许CPU访问64giga比特的物理内存地址(233*8字节),尽管多数的芯片组(chipset)仅至多处理8giga字节的RAM。
现在问题来了。通常说到内存往往是对RAM而言的----程序一直在读取与写入的东西(stuff)。的确,来自处理器的多数内存请求均通过北桥指向(routed to)RAM。但是并非总是如此【即,并非所有的请求均发送至RAM】。物理内存地址(physical memory address)也用于底板之上的各种各样设备间通信(此类通信称作 内存映射(memory-mapped)I/O)。这些设备包括视频卡(video card),大多数PCI 卡(say, a scanner or SCSI card),以及存储BIOS的闪存(flash memory)。
当北桥(northbridge)收到物理内存请求后,它决定向何处转发该请求:应该送至(go to)RAM么?或许是视频卡(Video Card)?该转发过程(routing)是通过内存地址映射(memory address map)完成的。对于每一块物理内存地址空间,内存映射(memory map)知道哪个设备拥有该内存区域。大部分(the bulk of)内存被映射至RAM,但当该内存地址不在RAM的内存映射中时,就通知了芯片组哪些设备应该响应对这些地址的请求。这些RAM之外的内存地址空间映射造就了PC上位于640KB与1M之间经典的“洞”。当为视频卡与PCI设备预留内存空间时,该“洞”会变得更大。这就是为什么32位的操作系统在使用4giga RAM时存在问题。在Linux上,文件/proc/iomem简明地列出了此类映射地址范围(address range mappings)。下面的图表展示了Intel PC上前4giga 物理内存地址空间的经典内存映射:

实际的内存地址与范围取决于计算机上特定的底板与设备,但大部分双核系统同上述描述的内存布局很相似。所有的棕色部分均映射至RAM之外【棕色为IO,灰色映射至RAM】。请务必记住:这里所列的地址是供底板总线使用的物理内存地址。在CPU内部运行的程序(例如,我们运行与编写的程序),其内存地址是逻辑的(logical),必须在使用总线获取该地址之前,通过CPU转换为物理内存地址。
将逻辑地址转换为物理地址的规则是复杂的,并且依赖于CPU运行的模式(实模式(real mode)、32-位保护模式(32-bit protected mode)、64-位保护模式(64-bit protected mode))。不考虑转换机制(translation mechanism),CPU模式据顶了可以存取的物理内存空间大小。例如,如果CPU运行在32-位模式,那么它仅能访问4GB物理地址(这里有一个例外,称作物理地址扩展(physical address extension),但现在不用考虑)。由于物理内存的顶端约1G空间用于映射底板设备(motherboard device),CPU仅能有效地使用越3G RAM(有时更少-我有一台vista机器,仅可用2.4G)。如果CPU位于实模式(real mode),那么它仅能访问1M字节的物理RAM(这是早期Intel处理器仅有的模式)。另一方面,运行与62-位模式的CPU可以访问64GB RAM(尽管很少芯片组支持那么大的RAM)。在64-位模式下,CPU可以访问超过RAM大小的物理地址,而这些地址常用于底板设备。这被称作内存回收(reclaiming memory),它通过芯片组的辅助实现的。
这就是下篇博文需要的所有内存知识背景,该文将介绍从按下电源开始,直到bootloader即将跳入到内核为止的整个过程。关于这个话题,如果你想学习更多东西,强烈建议阅读Intel手册。我已经全面的进入到了主要的源代码,但是Intel手册写的特别好并且非常准确。下面是一些(省略)。
§ 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.
原文地址:http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map
底板芯片组与内存映射(Motherboard Chipsets and the Memory Map) 【转】的更多相关文章
- Motherboard Chipsets and the Memory Map.主板芯片组与内存映射
原文标题:Motherboard Chipsets and the Memory Map 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外 ...
- x86内存映射
Contents 1 "Low" memory (< 1 MiB) 1.1 Overview 1.2 BIOS Data Area (BDA) 1.3 Extended BI ...
- linux中的 IO端口映射和IO内存映射
参考自:http://blog.csdn.net/zyhorse2010/article/details/6590488 CPU地址空间 (一)地址的概念 1)物理地址:CPU地址总线传来的地址,由硬 ...
- 内存映射文件MemoryMappedFile使用
参考资料: http://blog.csdn.net/bitfan/article/details/4438458 所谓内存映射文件,其实就是在内存中开辟出一块存放数据的专用区域,这区域往往与硬盘上特 ...
- JAVA NIO FileChannel 内存映射文件
文件通道总是阻塞式的. 文件通道不能创建,只能通过(RandomAccessFile.FileInputStream.FileOutputStream)getChannel()获得,具有与File ...
- Python之mmap内存映射模块(大文本处理)说明
背景: 通常在UNIX下面处理文本文件的方法是sed.awk等shell命令,对于处理大文件受CPU,IO等因素影响,对服务器也有一定的压力.关于sed的说明可以看了解sed的工作原理,本文将介绍通过 ...
- 使用ZwMapViewOfSection创建内存映射文件总结
标 题: [原创]使用ZwMapViewOfSection创建内存映射文件总结 作 者: 小覃 时 间: 2012-06-15,02:28:36 链 接: http://bbs.pediy.com/s ...
- C#大文件读取和查询--内存映射
笔者最近需要快速查询日志文件,文件大小在4G以上. 需求如下: 1.读取4G左右大小的文件中的指定行,程序运行占用内存不超过500M. 2.希望查询1G以内容,能控制在20s左右. 刚开始觉得这个应该 ...
- 用C#实现的内存映射
当文件过大时,无法一次性载入内存时,就需要分次,分段的载入文件 主要是用了以下的WinAPI LPVOID MapViewOfFile(HANDLE hFileMappingObject, DWORD ...
随机推荐
- tp5+layui 实现上传大文件
前言: 之前所写的文件上传类通常进行考虑的是文件的类型.大小是否符合要求条件.当上传大文件时就要考虑到php的配置和服务器的配置问题.之前简单的觉得只要将php.ini中的表单上传的 大小,单脚本执行 ...
- [转帖知乎]5G 网络和 4G 网络有什么区别?
5G 网络和 4G 网络有什么区别? 先放上一篇有史以来最强的5G科普: 一个简单且神奇的公式 今天的故事,从一个公式开始讲起. 这是一个既简单又神奇的公式.说它简单,是因为它一共只有3个字母.而说它 ...
- php 微信公众号上传永久素材
<?php namespace Mob\Controller; use Think\Controller; class WxmaterialController extends Controll ...
- Day23-Model操作和Form操作-转载
参考出处: http://blog.csdn.net/fgf00/article/details/54614706 Model和Form以及ModelForm简介 Model操作: 创建数据库表结构 ...
- BZOJ 2125: 最短路
2125: 最短路 Time Limit: 1 Sec Memory Limit: 259 MBSubmit: 756 Solved: 331[Submit][Status][Discuss] D ...
- 使用alien命令让deb包和rpm包互相转换
OS version: CentOS7 / Debian9 发现alien这个命令时很惊喜,之前在debian上安装etcd找不到安装包感觉很不科学,有了alien命令事情一下就变简单了. 这里以et ...
- 【LOJ#10131】暗的锁链
题目大意:给定一个 N 个点无向图的一棵生成树和另外 M 条边,第一次去掉生成树中的一条边,第二次去掉另外 M 条边中的一条边,求有多少种情况可以使得给定的无向图不连通. 题解:首先考虑该生成树,若新 ...
- E 定向 牛客练习赛25
tarjan 父节点和子节点 #include <cstdio> #include <cstdlib> #include <cmath> #include < ...
- 纯干货!一款APP从设计稿到切图过程全方位揭秘(转)
@BAT_LCK :我本身是一名GUI设计师,所以我只站在GUI设计师的角度去把APP从项目启动到切片输出的过程写一写,相当于工作流程的介绍吧.公司不同,流程不尽相同,但是终究还是能有些帮助. 依旧声 ...
- 1.Unix,Linux起源与编译原理
一.UNIX操作系统 作者:丹尼斯.里奇,肯.汤普逊 版权:贝尔实验室 时间:1971 特点:多用户,多任务(多进程),多CPU(多种CPU架构),高安全,高可靠,高性能,高稳定 应用:构 ...