【问题标题】:What is the purpose of the AVL bit in a segment descriptor?段描述符中 AVL 位的用途是什么?
【发布时间】:2018-09-04 18:23:29
【问题描述】:

GDT 中的 AVL 位是做什么用的?除了“供软件使用,硬件不使用”之外,维基百科没有提供任何我能找到的信息。

【问题讨论】:

  • 你在问一些真正的操作系统用它做什么? (我不知道)。如果硬件忽略它,软件可以使用它来记录有关该描述符条目的任何内容。
  • 我更多地考虑了它在设计时的用途——我认为因为它有“可用”标签,所以设计师可能有一些特定的想法。虽然我也欢迎任何人了解不同软件的用途,如果它们的用途与预期用途不同。

标签: x86 x86-64 hardware intel gdt


【解决方案1】:

硬件会忽略该位,因此取决于软件如何使用它。

我怀疑当前的操作系统是否会将这些位用于任何事情;所有主流的现代 x86 操作系统都使用平面内存模型,只有几个固定的 GDT 条目,它们不会修改。 (我忽略了Linux's modify_ldt system call,因为它不再用于线程本地存储;现代 Linux 有更好的机制来正确设置 FS 或 GS​​ 基本设置。无论如何,我认为它的正常用例不会使用它1 AVL 位用于任何事情。)


设计时的用途

英特尔还在页表条目中保留了一些位供操作系统使用(即保证硬件会忽略,而不是保留位可供未来的硬件使用)。

32 位 GDT 格式和分页都是 386 中的新功能。(286 有不同的 GDT 格式,没有分页)。

如果结构中有多个未使用的位由软件写入但由硬件读取,则通常是一种很好的做法,以便为软件留出一些空间来在每个条目中进行他们想要的任何簿记,并保留一些位以供未来使用。

如果英特尔有什么特别的想法,或者如果你可以用这个比特做任何有趣的事情,IDK。

https://wiki.osdev.org/Descriptors#Code.2FData_Segment_Descriptors 没有任何建议,只是说“您的操作系统可以根据您的选择使用它”。

如果 1 位引用计数器就足够了,您可能可以使用它来跟踪条目是否在使用中。或者它是否与任何其他部分重叠。或者可能是一个标志来指示在修改基础时是否必须进行一些其他检查和复制?

也许对于一个代码段,你可以用它来记录代码是否是位置无关的。如果是这样,您可以将代码存储在其他地方并更改段基数,并且如果您正在对物理内存进行碎片整理以为大的连续段腾出空间,它仍然可以在没有修复的情况下工作。 (但只要您不更改任何相对于段基的偏移量,这比 PIC 在平面内存映射中通常意味着的要求更弱。相同的代码位于相同的 CS:EIP 中,而程序则不会t 通常找出或使用线性地址,只有偏移量。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2015-06-08
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多