CPU基础知识1------Intel CPU 地址空间
一、地址空间映射
这里要说的是Intel构架下的CPU地址空间布局,注意这里没有说是内存地址空间布局。
我们说的内存通常是指DRAM,DRAM相对于CPU也可以算是外部设备,CPU地址空间是CPU访问外部设备过程中的一个概念,CPU除了访问DRAM外还会访问许多其他的设备。可以粗略的认为CPU地址空间包含DRAM地址空间,但两者却是不同的概念。而且DRAM地址空间是由内存控制器直接访问的,由CPU间接访问的。
过去很长一段时间Intel CPU是32位的,也就是可以访问到4GB的地址空间,但是当时的DRAM通常也就是512MB到2GB之间,现在假设DRAM是1GB,那么就是3GB的地址空间是空的。在计算机里面,地址也是资源。这空的地址空间就用来访问外部设备IO所用,这部分被称为MMIO(Memory Mapped I/O)。MMIO的空间是很大的,它包含了PCI的配置空间(256MB或者更大),内置集成显存(256MB,或者更大),还有其他很多东西 。所以这部分的大小是不容忽视的。
现在的Intel CPU一般都是64位的,也就是可以访问到64GB。而DRAM也是越来越大,以至于DRAM加上MMIO的空间超出了4GB,而MMIO的空间是不能随意变更的。所以现在的做法就是将DRAM的一部分重映射到4GB以上的空间,下面就以DRAM有5GB为情况,做一个例子。请看下图
上图中左边是地址空间,右边是DRAM空间,其中红色的字体表示寄存器,可以在spec中找到该寄存器的说明,这几个寄存器决定了整个地址空间的大的格局。这里就简要说明一下。
TOLUD,指向32位地址,也就是4GB以内。它是一个分界线,在0-TOLUD之间为DRAM,TOLUD-4GB之间为MMIO空间。该值由BIOS指定。为了方便说明,假设TOLUD被指定为2GB。
TOM,目前还不明确,我猜想应该是指实际物理内存的大小,“the total amount of populated physical memory”,比如上图TOM为5GB。可在本机的BDFR(0,0,0,A0)验证。
REMAPBASE和REMAPLIMIT,也是36位,分别表示基址和上限地址。用于重映射DRAM中被MMIO遮住的一部分空间,有2GB。该图中将DRAM中遮住的部分重映射到TOM的上方,所以REMAPBASE为5GB,REMAPLIMIT为7GB-1。
TOUUD,36位地址,大小为REMAPLIMIT+1的位置,比如上图TOUUD应该在7GB的位置,可以和TOLUD做对比理解,TOLUD是4GB以内DRAM与MMIO的分界线,TOUUD可以理解为4GB-64GB之间DRAM与MMIO的分界线。
以上是假设DRAM超出4GB的情况,假如DRAM只有3GB,而TOLUD指定为2GB呢?也就是2GB-3GB的DRAM被遮住。这时也是通过REMAPBASE和REMAPLIMIT将之重定向到4GB的上方。再假设DRAM只有2GB,TOLUD为2GB呢?这时就不存在重映射。 REMAPLIMIT小于REMAPBASE时(通常REMAPLIMIT为0),表示不使用重映射。
关于4GB以上的空间是如何访问的,请查看该网页说明:
http://en.wikipedia.org/wiki/Physical_Address_Extension
二、地址空间布局
这里着重说明4GB以下的地址空间的布局情况。下面是我用visio画的布局图,其实也就是将spec里说明的布局情况全部综合到一张图上,这也是前段时间总结出来的核心部分。
同样的图中红色字体部分为寄存器,这些寄存器与地址空间布局有着密切的关系。这些寄存器的详细说明可以参考spec。比如说“Egress Port Registers”这个4KB的窗口,会根据EPBAR的设置被放置到MMIO的任意一个DMI Interface的位置,但让该窗口不能与其他任何窗口重叠。
另外我也将我所了解的情况说明一下。
一、先看TOLUD-4GB的位置,可以看到有几处都是DMI Interface(Subtractive Decode)。DMI是南桥与北桥的接口,访问DMI,也就是访问南桥。另外要解释的是Substactive decode,在计算机中地址译码有三种形式,当主设备通过指定地址访问总线上的从设备
1、Positive decode,有从设备解码后发现是访问自己的,于是它就会响应,否则就没有从设备响应;
2、Negative decode,从设备收到该地址经解码后发现不属于自己的地址范围,从设备就转发出去;
3、Subtractive decode,在4个时钟周期内没有从设备响应,该地址就会发送到扩展的总线上面解码。
引自:http://www.microsoft.com/whdc/system/bus/pci/default.mspx
DMI Interface(Subtractive Decode)的意思就是CPU发送一地址先到北桥上解码,如果该地址没有北桥上的设备占用,那么就用该地址就会被传送到南桥上解码,,也就是访问南桥上的设备。可以假想为一开始4GB空间都是DMI Interface(Subtractive Decode),然后0-TOLUD被DRAM声明占用,TOLUD-4GB也纷纷被各种设备占用,于是就剩下了支离破碎的几个DMI Interface。(目前看上去这样理解是通顺的,但我希望它也是正确的)。
2.再来说明一下High BIOS。BIOS固件地址分三段,这里的High BIOS,后面的System BIOS,还有后面的Extended System BIOS。spec中已经说明,计算机启动后一开始执行的指令就在High BIOS中。然而High BIOS在4GB的位置,计算机reset后进入的是实模式。Intel构架下一开始段地址隐藏的高位部分全部为1,所以尽管第一条指令的逻辑地址是F000:FFF0,但访问的物理地址是FFFF_FFF0,这个地址比4G少16字节,因此,BIOS一般在此处只放置一条跳转指令,远跳转或近跳转,在EFI BIOS中,正是通过一条近跳转让BIOS不用进入实模式,直接建立描述符表,最终进入Flat Mode(属于保护模式)。关键的地方在于地址空间中640KB-1MB(PAM0-PAM6)之间是可编程的,可以指定为只读、只写、读写、禁用,这些都是针对DRAM的。开机之后这段空间是被禁用的,而DRAM是北桥的设备,禁用DRAM,那么这段地址空间就是发送到南桥去解码(对照上面关于DMI Interface的说明来解释),结果就解码到了High BIOS对应的固件上面。所以终究还是在High BIOS中执行指令。
可以用RW验证将PAM0(PCI 0/0/0 90H)的bit[5:4]设置为00,那么就发现, 0F0000-0FFFFF之间的数据与FFFF_0000-FFFF_FFFF之间的数据竟然是一样的。也证明在DRAM禁用的情况下,两部分地址是被解码到同一个地方的。
假如PAM0被设为只读或者读写,则读取的是DRAM上的信息,数据内容是System Bios。为什么System Bios明明在固件中却跑到DRAM中来呢?shadow的时候,只是北桥在负责地址decode,把这段地址指向了rom而不是把rom里面的数据copy到了DRAM里面。这是概念上的问题。实际上,BIOS在做的时候一般都是先把rom里面的数据copy到低端内存,(0~640K)中的某一个或者两个段里面,然后再解压缩出来的数据分别放到对应的segment里面去。比如E000,F000等。然后再把整个map关掉。让地址decode的时候对应的是实际的DRAM而不是ROM了。
3.接着说一下PCI配置空间。可以看到它的基址是由PCIEXBAR决定的,用RW软件验证PCI数据可以用Memory的方式看到。各个PCI的地址空间可以用这个式子计算:PCI Express Base Address + Bus Number x 1 MB +Device Number x 32 kB + Function Number x4 kB。打一个比方,我的电脑的PCIEXBAR中看到基址为F400_0000,当我要访问bus(0)device(1F)function(3)时,通过计算可以得到地址为F40F_B000,于是从PCI 0/1F/3中看到的数据与从Memory的F40F_B000位置看到的数据是一样的。注意查看的时候要将PCIEXBAR的bit0置1。
PCIEXBAR—PCI Express Register Range Base Address
B/D/F/Type: 0/0/0/PCI
Address Offset: 60-67h
Default Value: 00000000E0000000h
Access: RO, R/W/L, R/W/L/K
Size: 64 bits
4.要说明的大概就这些,其他的各种地址窗口的作用、地址空间的位置,都可以在spec中很轻易地找到。而且图中也标注了各个区间有关的寄存器。
CPU基础知识1------Intel CPU 地址空间相关推荐
- 计算机基础cpu知识,CPU基础知识: DIY装机小白必看的CPU知识扫盲
CPU也就是中央处理器,全拼为Central Processing Unit,在计算机中可以比喻成人的大脑.它是一块超大规模的集成电路,是一台计算机的运算核心和控制核心.它的功能主要是解释计算机指令以 ...
- 计算机中央处理器相关知识,软考程序员考点计算机硬件基础知识之中央处理器CPU...
下面希赛小编为大家整理的软考程序员考点计算机硬件基础知识之中央处理器CPU,希望能帮助学友们.具体内容如下: 中央处理器 中央处理器(CPU,Central Processing Unit)是一块超大 ...
- 组装电脑基础知识之中央处理器CPU
前言 本系列文章是为准备自己组装台式机的小伙伴写的关于中央处理器CPU.主板.显卡等部分的参考资料. 一.简介 中央处理器作为计算机系统的运算和控制核心,是信息处理.程序运行的最终执行单元. 二.参数 ...
- CPU基础知识之Cache介绍
一.什么是Cache Cache就是CPU缓存,它是位于CPU和内存之间的临时存储器.CPU在读取数据进行计算的时候,首先是从内部的缓存中查找需要的数据,如果有,可以最短时间最快速度交付CPU.但是如 ...
- 01-如何选购CPU散热器?小白装机通俗易懂的水冷/风冷CPU散热器知识
组装电脑选购硬件往往会关注CPU的性能,毕竟是核心硬件,它决定了一台电脑的运行速度,而装机用户往往会忽视了CPU散热器的重要性,CPU散热器的重要性相当于游戏中的辅助角色,CPU在工作时会产生大量的热 ...
- 计算机cpu型号有,intel cpu有多少种型号
intel cpu有多少种型号 CPU作为电脑的核心组成部份,它的好坏直接影响到电脑的性能.下面是小编带来的关于intelcpu有多少种型号的内容,欢迎阅读! intelcpu有多少种型号: Atom ...
- 详解服务器异构计算FPGA基础知识
随着云计算,大数据和人工智能技术应用,单靠CPU已经无法满足各行各业的算力需求.海量数据分析.机器学习和边缘计算等场景需要计算架构多样化,需要不同的处理器架构和GPU,NPU和FPGA等异构计算技术协 ...
- 详解服务器内存和显存基础知识
早期内存通过存储器总线和北桥相连,北桥通过前端总线与CPU通信.从Intel Nehalem起,北桥被集成到CPU内部,内存直接通过存储器总线和CPU相连. 所以,在AMD采用Socket FM1,I ...
- 学完这份「计算机基础知识」,你也可以来字节跳动(附下载)
第一本是程序员必知的硬核基础知识,这是一本非常入门的经典 PDF,看完能让你对计算机有一个基础的了解和入门,是培养你 内核 的基础,我们看下目录大纲 基本上涵盖了计算机所有基础知识,从 CPU 到内存 ...
最新文章
- optee的RPC设计(模型)详解
- Linux多进程拷贝fork,浅析linux中fork函数
- DP(优化) UVALive 6073 Math Magic
- Gargari and Permutations CodeForces - 463D(建图+记忆化搜索)
- 4.1)深度卷积网络:卷积神经网络基础
- 前端学习笔记之强制类型转换
- cortex a7 a53_西昊人体工学椅A7开箱测评
- Material Design使用集合
- _splitpath / _wsplitpath 将绝对路径分割为盘符、路径、文件名、扩展名。
- ubutun下虚拟环境的配置
- Mac下载工具哪个好?迅雷 for Mac是个不错的选择!
- UE4 Websocket
- 安装ALEXA工具条
- 新手织梦建站教程:设置网页文档默认点击数为0方法
- hdu5745 La Vie en rose【dp+bitset优化】
- mysql根据一个表的字段更新另一个表的字段
- matlab中a2=poly(p2),插值与拟合matlab实现
- URL Scheme 简介
- Python三维地址建模教程【Gempy】
- 骑行318、 2016.7.30
热门文章
- 运维系统常用健康度模型浅析
- 杭哥试用过的精品软件推荐:毛笔字生成软件(ougishi) 4.00 书法 唐宋八大家
- uniapp H5端使用 google 地图 @googlemaps/js-api-loader,文字地点模糊查询,地点省市区详细数据,经纬度信息,markers地图标记点
- java 打jar包 (JAR命令)
- html如何画出抽奖的转盘,HTML5之CANVAS学习,实现抽奖转盘
- uniapp安卓打包证书制作,亲测可直接使用
- 如何用照片做抖音视频?这样剪辑电子相册
- 产品生命周期优化法PACE
- 好看的网站正在升级维护中html单页源码
- 完全卸载office(手动卸载)、微软工具自动卸载、安装Office时提示错误1310、写入文件“GROOVEEX“时错误,请确认您有权限访问该目录