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

Обновлено: 06.07.2024

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

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

a) Стратегия первого подходящего. В этом случае процесс помещается в первый подходящий по размеру раздел.

b) Стратегия наиболее подходящего. Процесс помещается в раздел, в котором останется меньше всего свободного места.

c) Стратегия наименьшего подходящего. Процесс помещается в самый большой раздел, в котором останется место для еще одного процесса.

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

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

Выбор стратегии размещения слабо влияет на величину фрагментации. Наихудшем является метод наиболее подходящего.

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

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

Изучение

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

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

Что такое основная память

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

Иерархия памяти

Рисунок 1: Иерархия памяти

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

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

Почему требуется управление памятью

  • Выделять и освобождать память до и после выполнения процесса.
  • Для отслеживания используемого пространства памяти процессами.
  • Чтобы свести к минимуму проблемы фрагментации.
  • Для правильного использования основной памяти.
  • Сохранять целостность данных при выполнении процесса.

Теперь мы обсуждаем концепцию логического адресного пространства и физического адресного пространства:

Логическое и физическое адресное пространство

Логическое адресное пространство: адрес, генерируемый ЦП, известен как «логический адрес». Он также известен как виртуальный адрес. Логическое адресное пространство можно определить как размер процесса. Логический адрес можно изменить.

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

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

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

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

Статические и динамические ссылки

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

  • Статическая компоновка: пристатической компоновке компоновщик объединяет все необходимые программные модули в единую исполняемую программу. Таким образом, нет никакой зависимости от времени выполнения. Некоторые операционные системы поддерживают только статическое связывание, в котором библиотеки системного языка обрабатываются как любой другой объектный модуль.
  • Динамическое связывание: основная концепция динамического связывания аналогична динамической загрузке. При динамической компоновке «заглушка» включается для каждой соответствующей ссылки на библиотечную подпрограмму. Заглушка — это небольшой фрагмент кода. Когда заглушка выполняется, она проверяет, находится ли нужная процедура уже в памяти или нет. Если он недоступен, программа загружает подпрограмму в память.

Обмен

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

Когда процесс выполняется, он должен находиться в памяти

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

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

Основная память должна задействовать как операционную систему

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

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

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

Фиксированное распределение разделов: в этом методе операционная система поддерживает таблицу, в которой указывается, какие части памяти доступны, а какие заняты процессами. Изначально вся память доступна для пользовательских процессов и считается одним большим блоком доступной памяти. Эта доступная память известна как «отверстие». Когда процесс прибывает и ему требуется память, мы ищем достаточно большую дыру, чтобы сохранить этот процесс. Если требование выполняется, мы выделяем память для процесса, в противном случае оставляя остальную доступной для удовлетворения будущих запросов. При распределении памяти иногда возникают проблемы с динамическим распределением памяти, которые касаются того, как удовлетворить запрос размера n из списка свободных отверстий. Есть несколько решений этой проблемы:

First fit:-

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

Здесь, на этой диаграмме, блок памяти размером 40 КБ

Здесь, на этой диаграмме, блок памяти размером 40 КБ является первым доступным свободным местом, в котором может храниться процесс A (размер 25 КБ), поскольку первые два блока не имели достаточного пространства памяти.

Best fit:-

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

Здесь, в этом примере, сначала мы просматриваем полный список и обнаруживаем, что последнее отверстие 25 КБ является наиболее подходящим отверстием для процесса A (размер 25 КБ).

В этом методе использование памяти максимально по сравнению с другими методами распределения памяти.

Worst fit:- В худшем случае выделите для обработки наибольшее доступное отверстие. Этот метод дает самое большое оставшееся отверстие.

Здесь, в этом примере, процесс A (размер 25 КБ) выделяется самому большому доступному блоку памяти, который составляет 60 КБ. Неэффективное использование памяти является серьезной проблемой в худшем случае.

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

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

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

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

Пример: предположим, что для распределения памяти используется фиксированное разделение, а размер блока в памяти различается: 3 МБ, 6 МБ и 7 МБ. Теперь приходит новый процесс p4 размером 2 МБ и требует блока памяти. Он получает блок памяти размером 3 МБ, но 1 МБ блочной памяти является пустой тратой и не может быть выделен другим процессам. Это называется внутренней фрагментацией.

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

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

Пример: Предположим (рассмотрим пример выше) три процесса p1, p2, p3 имеют размер 2 МБ, 4 МБ и 7 МБ соответственно. Теперь им выделяются блоки памяти размером 3 МБ, 6 МБ и 7 МБ соответственно. После выделения для процесса p1 и p2 осталось 1 МБ и 2 МБ. Предположим, что приходит новый процесс p4 и требует 3-мегабайтный блок памяти, который доступен, но мы не можем его назначить, потому что свободное пространство памяти не является непрерывным. Это называется внешней фрагментацией.

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

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

Paging:

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

  • Логический адрес или виртуальный адрес (представлен в битах): адрес, генерируемый ЦП.
  • Логическое адресное пространство или виртуальное адресное пространство (представленное словами или байтами): набор всех логических адресов, сгенерированных программой.
  • Физический адрес (представлен в битах): адрес, фактически доступный в блоке памяти.
  • Физическое адресное пространство (выраженное словами или байтами): набор всех физических адресов, соответствующих логическим адресам.
  • Если логический адрес = 31 бит, то логическое адресное пространство = 2 31слово = 2 G слов (1 G = 2 30 )
  • Если логическое адресное пространство = 128 M слов = 2 7* 2 20 слов, то логический адрес = log 2 2 27 = 27 бит
  • Если физический адрес = 22 бита, то физическое адресное пространство = 2 22слова = 4 M слов (1 M = 2 20 )
  • Если физическое адресное пространство = 16 M слов = 2 4* 2 20 слов, то физический адрес = log 2 2 24 = 24 бита.

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

  • Физическое адресное пространство концептуально разделено на несколько блоков фиксированного размера, называемых кадрами.
  • Логическое адресное пространство также разделено на блоки фиксированного размера, называемые страницами.
  • Размер страницы = Размер кадра
  • Физический адрес = 12 бит, тогда физическое адресное пространство = 4 К слов
  • Логический адрес = 13 бит, затем логическое адресное пространство = 8 К слов
  • Размер страницы = размер кадра = 1 тыс. Слов (предположение)

Адрес, генерируемый ЦП, делится на

Адрес, генерируемый ЦП, делится на

  • Номер страницы (p):количество битов, необходимых для представления страниц в логическом адресном пространстве или номер страницы.
  • Смещение страницы (d):количество битов, необходимых для представления определенного слова на странице или размер страницы логического адресного пространства, или номер слова страницы или смещение страницы.

Физический адрес делится на

  • Номер кадра (f):количество битов, необходимых для представления кадра физического адресного пространства или кадра номера кадра.
  • Смещение кадра (d):количество битов, необходимых для представления конкретного слова в кадре, или размер кадра в физическом адресном пространстве, или номер слова кадра, или смещение кадра.

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

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

Время доступа к основной памяти

Время доступа к основной памяти = м

Если таблица страниц хранится в основной памяти,

Эффективное время доступа = m (для таблицы страниц) + m (для конкретной страницы в таблице страниц)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Свопинг

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Недостатки:

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

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

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

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

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

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

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

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

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

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

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

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

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

Недостатки:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Без использования внешней памяти (например: 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.

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

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

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

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

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

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

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

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

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

Читайте также: