Как выделяется память в разных системах Windows

Обновлено: 05.07.2024

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

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

Доступная память
Фактический объем памяти, доступной в системе.

Ограничения ОС
Операционная система имеет ограничения на объем поддерживаемой памяти.

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

Подробности этих ограничений обсуждаются в следующих разделах.

Доступная память

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

Физическая память    Объем физической памяти (ОЗУ), доступной системе.

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

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

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

  • Закройте все работающие приложения.
  • Купите больше памяти для системы.
  • Увеличьте размер файла подкачки диспетчера виртуальной памяти.

Ограничения операционной системы

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

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

Диапазон адресного пространства определяется собственным размером слова операционной системы. Для систем на базе Windows NT это значение имеет размер 32 бита, что соответствует адресному пространству размером 2^32 байта или примерно 4 гигабайтам памяти. Таким образом, все процессы на платформах Windows NT ограничены доступом только к 4 гигабайтам памяти (это ограничение будет расширено до диапазона 2^64 с появлением платформ Win64 в будущем).

Однако это не единственное ограничение, накладываемое на процессы на платформах Windows. Системные адреса сопоставляются с этим адресным пространством, поэтому доступное адресное пространство еще больше сокращается. Объем адресного пространства, используемого системой, зависит от используемой версии Windows NT. Для Windows NT Workstation и некоторых версий Windows NT Server верхние 2 гигабайта адресного пространства зарезервированы для системы. Это оставляет только 2 гигабайта, доступных процессу для использования. В Windows NT Server Enterprise Edition только верхний 1 гигабайт адресного пространства зарезервирован для системы, а 3 гигабайта адресного пространства доступны для использования процессом. Эти ограничения приведены в следующей таблице.

Операционная система Доступное адресное пространство
Рабочая станция и сервер Windows NT 2 гигабайта
Windows NT Server, Enterprise Edition 3 гигабайта

Решение:
Единственным решением для этого типа ограничений является изменение операционной системы. Для Windows пользователь может либо приобрести Windows NT Server, Enterprise Edition, либо дождаться выпуска 64-разрядных версий Windows.

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

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

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

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



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

  • Выделяется большой блок памяти.
  • Выделяется меньший блок памяти. Это распределение помещает эту память над большим блоком памяти в адресном пространстве.
  • Большой блок памяти освобождается для системы.

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

Решение:
Ключом к решению проблемы такого типа является осознание того, что она существует во время разработки приложения, и правильное выделение памяти (сначала небольшие постоянные выделения, а затем большие временные выделения).< /p>

Распределение памяти в IDL

Система выделения памяти в IDL очень упрощена, оставляя учет и управление основной памятью на усмотрение операционной системы (malloc() и free()). Для повышения эффективности в некоторых областях IDL использует несколько специальных подсистем и методологий для управления внутренней памятью. Особый интерес представляют следующие:

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

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

Эта система часто используется для небольших записей, например, в системе Widget и системе кучи Pointer-Object в IDL.

