- Принцип адресации способы организации виртуальной памяти
- Адреса памяти: физические, виртуальные, логические, линейные, эффективные, гостевые
- Физический адрес
- Эффективный адрес
- Логический адрес
- Линейный адрес
- Страничное преобразование
- Гостевой физический
- Полная картина
- Заключение
- Национальная библиотека им. Н. Э. Баумана Bauman National Library
- Персональные инструменты
- Виртуальная память (Операционные Системы)
- Содержание
- Преимущества виртуальной памяти
- Свойства виртуальной памяти
- Страничная организация памяти
- Преимущества виртуальной памяти со страничной организацией
- Недостатки виртуальной памяти со страничной организацией
- Сегментно-страничная организация виртуальной памяти
- Таблицы страниц
- Менеджер виртуальной памяти
- Закрепленные страницы
Принцип адресации способы организации виртуальной памяти
Виртуальная память- схема адресации памяти компьютера, при которой память представляется программному обеспечению непрерывной и однородной, в то время как в реальности для фактического хранения данных используются отдельные (разрывные) области различных видов памяти, включая кратковременную (оперативную) и долговременную (жёсткие диски, твёрдотельные накопители).
Страничный способ организации виртуальной памяти:
Способ разрывного размещения задач в памяти при котором все фрагменты задачи одинакового размера кратного степени двойки называется страничным, а фрагменты страницами. В этом случае память разбивается на физические страницы (кадры, фреймы). А программа разбивается на виртуальные страницы. Часть виртуальных страниц размещается в ОЗУ, а часть во внешней памяти. Место на жестком диске, где размещаются виртуальные страницы называют файлом подкачки или страничным файлом (SWAP-файл).
Физический адрес ячейки памяти определяется парой (Pp, i), а виртуальный (Pv, i). Pv – номер виртуальной страницы, Pp – номер физической страницы, а I – номер ячейки (индекс) внутри страницы. Для отображения виртуального адресного пространства на физическую память для каждой задачи необходимо иметь таблицы страниц для трансляции адресных пространств. Для описания каждой страницы диспетчер памяти операционной системы заводит соответствующий дескриптор. По номеру виртуальной страницы в таблице дескрипторов текущей задачи находится соответствующий элемент (дескриптор). Если бит присутствия равен единице, то данная страница находится в ОЗУ и в дескрипторе находится номер физической страницы, отведенной под данную виртуальную страницу.
Основным достоинством страничной организации является минимально возможная фрагментация, поскольку на каждую задачу может приходится по одной незаполненной странице.
1) Накладные расходы, т.е. таблицы страниц нужно размещать в памяти и их нужно обрабатывать.
2) Программы разбиваются на страницы случайно без учета логических взаимосвязей имеющихся в коде программы. Поэтому межстраничные переходы осуществляются чаще нежели межсегментные и трудно организовать разделение программных модулей между выполняющимися программами.
Сигментно- страничная организация виртуальной памяти:
Виртуальная память каждой программы делится на части, называемые сегментами, с независимой адресацией байтов внутри каждой части. При этом к виртуальному адресу добавляются дополнительные разряды левее номера страницы. Эти разряды определят номер сегмента.
Возникает определенная иерархия в организации программ, состоящая из четырех ступеней: программа-сегмент-страница-байт. Этой иерархии программ соответствует иерархия таблиц, служащих для перевода виртуальных адресов в физические. Программная таблица для каждой программы, загруженной в систему, указывает начальный адрес соответствующей сегментной таблицы. Сегментная таблица перечисляет сегменты данной программы с указанием начального адреса страничной таблицы, относящейся к данному сегменту. Страничная таблица определяет расположение каждой из страниц сегмента в памяти. Страницы сегмента могут располагаться не подряд – часть страниц данного сегмента может находиться в ОП, остальные во внешней памяти.
Виртуальная память в МП 386+:
При организации виртуальной памяти используется три вида адресов:
· Логический адрес ЛА ∈ ВАП.
· Физический адрес ФА ∈ ФАП.
· Линейный адрес – представляет собой объединение базового адреса сегмента и смещения в пределах сегмента.
Любое описание сегмента состоит из двух частей: программно- доступной, называемой селектором сегмента и размещаемой в одном из сегментных регистров, и скрытой, называемой дескриптором сегмента и находящейся в одной из специальных структур в ОП, называемых таблицами дескрипторов. Считается, что дескриптор после выборки размещается в скрытой части регистра сегментов, находящейся в памяти.
Основные поля сегмента размещены в различных частях дескриптора: 32-битная база сегмента размещена в трех частях и определяет его место внутри 4-Гбайтного линейного адресного пространства, 20-битная граница сегмента размещена в двух частях и определяет его длину, остальные биты дескриптора образуют поле атрибутов. Длина сегмента, в зависимости от бита дробности (G), задается либо в байтах, либо в страницах:
· 1, страница (С = 4Кб) 220 * 215 = 232 (4Гб).
Бит D задает тип данных, размещенных в сегменте:
· D = 0 – 16-битные данные,
· D = 1 – 32-битные данные.
AVL – бит, предоставляемый в распоряжение пользователя (available). Бит P – бит присутствия: 0 – на диске, 1 – в оперативной памяти Биты DPL – уровень привилегий дескриптора (Descriptor Privilege Level), обеспечивающий защиту доступа. При доступе к сегменту запрашиваемый уровень привилегий RPL или текущий уровень привилегий CPL (соответствует уровню привилегий дескриптора кода выполняемой сейчас программы) должны быть больше DPL (в логическом смысле; для сравнения их числовых значений отношение должно быть меньше). Бит S – бит режима сегмента: пользовательский или системный (User / Supervisor). Биты типа говорят, является сегмент программой или данными и определяют режим доступа. Бит А – бит обращения к сегменту, устанавливается при обращении к сегменту и через некоторое время сбрасывается операционной системой (обеспечивает дисциплины замещения сегментов).
Источник
Адреса памяти: физические, виртуальные, логические, линейные, эффективные, гостевые
Мне периодически приходится объяснять разным людям некоторые аспекты архитектуры Intel® IA-32, в том числе замысловатость системы адресации данных в памяти, которая, похоже, реализовала почти все когда-то придуманные идеи. Я решил оформить развёрнутый ответ в этой статье. Надеюсь, что он будет полезен ещё кому-нибудь.
При исполнении машинных инструкций считываются и записываются данные, которые могут находиться в нескольких местах: в регистрах самого процессора, в виде констант, закодированных в инструкции, а также в оперативной памяти. Если данные находятся в памяти, то их положение определяется некоторым числом — адресом. По ряду причин, которые, я надеюсь, станут понятными в процессе чтения этой статьи, исходный адрес, закодированный в инструкции, проходит через несколько преобразований.
На рисунке — сегментация и страничное преобразование адреса, как они выглядели 27 лет назад. Иллюстрация из Intel 80386 Programmers’s Reference Manual 1986 года. Забавно, что в описании рисунка есть аж две опечатки: «80306 Addressing Machanism». В наше время адрес подвергается более сложным преобразованиям, а иллюстрации больше не делают в псевдографике.
Начнём немного с конца — с цели всей цепочки преобразований.
Физический адрес
Эффективный адрес
Эффективный адрес — это начало пути. Он задаётся в аргументах индивидуальной машинной инструкции, и вычисляется из значений регистров, смещений и масштабирующих коэффициентов, заданных в ней явно или неявно.
Например, для инструкции (ассемблер в AT&T-нотации)
addl %eax, 0x11(%ebp, %edx, 8)
эффективный адрес операнда-назначения будет вычислен по формуле:
eff_addr = EBP + EDX * 8 + 0x11
Логический адрес
Без знания номера и параметров сегмента, в котором указан эффективный адрес, последний бесполезен. Сам сегмент выбирается ещё одним числом, именуемым селектором. Пара чисел, записываемая как selector:offset , получила имя логический адрес. Так как активные селекторы хранятся в группе специальных регистров, чаще всего вместо первого числа в паре записывается имя регистра, например, ds:0x11223344.
Здесь обычно у тех, кто столкнулся с этими понятиями впервые, голова начинает идти кругом. Несколько упростить (или усложнить) ситуацию помогает тот факт, что почти всегда выбор селектора (и связанного с ним сегмента) делается исходя из «смысла» доступа. По умолчанию, если в кодировке машинной инструкции не сказано иного, для получения адресов кода используются логические адреса с селектором CS, для данных — с DS, для стека — с SS.
Линейный адрес
Эффективный адрес — это смещение от начала сегмента — его базы. Если сложить базу и эффективный адрес, то получим число, называемое линейным адресом:
lin_addr = segment.base + eff_addr
Преобразование логический → линейный не всегда может быть успешным, так как при его исполнении проверяется несколько условий на свойства сегмента, записанных в полях его дескриптора. Например, проверяется выход за границы сегмента и права доступа.
Сегментация была модной на некотором этапе развития вычислительной техники. В настоящее она почти всюду была заменена другими механизмами, и используется только для специфических задач. Так, в режиме IA-32e (64-битном) только два сегмента могут иметь ненулевую базу. Для остальных четырёх в этом режиме всегда линейный адрес == эффективный.
Что такое виртуальный адрес?
В литературе и в документации других архитектур встречается ещё один термин — виртуальный адрес. Он не используется в документации Intel на IA-32, однако встречается, например, в описании Intel® Itanium, в котором сегментация не используется. Можно смело считать, что для IA-32 виртуальный == линейный.
В советской литературе по вычислительной технике этот вид адресов также именовался математическим.
Страничное преобразование
Однако общая идея всегда одна и та же: линейный адрес разбивается на несколько частей, каждая из которых служит индексом в одной из системных таблиц, хранящихся в памяти. Записи в таблицах — это адреса начала таблицы следующего уровня или, для последнего уровня — искомая информация о физическом адресе страницы в памяти и её свойствах. Самые младшие биты не преобразуются, а используются для адресации внутри найденной страницы. Например, для режима PAE с размером страниц 4 кбайт преобразование выглядит так:
В разных режимах процессора различается число и ёмкость этих таблиц. Преобразование может завершиться неудачей, если очередная таблица не содержит валидных данных, или права доступа, хранящиеся в последней из них, запрещают доступ к странице; например, при записи в регионы, помеченные как «только для чтения», или попытке чтения памяти ядра из непривилегированного процесса.
Гостевой физический
До введения возможностей аппаратной виртуализации в процессорах Intel страничное преобразование было последним в цепочке. Когда же на одной системе работают несколько виртуальных машин, то физические адреса, получаемые в каждой из них, приходится транслировать ещё один раз. Это можно делать программным образом, или же аппаратно, если процессор поддерживает функциональность EPT (англ. Extended Page Table). Адрес, раньше называвшийся физическим, был переименован в гостевой физический для того, чтобы отличать его от настоящего физического. Они связаны с помощью EPT-преобразования. Алгоритм последнего схож с ранее описанным страничным преобразованием: набор связанных таблиц с общим корнем, последний уровень которых определяет, существует ли физическая страница для указанной гостевой физической.
Полная картина
Я попытался собрать все преобразования адреса в одну иллюстрацию. В ней преобразования обозначены стрелками, типы адресов обведены в рамки.
Как уже было сказано выше, каждое из преобразований может вернуть ошибку для адресов, не имеющих представления в следующем по цепочке виде. Устранение подобных проблем — это задача операционных систем и мониторов виртуальных машин, реализующих абстракцию виртуальной памяти.
Заключение
- Virtual: Translated by dynamic address translation (DAT) to real addresses
- Real: Translated to absolute addresses using the prefix register
- Absolute: After applying the prefix register
- Logical: The address seen by the program (this can either be a virtual or a real address)
- Physical: translated to absolute addresses by the Config Array
Источник
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Виртуальная память (Операционные Системы)
Виртуальная память — метод управления памятью, которая реализуется с использованием аппаратного и программного обеспечения компьютера. Она отображает используемые программами виртуальные адреса в физические адреса в памяти компьютера. Основная память представляется в виде непрерывного адресного пространства или набора смежных непрерывных сегментов. Операционная система осуществляет управление виртуальными адресными пространствами и соотнесением оперативной памяти с виртуальной. Программное обеспечение в операционной системе может расширить эти возможности, чтобы обеспечить виртуальное адресное пространство, которое может превысить объем оперативной памяти и таким образом иметь больше памяти, чем есть в компьютере. Виртуальная память позволяет модифицировать ресурсы памяти, сделать объём оперативной памяти намного больше, для того чтобы пользователь, поместив туда как можно больше программ, реально сэкономил время и повысил эффективность своего труда. “Открытие” виртуальной памяти внесло огромную контрибуцию в развитие современных технологий, облегчило работу как профессионального программиста, так и обычного пользователя, обеспечивая процесс более эффективного решения задач на ЭВМ [1] .
Содержание
Преимущества виртуальной памяти
К основным преимуществам виртуальной памяти относят:
- избавление программиста от необходимости управлять общим пространством памяти,
- повышение безопасность использования программ за счет выделения памяти,
- возможность иметь в распоряжении больше памяти, чем это может быть физически доступно на компьютере.
Свойства виртуальной памяти
Виртуальная память делает программирование приложений проще:
- скрывая фрагментацию физической памяти;
- устраняя необходимость в программе для обработки наложений в явном виде;
- когда каждый процесс запускается в своем собственном выделенном адресном пространстве, нет необходимости переместить код программы или получить доступ к памяти с относительной адресацией.
Виртуализация памяти может рассматриваться как обобщение понятия виртуальной памяти.
Почти все реализации виртуальной памяти делят виртуальное адресное пространство на страницы, блоки смежных адресов виртуальной памяти.
При работе машины с виртуальной памятью, используются методы страничной и сегментной организации памяти.
Страничная организация памяти
При страничной организации все ресурсы памяти, как оперативной, так и внешней представляются для пользователя единым целым. Пользователь работает с общим адресным пространством и не задумывается какая память при этом используется: оперативная или внешняя, а эта общая память носит название виртуальной (моделируемой). Виртуальная память разбивается на страницы, которые содержат определённое фиксированное количество ячеек памяти. При этом одна страница математической памяти не может быть больше или меньше других, все страницы должны быть одинаковы по количеству ячеек. Типичные размеры страниц 256, 512, 1024, 2048 Байт и более (числа кратные 256).
Преимущества виртуальной памяти со страничной организацией
- Достаточно большой объём прямо адресуемой памяти. Объем памяти может исчисляться сотнями мегабайт (и даже гигабайтами). Размер виртуальной памяти целиком зависит от объёма накопителя на [жестком] магнитном диске. Созданный SWAP файл размещается на диске и эмулирует оперативную память. При этом пользователь не задумывается о том куда будет помещен “кусок” его программы с которой он только что отработал.
- Программы пользователя могут размещаться в любых свободных страницах [2] .
- Повышает уровень мультипрограммной работы. С организацией виртуальной памяти со страничной организацией пользователь получил реальную возможность загружать в память большее количество программ для того чтобы машина обрабатывала программы сразу (в действительности процессор устанавливает приоритет для каждой программы, находящейся в памяти, и далее в соответствии с приоритетом выделяет определённое количество времени на реализацию каждой программы или команды.
Недостатки виртуальной памяти со страничной организацией
- Основным недостатком виртуальной памяти является то количество времени, которое машина тратит на обращение к внешней памяти. Извлечь необходимую информацию из ячеек оперативной памяти не представляет особого труда и больших затрат времени. Совсем иначе обстоит дело с диском: для того чтобы найти необходимую информацию, нужно сначала “раскрутить” диск, потом найти необходимую дорожку, в дорожке найти сектор, кластер, далее считать побитовую информацию в ОП. Все это требует времени и, порой если при методе случайного удаления страниц*, процессору понадобятся сразу несколько страниц, хранящихся во внешней памяти, большого времени. К сожалению, этот недостаток принадлежит к виду “неисправимых”.
- Наличие сверхоперативной памяти (СОП).
Сегментно-страничная организация виртуальной памяти
Данный метод организации виртуальной памяти направлен на сочетание достоинств страничного и сегментного методов управления памятью. В такой комбинированной системе адресное пространство пользователя разбивается на ряд сегментов по усмотрению программиста. Каждый сегмент в свою очередь разбивается на страницы фиксированного размера, равные странице физической памяти. С точки зрения программиста, логический адрес в этом случае состоит из номера сегмента и смещения в нем. Каждый сегмент представляет собой последовательность адресов от нуля до определённого максимального значения. Отличие сегмента от страницы состоит в том, что длинна сегмента может изменяться в процессе работы. Сегменты, как и любая структура виртуальной памяти, могут размещаться как в оперативной памяти, так и во внешней памяти (магнитных носителях). Виртуальная память с сегментно-страничной организацией функционирует подобно виртуальной памяти со страничной организацией: если требующийся на данный момент сегмент отсутствует в оперативной памяти, то при надобности работы с ним, он предварительно перемещается в ОП. Сегментно-страничная организация памяти требует более сложной аппаратурно-программной организации.
Таблицы страниц
Таблицы страниц используются для перевода виртуальных адресов в физические адреса, используемые аппаратными средствами для обработки инструкций; такое аппаратное обеспечение, который обрабатывает этот конкретный перевод часто называют блоком управления памятью. Каждая запись в таблице страниц держит флажок, указывающий, находится ли соответствующая страница в оперативной памяти или нет. Если она находится в оперативной памяти, запись в таблице страниц будет содержать реальный адрес памяти, где хранится страница [3] . Системы могут иметь как одну таблицу страниц для всей системы, так и отдельные таблицы страниц для каждого приложения и сегмента, деревья таблиц страниц для больших сегментов или некоторой их комбинации. Если есть только одна таблица страниц, различные приложения, работающие одновременно используют различные части одного диапазона виртуальных адресов. При наличии нескольких страниц или сегментов таблицы, есть несколько виртуальных адресных пространств и параллельных приложений с помощью отдельных таблиц страниц для перенаправления на другие реальные адреса.
Менеджер виртуальной памяти
Эта часть операционной системы создает и управляет таблицами страниц. Если оборудование выдает ошибку, Менеджер виртуальной памяти получает доступ к вторичному хранилищу, возвращает страницу, которая имеет виртуальный адрес, который привел к неисправности страницы, обновляет таблицы страниц, чтобы отразить физическое местоположение виртуального адреса и указывает механизм перевода для перезапуска запрос.
Когда вся физическая память уже используется, Менеджер виртуальной памяти должен освободить страницы в основном хранилище для хранения выгруженной страницы. Используется один из множества алгоритмов замещения наименее используемых страниц, чтобы освободить их.
Закрепленные страницы
Операционные системы имеют области памяти, которые никогда не применялись для вторичного хранения. Некоторые из них могут быть закреплены на короткие периоды времени, другие — длительных периодов времени, либо же постоянно.
Источник