就像在分段中一样,Paging中的不同地址是否也指向相同的物理内存位置?

时间:2018-05-08 19:05:57

标签: pointers assembly x86 memory-address microprocessors

EG。对于分段,0000:FFFF相当于0001:FFEF(只是一个假设的情况,不知道我们是否真的在编程中使用它们或者这些是保留空格)

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

仅在实模式,VM86模式或SMM模式下,

0000:FFFF相当于0001:FFEF。在这些模式中,根据定义,不启用分页。在没有分页的保护模式 1 中,它们必然被转换为不同的物理地址,因为分段偏移是不同的(FFFFFFEF)但是分段基址是相同的 2 。通过分页,当段偏移被添加到段基地址(可能为零)时,它们可以指向相同的虚拟页面或不同的虚拟页面,但无论哪种方式,页面偏移的至少12个有效位都会是不同的(因为段偏移的至少12个有效位是不同的)因此它们不能是等价的,无论页表如何设置。

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

  1. 在保护模式下,段选择器0000'0000'0000'00XX b 用作空段选择器,无法访问。但我们假设为了论证它可以访问(或者考虑0000'0000'0000'0100 b 而不是0000'0000'0000'0101 b

  2. 它们引用相同的段,因为段选择器索引(每个选择器的最重要的13位)和表指示符(第三个最不重要的位)相等