和Segmentation一样,Paging中的不同地址也能指向同一个物理内存位置吗?

Just as in Segmentation, can different addresses in Paging also point to the same physical memory location?

例如。对于分割,0000:FFFF等同于0001:FFEF(只是一个假设的情况,不知道我们是否真的在编程中使用这些或者这些是否是保留空间)

(我是汇编编程的新手。特别是 x86。)

是的,这是允许的。事实上,这不仅是合法的,而且还经常用于称为 共享内存的功能。

0000:FFFF仅在实模式、VM86模式或SMM模式下等同于0001:FFEF。在这些模式中,根据定义,分页是不启用的。在没有分页的保护模式1下,它们必然被翻译成不同的物理地址,因为段偏移不同(FFFF vs. FFEF)但是段基地址同样是2。对于分页,当段偏移量被添加到段基地址(可能为零)时,它们可能指向相同的虚拟页面或不同的虚拟页面,但无论哪种方式,页面偏移量的最低 12 位有效位将不同(因为段偏移量的最低 12 位有效位不同),因此无论页 table 如何设置,它们都不能等同。

一般而言,不同的地址可能会转换为相同的物理地址。当页面偏移量不同但最低有效 12 位相同时,当逻辑地址指向不同大小的页面时,逻辑地址可能会被转换为相同的物理地址。否则,如果虚拟地址中的最低有效 12 位中至少有一个不同,则它们在物理地址中不能相等 space.


  1. 在保护模式下,段选择符0000'0000'0000'00XXb被用作空段选择符,无法访问。但是,为了争论,我们假设它是可访问的(或考虑 0000'0000'0000'0100b 与 0000'0000'0000'0101b 代替)。

  2. 它们指的是同一个段,因为段选择器索引(每个选择器的最高有效 13 位)和 table 指示符(第三个最低有效位)相等