gpt4 book ai didi

linux - 当进程终止时,会遍历什么结构来释放页面? (页表或其他什么?)

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:50 26 4
gpt4 key购买 nike

我试图了解进程终止时所执行的有关物理内存释放的操作的性质。

假设进程的页表是在Linux上实现的多级树形结构。

我目前的理解是,操作系统需要释放映射到存在页表条目(PTE)的虚拟地址的任何子集的每个物理页帧。这可以通过遍历多级树 PT 结构来实现,对于设置了有效位的 PTE,将与 PTE 对应的物理帧描述符添加到空闲列表(用于 Buddy 分配过程)。

我的问题是:页表的遍历实际上是为此完成的吗?另一种更快的方法是为每个进程维护分配给进程的页框描述符的链接列表,然后在进程终止期间线性遍历该列表。是否遵循这种更通用且更快的方法?

最佳答案

我不确定页面在进程结束时物理被释放。

我的理解是MMU由内核管理。

但是每个process有自己的virtual address space ,内核更改:

  • 对于显式系统调用更改它,即。 mmap(2)
  • 在程序开始时execve(2) (可以将其视为 ELF 程序 executable 文件段所描述的多个虚拟 mmap-s)
  • 在进程终止时,就好像地址空间的每个段实际上都被munmap-ed

当进程终止时,它的虚拟地址空间(但不是任何物理 RAM 页)将被销毁或释放!

所以 page table (无论你给它什么定义)可能是通过一些原语在内核内部进行管理的,例如向虚拟地址空间添加一个段以及从中删除一个段。虚拟空间是延迟管理的,因为内核使用 copy on write使 fork 快速的技术。

不要忘记某些页面(例如共享库的代码段)在进程之间共享,并且多线程进程的每个任务都共享相同的虚拟地址空间。

顺便说一句,Linux kernelfree software ,所以你应该研究它的源代码(来自 http://kernel.org/ )。另请参阅http://kernelnewbies.org ;内存管理发生在 mm/ 内部内核源代码的子树。

有很多资源。查看linux-kernel-slides 、slides#245 作为开始,并且有许多关于 Linux 内核的书籍和资源...查找 vm_area_structpgetable 等...

关于linux - 当进程终止时,会遍历什么结构来释放页面? (页表或其他什么?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32643704/

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