Дескриптор сегмента

Добрый день.

Читаю о дескрипторе сегментов. Возник вопрос, касательно размещения информации о начале/конце сегмента.

Скрин:

Верхнее изображение взято мною отсюда. Нижнее - это детализация верхного изображения, выполненная мною для большей наглядности: разбил на 4 части, по два байта каждая и пронумеровал по порядку все биты.

Из схемы видно, что адрес начала сегмента прописан в битах 16-39 и 56-63. Т.е. для того, чтобы получить полный линейный адрес начала сегмента, необходимо выполнить конкатенацию этих битов? Почему линейный адрес не прописывается подряд, например с 16 по 47? Для чего такое разбиение? Аналогичное разбиение видим для адреса конца сегмента - он так же разбит на два блока битов: 0-15 и 48-51.

Благодарю за внимание.

С уважением Андрей.

Полистайте “Understanding the Linux Kernel”, раздел про сегменты.

Если кого интересует ответ, то он такой (получил на др. форуме):

Цитата:

Так сложилось исторически. Впервые защищенный режим появился в 80286, где дескрипторы были по 8 байт, но два старших были зарезервированы. В 80386 ввели поддержку адресации 4Г памяти, и для этого расширили поля базы и лимита, но для обеспечения обратной совместимости младшие 6 байт дескриптора оставили без изменений.

Ещё меня интересовал такой вопрос:

почему в том случае, когда флаг G установлен в 1, за единицу измерения (при определении размера смещения последней ячейки сегмента) принимается именно 4096 байт (т.е. 2 в 12 степени), а не что-то другое?

Ответ скорее всего такой: потому, что 4Kb - это размер страницы (4096b = 4Kb). В Linux отдаётся предпочтение страничной модели памяти.