Странично-сегментное распределение
Как видно из названия, данный метод представляет собой комбинацию страничного и сегментного распределения памяти и, вследствие этого, сочетает в себе достоинства обоих подходов.
Рис. 10. Схема преобразования виртуального адреса в физический для сегментно-страничной организации памяти
Виртуальное пространство процесса делится на сегменты, а каждый сегмент в свою очередь делится на виртуальные страницы, которые нумеруются в пределах сегмента. Оперативная память делится на физические страницы. Загрузка процесса выполняется операционной системой постранично, при этом часть страниц размещается в оперативной памяти, а часть на диске. Для каждого сегмента создается своя таблица страниц, структура которой полностью совпадает со структурой таблицы страниц, используемой при страничном распределении. Для каждого процесса создается таблица сегментов, в которой указываются адреса таблиц страниц для всех сегментов данного процесса. Адрес таблицы сегментов загружается в специальный регистр процессора, когда активизируется соответствующий процесс. На Рис.10 показана схема преобразования виртуального адреса в физический для данного метода.
Свопинг
Разновидностью виртуальной памяти является свопинг.
При свопинге, в отличие от рассмотренных ранее методов реализации виртуальной памяти, процесс перемещается между памятью и диском целиком, то есть в течение некоторого времени процесс может полностью отсутствовать в оперативной памяти.
Введение виртуальной памяти позволяет решать другую, не менее важную задачу – обеспечение контроля доступа к отдельным сегментам памяти и, в частности, защиту пользовательских программ друг от друга и защиту ОС от пользовательских программ. Каждый процесс работает со своими виртуальными адресами, трансляцию которых в физические выполняет аппаратура компьютера. Таким образом, пользовательский процесс лишен возможности напрямую обратиться к страницам основной памяти, занятым информацией, относящейся к другим процессам.
Контрольные вопросы
-
Что такое виртуальная память?
-
Для чего нужно преобразование памяти? Какие существуют этапы такого преобразования и какими системами они выполняются?
-
От чего зависит размер виртуальной памяти? Может ли он отличаться от размера памяти физической? Как именно?
-
Каковы достоинства и недостатки простого непрерывного распределения памяти?
-
Может ли при мультипрограммном режиме использоваться аналог простого непрерывного распределения для каждой из помещённых в память программ?
-
Для чего могут использоваться оверлейные структуры? В каких ОС они применяются – в однопрограммных или мультипрограммных?
-
Какое из преобразований более эффективно – страничное или сегментное?
-
Какое из преобразований вызывает большую фрагментацию памяти и почему?
-
Каковы недостатки сегментного преобразования памяти?
-
Какие алгоритмы существуют для размещения задачи в памяти? Какой из них эффективнее – размещение задачи в самом подходящем участке или в самом неподходящем и почему?
-
Для чего может потребоваться выталкивание страниц из памяти и куда они при этом попадают?
-
Какой из алгоритмов вталкивания работает эффективнее – вталкивание по запросу или с упреждением – и почему?
-
В каком случае возникает явление пробуксовки и каковы методы борьбы с ним?
-
Как организована защита страниц в мультипрограммных системах?