Распределение памяти в вычислительной системе предполагает ее выделение для разных видов команд и данных с целью обеспечить нужный объем и требуемое быстродействие памяти. Такое выделение проводится статически (команды и директивы транслятора) или динамически. Статическое выделение связано с резервированием памяти, например, под массивы. Если эта память не используется, то она все равно занята и недоступна программам. Динамическое выделение памяти предполагает, что память занята только на короткое время, а затем она освобождается. Выделим три уровня динамического распределения памяти: стек, виртуальная память, команды операционной системы.
При запросе на выделение памяти указывается требуемый размер участка. Для поиска нужного участка необходим список (таблица) свободных участков с указанием их размеров. Обычно на уровне операционной системы поддерживается таблица блоков, на которые разбивается память с указанием занятости блока. Эта таблица упорядочена по возрастанию объемов блоков с целью быстрого поиска нужного объема. Если выделенный объем больше требуемого, то часть памяти не используется. Эта ситуация называется фрагментацией памяти.
Технология виртуализации касается разных сторон вычислительной системы. Это — разделение сервера на несколько виртуальных машин, каждая из которых способна выполнять собственную операционную систему и прикладную среду. Это — виртуализация внешних устройств. Наконец это — виртуализации памяти.
Виртуализация памяти (виртуальная память) — метод автоматического управления иерархической памятью, при котором программисту кажется, что он имеет дело с единой памятью большой емкости и высокого быстродействия. Нижний слой памяти может включать память на магнитных дисках, сеть и другие элементы.
Идея виртуальной памяти возникла из желания выполнять программы большего размера чем ОЗУ. Вначале стали использовать оверлейную структуру программ, когда большая программа разбивается на отдельные модули перекрытия — оверлеи (overlays). Первый модуль загружается в память и работает. Если ему нужен код или данные, содержащиеся в других модулях, то работающий модуль вызывает функции, загружающие другие модули. При этом программист сам должен отследить:
При этом отметим, что, поскольку вновь загружаемые модули "ложатся" в память на место находившихся там ранее, то
Как альтернатива оверлейной структуре, возникла концепция виртуальной памяти (1961 г, Манчестер). Фактически используется та же идеология перезагрузки модулей — свопинг (swapping), однако замена осуществляется аппаратурой и операционной системой автоматически, без какого-либо участия программиста и незаметно для него (см. рисунок ниже).
При этом программист оперирует адресами в (линейном) виртуальном адресном пространстве задачи, размер которого не меньше размера программы (включающей как исполняемый код так и данные). Каждый объект программы в пространстве виртуальных адресов имеет уникальный адрес. Программа пишется в виртуальных адресах.
Механизм защиты позволяет ограничить влияние неправильно работающей программы на другие выполняемые программы и их данные. Защита представляет собой ценное свойство при разработке программных продуктов, поскольку она обеспечивает сохранность в памяти при любых ситуациях средств разработки программного обеспечения (операционной системы, отладчика). При сбое в прикладной программе в полной исправности сохраняется программное обеспечение, позволяющее выдать диагностические сообщения, а отладчик имеет возможность произвести "посмертный" анализ содержимого памяти и регистров сбойной программы. В системах, эксплуатирующих готовое программное обеспечение, защита позволяет повысить его надежность и дает возможность инициировать восстановительные процедуры в системе.
Можно назвать следующие цели защиты:
Защита в ЭВМ может быть построена на следующих принципах:
В процессорах Pentium, Itanium механизм защиты распознает четыре уровня привилегированности, нумеруемые от 0 до 3. Чем больше номер, тем ниже уровень привилегированности. При удовлетворении всех прочих проверок защиты исключение общей защиты генерируется при попытке программы доступа к сегменту с большим уровнем привилегированности (т.е. с меньшим числом, задающим уровень), чем имеет данный сегмент.
В ЭВМ VAX-11 в системе есть 4 уровня привилегий (кольца защиты):
Понятие "задача" (task) в первом приближении аналогично понятию "программа". Когда говорят о многозадачном режиме, имеют в виду возможность одновременного (параллельного) выполнения нескольких программ. Истинная параллельность возможна лишь в многопроцессорной системе, когда каждая программа выполняется на своем ресурсе.
В однопроцессорной системе несколько программ могут разделять процессорное время. При переключении с одной задачи на другую требуется сохранять контекст прерываемой задачи, чтобы можно было впоследствии продолжить ее выполнение. Это обычно делает операционная система, причем, для этого совсем не обязательно наличие какой-либо специальной аппаратной поддержки. Например, в DOS 5 есть программная оболочка DosShell, содержащая в своем составе подобный переключатель задач, работающий в реальном режиме процессора 8086 и сохраняющий (достаточно медленно) образ прерываемой задачи на жестком диске.
В большей части случаев достигается повышение производительности труда человека, например, в следующих ситуациях:
В 1987 г. Паттерсон, Гибсон и Катц, американские исследователи из Калифорнийского университета в Беркли, описали в своей статье “A Case for Redundant Arrays of Inexpensive Disks (RAID)” несколько типов дисковых массивов, обозначив их аббревиатурой RAID. Основная идея RAID состояла в объединении нескольких небольших и недорогих дисков в массив, который по производительности не уступал бы одному большому диску (Single Large Expensive Drive, SLED), использовавшемуся обычно с компьютерами типа мэйнфрейм. Заметим, что для компьютера этот массив дисков должен был выглядеть как одно логическое устройство. Увеличение количества дисков в массиве, как правило, означало повышение производительности, по крайней мере при чтении информации. Слово "недорогой" (inexpensive) в названии RAID характеризует стоимость одного диска в массиве по сравнению с большими дисками мэйнфреймов. Кстати, некоторое время спустя после выхода вышеупомянутой статьи из Беркли пришла новая расшифровка аббревиатуры RAID — Redundant Arrays of Independent Disks. Дело в том, что из-за низкой надежности недорогих дисков в массивах первоначально пришлось использовать достаточно дорогие дисковые устройства мэйнфреймов.
Одним из способов повышения производительности ввода/вывода является использование параллелизма путем объединения нескольких физических дисков в матрицу (группу) с организацией их работы аналогично одному логическому диску. К сожалению, надежность матрицы любых устройств падает при увеличении числа устройств. Полагая интенсивность отказов постоянной, т.е. при экспоненциальном законе распределения наработки на отказ, а также при условии, что отказы независимы, получим, что среднее время безотказной работы (mean time to failure — MTTF) матрицы дисков будет равно:
MTTF одного диска / Число дисков в матрице
Для достижения повышенного уровня отказоустойчивости приходится жертвовать пропускной способностью ввода/вывода или емкостью памяти. Необходимо использовать дополнительные диски, содержащие избыточную информацию, позволяющую восстановить исходные данные при отказе диска. Отсюда получают акроним для избыточных матриц недорогих дисков RAID (redundant array of inexpensive disks). Существует несколько способов объединения дисков RAID. Каждый уровень представляет свой компромисс между пропускной способностью ввода/вывода и емкостью диска, предназначенной для хранения избыточной информации.
Когда какой-либо диск отказывает, предполагается, что в течение короткого интервала времени он будет заменен и информация будет восстановлена на новом диске с использованием избыточной информации. Это время называется средним временем восстановления (mean time to repair — MTTR). Этот показатель можно уменьшить, если в систему входят дополнительные диски в качестве "горячего резерва":
При отказе диска резервный диск подключается аппаратно-программными средствами. Периодически оператор вручную заменяет все отказавшие диски.
Четыре основных этапа этого процесса состоят в следующем: