Метод представляет собой комбинацию страничного и сегментного механизмов управления памятью и направлен на реализацию достоинств обоих подходов. Преимущества страничного распределения:
- постоянный размер страницы
- отсутствие необходимости хранения целого сегмента в памяти, если используется только его часть(страничное распределение);
Преимущества сегментного распределения:
- облегчение программирования,
- модульность,
- возможность защиты совместного доступа (сегментное распределение).
С каждым процессом связана одна таблица сегментов и несколько (по одной на сегмент) таблиц страниц. Так же как и при сегментной организации памяти, логическое адресное пространство процесса разделено на сегменты. Это позволяет определять разные права доступа к разным частям кодов и данных программы. Перемещение данных между памятью и диском осуществляется страницами. Для этого каждый виртуальный сегмент и физическая память делятся на страницы равного размера, что позволяет более эффективно использовать память, сократив до минимума фрагментацию.
В большинстве современных реализаций сегментно-страничной организации памяти все виртуальные сегменты образуют одно (рис. б) непрерывное линейное виртуальное адресное пространство, в отличие от набора виртуальных диапазонов адресов при сегментной организации памяти (рис. а).
Координаты байта в логическом адресном пространстве можно задать двумя способами. Во-первых, линейным логическим адресом, который равен сдвигу данного байта относительно границы общего линейного логического пространства.
Во-вторых, парой чисел, одно из которых является номером сегмента, а другое – смещением относительно начала сегмента. При этом в отличие от сегментной модели, для однозначного задания логического адреса вторым способом необходимо указать также начальный логический адрес сегмента с данным номером. Системы виртуальной памяти ОС с сегментно-страничной организацией используют второй способ, так как он позволяет непосредственно определить принадлежность адреса некоторому сегменту и проверить права доступа процесса к нему.
Рассмотрим одну из возможных реализаций сегментно-страничного управления памятью.
В таблице сегментов каждого процесса, в которой содержатся дескрипторы всех сегментов процесса. Описание сегмента включает назначенные ему права доступа и другие характеристики, подобные тем, которые содержаться в дескрипторах сегментов при сегментной организации памяти. Однако имеется и принципиальное отличие. В поле базового адреса указывается не начальный физический адрес сегмента, отведенный ему в результате загрузки в оперативную память, а начальный линейный логический адрес сегмента в пространстве логических адресов (на рис. Базовые физические адреса обозначены S1, S2, S3, а базовые виртуальные адреса – f1,f2,f3).
Наличие базового логического адреса сегмента в дескрипторе позволяет однозначно преобразовать адрес, заданный в виде пары (номер сегмента, смещение в сегменте), в линейный логический адрес байта, который затем преобразуется в физический адрес страничным механизмом.
Деление общего линейного виртуального адресного пространства процесса и физической памяти на страницы осуществляется так же, как это делается при страничной организации памяти. Размер страниц выбирается равным степени двойки, что упрощает механизм преобразования виртуальных адресов в физические. Виртуальные страницы нумеруются в пределах логического адресного пространства каждого процесса, а физические страницы – в пределах оперативной памяти. При создании процесса в память загружается только часть страниц, остальные загружаются по мере необходимости. Время от времени система выгружает ненужные страницы, освобождая память для новых страниц. ОС ведет для каждого процесса таблицу страниц, в котрой указывается соответствие виртуальных страниц физическим.
Базовые адреса сегментов и страниц процесса являются частью его
контекста. При активизации процесса эти адреса загружаются в специальные регистры процессора и используются механизмлм преобразования адресов.
Преобразование виртуального адреса в физический происходит в два этапа.
Схема преобразования логического адреса в линейный логический адрес при сегментно-страничной организации памяти
На первом этапе работает механизм сегментации. Исходный виртуальный адрес, заданный в виде пары (Nвсг, Oвсг), где Nвсг – номер сегмента, Oвсг – смещение, преобразуется в линейный виртуальный адрес. Для этого:
1) на основании базового адреса таблицы сегментов (Aнтсг) и номера сегмента (Nвсг) вычисляется адрес дескриптора сегмента (Aдсг). Анализируются поля дескриптора и проверяется возможность выполнения заданной операции. Проверяется, находится ли таблица страниц сегмента в памяти. Ели да, то определяется ее расположение. Если нет, вызывается сегнментное прерывание;
2) по адресу дескриптора сегмента из таблицы сегментов определяется базовый логический адрес данного сегмента Aбв;
3) линейный логический адрес вычисляется как сумма базового логического адреса, извлеченного из дескриптора, и смещения в сегменте, заданного в исходном логическом адресе: Aлв= Aбв + Oвсг.
В результате преобразования линейный логический адрес представляется в том виде, в котором он используется при страничной организации памяти, а именно в виде пары (Nвс, Oвс), где Nвс равно старшим разрядам, Oвс - младшим разрядам.
На втором этапе работает страничный механизм. Полученный линейный логический адрес преобразуется в искомый физический адрес. Это преобразование адреса происходит так же, как при страничной организации. В начале изучается запись в таблице страниц для запрашиваемой виртуальной страницы. Если страница не находится в памяти, происходит страничное прерывание. Если она в памяти, из записи таблицы страниц извлекается адрес начала страницы в оперативной памяти. Т.е. старшие разряды ЛАП, содержащие номер виртуальной страницы, заменяются номером физической страницы(NБФС), взятым из таблицы страниц, а младшие разряды логического адреса, содержащие смещение, остаются без изменения.
Большинство ОС используют сегментно-страничную виртуальную память. Для обеспечения нужной производительности менеджер памяти ОС старается поддерживать в оперативной памяти актуальную информацию, пытаясь угадать, к каким логическим адресам последует обращение в недалеком будущем.
На рисунке показан график зависимости коэффициента загрузки процессора в зависимости от числа одновременно выполняемых процессов и доли времени, проводимого этими процессами в состоянии ожидания ввода-вывода.
Зависимость загрузки процессора от числа задач и интенсивности ввода-вывода
Из рисунка видно, что для загрузки процессора на 90% достаточно всего трех счетных задач. Однако для того, чтобы обеспечить такую же загрузку интерактивными задачами, выполняющими интенсивный ввод-вывод, потребуются десятки таких задач. Необходимым условием для выполнения задачи является загрузка ее в оперативную память, объем которой ограничен. В этих условиях был предложен метод организации вычислительного процесса, называемый свопингом. В соответствии с этим методом некоторые процессы (обычно находящиеся в состоянии ожидания) временно выгружаются на диск. Планировщик операционной системы не исключает их из своего рассмотрения, и при наступлении условий активизации некоторого процесса, находящегося в области свопинга на диске, этот процесс перемещается в оперативную память. Если свободного места в оперативной памяти не хватает, то выгружается другой процесс.