段描述符中AVL位的用途是什么?

问题描述 投票:0回答:1

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

x86 x86-64 hardware intel gdt
1个回答
2
投票

硬件忽略了这一点,因此软件如何使用它。

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


设计时的目的是什么

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

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

如果在由软件编写的结构中存在多个未使用的位但是由硬件读取以留出一些空间用于软件在每个条目中就地执行他们想要的任何簿记,以及保留一些位以供将来使用,则通常是良好的实践。

IDK,如果英特尔有任何特定的想法,或者你可以做些什么有趣的事情。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.