Какова цель бита AVL в дескрипторе сегмента? - PullRequest
0 голосов
/ 04 сентября 2018

Для чего используется бит AVL в GDT? Википедия не предоставляет никакой информации, которую я могу найти, кроме как "Для использования в программном обеспечении, а не в аппаратном обеспечении".

1 Ответ

0 голосов
/ 05 сентября 2018

Аппаратное обеспечение игнорирует бит, поэтому использование программного обеспечения зависит от программного обеспечения.

Я сомневаюсь, что современные ОС используют эти биты для чего-либо; все основные современные операционные системы x86 используют модель плоской памяти с несколькими фиксированными записями GDT, которые они не модифицируют. (Я игнорирую системный вызов modify_ldt Linux , потому что он больше не используется для локального хранилища потоков; современный Linux имеет более совершенные механизмы для правильной установки базы FS или GS. И вообще, я не думаю, что нормальные варианты использования для этого использовали 1 бит AVL для чего-либо.)


для чего он был предназначен при разработке

Intel также зарезервировала некоторые биты в записях таблицы страниц для использования ОС (т. Е. HW гарантированно игнорирует, в отличие от зарезервированных битов, которые могут использоваться в будущем HW).

32-битный формат GDT и пейджинг были новыми в 386. (286 имеет другой формат GDT и не имеет пейджинга).

Как правило, рекомендуется использовать несколько неиспользуемых битов в структуре, написанной программным обеспечением, но считываемой аппаратным обеспечением, чтобы оставить некоторое пространство для программного обеспечения, чтобы они могли выполнять какую-либо бухгалтерию в каждой записи, а также резервировать некоторые биты для будущее использование.

IDK, если у Intel есть что-то конкретное или что-то интересное, что вы можете сделать с этим битом.

https://wiki.osdev.org/Descriptors#Code.2FData_Segment_Descriptors ничего не предлагает, просто говорит: «Ваша ОС может использовать это по вашему выбору».

Возможно, вы могли бы использовать его для отслеживания того, использовалась запись или нет, если достаточен 1-битный счетчик ссылок. Или, может быть, перекрываются ли какие-либо другие сегменты Или, может быть, флаг, указывающий, должны ли происходить какие-либо другие проверки и копирование при изменении базы?

Может быть, для сегмента кода, вы можете использовать его для записи, был ли код независимым от позиции. И если это так, вы можете записать код в другом месте и изменить базу сегментов, и она будет работать без исправлений, если вы дефрагментируете физическую память, чтобы освободить место для большого непрерывного сегмента. (Но до тех пор, пока вы не измените смещение чего-либо относительно базы сегмента, это более слабое требование, чем то, что обычно означает PIC на плоской карте памяти. Тот же код находится в том же CS: EIP, и программы не обычно не обнаруживают или используют линейные адреса, только смещения.)

...