关于x86:段描述符中AVL位的作用是什么?

What is the purpose of the AVL bit in a segment descriptor?

GDT中的AVL位是用来做什么的? Wikipedia除了提供"用于软件使用,不被硬件使用"之外,没有提供任何其他信息。


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

我怀疑当前的操作系统是否会将这些位用于任何用途;所有主流的现代x86操作系统都使用平面存储器模型,该模型只有很少修改的固定GDT条目。 (我忽略了Linux的modify_ldt系统调用,因为它不再用于线程本地存储;现代Linux具有更好的机制来正确设置FS或GS基础。而且,无论如何,我不认为它使用了1个AVL位进行任何操作。)

what it was intended for when designed

英特尔还保留了页表条目中的某些位供操作系统使用(即,硬件被保证会忽略,与将来的硬件可以使用的保留位相反)。

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

如果在软件编写的结构中有多个未使用的位,但由硬件读取,则为每个软件留出一定的空间来做他们想在每个条目中就位的簿记工作,以及为这些位保留一些位,这通常是一个好习惯将来使用。

IDK(如果英特尔有任何特定的想法),或者如果您可以用它来做一些有趣的事情,该怎么办。

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

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

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