【发布时间】:2018-09-05 22:41:14
【问题描述】:
是否可以为单个段使用多个段描述符,以便在该段中为不同的特权级别提供单独的权限?例如,允许环 2 通过一个描述符读取或写入数据段,然后允许环 3 通过另一个描述符对该段进行只读访问?
【问题讨论】:
标签: x86 x86-64 hardware intel gdt
是否可以为单个段使用多个段描述符,以便在该段中为不同的特权级别提供单独的权限?例如,允许环 2 通过一个描述符读取或写入数据段,然后允许环 3 通过另一个描述符对该段进行只读访问?
【问题讨论】:
标签: x86 x86-64 hardware intel gdt
您基本上是在询问不同细分的基础/限制是否可以重叠。是的,他们当然可以,就像在实模式下一样。拥有不同的权限级别不会成为障碍。
完全重叠是 32 位平面内存模型中的正常情况,其中 CS 是覆盖整个 0..4GB 的代码段,而 DS=ES 对覆盖相同范围的段有不同的描述符记忆。
这与将同一个物理页框映射到不同虚拟地址的多个页表没有什么不同。
当一个物理地址可以通过多个段:偏移或虚拟地址访问时,x86 保证不存在缓存别名问题。
大多数 x86 微架构使用 VIPT L1 缓存,所有索引位都低于页面偏移量,因此它们的行为类似于 PIPT 缓存。 (而其他级别的缓存是 PIPT)。所以缓存和内存消歧是基于物理地址,或者至少是线性地址,这对于硬件来说不是问题。
【讨论】: