gpt4 book ai didi

linux - 页表是如何初始化的?

转载 作者:行者123 更新时间:2023-12-05 07:56:35 26 4
gpt4 key购买 nike

我最近一直在学习虚拟内存,并提出了一些问题 - 特别是关于所有结构的初始化。假设 x86 架构,linux 2.4(=> 2 级分页)。

  1. 一开始,如果 PGD 的条目不指向任何已分配的页表,它们包含什么?
  2. 关于页表的相同问题 - 条目是如何初始化的?
  3. 当进程创建新的内存区域时,比如说,对于虚拟地址 100 - 200,它是否也创建(如果需要)并初始化与这些地址对应的页表?还是等到可以访问特定地址?
  4. 当需要将页表条目初始化为物理地址时(比如写访问)——操作系统如何选择它?

提前致谢。

最佳答案

  1. 条目有一个有效位。因此,如果页目录中没有分配页表,理论上所有条目都会关闭有效位,并且条目中还有什么并不重要。

  2. 与上面相同,除了我认为如果创建了一个页表,这意味着该范围内的一个页面已被访问,因此在页表初始化时至少有一个条目将被设置为有效。否则,根本没有理由创建一个空页表并占用内存。

  3. 我将您的“创建新内存区域”解释为使用 malloc() 调用。 Malloc 是一种向操作系统请求内存并将该内存映射到您的虚拟地址空间的方法。该内存来自您的堆虚拟内存范围,我认为您不能保证操作系统使用的特定地址,只能保证大小。如果您使用 mmap,我认为您确实可以要求使用特定地址,但通常您只想针对共享内存等特定情况执行此操作。

    至于页表,我想当操作系统在 malloc 调用期间获取您的内存时,它会使用新映射为您更新页表。如果它在 malloc 期间不存在,那么当您尝试访问内存时它会导致页面错误。

  4. 在 Linux 中,操作系统通常会跟踪可用的页面列表,这样它就可以轻松获取内存,而不必担心其他人使用它。我的猜测是,空闲列表是在引导时通过与主内存 Controller /位图通信来初始化的,以了解正在使用的物理内存的哪些位置,但也许硬件人员可以支持这一点。

关于linux - 页表是如何初始化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28552867/

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