Центральное распределение Вся память в IDL выделяется и освобождается с помощью центрального набора процедур. Эти подпрограммы выполняют запрос памяти, используя системные функции выделения памяти (malloc() и free()), а также ведут подсчет памяти, выделенной системой. Это то, что предоставляет информация, отображаемая IDL-командой "HELP, /MEMORY".

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

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

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

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

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

  • Что такое основная память?
  • Что такое управление памятью?
  • Для чего необходимо управление памятью
  • Логическое адресное пространство и физическое адресное пространство
  • Статическая и динамическая загрузка
  • Статическая и динамическая привязка
  • Обмен
  • Распределение непрерывной памяти
    • Распределение памяти
      • Первая подгонка
      • Наилучшее соответствие
      • Наихудший вариант
      • Внутренняя фрагментация
      • Внешняя фрагментация

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

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

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


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

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

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

      Для чего необходимо управление памятью:

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

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

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

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

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

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

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

      Статическая и динамическая привязка:

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

      Обмен:

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

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

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

      Распределение памяти:

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

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

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

      Первое соответствие:-

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

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

      Наиболее подходящий:-

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Типы адресов памяти

      Статическое и динамическое выделение памяти в операционной системе связано с разными типами адресов памяти. По сути, существует два основных типа адресов памяти:

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

      Как MMU преобразует виртуальный адрес в физический?

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

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

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

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

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

      • Статическая загрузка — код загружается в память перед выполнением.Используется в языках структурированного программирования, включая C.
      • Динамическая загрузка — код загружается в память по мере необходимости. Используется в объектно-ориентированных языках программирования, таких как Java.

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

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

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

      Пейджинг

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

      Сегментация

      Сегментация памяти в основной памяти системы — это сложный процесс, который ссылается на определенные биты в единице памяти.

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

      Обмен

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

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

      Однако в настоящее время перестановка пересматривается как способ расширения памяти с появлением более быстрых твердотельных накопителей PCIe, обеспечивающих скорость подключения интерфейса до 16 Гбит/с. В отличие от этого, подключенный через SATA твердотельный накопитель имеет максимальную скорость соединения 6,0 Гбит/с.

      Зачем нам нужно управление памятью?

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

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

      Одно непрерывное выделение: простейший метод выделения, используемый MS-DOS. Вся память (кроме той, что зарезервирована для ОС) доступна процессу.

      Распределение по разделам: память разделена на разные блоки или разделы. Каждый процесс выделяется в соответствии с требованием.

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

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

      Большинство операционных систем (например, Windows и Linux) используют сегментацию с разбиением на страницы. Процесс разделен на сегменты, а отдельные сегменты имеют страницы.

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

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

      Существуют разные алгоритмы размещения:

      <р>1. Первая подгонка: при первой подгонке выделяется раздел, который является первым достаточным блоком из верхней части основной памяти. Он сканирует память с самого начала и выбирает первый доступный блок, который является достаточно большим. Таким образом, выделяется первая достаточно большая дыра.


      <р>2. Наилучшее соответствие Разместите процесс в разделе, который является первым наименьшим достаточным разделом среди свободных доступных разделов.Он просматривает весь список дыр, чтобы найти наименьшую дыру, размер которой больше или равен размеру процесса.


      <р>3. Худшее соответствие Разместите процесс в разделе, который является самым большим среди свободно доступных разделов, доступных в основной памяти. Это противоположно алгоритму наилучшего соответствия. Он просматривает весь список дыр, чтобы найти самую большую дыру и выделить ее для обработки.


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

      Действительно ли Best-Fit лучше всего?
      Хотя наилучшее соответствие сводит к минимуму неиспользуемое пространство, оно потребляет много процессорного времени для поиска блока, размер которого близок к требуемому. Кроме того, в некоторых случаях наилучшее соответствие может работать хуже, чем другие алгоритмы. Например, см. упражнение ниже.

      Упражнение. Рассмотрим запросы от процессов в заданном порядке: 300 КБ, 25 КБ, 125 КБ и 50 КБ. Пусть есть два доступных блока памяти размером 150 КБ, за которыми следует блок размером 350 КБ.

      Какая из следующих схем распределения разделов может удовлетворить вышеуказанные запросы?
      A) Подходит лучше всего, но не подходит первым.
      B) Первый подход, но не лучший.
      C) И первый, и лучший вариант.
      D) не соответствует ни первому, ни лучшему варианту.

      Решение. Попробуем все варианты.
      Наилучшее соответствие:
      300 КБ выделяется из блока размером 350 КБ. 50 осталось в блоке.
      25 КБ выделяется из оставшихся 50 КБ. В блоке осталось 25К.
      125К выделяется из 150К блока. В этом блоке также осталось 25К.
      50 КБ нельзя выделить, даже если доступно 25 КБ + 25 КБ.

      First Fit:
      запрос 300 КБ выделяется из блока 350 КБ, 50 КБ не учитывается.
      25 КБ выделяется из блока 150 КБ, 125 КБ не учитывается.
      Затем 125 КБ и 50 КБ распределяются между оставшимися пропущенными разделами.
      Итак, первая подгонка может обрабатывать запросы.

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