GDT中的AVL位是用来做什么的?除了“供软件使用,不被硬件使用”之外,维基百科没有提供任何其他信息。
答案 0 :(得分:2)
硬件会忽略该位,因此软件如何使用该位。
我怀疑当前的操作系统是否会将这些位用于任何用途;所有主流的现代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上,并且程序不会通常不会发现或使用线性地址,只有偏移量。)