Если страницы имеют фиксированный размер, то сегменты нет.
У сегментов так же, как и у страниц, существует проблема фрагментации.
Т.к. памяти часто не хватает, стали использовать страничную организацию сегментов.При которой в памяти может находиться только часть сегмента.
В одной из первых, где была применена страничная сегментация, была система MULTICS.
Каждая программа обеспечивалась до 2^18 сегментов (более 250 000), каждый из которых мог быть до 65 536 (36-разрядных) слов длиной.
Таблица сегментов - хранит дескриптор для каждого сегмента. У каждой программы своя таблица.
Т.к. записей в таблице более 250 000, она сама разбита на страницы.
Сама таблица является отдельным сегментом.
Сегмент с таблицей дескрипторов указывающих на таблицы страниц для каждого сегмента
Нормальныйразмерстраницыравен 1024 словам. Если сегмент меньше 1024, то он либо не разбит на страницы, либо разбит на страницы по 64 слова.
Дескриптор сегмента
Когдапроисходитобращение к памяти, выполняетсяследующий алгоритм:
1. По номеру сегмента находится дескриптор сегмента.
2. Проверяется, находиться литаблицастраницы в памяти. Если в памяти, определяетсяеерасположение. Еслинет, вызываетсясегментноепрерывание.
3. Проверяется, находиться листраница в памяти. Если в памяти, определяетсяеерасположение в памяти. Еслинет в памяти, вызываетсястраничноепрерывание.
4. К адресу начала страницыприбавляетсясмещение, в результате получаем адрес нужного слова в оперативнойпамяти.
5. Происходитзаписьиличтение.
Преобразование адреса в системеMULTICS
Так как такой алгоритм будет работать достаточно медленно. Аппаратура системы MULTICS содержит высокоскоростной буфер быстрого преобразования адреса (TLB)размером в 16 слов. Адреса 16 наиболее часто использующихся страниц хранятся в буфере.
Каждая программа обеспечивается до 16К сегментов, каждый из которых может быть до 1 млдр 36-разрядных слов длиной.
Основа виртуальной памяти системы Pentiumсостоит из двух таблиц:
· Локальная таблица дескрипторов LDT (LocalDescriptorTable) - есть у каждой программы, и описывает сегменты программы.
· Глобальная таблица дескрипторов GDT (GlobalDescriptorTable) - одна для всех программ, и описывает системные сегменты (включая саму ОС).
Каждый селектор (указывает на дескриптор) представляет собой 16-разрядный номер.
Селектор в системе Pentium
13 битов определяют номер записи в таблице дескрипторов, поэтому эти таблицы ограничены, каждая содержит 8К (2^13) сегментных дескрипторов.
1 бит указывает тип используемой таблицы дескрипторов LDT или GDT.
Уровнипривилегированности в системеPentium
Уровнипривилегированности запрещают выполняемому коду обратиться к более низкому уровню.
С учетом максимального размера сегмента - 4 Гбайта - каждая задача, при чисто сегментнойорганизациивиртуальнойпамяти,работает в виртуальномадресномпространстве в 64 Тбайта (4 Гбайта * 16К, где 16К=8К*2 т.к. LDT и GDT).
Дескриптор программного (не данных) сегмента в системе Pentium (всего 8 байт (64 бита)).
База (Base) - базовый адрес сегмента (32-бита), разделен на три части из-за совместимости с i286, в котором это поле имеет только 24 бита.
Размер (Limit) - размер сегмента (20 бит), разнесен на две части.
Если размер сегмента указан в страницах, он может достигать 2^32 байтов (2^20 * 4Кбайт (2^12) (размер страницы в Pentium)).
Алгоритм получение физического адреса:
1. Селектор загружается в регистр (для сегмента команд в CS, для сегмента данных в DS).
2. Определяется глобальный или локальный сегмент (LDT или GDT).
3. Дескриптор извлекается из LDT или GDT, и сохраняется в микропрограммных регистрах.
4. Если дескриптор в памяти и смещение не выходит за пределы сегмента, программа может продолжить работу, если нет, происходит прерывание.
5. СистемаPentium прибавляет базовый адрес к смещению, и получает линейный адрес, -если страничная организация памяти не используется, то он является физическим адресом (адрес получен), - если страничная организация памяти используется, то он является виртуальным адресом.
6. В случае, если используется страничная организация памяти, линейный адрес переводится в физический с помощью таблицы страниц.
Преобразованиепары (селектора, смещение) в физический адрес
При 32-разрядном (2^32=4Гбайт) адресе и 4Кбатной странице, сегмент можетсодержать 1 млн страниц (4Гбайт/4Кбайта). Поэтомуиспользуетсядвухуровневоеотображение (созданатаблица (страничный каталог) содержащая список из 1024 таблицстраниц), благодарячемуможноснизитьколичествозаписей в таблице страниц до 1024.
В этомслучае сегмент в 4 Мбайта (1024 записи по 4 Кбайтастраницы), будетиметьстраничный каталог только с однойзаписью (и 1024 в таблице страниц), вместо 1 млн в одной таблице.
Отображениелинейного адреса на физический адрес
В системеPentiumтакжеесть буфер быстрогопреобразования адреса (TLB), в которомхранятсянаиболее часто используемыекомбинации Каталог-Страница на физический адрес страничного блока. Толькоесликомбинация в TLBотсутствует, выполняетсяэто алгоритм.