7.4.4.1.1. Сегментация
Сегментация-это разделение памяти на логические блоки с
целью эффективного управления
пространством логических адресов. Сегменты используются для объединения областей памяти,
которые имеют общие атрибуты. Иначе говоря, память организуется как один или более сегментов
переменной длины, размером от одного байта до четырех гигабайт. Каждая задача в МП 80386 может иметь
до 16383 сегментов,
размером до четырех гигабайт каждый, таким образом, общий объем виртуальной памяти
составляет 64 Тбайт. Любая из этих областей линейного адресного пространства
(сегмент физической памяти) имеет несколько связанных с ней атрибутов. Они
включают ее размер, расположение, тип (стек, программа или данные) и характеристики защиты.
Видимая программистами модель организации памяти
определяется при проектировании
системы. Архитектура МП 80386 дает проектировщикам свободу выбора модели для каждой задачи.
Наиболее распространенными моделями являются следующие.
Сплошная
память: адресное пространство,
состоящее из одного массива длиной до 4
Гбайт, которое процессор с помощью механизма трансляции адресов отображает в пространство физических адресов. Указатель
является 32-разрядным числом, значение которого может изменяться от 0 до
232 — 1. Перемещение модулей, скомпилированных
по отдельности, может быть выполнено системным программным обеспечением, таким как загрузчики, редакторы
связей и т.п.
Сегментированная память: адресное пространство,
состоящее из набора до 16383 линейных адресных пространств, размером до 4 Гбайт каждое. Полное пространство, видимое
программой, может быть до 246 байт (64 Тбайт). С помощью механизма трансляции
адресов процессор отображает пространство логических адресов в пространство физических адресов.
Программисты воспринимают сегментированную модель
(называемую также пространством
логических адресов) как набор до 16383 одномерных подпространств определенной длины. Каждое из
этих подпространств - это сегмент, блок сплошного адресного пространства. Полный
указатель в этом адресном пространстве состоит из двух частей: селектора сегмента 16-разрядного
поля, идентифицирующего сегмент, и относительного 32-разрядного адреса, указывающего на байт внутри сегмента.