Система управления памятью. Организация виртуальной памяти

Система управления памятью должна обеспечить многопрограммный режим работы, используя аппаратные средства распределения оперативной памяти.

Существует два способа распределения памяти: статический и динамический.

При работе в многопрограммном режиме и статическом распределении оперативной памяти выделяется определенная область фиксированной памяти независимо от требований задачи.

При статическом распределении памяти используется статическая адресация, т.е. используется базовый адрес и смещение. При каждой загрузке программы ей назначается базовый адрес в области оперативной памяти.

При динамическом распределении оперативной памяти - выделяется необходимый объем памяти по запросу с учетом потребности задачи. Параллельность процессов обмена и обработки данных приводит к тому, что к оперативной памяти может обращаться несколько устройств (или программ) одновременно, потому требуется организовать очередь обслуживания и использовать концепцию виртуальной памяти. Один из компонентов ядра операционной системы - диспетчер памяти - организует трансляцию виртуальных адресов, используемых программами и другими компонентами ядра, в реальные адреса физической памяти.


Организация виртуальной памяти


Виртуальная память (Virtual Memory) представляет собой программно-аппаратное средство расширения пространства памяти, предоставляемой программе в качестве оперативной. Эта память физически реализуется в оперативной и дисковой памяти под управлением соответствующей операционной системы. Требуется так организовать работу процессора с дисковой памяти, чтобы возникала иллюзия работы только с оперативной памятью.

Виртуальное пространство памяти разбито на страницы фиксированного размера, а в физической оперативной памяти в каждый момент времени присутствует только часть из них. Остальные страницы хранятся на диске, откуда операционная система может "подкачать" их в физическую память, предварительно выгрузив на диск часть неиспользуемых в данный момент модифицированных страниц. Обращение процессора к ячейке виртуальной памяти, присутствующей в физической памяти, происходит обычным способом. Если же затребованная область в данный момент не отображена в физической памяти, процессор вырабатывает исключение (внутреннее прерывание), по которому операционная система программно организует замещение страниц, называемое свопингом (Swapping). Виртуальную память поддерживают процессоры, работающие в защищенном режиме, начиная с 80286, но реально ее широко стали использовать только в операционных системах и оболочках для 32-разрядных процессоров (80386 и далее). Максимальный объем виртуальной памяти определяется размером файла подкачки (Swap File), выделяемом на жестком диске для нужд виртуальной памяти.

Общепринятая в настоящее время концепция виртуальной памяти появилась в те далекие времена, когда вычислительные системы, научившись выполнять одну программу стали переходить на новый режим работы - работу в многозадачном (мультипрограммном) режиме. Концепция виртуальной памяти позволила решить целый ряд актуальных вопросов организации вычислений.
Встал вопрос о том, как разделить между разными задачами небольшой объем оперативной памяти, чтобы каждая задача выполнялась также, как она выполнялась бы в однопрограммном режиме и как управлять при этом распределением памяти.
К этому времени у программистов уже накопился опыт выполнения задач, программный код которых не помещался в слишком маленькую оперативную память.
Программистам пришлось делить такие программы на части и затем выполнять части программы независимо, организуя оверлейные структуры, которые загружались в основную память и выгружались из нее под управлением программы пользователя.
Система организации виртуальной памяти освободила программистов от этой работы. Она автоматически управляет обменом между двумя уровнями иерархии памяти: основной памятью и внешней (дисковой) памятью.
В многопрограммном режиме работы компьютер выполняет множество задач, каждой из которых отводится свое адресное пространство в оперативной памяти. Поэтому необходим механизм разделения небольшой физической памяти между различными задачами. Виртуальная память делит физическую память на блоки и распределяет их между различными задачами. При этом обеспечивается иллюзия того, что каждая задача и в самом деле исполняется на машине с огромным количеством реальной оперативной памяти.
Системы виртуальной памяти можно разделить на два класса: системы с фиксированным размером блоков, называемых страницами, и системы с переменным размером блоков, называемых сегментами.
Очевидно, что для реализации возможности автоматического выделения памяти каждой задаче в процессе ее выполнения (динамически), необходимо обеспечить эту возможность аппаратно. Для того, чтобы программа могла действительно воспользоваться виртуальной памятью (иллюзией очень большого количества реальной оперативной памяти) требуется еще и поддержка программного обеспечения. Задача управления виртуальной памятью возлагается на операционную систему. Различные операционные системы по разному решают вопросы управления памятью. Попробуем получить общее представление о работе виртуальной памяти.
Механизмы управления памятью решают две главные задачи:

  • Трансляцию виртуального адресного пространства процесса на физическую память. Это позволяет ссылаться на конкретные адреса физической памяти потокам процесса, работающим в виртуальном адресном пространстве.
  • Подкачку части содержимого памяти с диска, когда потоки пытаются задействовать больший объем физической памяти, чем тот, который имеется в наличии, и выгрузку страниц обратно по мере необходимости.

    Виртуальная память может использовать страничную и сегментную адресации. При использовании страничной адресации в специальные сегментные регистры процессора загружаются селекторы, базовые адреса которых равны нулю, а размер сегмента составляет 4 Гбайта. И хотя для микропроцессора механизм сегментной адресации продолжает работать, основным механизмом формирования адреса становится страничная адресация. Такая модель памяти и называется плоской (FLAT). Логическая адресация в такой модели определяется только смещением. Для программиста область памяти, адресуемая смещением, находится в полном распоряжении. Это и есть логический адрес, который преобразуется операционной системой в физический.

Страничный механизм является составной частью системы виртуальной памяти.
Страничное преобразование позволяет сохранить линейность адресов для прикладных программ, несмотря на то, что их работающие страницы располагаются в оперативной памяти в произвольном порядке. Программы работают со своим адресным пространством, так словно у каждой из них есть своя собственная линейно адресуемая оперативная память.
Применительно к виртуальной памяти различают три адресных пространства: логическое, линейное и физическое.

Логический адрес формируется при обращении к виртуальному адресному пространству.
Блок сегментации транслирует логический адрес в линейный.
Физический адрес образуется после преобразования линейного адреса блоком страничной переадресации.
И так, выполняемая программа загружается в оперативную память не целиком, а отдельными страницами (рис1.). Страница с которой работает процессор называется активной.

Рис.1. Отражение страниц дискового пространства
на пространство оперативной памяти.

В случае динамического распределения памяти (по запросу программы), адрес содержит номер виртуальной страницы и номер слова в странице. Для защиты памяти от записи и чтения другими процессами необходима соответствующая схема трансляции адреса, которая разрешает доступ к данной области памяти только определенной задаче.
Соответствие между физическим положением данных в памяти и адресом существует только для основной (оперативной) памяти, виртуальная память использует всю иерархическую структуру памяти как непрерывно адресуемую.

Для переадресации используется глобальная (GDT) и локальная (LDТ) таблицы переадресации.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: