c – 如何查看虚拟内存中每个进程维护的页表 – Linux?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – 如何查看虚拟内存中每个进程维护的页表 – Linux?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1920字,纯文字阅读大概需要3分钟。
内容图文
在虚拟内存概念中 – 每个进程都维护自己的页表.此页表将虚拟地址映射到内核虚拟地址.此内核虚拟地址将地址转换为物理RAM.我知道有一个Kernel Virtual adddres – vm area struct.此vm区域结构最终将此地址映射到物理地址.
当我做cat / proc // maps时 – 我看到了虚拟地址到物理地址的直接映射.因为它将地址映射到文件 – 使用inode.因此,它看起来它是硬盘上的地址,文件描述符,主要次要编号. RAM上有一些地址.所以,我可以说我看不到虚拟地址映射到内核虚拟地址的表.我想看看那张桌子.我怎么能看到这个?它不应该在内核空间中.因为进程正在访问时让我们说内存 – 0x1681010然后这应该被转换为内核虚拟内存地址.最后,该地址应转换为物理内存地址.
解决方法:
不,Linux kernel维护进程页表(但不保留进程本身). Processes仅通过他们的address space看到virtual memory.进程使用一些syscalls,例如syscalls. mmap(2)或execve(2),改变他们的地址空间.
物理地址和页表以及处理和管理MMU是内核的业务,它实际上为用户应用程序提供了一些“abstract machine”(带有虚拟地址空间,系统调用作为原子基本操作等等).应用程序看不到原始(x86)硬件,而只看到内核给出的user mode.某些硬件资源和指令不可用(它们仅在user space中运行).
页表由内核管理,实际上各种进程可能使用不同的或有时相同的页表. (因此,由kernl管理的context switches可能需要重新配置MMU).您不关心(并且用户进程看不到页表)内核将管理它们.
不,/ proc / self / maps没有显示任何关于物理地址的信息,只显示虚拟地址.允许内核将进程从一个核心移动到另一个核心,以便随时将页面从一个物理(非虚拟)地址移动到另一个,等等.和应用程序通常不会看到这个(他们可能会查询mincore(2),getcpu(2)和proc(5) …)
应用程序不应该关心物理内存或interrupts,如page faults(只有内核关心这些;有时通过发送信号).
虚拟到物理地址转换发生在MMU中.通常,它是成功的(可能透明地访问页表),并且处理器在总线上向RAM发送转换的物理地址(对应于由用户模式机器指令处理的某个虚拟地址).当MMU无法处理它时,会发生页面错误,由内核处理(可以交换某些页面,发送SIGSEGV,执行上下文切换等等)
另请参阅processor architecture,instruction set,page table,paging,translation lookaside buffer,cache,x86和x86-64 wikipages(并按照我给你的所有链接).
内容总结
以上是互联网集市为您收集整理的c – 如何查看虚拟内存中每个进程维护的页表 – Linux?全部内容,希望文章能够帮你解决c – 如何查看虚拟内存中每个进程维护的页表 – Linux?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。