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

Обновлено: 02.07.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пейджинг

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

Сегментация

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

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

Обмен

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

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

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

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

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

Раздел 404 Закона Сарбейнса-Оксли (SOX) требует, чтобы все публичные компании установили внутренний контроль и процедуры.

Закон о защите конфиденциальности детей в Интернете от 1998 года (COPPA) – это федеральный закон, который налагает особые требования на операторов доменов .

План North American Electric Reliability Corporation по защите критически важной инфраструктуры (NERC CIP) представляет собой набор стандартов.

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

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

Метаморфное и полиморфное вредоносное ПО – это два типа вредоносных программ (вредоносных программ), код которых может изменяться по мере их распространения.

Медицинская транскрипция (МТ) – это ручная обработка голосовых сообщений, продиктованных врачами и другими медицинскими работниками.

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

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

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

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

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

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

Износ флэш-памяти NAND — это пробой оксидного слоя внутри транзисторов с плавающим затвором флэш-памяти NAND.

Выносливость при записи — это количество циклов программирования/стирания (P/E), которое может быть применено к блоку флэш-памяти перед сохранением .

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

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

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

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

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

      Оперативная память играет центральную роль в работе современного компьютера. Основная память представляет собой большой массив слов или байтов размером от сотен тысяч до миллиардов. Основная память — это хранилище быстро доступной информации, совместно используемой ЦП и устройствами ввода-вывода. Основная память — это место, где хранятся программы и информация, когда процессор эффективно их использует. Основная память связана с процессором, поэтому перемещение инструкций и информации в процессор и из него происходит чрезвычайно быстро. Основная память также известна как 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 МБ, который доступен, но мы не можем его выделить, потому что свободное пространство памяти не является непрерывным. Это называется внешней фрагментацией.

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

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

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

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

      Из этого руководства по операционной системе вы узнаете:

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

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

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

      Методы управления памятью

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

      Одно непрерывное выделение

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

      Раздельное размещение

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

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

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

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

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

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

      Что такое обмен?

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

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

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

      Преимущества замены

      Вот основные преимущества/плюсы обмена:

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

      Что такое выделение памяти?

      Распределение памяти — это процесс, посредством которого компьютерным программам выделяется память или пространство.

      Здесь основная память разделена на два типа разделов

      1. Недостаточно памяти. Операционная система находится в этом типе памяти.
      2. Высокая память: пользовательские процессы хранятся в верхней памяти.

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

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

      Ниже приведены различные схемы распределения разделов:

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

      Что такое пейджинг?

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

      Что такое фрагментация?

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

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

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

      Что такое сегментация?

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

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

      Что такое динамическая загрузка?

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

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

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

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