Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

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


Физическая и виртуальная память компьютеров (ликбез).

Физическая и виртуальная память компьютеров (ликбез).

При выполнении программы мы имеем дело с физической оперативной памятью (ОП), собственно с которой и работает процессор, извлекая из нее команды и данные и помещая в нее результаты вычислений.
Физическая память представляет собой упорядоченное множество ячеек реально существующей оперативной памяти, и все они пронумерованы, то есть к каждой из них можно обратиться, указав ее порядковый номер (адрес). Количество ячеек физической памяти ограниченно и имеет свой фиксированный объем. Процессор в своей работе извлекает команды и данные из физической оперативной памяти, данные из внешней памяти (винчестера, CD) непосредственно на обработку в процессор попасть не могут.
Системное программное обеспечение должно связать каждое указанное пользователем символьное имя с физической ячейкой памяти, то есть осуществить отображение пространства имен на физическую память компьютера. В общем случае это отображение осуществляется в два этапа: сначала системой программирования, а затем операционной системой (ОС). Это второе отображение осуществляется с помощью соответствующих аппаратных средств процессора - подсистемы управления памятью, которая использует дополнительную информацию, подготавливаемую и обрабатываемую операционной системой. Между этими этапами обращения к памяти имеют форму виртуального адреса. При этом можно сказать, что множество всех допустимых значений виртуального адреса для некоторой программы определяет ее виртуальное адресное пространство, или виртуальную память. Виртуальное адресное пространство программы зависит, прежде всего, от архитектуры процессора и от системы программирования и практически не зависит от объема реальной физической памяти компьютера. Можно еще сказать, что адреса команд и переменных в машинной программе, подготовленной к выполнению системой программирования, как раз и являются виртуальными адресами.
При программировании на языках высокого уровня программист обращается к памяти с помощью логических имен. Имена переменных, входных точек составляют пространство имен. Процессор работает только с физической оперативной памятью, которая достаточно дорога и имеет большие, но не всегда достаточные размеры. Когда задача попадает на обработку, то перед ОС встает задача привязать символическое имя задачи с конкретной ячейкой ОП. Так, система программирования, в данном случае транслятор Ассемблера, присваивает каждому символическому имени адрес относительно начала сегмента, а операционная система в сегментные регистры заносит адреса начала сегментов и, при их сложении, получается физический адрес памяти расположения элемента с данным символическим именем. Когда программа прошла этапы трансляции и редактирования, она приобрела двоичный вид. Все символические имена имеют двоичные адреса от какого-то нулевого значения, но они не указывают на конкретные ячейки памяти. В этом случае говорят, что символические имена, команды имеют виртуальный адрес. А когда операционная система соизволит запустить программу на выполнение, применив какую-то дисциплину обслуживания заданий, она каждому виртуальному адресу присвоит конкретный физический адрес оперативной памяти.
Когда администратор вычислительной системы запускает на выполнение множество заданий, то физический адрес команды или данного имеет только та задача, которая в данный момент обрабатывается процессором. Все остальные программы имеют виртуальные адреса, а их сумма составляет виртуальное адресное пространство. Современные ОС могут поддерживать виртуальное адресное пространство размером до 4Гбайт. При большой загрузке вычислительной системы, когда все запущенные на обработку программы не помещаются в оперативной памяти, они располагаются в виртуальной памяти и имеют виртуальные адреса. Когда по какой-либо дисциплине диспетчеризации они запускаются на обработку, модулями операционной системы виртуальные адреса превращаются в физические адреса оперативной памяти.
В некоторых случаях отображение пространства имен на физическую память тождественно отображению на виртуальное пространство. Получается абсолютная двоичная программа, где виртуальные адреса в точности соответствуют физическим. К таким программам относятся часть модулей ОС, которые каждый раз располагаются в ОП по одним и тем же адресам.
При работе на компьютере может встретиться наличие трех ситуаций:
- V(вирт) < V(оп) - виртуальное адресное пространство меньше объема ОП;
- V(вирт) = V(оп) - виртуальное адресное пространство равно объему ОП;
- V(вирт) > V(оп) - виртуальное адресное пространство больше объема ОП.
В первых двух случаях никаких трудностей в распределении оперативной памяти возникнуть не может. Программ мало, все команды и данные находятся в ОП. Распределение ресурсов памяти обеспечивается разными методами, но мы остановимся на третьем варианте.
При мультипрограммировании виртуальное адресное пространство (расположеное, например, на SSD-диске) как правило, бывает намного большего размера, чем свободная оперативная память, предоставляемая операционной системой для выполнения программ. В этом случае от методов распределения памяти между задачами во многом зависит производительность вычислительной системы.

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

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

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

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


Лицензия