首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储器寻址

存储器寻址
EN

Stack Overflow用户
提问于 2010-07-07 16:09:47
回答 7查看 4.8K关注 0票数 4

我正在阅读http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map,具体而言,我阅读了以下部分:

在主板上,CPU通往世界的大门是前端总线,把它连接到北桥。每当CPU需要读取或写入内存时,它都会通过这条总线进行读写。它使用一些引脚来传输它想要写入或读取的物理内存地址,而另一些引脚则发送要写入的值或接收正在读取的值。英特尔核心2 QX6600有33个引脚来传输物理内存地址(因此有2^33个内存位置的选择)和64个引脚来发送或接收数据(因此数据以64位数据路径或8字节块的方式传输)。这允许CPU物理地寻址64G内存(2^33个位置*8个字节),尽管大多数芯片组最多只能处理8G内存。

现在,上面的数学说明,由于有33个寻址引脚,2^33 *8字节= 64 GB。很好,但现在我有点糊涂了。假设我安装了一个64位操作系统,我将能够处理64 GB总数或2^64 GB*8=2^64 GB(这要多得多)?另外,假设我在32位cpu上使用相同的cpu,我仍然只能寻址4Gb (2^32位=4GB*8= 4GB)?

我觉得物理和“操作系统允许的”让我很困惑。

谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-07-07 16:53:12

你把很多事情搞混了:

  • 指针的大小限制了用户进程可以访问的虚拟内存量。并不是所有这些都可以用于您的进程(保留“高”1或2GB供内核使用是传统做法),
  • 并不是所有的虚拟地址位都是有效的。最初的AMD64实现有效地使用了48位符号扩展地址(即范围0x0000800000000000,0xFFF7FFFFFFFFFFFFFF无效)。这在很大程度上是为了将页表限制在4个级别上,这降低了页面错误的成本;假设4K页,则需要6级页表来处理完整的2^64位。作为比较,i386有两个层次的页面表。
  • 并不是所有的虚拟地址都需要在任何给定的时间对应物理地址。这就是虚拟内存的全部要点:您可以对不“物理”存在的内存进行寻址,并且操作系统为您分页。
  • 并不是所有物理地址都对应于虚拟地址。例如,它们可能不会被映射,但也有可能有比您所能寻址的更多的物理内存。PAE支持多达64 GB的物理地址,并且在AMD64之前的服务器上很常见。虽然一个单独的进程不能处理64 GB的地址,但这意味着您可以运行很多千兆字节的进程,而不需要一直进行交换。
  • ,最后是:有更多的物理地址是没有意义的。I有一个支持AMD64的D945GCLF2板,但是只有2GB的内存。没有必要有额外的物理地址线,但无论如何都不能使用。(我在内存映射设备和古怪的双DIMM单插槽设备上挥手,我忘记了.)

此外,还请注意其他几点:

  • 用于内存映射I/O (在硬件方面),CPU需要处理单个字节。它不能只进行64位的访问。
  • 现代处理器包括CPU上的内存控制器,而使用传统的northbridge和FSB (参见HyperTransport和QuickPath)。
票数 3
EN

Stack Overflow用户

发布于 2010-07-07 16:28:53

关于物理地址线,有几件事需要考虑:

  1. 每个物理地址线("pin")引用的是前端总线字,而不是字节地址。如果CPU获取64位字,那么物理地址线将对齐到8字节的边界。因此,地址行A0-A2没有连线,因为它们总是为零。因此,前端总线的宽度增加了物理线的字节地址范围。虚拟内存系统
  2. 可以维护64位虚拟地址到n位物理地址的映射。在实践中,操作系统维护一个VM映射不超过的“物理最大地址”值。
  3. 某些内存体系结构允许内存库分页,其中非CPU硬件通过为不同的“内存库”重用一些物理地址来增加有效物理内存地址范围。
票数 1
EN

Stack Overflow用户

发布于 2010-07-07 16:27:03

64位操作系统和32位操作系统之间的主要区别是,人们仅仅认为原始数据类型(例如,一个单词)更宽。如果CPU只能物理地定位2^33个位置,这不会因为您使用64位操作系统而改变。另一方面,使用32位操作系统通常会限制您的可寻址内存,因为32位指针不能表示CPU用来寻址内存的所有可能值(在您的示例中,32位指针是有点短)。

长话短说,可寻址内存受到指针宽度( OS限制)和数据地址总线宽度(物理限制)的限制。有些体系结构通过使用两个指针来绕过OS指针宽度,其中一个指针用于寻址“内存库”,另一个指针位于银行内的本地地址。不过,这些计划最近已经风行一时。

此外,现代OSes通常使用虚拟内存子系统,将逻辑地址转换为相应的物理地址。有了缓存,内存的实际物理位置可以在一个(或多个)中!沿内存传递性的组件(例如处理器缓存、主内存、硬盘等)不知道我怎么会完全忘记提到VM,但是它肯定会帮助您了解它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3196684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档