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

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

Два основных вида организации виртуальной памяти - сегментная и страничная организация.

При сегментной организации вся виртуальная память, используемая программой, разбивается на части, называемые сегментами. Это разбиение выполняется либо самим программистом (если он программирует на языке ассемблера), либо компилятором используемого языка программирования. Размеры сегментов могут быть различными, но в пределах максимального размера, используемого в данной архитектуре. Разбиение обычно производится на логически осмысленные части, такие, как сегмент данных, сегмент кода, сегмент стека и т.п.

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

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

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

Также существует термин swap также означающий виртуальную память (точнее способ её представления), или же означает подкачку данных с диска. Применение механизма виртуальной памяти позволяет:*упростить адресацию памяти клиентским программным обеспечением;*рационально управлять оперативной памятью компьютера (хранить в ней только активно используемые области памяти);

*изолировать процессы друг от друга (процесс полагает, что монопольно владеет всей памятью);

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

14.Управление оперативной памятью. Понятие виртуальной памяти. Поддержка ВП со стороны процессора (на примере процессора Intel x86). Перевод виртуального адреса в адрес реальной памяти.вп в пред.

Процессор Intel x86 другое название для архитектуры этого типа - IA (Intel Architecture) или же IA-32.Адрес 32 бита разделен на участки:10 (в page directory) + 10 ( в page table entry (PTE)- элемент таблицы страниц) + 12. Первые 10+10 - номер вирт страницы. 12 - смещение внутри страницы (offset).При использовании линейной адресации (доступна только в защищенном режиме) 32-битный адрес делится на три части:

Номер записи в каталоге страниц (номер таблицы страниц- page directory) - биты 31-22 (10). Одна запись из каталога страниц определяет 4 МБайт адресного пространства. Номер записи в таблице страниц (номер страницы в таблице страниц - page table) - биты 21-12 (10). Одна запись из таблицы страниц определяет 4 КБайт адресного пространства.

Смещение в странице - биты 11-0 (12).

Обе эти структуры представляют собой таблицы элементов каталога и таблицы страниц (англ. Page Directory Entry, PDE и англ. Page Table Entry, PTE) страницы памяти по 4 КБайт.

Структура элемента таблицы страниц - PTE:

- номер реальной страницы

- бит доступности

- бит изменений (данные об изменении страницы)

- права пользователя (ReadOnly, ReadWrite)

- файловый дескриптор(маленькое целое число - если страница не в памяти, то где ее искать)

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

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