gpt4 book ai didi

memory-management - 内核虚拟地址空间中分配给用户进程的Page的映射

转载 作者:行者123 更新时间:2023-12-04 05:51:00 26 4
gpt4 key购买 nike

当为一个进程创建一个页面(它将被映射到进程地址空间)时,该页面会被映射到内核地址空间吗?

如果没有,那么它将没有内核虚拟地址。那么如果需要,交换器将如何找到页面并将其交换出去?

最佳答案

如果我们谈论的是 x86 或类似(就页面转换而言)架构,在任何给定时间都有一个虚拟地址空间,通常其中一部分保留给内核,另一部分保留给用户模式进程。

在两个进程之间进行上下文切换时,只有虚拟地址空间的用户模式部分会发生变化。

有了这样的组织,内核总是可以完全访问当前的用户模式进程,因为在任何时候内核和用户模式进程都只有一个当前的虚拟地址空间,不是两个,而是一个.因此,内核实际上不必为用户模式页面提供另一个额外的映射。但这不是重点。

重点是内核为每个页面保留某种统计信息,如果需要,可以将其保存到磁盘并在其他地方重用。 CPU 标记每个页面的 page table entry (PTE)accessed当页面第一次被读取或写入时 dirty当它第一次写入时。

内核定期扫描 PTE,读取 accesseddirty用于更新统计和清除的标记 accesseddirty因此它可以稍后检测到它们的变化(当然,如果有的话)。根据此统计信息,它确定哪些页面很少使用或长期未使用,并且可以重新利用。

如果“交换器”在当前进程的上下文中运行并且它在内核中运行,那么理论上它有来自内核的足够信息(很少使用或长时间未使用的页面列表,如果 dirty 或如果不是,则取消映射 dirty ) 并充分访问感兴趣的页面。

如果“交换器”本身作为用户模式进程运行,事情会变得更加复杂,因为默认情况下它无法访问另一个进程的页面,并且必须创建映射或要求内核为它做一些额外的工作感兴趣的过程的上下文。

因此,在内核中找到很少使用和长时间未使用的页面及其地址。 CPU 通过自动将 PTE 标记为 accessed 来提供帮助和 dirty .可能需要额外映射到 dirty页,如果它们被保存到磁盘而不是在拥有它们的进程的上下文中。

关于memory-management - 内核虚拟地址空间中分配给用户进程的Page的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043498/

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