Управление памятью основные задачи механизмы

Управление памятью: основные задачи, механизмы.

Основная память (она же ОЗУ) является важнейшим ресурсом, эффективное использование которого решающим образом влияет на общую производительность системы.

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

· выделение памяти для процесса пользователя при его запуске и освобождение этой памяти при завершении процесса;

· обеспечение настройки запускаемой программы на выделенные адреса памяти;

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

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

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

· предоставление процессам возможностей получения и освобождения дополнительных областей памяти в ходе работы;

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

· изоляция памяти процессов, исключающая случайное или намеренное несанкционированное обращение одного процесса к областям памяти, занимаемым другим процессом;

· предоставление процессам возможности обмена данными через общие области памяти.

Алгоритмы распределения памяти

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

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

2. Распределение памяти динамическим разделами. В этом случае память машины заранее не делится. Сначала вся память, отводимая для приложений, свободна. Каждому вновь поступающему приложению на этапе создания процесса выделяется вся необходимая ему память(если достаточный объем памяти отсутствует, то приложение на выполнение не принимается и процесс для него не создается). После завершения процесса память освобождается, и на это место может быть загружен другой процесс. Т.о., в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера. Этот алгоритм более гибок по сравнению с первым, но имеет недостаток – фрагментацию памяти. Фрагментация – это наличие большого числа несмежных участков свободной памяти очень маленького размера (фрагментов).

Основные концепции виртуальной памяти

Виртуальная память – это совокупность программно-аппаратных средств, позволяющая пользователю составлять программы, размер которых превосходит имеющийся размер ОЗУ.

Для этого виртуальная память решает следующие задачи:

· Размещает данные в запоминающих устройствах разного типа, например, часть в ОЗУ, часть на жестком диске.

· Перемещает по мере необходимости данные между устройствами разного типа. Например, подгружает нужную часть программы с диска в ОЗУ.

Источник

Операционные системы

Менеджер памяти — часть операционной системы, отвечающая за управление памятью.

Основные методы распределения памяти:

Без использования внешней памяти (например: HDD)

С использованием внешней памяти

6.2 Методы без использования внешней памяти

6.2.1 Однозадачная система без подкачки на диск

Память разделяется только между программой и операционной системой.

Схемы разделения памяти:

Схемы разделения памяти

Третий вариант используется в MS-DOS. Та часть, которая находится в ПЗУ, часто называется BIOS.

6.2.2 Распределение памяти с фиксированными разделами.

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

Системы могут иметь:

общую очередь ко всем разделам

к каждому разделу отдельную очередь

Распределение памяти с фиксированными разделами

Недостаток системы многих очередей очевиден, когда большой раздел может быть свободным, а к маленькому выстроилась очередь.

Алгоритмы планирования в случае одной очереди:

выбирается задача, которая максимально займет раздел

Также может быть смешанная система.

6.2.3 Распределение памяти динамическими разделами

В такой системе сначала память свободна, потом идет динамическое распределение памяти.

Распределение памяти динамическими разделами.

Перемещаемые разделы

Это один из методов борьбы с фрагментацией. Но на него уходит много времени.

Рост разделов

Иногда процессу может понадобиться больше памяти, чем предполагалось изначально.

Настройка адресов и защита памяти

В предыдущих примерах мы можем увидеть две основные проблемы.

Настройка адресов или перемещение программ в памяти

Защита адресного пространства каждой программы

Решение обоих проблем заключается в оснащении машины специальными аппаратными регистрами.

Базовый (указывает начало адресного пространства программы)

Предельный (указывает конец адресного пространства программы)

6.3 Методы с использованием внешней памяти (свопинг и виртуальная память)

Так как памяти, как правило, не хватает. Для выполнения процессов часто приходится использовать диск.

Основные способы использования диска:

Свопинг (подкачка) — процесс целиком загружается в память для работы

Виртуальная память — процесс может быть частично загружен в память для работы

6.3.1 Свопинг (подкачка)

При нехватке памяти процессы могут быть выгружены на диск.

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

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

Свопер — планировщик, управляющий перемещением данных между памятью и диском.

Этот метод был основным для UNIX до версии 3BSD.

Управление памятью с помощью битовых массивов

