当存在页面错误时,虚拟内存区域结构是否仅进入画面?

时间:2013-11-18 06:11:02

标签: c linux linux-kernel

虚拟内存对我来说是一个非常复杂的主题。我想了解它。以下是我对32位系统的理解。示例RAM仅为2GB。我试过阅读很多链接,目前我并不自信。我希望你们有人帮助我清理我的概念。请承认我的观点,也请回答你的错误。在我的观点中,我也有一个困惑的部分。所以,这里开始总结。

  1. 每个进程都认为它只是在运行。它可以访问4GB内存 - 虚拟地址空间。

  2. 当进程访问虚拟地址时,它会通过MMU转换为物理地址。 该MMU是CPU的一部分 - 硬件。

  3. 当MMU无法将地址转换为物理地址时,会引发页面错误。

  4. 在页面错误时,会通知内核。内核检查VM区域结构。如果它能找到它 - 可能在磁盘上。它会做一些页面输入/页面输出。并在RAM上获取此内存。

  5. 现在MMU将再次尝试并将成功。

  6. 如果内核找不到地址,它会发出一个信号。例如,无效访问将引发SIGSEGV。

  7. 困惑点。

    1. Page表是否在内核中维护?这个VM区域结构有一个页表?

    2. MMU如何在物理RAM中找不到该地址。让我们说它转换为RAM中的一些错误地址。代码仍将执行,但它将是一个糟糕的地址。 MMU如何确保正在读取正确的数据?它是否每次都参考内核VM区域?

    3. Mapping表 - 虚拟到物理是否在MMU中。我读过它是由一个单独的过程维护的。如果它在一个过程中,为什么我看不到它。 或者如果它是MMU,MMU如何生成地址 - 是段+ 12位移位 - >页面帧号,然后添加偏移量(位-1到10) - >给出一个物理地址。 对于32位架构而言,这是否意味着我的想法。我可以从虚拟地址确定物理地址。

    4. cat / proc / pid_value / maps。这向我展示了vmarea的当前映射。基本上,它读取Vmarea结构并打印它。这意味着这很重要。我无法完整地了解这一部分。执行程序时,会生成vmarea结构。当MMU无法转换地址,即页面错误时,VMAREA是否仅出现在图片中?当我打印vmarea时,它显示地址范围,权限并映射到文件描述符和偏移量。我确信这个文件描述符是硬盘中的文件描述符,偏移量是该文件的。

    5. 高内存概念是内核无法直接访问大于1 GB(大约)的内存区域。因此,它需要一个页表来间接映射它。因此,它会临时加载一些页表来映射地址。 HIGH MEM每次都会进入画面吗?因为Userspace可以通过MMU直接转换地址。在什么情况下,内核真的想要访问高MEM。我相信内核驱动程序主要使用kmalloc。这是直接内存+偏移地址。在这种情况下,实际上不需要映射。因此,问题是内核需要访问High Mem的场景。

    6. 处理器是否专门附带MMU支持。那些没有MMU支持的人无法运行LInux?

1 个答案:

答案 0 :(得分:1)

虽然这不是最好的答案,但我想分享我对困惑点的看法。

1.是否维护了Page表...

是。内核维护页表。实际上它维护着嵌套的页表。页面顶部的表格存储在top_pmd中。 pmd我想它是页面映射目录。您可以使用此结构遍历所有页表。

2. MMU如何在物理RAM中找不到地址.....

我不确定我是否明白这个问题。但是,如果由于某些问题,指令出现故障或正在访问其指令区域,则通常会得到未定义的指令异常,从而导致未定义的异常中止。如果查看故障转储,可以在内核日志中看到它。

3. Mapping表 - 虚拟到物理是在MMU内部......

是。 MMU是SW + HW。 HW就像TLB一样。映射表存储在此处。对于代码部分的说明,我总是转换物理虚拟地址并始终匹配。几乎所有时间它都与数据部分匹配。

4. cat / proc / pid_value / maps。这向我展示了vmarea的当前映射....

这更多用于分析用户空间堆栈的虚拟地址。如您所知,几乎所有用户空间程序都可以拥有4 GB的虚拟地址。所以不像内核,如果我说0xc0100234。你不能直接去指向istruction。因此,您需要此映射和虚拟地址,以根据您拥有的数据指向指令。

5.高内存概念是内核无法直接访问内存...

High-mem对应于用户空间内存(如果我错了,有人会纠正我)。当内核想要从用户空间的地址读取一些数据时,您将访问HIGHMEM。

6.处理器是否专门附带MMU支持。那些没有MMU支持的人无法运行LInux?

我提到的MMU是HW + SW。所以大多数情况下都是芯片组。 SW通常取决于架构。您可以从内核配置和构建中禁用MMU。我从来没有尝试过。现在大多数芯片组都有它。但小板我认为他们禁用了MMU。我不完全确定。

由于所有这些都是概念性问题,我可能缺乏一些知识而且在某些地方出错。如果有的话请其他人纠正。