在虚拟内存概念中,每个进程都维护着自己的页表。 该页表将虚拟地址映射到内核虚拟地址。 此内核虚拟地址将地址转换为物理RAM。 我知道有一个内核虚拟adddres – vm区域结构。 这个vm区域结构最终将这个地址映射到物理地址。 当我做cat / proc // maps时 – 我看到了虚拟地址到物理地址的直接映射。 因为它将地址映射到文件 – 使用inode。 所以,它看起来是硬盘上的地址,文件描述符,主要次要号码。 RAM上有几个地址。 所以,我可以说我看不到虚拟地址映射到内核虚拟地址的表。 我想看看那张桌子。 我怎么能看到? 它不应该在内核空间。 因为当进程正在访问让我们说内存 – 0x1681010那么这应该被转换为内核虚拟内存地址。 最后,这个地址应该被转换成物理内存地址。
虚拟机pipe理程序guest os中的内存地址转换
Ubuntu和虚拟PC
应用程序在虚拟机中运行速度更快?
哪个Linux发行版最适合在虚拟机上运行,用于编程研究?
不, Linux内核维护进程页表(但不是进程本身)。 进程只能通过地址空间看到虚拟内存 。 进程使用一些系统调用 ,例如mmap(2)或execve(2)来改变他们的地址空间。
物理地址和页表以及处理和管理MMU是内核的业务,它实际上为用户应用程序提供了一些“ 抽象机器 ”(具有虚拟地址空间,系统调用为原子基本操作等)。 应用程序不会看到原始(x86)硬件,只能看到内核给出的用户模式 。 一些硬件资源和说明不可用(它们只在用户空间运行)。
页表由内核管理,实际上各种进程可能使用不同的页面表(有时也可能是相同的页表)。(所以由kernl管理的上下文切换可能需要重新配置MMU)。你不关心,(用户进程看不到页表)内核将管理它们。
不, /proc/self/maps没有显示任何有关物理地址的信息,只能看到虚拟地址。 内核被允许将进程从一个核心移动到另一个核心,将页面从一个物理(而不是虚拟)地址移动到另一个,等等。 和应用程序通常不会看到这(他们可能会用mincore(2) , getcpu(2)和通过proc(5) …)
应用程序不应该关心物理内存或中断 ,如页面错误 (只有内核关心这些;有时通过发送信号)。
虚拟到物理地址转换发生在MMU中。通常,它是成功的(也许是透明地访问页表),并且处理器在总线上向RAM发送翻译的物理地址(对应于由用户模式机器指令处理的某个虚拟地址)。当MMU无法处理时,会发生页面错误,由内核处理(可以交换某个页面,发送SIGSEGV ,执行上下文切换等)
请参阅处理器体系结构 , 指令集 , 页表 , 分页 , 翻译后备缓冲区 , 缓存 , x86和x86-64 wikipages(并按照我给你的所有链接)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。