Вся память разбивается на блоки (например, по 32бита), массив содержит 1 или 0 (занят или незанят).

Чтобы процессу в 32Кбита занять память, нужно набрать последовательность из 1000 свободных блоков.

Такой алгоритм займет много времени.

битовые массивы и списки

Управление памятью с помощью связных списков

Этот способ отслеживает списки занятых (между процессами) и свободных (процессы) фрагментов памяти.

Запись в списке указывает на:

занят (P) или незанят (H) фрагмент

адрес начала фрагмента

Четыре комбинации соседей для завершения процесса X

Алгоритмы выделения блока памяти:

первый подходящий участок.

следующий подходящий участок, стартует не сначала списка, а с того места на котором остановился в последний раз.

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

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

6.3.2 Виртуальная память

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

Программа при этом общается с виртуальной памятью, а не с физической.

Диспетчер памяти преобразует виртуальные адреса в физические.

Страничная организация памяти

Страницы — это части, на которые разбивается пространство виртуальных адресов.

Страничные блоки — единицы физической памяти.

Страницы всегда имеют фиксированный размер. Передача данных между ОЗУ и диском всегда происходит в страницах.

Х — обозначает не отображаемую страницу в физической памяти.

Страничное прерывание — происходит, если процесс обратился к странице, которая не загружена в ОЗУ (т.е. Х). Процессор передается другому процессу, и параллельно страница загружается в память.

Таблица страниц — используется для хранения соответствия адресов виртуальной страницы и страничного блока.

Таблица может быть размещена:

в аппаратных регистрах (преимущество: более высокое быстродействие, недостаток — стоимость)

Типичная запись в таблице страниц

Присутствие/отсутствие — загружена или незагружена в память

Защита — виды доступа, например, чтение/запись.

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

Обращение — было ли обращение к странице, если нет, то это лучший кандидат на освобождение памяти.

Информация о адресе страницы когда она хранится на диске, в таблице не размещается.

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

Страничная организация памяти используется, и в UNIX, и в Windows.

Хранение страничной памяти на диске

Статическая область свопинга

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

Читайте также:  Остальные виды значков на разных телефонах

На диске всегда есть дубликат страницы, которая находится в памяти.

Этот механизм наиболее простой.

Статический и динамический методы организации свопинга.

Динамическая область свопинга

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

Этот механизм сложнее, так как процессы не привязаны к какому-то пространству на диске, и нужно хранить информацию (карту диска) о местоположении на диске каждой страницы.

Источник

Лекция: Управление памятью

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

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

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

Если не принимать во внимание программирование на машинном языке, то можно сказать, что программист обращается к памяти с помощью некоторого набора логических имен, которые чаще всего являются символьными. Имена переменных составляют пространство символьных имен. Иногда это адресное пространство называют логическим.

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

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

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

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

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

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

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

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

Основное применение свопинг находит в системах разделения времени.

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

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

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

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

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

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

Источник

Управление памятью — Memory management

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

Было разработано несколько методов, повышающих эффективность управления памятью. Системы виртуальной памяти отделяют адреса памяти, используемые процессом, от фактических физических адресов, что позволяет разделить процессы и увеличить размер виртуального адресного пространства сверх доступного объема ОЗУ с помощью подкачки или подкачки на вторичное хранилище . Качество диспетчера виртуальной памяти может существенно повлиять на общую производительность системы .

СОДЕРЖАНИЕ

Подробности

В некоторых операционных системах , например, DOS / 360 и последующих , OS / 360 и последующих , распределение памяти в адресном пространстве обрабатывается операционной системой; Например, в Unix-подобных операционных системах распределение в адресном пространстве осуществляется на уровне приложения.

Управление памятью в адресном пространстве обычно подразделяется на автоматическое управление памятью, обычно включающее сборку мусора , или ручное управление памятью .

Распределение динамической памяти

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

Некоторые проблемы усложняют реализацию, например внешняя фрагментация , которая возникает, когда между выделенными блоками памяти имеется много небольших промежутков, что делает недействительным их использование для запроса на выделение. Метаданные распределителя также могут увеличивать размер (по отдельности) небольших распределений. Часто это удается разделить на части . Система управления памятью должна отслеживать невыполненные распределения, чтобы гарантировать, что они не перекрываются и что никакая память никогда не «теряется» (т. Е. Чтобы не было « утечек памяти »).

