为什么在/ proc / iomem中有一个1 kB的系统RAM预留部分?

时间:2015-09-15 00:20:44

标签: linux ram proc procfs

我一直在查看cat /proc/iomem的输出,并注意到系统RAM第一个块末尾的1 kB保留地址。起初,我认为这是我安装的一个侥幸,但我的研究似乎表明它相当普遍。但是,我还没有找到令人满意的解释,为什么它存在。以下是一个示例:[CentOS部署指南] [1]

00000000-0009fbff : System RAM
0009fc00-0009ffff : reserved 
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM 
000f0000-000fffff : System ROM
00100000-07ffffff : System RAM   
00100000-00291ba8 : Kernel code
00291ba9-002e09cb : Kernel data 
e0000000-e3ffffff : VIA Technologies, Inc. VT82C597 [Apollo VP3] e4000000-e7ffffff : PCI Bus #01   
e4000000-e4003fff : Matrox Graphics, Inc. MGA G200 AGP   
e5000000-e57fffff : Matrox Graphics, Inc. MGA G200 AGP 
e8000000-e8ffffff : PCI Bus #01   
e8000000-e8ffffff : Matrox Graphics, Inc. MGA G200 AGP 
ea000000-ea00007f : Digital Equipment Corporation DECchip 21140 [FasterNet]
ea000000-ea00007f : tulip ffff0000-ffffffff : reserved

我的问题:

  1. 为什么第一块系统RAM在0009fbff结束?系统的页面大小是4 kB,所以它不应该在xxxxxfff结束,以使块成为页面大小的倍数?如果资源结构的页面大小不一致,那么操作系统如何跟踪哪个是4 kB,哪些更小?
  2. 0009fc00的保留部分是什么?我已经看过有关[实模式计算] [2]的评论,但如果可能的话,我会在这方面感谢您的解释。
  3. 谢谢!我一直是堆栈溢出的长期读者,这是我第一次作为参与者:)

    编辑:@MichaelPetch提供的信息回答了我的第二个问题。阅读有关EBDA部分的更多信息,让我看到这篇关于实模式的有用文章,以及分段粒度从1 B变为4 kB:Memory Map x86

    在我看来,在切换到保护模式后,内核回收地址范围00000000-0009fbff以用于寻址系统RAM。这让我有了更多的问题:

    1. 在保护模式下,为系统RAM指定的范围中的每个地址是否对应4 kB帧而不是1 B主存储器?如果是这种情况,则有意义的是,范围不必是4 kB页面对齐,因为每个物理地址现在对应于4 kB帧而不是主存储器的单个字节。这也可以解释为什么系统RAM的其余部分中的内核代码和内核数据地址范围未与4 kB对齐。
    2. 为什么内核可以使用范围00000000-0009fbff用于寻址主内存,而EBDA部分使用的范围仍然保留?这可能是一个特定于操作系统的问题,但我很好奇是否有一般操作系统设计原则要求EBDA部分仍然可用。
    3. 通过查看导出iomem_resource符号的resource.c,我了解到/ proc / iomem本质上是一个描述地址范围的资源结构树。我现在很好奇iomem_resource是否是Linux内核管理物理地址分配的权威结构。通过确定,我的意思是向树添加节点有效地保留了设备的物理地址范围。或者iomem_resource是否是从内核中实际定义物理地址范围分配的另一种机制创建的?

0 个答案:

没有答案