gpt4 book ai didi

c - 内核虚拟内存结构是在进程即将执行时首先形成的吗?

转载 作者:太空狗 更新时间:2023-10-29 11:14:45 25 4
gpt4 key购买 nike

我在其他帖子中间接地遇到过类似的问题。现在,我的理解更好了。因此,我的问题更好。所以,我想在这里总结一下事实。本示例基于X86-32位系统。

请对我的观点说是/否。如果不是,请解释。

  1. MMU 将查看 CR3 寄存器以找到进程 - 页目录基地址。

  2. CR3寄存器由内核设置。

  3. 现在 MMU 在读取页目录基地址后,将偏移到页表索引(从 VA 计算),从这里读取页框号,现在它将找到页框号上的偏移量基于给定的 VA。它获取物理内存地址。所有这些都是在 MMU 中完成的,对吗?不知道 MMU 什么时候被禁用,谁来做这些马戏团?如果是软件那么它会很慢吧?

  4. 我知道当 MMU 无法解析地址时会发生页面错误。内核被告知。内核将根据内核虚拟内存区域结构的读取更新页表。我说得对吗?

  5. 请记住,第 4 点。它是否意味着在执行任何进程之前。也许在加载过程中。 Kernel是否先填充内核虚拟内存区struct。例如,内存部分将是 BSS、Code、DS 等。可能有些部分在 RAM 中,有些部分在存储设备中。当程序的各个部分从存储移动到主内存时,我假设内核将更新内核虚拟内存区域结构。我在这里正确吗?因此,是内核密切跟踪程序位置——无论是在存储设备还是在 RAM 中——设备的 inode 号和文件偏移量。

  6. Sequence wise -> 在进程加载期间(可能是加载程序)-> 内核将填充内核虚拟内存区域结构中的数据。它还将设置 CR3 寄存器。现在进程开始执行,它最初会出现一些频繁的页面错误。现在 VM 区域结构将被更新(如果需要),然后是页表。现在,MMU 将成功转换地址。所以,当我说进程访问内存时,是 MMU 代表进程访问内存。这都是关于用户空间的。内核空间则完全不同。内核空间不需要MMU,可以直接映射到物理地址——low mem。对于高端内存(从内核空间访问用户空间),它将在内部进行临时页表更新。这是一个单独的内核页表,一个临时页表。内核空间不需要MMU。我对么?

最佳答案

Don't know when MMU is disabled, who will do all this circus?

没有人。所有这些马戏团旨在做两件事:将您提供给它的虚拟地址转换为真实地址,如果它不能这样做,则完全中止指令并 start executing a routine addressed from an architecturally pre-defined address , 请参阅那里的“页面错误”以获得基本的页面错误。

当 MMU 关闭时,不会进行任何转换,您提供给它的地址将直接送入 CPU 的地址处理管道,就像 MMU 可能已将其转换成的任何地址一样。

So, when I say process accessing a memory, it is the MMU which is accessing the memory on behalf of the process.

在这里,您的方向是正确的,MMU 正在调解访问,但它并没有进行访问。它只做你之前描述的,翻译它。一般叫什么Load/Store unit , 接下来获取它,它是处理与在该地址拥有最接近的良好数据副本的任何人交谈的人,“进行访问”。

The kernel space doesn't need the MMU, it can directly map to the physical address

这取决于您如何定义“需要”。它当然可以将其关闭,但几乎从不关闭。首先,它必须与用户空间对话,MMU 必须运行以将用户空间必须的内容转换为 Load-Store 单元可以使用的地址。其次,MMU 提供的灵 active 和保护非常有值(value),如果没有真正令人信服的理由,它们不会被丢弃。我知道至少有一个操作系统会(或者会,已经有一段时间了)运行一些批量复制 MMU-off,但仅此而已。

关于c - 内核虚拟内存结构是在进程即将执行时首先形成的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20087057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com