Аппаратное обеспечение игнорирует бит, поэтому использование программного обеспечения зависит от программного обеспечения.
Я сомневаюсь, что современные ОС используют эти биты для чего-либо; все основные современные операционные системы 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, и программы не обычно не обнаруживают или используют линейные адреса, только смещения.)