Расположение сегментов процессов в памяти компьютера
Адреса, к которым обращается процесс, таким образом отличаются от адресов, реально существующих в оперативной памяти. В каждом конкретном случае используемые программой адреса могут быть представлены различными способами. Например, адреса в исходных текстах обычно символические, компилятор совмещает их с перемещаемыми адресами(такими, как m-байтов от начала модуля). Подобный адрес, сгенерированный программой, обычно называют логическим(виртуальным) адресом. Совокупность всех логических адресов называется логическим адресным пространством.
Связывание адресов.
Логические и физические адресные пространства ни по организации, ни по размеру не соответствуют друг другу. Максимальный размер логического адресного пространства обычно определяется разрядностью процессора и превышает размер физического адресного пространства => процессор и ОС должны быть способны отразить ссылки в коде программы в реальные физические адреса, соответствующие текущему расположению программы в основной памяти. Такое отображение называют трансляцией адреса или связыванием адресов. Связывание адресов может происходить на следующих шагах:
-этап компиляции (Compile time). Когда на стадии компиляции известно точное место размещения процесса в памяти, тогда непосредственно генерируются физические адреса;
-этап загрузки (Load time). Если информация о размещении программы на стадии компиляции отсутствует, компилятор генерирует перемещаемый код. В этом случае окончательное связывание откладывается до момента загрузки;
-этап выполнения (Execution time).Если процесс может быть перемещён во время выполнения из одной области памяти в другую, связывание откладывается до стадии выполнения.
Функции системы управления памятью:
-отображение адресного пространства процесса на конкретные области физической памяти;
-распределение памяти между конкурирующими процессами;
-контроль доступа к адресным пространствам процессов;
-выгрузка процессов (частично или полностью) во внешнюю память, когда в оперативной памяти недостаточно места.
-учёт свободной и занятой памяти.
Простейшие схемы управления памятью:
-схема с фиксированными разделами. Самым простым способом управления оперативной памятью является её предварительное разделение на несколько разделов фиксированной величины. Поступающие процессы помещаются в тот или иной раздел, при этом происходит условное разбиение физического адресного пространства. Связывание физических и логических адресов происходит на этапе загрузки в конкретный раздел и иногда на этапе компиляции. Каждый раздел может иметь свою очередь процесса, а может существовать глобальная очередь для всех разделов.
Очевидный недостаток этой схемы – число одновременно выполняемых процессов ограничено числом разделов. Кроме того, схема сильно страдает от внутренней фрагментации, потери части памяти, выделенной процессу, но не используемой им. Фрагментация возникает потому, что процесс не полностью занимает выделенный ему раздел или потому, что некоторые разделы слишком малы для выполняемых программ.
Один процесс в памяти.
Является частным случаем схемы с фиксированными разделами.
Оверлейная структура.
Так как размер логического адресного пространства процесса может быть больше выделенного ему раздела, иногда используется организация структуры с перекрытием. Основная идея – держать в памяти только те инструкции, которые нужны в данный момент.
Динамическое распределение. Свопинг.
Имея дело с пакетными системами, можно обходиться фиксированными разделами и не использовать ничего более сложного. В системах с разделением времени возможна ситуация, когда память не в состоянии содержать все пользовательские процессы. Приходится прибегать к свопингу. Перемещение процессов из главной памяти на диск целиком. Частичная выгрузка процесса осуществляется в системах со страничной организацией(пейджинг).
Схема с переменными разделами.
В принципе, система свопинга может базироваться на фиксированных разделах. Более эффективной, однако, представляется схема динамического распределения или схема с переменными разделами, которая может использоваться и в тех случаях, когда все процессы целиком помещаются в памяти, т. е. в отсутствие свопинга. В этом случае вначале вся память свободна и не разделена заранее на разделы. Вновь поступающей задаче выделяется строго необходимое кол-во памяти. После выгрузки процесса память временно освобождается. По истечении некоторого времени память представляет собой переменное число разделов разного размера. Смежные и свободные участки могут быть объединены.
Стратегии выбора раздела для нового процесса.
-стратегия первого подходящего. процесс помещается в первый подходящий раздел;
-стратегия наиболее подходящего. процесс помещается в более подходящий раздел;
-стратегия наименее подходящего. процесс помещается в наименее подходящий раздел.
Одно из решений проблемы внешней фрагментации – организовать сжатие: перемещение всех занятых (свободных) участков в сторону возрастания (убывания) адресов так, чтобы вся свободная память образовала непрерывную область. Этот метод называют схемой с перемещаемыми разделами. В идеале, фрагментация после сжатия должна отсутствовать.
Страничная память.
В самом простом случае страничной организации памяти как логическое так и физическое адресное пространство представляются состоящими из набора блоков или страниц одинакового размера. При этом образуются логические страницы (page), а соответствующие единицы в физической памяти называют физическими страницами или страничными кадрами (page frames). Страницы имеют фикс. длину, обычно явл. степенью числа 2 и не могут перекрываться. Каждый кадр содержит 1 страницу данных. При такой организации внешняя фрагментация отсутствует, а потери из-за внутренней фрагментации ограничены частью последней страницы процесса.
Сегментная и сегментно-страничная организация памяти.
Сегменты, в отличие от страниц, могут иметь переменный размер. Виртуальный адрес явл. двумерным как для программиста, так и для ОС, и состоит из 2х полей – номера сегмента и смещения внутри сегмента. Каждый сегмент – линейная последовательность, начинающаяся с нуля. Макс. размер сегмента определяется разрядностью процессора. Размер сегмента может меняться динамически. В элементе таблицы сегментов помимо физического адреса начала сегмента содержится и его длина. Если размер совмещения в виртуальном адресе выходит за пределы размера сегмента, то возникает искл. ситуация.