Читайте также:  Готовый пример резюме по профессии заведующий складом

Эффективность

Реализованный конкретный алгоритм распределения динамической памяти может значительно повлиять на производительность. Исследование, проведенное в 1994 г. Digital Equipment Corporation, иллюстрирует накладные расходы, связанные с различными распределителями. Наименьшая средняя длина пути инструкций, необходимая для выделения одного слота памяти, составила 52 (по измерениям с помощью профилировщика уровня инструкций в различных программах).

Реализации

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

Выделение блоков фиксированного размера

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

Дружелюбные блоки

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

Размещение плиты

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

Распределение стека

Многие Unix-подобные системы, а также Microsoft Windows реализуют функцию, вызывающую alloca динамическое выделение памяти стека, аналогично динамической работе с кучей malloc . Компилятор обычно переводит его во встроенные инструкции, управляющие указателем стека. Хотя нет необходимости вручную освобождать память, выделенную таким образом, поскольку она автоматически освобождается, когда функция, которая вызвала alloca возврат, существует риск переполнения. А поскольку alloca — это специальное расширение, которое встречается во многих системах, но никогда в POSIX или стандарте C, его поведение в случае переполнения стека не определено.

Более безопасная версия alloca _malloca , которая сообщает об ошибках, существует в Microsoft Windows. Это требует использования _freea . gnulib предоставляет эквивалентный интерфейс, хотя вместо того, чтобы генерировать исключение SEH при переполнении, он делегирует malloc при обнаружении слишком большого размера. Аналогичную функцию можно эмулировать с помощью ручного учета и проверки размера, например, при использовании alloca_account в glibc.

Автоматические переменные

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

Вывоз мусора

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

Системы с виртуальной памятью

Виртуальная память — это метод отделения организации памяти от физического оборудования. Приложения работают с памятью через виртуальные адреса . Каждая попытка приложения получить доступ к конкретному адресу виртуальной памяти приводит к преобразованию адреса виртуальной памяти в реальный физический адрес . Таким образом, добавление виртуальной памяти позволяет детально контролировать системы памяти и методы доступа.

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

Несмотря на то, что память, выделенная для определенных процессов, обычно изолирована, иногда процессам необходимо иметь возможность обмениваться информацией. Общая память — один из самых быстрых методов межпроцессного взаимодействия .

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

Управление памятью в OS / 360 и последующих версиях

IBM System / 360 не поддерживает виртуальную память. Изоляция памяти заданий необязательно выполняется с помощью ключей защиты , при этом каждому заданию назначается отдельный ключ, 0 для супервизора или 1–15. Управление памятью в OS / 360 — это функция супервизора . Хранилище запрашивается с помощью GETMAIN макроса и освобождается с помощью FREEMAIN макроса, что приводит к вызову супервизора ( SVC ) для выполнения операции.

В OS / 360 детали меняются в зависимости от того, как создается система , например, для PCP , MFT , MVT .

В OS / 360 МВТ, подвыделении в приеме на работу в регионе или общей системы очереди Area (SQA) основана на субпулы , площади кратна 2 КБ-размера области , защищенной ключом защиты. Подпулы пронумерованы 0–255. Внутри региона подпулам назначается либо защита хранилища задания, либо ключ супервизора, ключ 0. Подпулы 0–127 получают ключ задания. Первоначально создается только нулевой подпул, и все пользовательские запросы к хранилищу удовлетворяются из подпула 0, если другой не указан в запросе памяти. Подпулы 250–255 создаются запросами к памяти супервизором от имени задания. Большинству из них назначен ключ 0, хотя некоторые получают ключ задания. Номера субпулов также актуальны в MFT, хотя детали намного проще. MFT использует фиксированные разделы, переопределяемые оператором, вместо динамических областей, а PCP имеет только один раздел.

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

Детали для OS / VS1 аналогичны деталям для MFT и для MVT; детали для OS / VS2 аналогичны деталям для MVT, за исключением того, что размер страницы составляет 4 КиБ. Как для OS / VS1, так и для OS / VS2 общая системная область очереди (SQA) не выгружается на страницу.

В MVS адресное пространство включает дополнительную доступную для страниц общую область, Common Storage Area (CSA), и дополнительную частную область, Системную рабочую область (SWA). Кроме того, все ключи хранилища 0-7 зарезервированы для использования привилегированным кодом.

Источник



Операционная система — Управление памятью

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

Этот учебник научит вас основным понятиям, связанным с управлением памятью.

Адресное пространство процесса

Адресное пространство процесса — это набор логических адресов, на которые процесс ссылается в своем коде. Например, когда используется 32-битная адресация, адреса могут варьироваться от 0 до 0x7fffffff; то есть 2 ^ 31 возможных чисел, для общего теоретического размера 2 гигабайта.

Операционная система заботится о сопоставлении логических адресов с физическими адресами во время выделения памяти программе. В программе используются три типа адресов до и после выделения памяти:

Символьные адреса

Адреса, используемые в исходном коде. Имена переменных, константы и метки команд являются основными элементами символического адресного пространства.

Читайте также:  За женский футбол и против расизма Абрамович в первом большом интервью за годы рассказал о социальных миссиях Челси

Относительные адреса

Во время компиляции компилятор преобразует символические адреса в относительные адреса.

Физические адреса

Загрузчик генерирует эти адреса в тот момент, когда программа загружается в основную память.

Виртуальные и физические адреса одинаковы в схемах привязки адресов во время компиляции и во время загрузки. Виртуальные и физические адреса различаются по схеме привязки адресов во время выполнения.

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

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

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

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

Статическая и динамическая загрузка

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

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

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

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

Статическое и динамическое связывание

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

Когда используется динамическое связывание, нет необходимости связывать реальный модуль или библиотеку с программой, скорее, ссылка на динамический модуль предоставляется во время компиляции и связывания. Динамические библиотеки ссылок (DLL) в Windows и общие объекты в Unix являются хорошими примерами динамических библиотек.

Перестановка

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

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

Обмен процессами

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

Предположим, что пользовательский процесс имеет размер 2048 КБ, и на стандартном жестком диске, где произойдет обмен, скорость передачи данных составляет около 1 МБ в секунду. Фактический перенос процесса 1000K в или из памяти займет

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

Выделение памяти

Основная память обычно имеет два раздела —

Недостаточно памяти — Операционная система находится в этой памяти.

High Memory — пользовательские процессы хранятся в верхней памяти.

Операционная система использует следующий механизм выделения памяти.

Распределение по одному разделу

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

Распределение нескольких разделов

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

фрагментация

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

Фрагментация бывает двух типов —

Внешняя фрагментация

Всего пространства памяти достаточно для удовлетворения запроса или для размещения в нем процесса, но он не является непрерывным, поэтому его нельзя использовать.

Внутренняя фрагментация

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

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

Фрагментация памяти

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

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

Paging

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

Пейджинг — это метод управления памятью, при котором адресное пространство процесса разбивается на блоки одинакового размера, называемые страницами (размер равен степени 2, от 512 до 8192 байтов). Размер процесса измеряется количеством страниц.

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

Paging

Перевод адреса

Адрес страницы называется логическим адресом и представлен номером страницы и смещением .

Адрес кадра называется физическим адресом и представлен номером кадра и смещением .

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

Таблица карты страницы

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

Когда процесс должен быть выполнен, его соответствующие страницы загружаются в любые доступные кадры памяти. Предположим, у вас есть программа объемом 8 КБ, но ваша память может вместить только 5 КБ в данный момент времени, тогда концепция пейджинга войдет в картину. Когда на компьютере заканчивается ОЗУ, операционная система (ОС) перемещает незанятые или ненужные страницы памяти во вторичную память, чтобы освободить ОЗУ для других процессов, и возвращает их, когда это необходимо программе.

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

Преимущества и недостатки пейджинга

Вот список преимуществ и недостатков подкачки —

Пейджинг уменьшает внешнюю фрагментацию, но все еще страдает от внутренней фрагментации.

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

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

Таблица страниц требует дополнительного места в памяти, поэтому может не подходить для системы с небольшим объемом ОЗУ.

сегментация

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

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

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

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

Источник