【发布时间】:2015-05-17 22:03:42
【问题描述】:
我们可以用c程序显示页表地址吗? 页表和扩展页表有什么区别?
【问题讨论】:
标签: c operating-system cpu computer-architecture processor
我们可以用c程序显示页表地址吗? 页表和扩展页表有什么区别?
【问题讨论】:
标签: c operating-system cpu computer-architecture processor
我们可以用c程序显示页表地址吗?
不使用普通的 C 程序,不,你不能。用户模式程序在内核提供的虚拟内存中运行,使用分页机制。所有这些都被抽象出来了,所以用户空间对此一无所知。
Linux 内核确实为用户空间提供了一种机制来观察页表,但如 this question 所示。
页表和扩展页表有什么区别?
“扩展页表”是 Intel 对Second Level Address Translation (SLAT), also known as nested paging 的实现,用于更有效地虚拟化来宾 VM 的内存。
基本上,客户虚拟地址首先转换为客户物理地址,然后再转换为主机物理地址。这一切都在硬件中完成(由 MMU),以避免 VMM 需要在软件中完成额外的工作。
【讨论】:
1] 什么是二级页表 扩展页表是一种机制,允许每个虚拟机管理其页表,而无需访问底层主机的 MMU - 硬件。 快速浏览下面的链接。它应该给出一个想法 http://www.cs.cmu.edu/~dga/15-440/F10/lectures/vm-ucsd.pdf
2] 是否可以使用 C 程序打印页表? - 完全有可能。您的系统中将有一个 MMU 驱动程序。 MMU 驱动程序将在 RAM 的某些部分设置页表。你需要知道那个位置。 在传统操作系统 [linux、windows 等] 中。该内存区域将具有特权,因此应用程序可能无法直接访问。 如果您的平台是一个运行着微内核的嵌入式系统,那么您可能能够访问此表。
【讨论】: