Посещение сайта
Благодарность: Школа StartUp.
)

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

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

Память является важнейшим ресурсом, требующим тщательного управления со стороны операционной системы.

Задачи управления памятью у операционной системы

  • Распределение ресурса типа «память» между различными, конкурирующими за нее процессами (т.к. памяти всегда не хватает, это ограниченный ресурс по своей сути);
  • Максимизировать использование памяти
  • Получить дополнительные «бонусы» в виде изоляции процессов (защита доступа одного процесса от другого);
  • Абстрагировать доступ к памяти для программистов.

Загрузку ОП в ОС Windowsможно посмотреть в Taskmanager.

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

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

  • Регистры база-предел
  • Свoп
  • Страницы (также таблицы страниц)
  • Сегменты (таблицы сегментов)
  • Страничное прерывание (page fauet) и виртуальная память

В данной статье рассматриваются два первых: регистр база0предел и своп.

Современные ОС

Основным механизмом абстракции в современных ОС является виртуальная память(virtual memory), используется повсеместно, так как:

  • Позволяет эффективно использовать реальную память
     — VM позволяет программам работать без необходимости загружать все их адр.пространство в физическую память (используется свопинг)
    — Большинству программ не нужны сразу все их данные и код
  • Гибкость программ
    Сама программа «не знает» сколько физ.памяти осталось в системе, а сколько – свопа. Объем памяти для любого процесса должен быть организован по принципу: сколько ему нужно, а не сколько есть всего в системе.
  • Позволяет организовать защиту
    — Виртуальная память изолирует адресное пространство процессов друг от друга.

Аппаратная поддержка для VM( virtual memory )

Виртуальная память требует аппаратной поддержки:

  • MMU (memory management unit) -Блок управления памятью
  • TLB (Translation lookaside buffe) — Буфер ассоциативной трансляции
  • Таблицы страниц
  • Обработка страничных прерываний

Обычно есть поддержка свопинга и ограниченной сегментации.

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

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

По сути это неэффективное использование памяти.

Очевидный минус – снижается объем доступной памяти.

Существует 2 типа фрагментации:

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

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

управление памятью

внутренняя фрагментация ОП

Поступает запрос в ОС на выделение блока памяти, длиной N-байт.

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

В силу того, что алгоритмы выделения кусков памяти разные, часто реально выделается не N-байт, а N+K байт, где К- значение или 0 или вполне реальное.

Все «выделители» памяти работают таким образом, обычно никогда не выделяется ровно столько памяти, сколько запрашивается процессом, т.е. внутри выделенного блока памяти есть неиспользованное пространство (К) — это есть внутренняя фрагментация – фрагментация внутри блока. Эти К при использовании многих блоков накапливаются, они вроде бы и есть, но использовать их нельзя.

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

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

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

В ОП выделяется много кусков памяти и какие то из них освободились (процессы закончили работать и освободили ОП). В результате получилось 4 занятых куска и 1 и 2 свободные.

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

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

Эволюция памяти

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

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

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

Свопинг

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

Исторически свопинг – это замена одной программы на другую.

Мультипрограммирование

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

При этом возникают требования к менеджеру памяти:

  • Защита: ограничить адресное пространство, используемое процессами.
  • Быстрая трансляция адресов – это защита не должна тормозить процесс трансляции, не должна вносить задержку.
  • Быстрое переключение контекста.

Вводится понятие виртуальных адресов.

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

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

Адресное пространство – это множество виртуальных адресов, которые могут использовать процессы. Это было самое начало того, что сейчас называется «виртуальной памятью». Но в данном случае, это гораздо примитивнее.

Метод фиксированных разделов

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

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

Аппаратная поддержка в виде регистров база-предел.

Преобразование адресов осуществляется по формуле:

Физический адрес = виртуальный адрес + база

Базовый регистр загружается ОС при переключении процесса.

Простая защита: Если виртуальный адрес больше база+предел, тогда наступает определенное системой событие – отказ в доступе или выводится ошибка. Есть механизм, который позволяет это отследить.

Преимущества: 

  • Простой метод

Недостатки:

  • внутренняя фрагментация – доступный раздел выделяется, как правило больше, чем требуется.
  • внешняя фрагментация – когда требуется большой объем памяти, но осталось только 2 маленьких раздела (кусочка)

На рисунке ниже показано как определить физический адрес памяти.

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

Метод фиксированных разделов

 

Есть виртуальный адрес, он дает нам смещение.

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

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

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

Аппаратные требования те же: регистр база-предел

Физический адрес = виртуальный адрес + база

Защита – проверять если физический адрес больше, чем виртуальный адрес + предел

Преимущества:

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

Недостатки:

  • внешняя фрагментация: загрузка/выгрузка задач оставляет необъединяемые «дыры» в памяти.

Все тоже самое, но в памяти появились свободные пространства.

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

Метод фиксированных разделов

 

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

устранение внешней фрагментации

Как бороться с внешней фрагментацией?

На помощь приходит свопинг.

  1. Выгрузить программ;
  2. Загрузить ее по другому адресу;
  3. Исправить регистр базы.

Все поднимается и остается большой кусок памяти для загрузки большой задачи.

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

Современный подход к решению этой проблемы – организация памяти в виде страниц.

Другие основные инструменты управления памятью мы рассмотрим в следующей статье.

 

Скачать презентацию к лекции «Управление памятью»

 

Скачать тест по теме «Управление памятью»

 

 

Понравилась статья, рекомендуйте Вашим друзьям!

Давайте дружить!

2 комментария к записи “Управление памятью”

  • DMITRY:

    На Ваш блог знакомый в аську ссылку кинул. Оказалось ,что не зря 🙂 Понравилось. Тепрь все время читать буду 🙂

  • cybaup:

    Спасибо за инфу!

Оставить комментарий