И страничная организация, и сегментация имеют свои достоинства.
Страничная организация, прозрачная для программиста, устраняет внешнюю фрагментацию и таким образом обеспечивает эффективное использование физической оперативной памяти. Кроме того, поскольку перемещаемые в физическую оперативную память и из нее блоки имеют фиксированный, одинаковый размер, облегчается создание эффективных алгоритмов управления памятью.
Сегментация, являясь видимой для программиста, имеет перечисленные в предыдущем разделе достоинства, включающие модульность, возможность обработки растущих структур данных, а также поддержку совместного использования и защиты памяти. Некоторые компьютеры, будучи оснащены соответствующим аппаратным обеспечением и операционной системой, используют достоинства обоих методов.
В такой комбинированной системе виртуальное адресное пространство пользователя разбивается на ряд сегментов по усмотрению программиста. Каждый сегмент в свою очередь разбивается на ряд страниц фиксированного размера. Если размер сегмента меньше размера страницы, он занимает страницу целиком. С точки зрения программиста, виртуальный адрес в этом случае состоит из номера сегмента и смещения в нем. С позиции операционной системы смещение в сегменте рассматривается как номер страницы в сегменте и смещение в ней.
Каждый сегмент представляет собой последовательность адресов от нуля до определённого максимального значения. Отличие сегмента от страницы состоит в том, что длина сегмента может изменяться в процессе работы. Сегменты, как и любая структура виртуальной памяти, могут размещаться как в физической оперативной памяти, так и на диске.
С каждым процессом связана одна таблица сегментов и несколько (по одной на сегмент) таблиц страниц. При работе определенного процесса в регистре процессора хранится начальный адрес соответствующей таблицы сегментов. Получив виртуальный адрес, процессор использует его часть, представляющую номер сегмента, в качестве индекса в таблице сегментов для поиска таблицы страниц данного сегмента. После этого часть адреса, представляющая собой номер страницы, используется для поиска соответствующего кадра физической оперативной памяти в таблице страниц; затем часть адреса, представляющая смещение, используется для получения искомого физического адреса путем добавления к начальному адресу кадра.
Запись таблицы сегментов содержит значение длины сегмента, а также поле с начальным адресом сегмента, которое теперь указывает на таблицу страниц. Запись таблицы страниц — по сути та же, что и использованная в компьютере с "чистой" страничной организацией. При наличии страницы в физической оперативной памяти (на что, указывает бит присутствия) ее номер отображается в номер соответствующего кадра; бит модификации указывает, требуется ли перезапись страницы на диск при ее выгрузке из физической оперативной памяти. Как и ранее, могут использоваться и другие управляющие разряды
Контрольные вопросы
1. Почему возникла необходимость введения абстракции виртуальная память?
2. Чем удобна абстракции виртуальная памяти для программиста?
3. Чем ограничивается размер виртуальной памяти?
4. Что такое виртуальный адрес?
5. Что такое физический адрес?
6. Что такое страничная организация памяти?
7. Какими соображениями руководствуются при выборе размера страницы?
8. Как преобразуется виртуальный адрес в физический адрес при страничной организации памяти?
9. Что такое сегментная организация памяти?
10. Какие преимущества дает использование сегментации по сравнению со страничной организацией памяти?
11. Как преобразуется виртуальный адрес в физический адрес при сегментной организации памяти?
12. Назовите основные особенности сегментно-страничной организации памяти.
13. Как преобразуется виртуальный адрес в физический адрес при сегментно-страничной организации памяти?
14. Что такое фрагментация оперативной памяти?