如何查看虚拟内存-Linux中每个进程维护的页表?

轻巧

在虚拟内存概念中,每个进程都维护自己的页表。此页表将虚拟地址映射到内核虚拟地址。该内核虚拟地址将地址转换为物理RAM。我了解有一个内核虚拟地址-vm区域结构。该vm区域结构最终将此地址映射到物理地址。当我执行cat / proc // maps时-我看到了虚拟地址到物理地址的直接映射。因为它将地址映射到文件-使用inode。因此,它看起来是硬盘上的地址,文件描述符,主要编号。RAM上有一些地址。因此,我可以说看不到虚拟地址映射到内核虚拟地址的表。我想看那张桌子。我怎么看?它不应在内核空间中。因为当进程正在访问时,假设内存为0x1681010,则应将其转换为内核虚拟内存地址。最后,该地址应转换为物理内存地址。

巴西勒·斯塔林凯维奇

不,Linux内核维护进程页面表(但不维护进程本身)。进程仅在地址空间中看到虚拟内存进程使用一些系统调用,例如mmap(2)execve(2)来更改其地址空间。

物理地址和页表以及处理和管理MMU是内核的职责,它实际上为用户应用程序提供了一些“抽象机”(具有虚拟地址空间,作为基本操作的syscall等)。应用程序看不到原始(x86)硬件,而只能看到内核给定用户模式某些硬件资源和说明不可用(它们仅在用户空间中运行)。

页表由内核管理,实际上,各种进程可能使用不同的页表,有时甚至使用相同的页表。(因此,由内核管理的上下文切换可能需要重新配置MMU)。您不在乎,(并且用户进程看不到页表)内核将管理它们。

而且,/proc/self/maps不显示任何有关物理地址的信息,仅显示有关虚拟地址的信息。允许内核随时将进程从一个核心移动到另一个核心,将页面从一个物理(非虚拟)地址移动到另一个,等等。和应用程序通常看不到这一点(它们可能会使用mincore(2)getcpu(2)proc(5)进行查询...)

应用程序不应该关心诸如页面错误之类的物理内存或中断(仅内核关心这些;有时是通过发送信号)。

虚拟地址到物理地址的转换发生在MMU中。通常,它是成功的(也许透明地访问页表),并且处理器在总线上将转换后的物理地址(对应于由用户模式机器指令处理的某个虚拟地址)发送到RAM。当MMU无法处理时,将发生页面错误,由内核处理(可以交换某些页面,发送SIGSEGV,进行上下文切换等)。

另请参阅处理器体系结构指令集页表分页转换后备缓冲区缓存x86x86-64 wiki页面(并遵循我给您的所有链接)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何查看虚拟内存-Linux中每个进程维护的页表?

来自分类Dev

进程如何尝试访问Linux虚拟内存系统中其他进程的内存

来自分类Dev

进程如何尝试访问Linux虚拟内存系统中其他进程的内存

来自分类Dev

系统如何定义进程获取的虚拟内存部分?

来自分类Dev

创建进程[Windows]时虚拟内存的外观如何?

来自分类Dev

Windows OS如何跟踪进程的虚拟内存?

来自分类Dev

如何找到该进程使用的总虚拟内存?

来自分类Dev

如何使Lubuntu中的Firefox使用更少的虚拟内存?

来自分类Dev

Linux进程的虚拟内存的结构

来自分类Dev

iOS中的进程使用的虚拟内存?

来自分类Dev

Linux/Amd64中如何获取物理内存页地址和虚拟内存页地址的映射关系?

来自分类Dev

Linux中虚拟内存的大小

来自分类Dev

分配给进程的虚拟内存

来自分类Dev

分配给进程的虚拟内存

来自分类Dev

进程的虚拟内存是否会缩小?

来自分类Dev

如何在C(MacOS)中获取有关进程的虚拟内存映射的信息

来自分类Dev

虚拟内存中的地址转换

来自分类Dev

内核虚拟内存空间和进程虚拟内存空间

来自分类Dev

如何找到Linux系统的虚拟内存大小和缓存大小?

来自分类Dev

在哪里而不是如何在Tomcat 6.0.26中更改虚拟内存

来自分类Dev

每次在C#中运行程序时如何使用相同的虚拟内存块

来自分类Dev

vmlinux和虚拟内存中的Linux syscall

来自分类Dev

vmlinux和虚拟内存中的Linux syscall

来自分类Dev

铬进程16艾字节的虚拟内存?

来自分类Dev

Linux等操作系统如何将可执行程序加载到虚拟内存中?

来自分类Dev

Linux等操作系统如何将可执行程序加载到虚拟内存中?

来自分类Dev

在Linux中访问另一个进程虚拟内存(调试)

来自分类Dev

进程的线程在Linux中的相同虚拟内存空间中工作吗?

来自分类Dev

解析日志文件后的Linux虚拟内存消耗

Related 相关文章

  1. 1

    如何查看虚拟内存-Linux中每个进程维护的页表?

  2. 2

    进程如何尝试访问Linux虚拟内存系统中其他进程的内存

  3. 3

    进程如何尝试访问Linux虚拟内存系统中其他进程的内存

  4. 4

    系统如何定义进程获取的虚拟内存部分?

  5. 5

    创建进程[Windows]时虚拟内存的外观如何?

  6. 6

    Windows OS如何跟踪进程的虚拟内存?

  7. 7

    如何找到该进程使用的总虚拟内存?

  8. 8

    如何使Lubuntu中的Firefox使用更少的虚拟内存?

  9. 9

    Linux进程的虚拟内存的结构

  10. 10

    iOS中的进程使用的虚拟内存?

  11. 11

    Linux/Amd64中如何获取物理内存页地址和虚拟内存页地址的映射关系?

  12. 12

    Linux中虚拟内存的大小

  13. 13

    分配给进程的虚拟内存

  14. 14

    分配给进程的虚拟内存

  15. 15

    进程的虚拟内存是否会缩小?

  16. 16

    如何在C(MacOS)中获取有关进程的虚拟内存映射的信息

  17. 17

    虚拟内存中的地址转换

  18. 18

    内核虚拟内存空间和进程虚拟内存空间

  19. 19

    如何找到Linux系统的虚拟内存大小和缓存大小?

  20. 20

    在哪里而不是如何在Tomcat 6.0.26中更改虚拟内存

  21. 21

    每次在C#中运行程序时如何使用相同的虚拟内存块

  22. 22

    vmlinux和虚拟内存中的Linux syscall

  23. 23

    vmlinux和虚拟内存中的Linux syscall

  24. 24

    铬进程16艾字节的虚拟内存?

  25. 25

    Linux等操作系统如何将可执行程序加载到虚拟内存中?

  26. 26

    Linux等操作系统如何将可执行程序加载到虚拟内存中?

  27. 27

    在Linux中访问另一个进程虚拟内存(调试)

  28. 28

    进程的线程在Linux中的相同虚拟内存空间中工作吗?

  29. 29

    解析日志文件后的Linux虚拟内存消耗

热门标签

归档