Причина архаичная.Дескрипторы составляли 8 байтов в 286, а ограничение использовалось для кодирования в 16 бит в 286 16-битном защищенном режиме.Когда пришло 386, дескрипторы не были расширены - каждая запись по-прежнему 8 байтов.Однако не было бы достаточно места для кодирования как базы сегмента, так и предела сегмента с использованием 32 битов - поэтому ограничения теперь кодируются с использованием 20 битов.
Существует 2 варианта определения 20-битного ограниченияинтерпретируется - как кратное 4K или как байты - это называется гранулярностью.Режим 4K является хорошим компромиссом и довольно неплохо работает вместе с размером страницы 4K 386 - когда вы используете ограничения более 1 МБ, очень вероятно, что вы также используете виртуальную память, и тогда вы потеряете всю страницу на краюв любом случае.
Ограничение, данное макросу, выражается в байтах и делится на 4096 (>> 12
), чтобы получить гранулярный предел страницы.