пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Дорогой друг! Ранее мы рассказывали про новинки FreePBX 14. Новые и интересные фичи безусловно не будут лишними. Ну что же, приступим теперь к обновлению FreePBX 13 версии до 14?
Pre-work
Рекомендуем перед началом работ сделать полный бэкап/снэпшот сервера, на котором будут производиться работы;
Как и у любого пользователя FreePBX, у вас в Dashboard графической оболочки появилось следующее уведомление:
Заманчивое название модуля. Переходим в консоль (подключаемся пол SSH) вашего сервера и даем простую команду:
fwconsole ma downloadinstall versionupgrade
Модуль будет установлен:
Теперь возвращаемся в FreePBX. В правом верхнем углу нажимаем Apply Config. Далее, прыгаем по пути Admin → 13 to 14 Upgrade Tool и вот что мы увидим:
Нажимаем на кнопку Check the requirements! и смотрим: система говорит, что у нас установлен FreePBX Distro и нам необходимо воспользоваться специальным скриптом для апгрейда. Что же, приступим к обновлению вручную.
Обновление через CLI
Перед началом работ есть определенные требования, такие как:
Сервер с 64 - битной архитектурой;
Как минимум 10 Гб свободного места;
Стабильное интернет соединение;
Если вы используете 32 – битную архитектуру, то проще всего воспользоваться FreePBX Conversion tool, сделав бэкап на 32 – битной системе, а восстановить его в системе 64 – бит с FreePBX 14. При попытке установки на 32 – битной системе процесс предупредит вас об этом:
Устанавливаем нужный RPM:
yum -y install http://package1.sangoma.net/distro-upgrade-1707-16.sng7.noarch.rpm
После успешной установки RPM даем следующую команду:
distro-upgrade
И переходим в интерактивный режим:
[root@freepbx ~]# distro-upgrade
??????????????????????????????????????????????
? ?
? Sangoma 6 to 7 Upgrade Tool ?
? ?
? Distro Upgrade - Version 1707-2.sng7 ?
? Build Date: 2017-06-21 ?
? ?
??????????????????????????????????????????????
Checking prerequsites...
Checking bitsize of machine [ ? ] - x86_64
Checking available disk space [ ? ] - 13G Available
All prerequsites passed!
Are you ready to upgrade your machine to SNG7? This process requires
two reboots, and will download approximately 200mb of files before
starting. There will be no interruption to service until this machine
is rebooted.
Download files required for upgrade [Yn]?
Указываем y:
Download files required for upgrade [Yn]? y
######### Starting setup upgrade on Tue Aug 22 17:39:08 MSK 2017 #########
######### Creating upgrade repofile #########
######### Installing needed packages #########
######### Running preupgrade #########
######### Running upgrade-tool #########
######### Downloading sangoma-release rpm #########
######### Updating packages.list #########
######### Verified sangoma-release in package.list #########
######### Reboot to finish this stage of the upgrade #########
######### Finished setup upgrade on Tue Aug 22 17:44:12 MSK 2017 #########
Preparations complete!
Please reboot your machine when convenient. This machine will install all the new
and upgraded packages, and then reboot for a second time automatically. After the
second reboot, it will then continue the upgrade process automatically. When the
upgrade is complete, you will be presented with a standard login prompt.
Важно! Данный процесс можно проводить в рабочее время параллельно с обслуживанием вызовов. Даунтайм подразумевается только далее, после перезагрузки.
Перезагружаем сервер командой reboot. При загрузке, у вас будет автоматически выбрана опция System Upgrade, как показано ниже. Если нет, то выберите эту опцию вручную стрелками на клавиатуре:
После этого начнется процесс обновления. Длительность этого процесса напрямую коррелирует с производительностью вашего сервера. После обновление компоненты Core OS произойдет вторая перезагрузка, в рамках которой произойдет обновление всех модулей FreePBX, после чего апгрейд будет завершен.
По окончанию, вы увидите стандартный баннер FreePBX 14:
Выполняем проверку версии. Даем команду в консоль:
ls -l /usr/src | grep freepbx
Если все ОК, то вывод будет вот такой:
Перед началом, советуем почитать материал про плоскость управления.
Топология - это набор связей (или ребер) и узлов, которые описывают всю сеть. Обычно топология описывается и рисуется как граф, но она также может быть представлена в структуре данных, предназначенной для использования машинами, или в дереве, которое обычно предназначено для использования людьми.
Топологическую информацию можно обобщить, просто сделав так, чтобы пункты назначения, которые физически (или виртуально) соединены на расстоянии нескольких прыжков, казались непосредственно присоединенными к локальному узлу, а затем удалив информацию о связях и узлах в любой маршрутной информации, переносимой в плоскости управления, с точки суммирования. Рисунок 4 иллюстрирует эту концепцию.
Изучение топологии
Казалось бы, достаточно просто узнать о топологии сети: изучить подключенные каналы передачи данных. Однако то, что кажется простым в сетях, часто оказывается сложным. Изучение локального интерфейса может рассказать вам о канале, но не о других сетевых устройствах, подключенных к этому каналу. Кроме того, даже если вы можете обнаружить другое сетевое устройство, работающее с той же плоскостью управления по определенному каналу, это не означает, что другое устройство может вас обнаружить. Таким образом, необходимо изучить несколько вопросов.
Обнаружение других сетевых устройств
Если маршрутизаторы A, B и C подключены к одному каналу, как показано на рисунке 5, какие механизмы они могут использовать для обнаружения друг друга, а также для обмена информацией о своих возможностях?
Первое, что следует отметить в отношении сети, показанной в левой части рисунка 5, - это то, что интерфейсы не соответствуют соседям. Фактические отношения соседей показаны в правой части рисунка 5. У каждого маршрутизатора в этой сети есть два соседа, но только один интерфейс. Это показывает, что плоскость управления не может использовать информацию об интерфейсе для обнаружения соседей. Должен быть какой-то другой механизм, который плоскость управления может использовать для поиска соседей.
Ручная настройка - одно из широко распространенных решений этой проблемы. В частности, в плоскостях управления, предназначенных для перекрытия другой плоскости управления, или плоскостях управления, предназначенных для построения отношений соседства через несколько маршрутизируемых переходов по сети, ручная настройка часто является самым простым доступным механизмом. С точки зрения сложности, ручная настройка очень мало добавляет к самому протоколу. Например, нет необходимости в какой-либо форме многоадресного объявления соседей. С другой стороны, ручная настройка соседей требует настройки информации о соседях, что увеличивает сложность с точки зрения конфигурации. В сети, показанной на рисунке 5, маршрутизатор A должен иметь отношения соседства, настроенные с помощью B и C, маршрутизатор B должен иметь отношения соседства, настроенные с помощью A и C, а маршрутизатор C должен иметь отношения соседства, настроенные с помощью A и B. Даже если настройка соседей автоматизирована, ручная настройка углубляет и расширяет поверхности взаимодействия между плоскостями управления и контроля.
Определение соседей из маршрутных объявлений - это решение, которое когда-то было широко распространено, но стало менее распространенным. В этой схеме каждое устройство периодически объявляет информацию о доступности и / или топологии. Когда маршрутизатор впервые получает информацию о маршрутизации от другого устройства, он добавляет удаленное устройство в локальную таблицу соседей. Пока соседнее устройство продолжает отправлять информацию о маршрутизации на регулярной основе, отношения между соседями будут считаться активными или активными.
При выводе соседей из объявлений о маршрутизации важно иметь возможность определить, когда сосед вышел из строя (чтобы информация о достижимости и топологии, полученная от соседа, могла быть удалена из любых локальных таблиц). Наиболее распространенный способ решения этой проблемы - использование пары таймеров: таймера задержки или отключения и таймера обновления или объявления. Пока сосед отправляет обновление или объявление в пределах таймера отключения или задержки, он считается включенным или активным. Если весь "мертвый" период проходит без получения каких-либо обновлений, сосед считается "мертвым", и предпринимаются некоторые действия, чтобы либо проверить информацию о топологии и доступности, полученную от соседа, либо он просто удаляется из таблицы.
Нормальная взаимосвязь между таймером отключения и таймером обновления составляет 3× - таймер отключения установлен на трехкратное значение таймера обновления. Следовательно, если сосед не отправляет три подряд обновления или объявления, таймер бездействия активируется и начинает обработку неработающего соседа.
Явные приветствия являются наиболее распространенным механизмом обнаружения соседей. Пакеты приветствия передаются на основе таймера приветствия, и сосед считается "мертвым", если приветствие не получено в течение интервала таймера ожидания или объявления. Это похоже на таймеры dead и update, используемые для вывода соседей из объявлений маршрутизации. Приветствия обычно содержат информацию о соседней системе, такую как поддерживаемые возможности, идентификаторы уровня устройства и т. д.
Централизованная регистрация - это еще один механизм, который иногда используется для обнаружения и распространения информации о соседних устройствах. Каждое устройство, подключенное к сети, будет отправлять информацию о себе в какую-либо службу и, в свою очередь, узнавать о других устройствах, подключенных к сети, из этой централизованной службы. Конечно, эту централизованную службу нужно каким-то образом обнаружить, что обычно осуществляется с помощью одного из других упомянутых механизмов.
Обнаружение двусторонней связи
В плоскостях управления с более сложными процессами формирования смежности - особенно протоколами, которые полагаются на приветствия для формирования отношений соседства - важно определить, могут ли два маршрутизатора видеть друг друга (осуществлять двустороннюю связь), прежде чем формировать отношения. Обеспечение двусторонней связи не только предотвращает проникновение однонаправленных каналов в таблицу пересылки, но также предотвращает постоянный цикл формирования соседей - обнаружение нового соседа, построение правильных локальных таблиц, объявление о доступности новому соседу, тайм-аут ожидания hello или другую информацию, удаление соседа или поиск нового соседа. Существует три основных варианта управления двусторонним подключением между сетевыми устройствами.
Не утруждайте себя проверкой двусторонней связи. Некоторые протоколы не пытаются определить, существует ли двусторонняя связь между сетевыми устройствами в плоскости управления, а скорее предполагают, что сосед, от которого принимаются пакеты, также должен быть доступен.
Перенос списка доступных соседей, услышанных на линии связи. Для протоколов, которые используют приветствия для обнаружения соседей и поддержания работоспособности, перенос списка доступных соседей по одному и тому же каналу является распространенным методом обеспечения двусторонней связи. Рисунок 6 иллюстрирует это.
На рисунке 6 предположим, что маршрутизатор A включен раньше B. В этом случае:
A отправит приветствия с пустым списком соседей, поскольку он не получил приветствия от любого другого сетевого устройства по каналу.
Когда B включен, он получит приветствие A и, следовательно, включит A в список соседей, которые он слышал в своих hello пакетах.
Когда A получает приветствие B, он, в свою очередь, включает B в свой список "услышанных" соседей в своих пакетах приветствия.
Когда и A, и B сообщают друг о друге в своих списках соседей, которые "слышно от", оба маршрутизатора могут быть уверены, что двустороннее соединение установлено.
Этот процесс часто называют трехсторонним рукопожатием, состоящим из трех шагов:
A должен послать привет B, чтобы B мог включить A в свой список соседей.
B должен получить приветствие A и включить A в свой список соседей.
A должен получить приветствие B с самим собой (A) в списке соседей B.
Положитесь на базовый транспортный протокол. Наконец, плоскости управления могут полагаться на базовый транспортный механизм для обеспечения двусторонней связи. Это необычное решение, но есть некоторые широко распространенные решения. Например, протокол Border Gateway Protocol (BGP), опирается на протокол управления передачей (TCP), чтобы обеспечить двустороннюю связь между спикерами BGP.
Определение максимального размера передаваемого блока (MTU)
Для плоскости управления часто бывает полезно выйти за рамки простой проверки двусторонней связи. Многие плоскости управления также проверяют, чтобы максимальный размер передаваемого блока (MTU) на обоих интерфейсах канала был настроен с одинаковым значением MTU. На рисунке 7 показана проблема, решаемая с помощью проверки MTU на уровне канала в плоскости управления.
В ситуации, когда MTU не совпадает между двумя интерфейсами на одном канале, возможно, что соседние отношения сформируются, но маршрутизация и другая информация не будут передаваться между сетевыми устройствами. Хотя многие протоколы имеют некоторый механизм для предотвращения использования информации о результирующих однонаправленных каналах при вычислении путей без петель в сети, все же полезно обнаруживать эту ситуацию, чтобы о ней можно было явным образом сообщить и исправить. Протоколы плоскости управления обычно используют несколько методов, чтобы либо явно обнаружить это условие, либо, по крайней мере, предотвратить начальные этапы формирования соседей.
Протокол плоскости управления может включать локально настроенный MTU в поле в пакетах приветствия. Вместо того чтобы просто проверять наличие соседа во время трехстороннего рукопожатия, каждый маршрутизатор может также проверить, чтобы убедиться, что MTU на обоих концах линии связи совпадает, прежде чем добавлять новое обнаруженное сетевое устройство в качестве соседа.
Другой вариант - добавить пакеты приветствия к MTU локального интерфейса. Если дополненный пакет приветствия максимального размера не получен каким-либо другим устройством в канале связи, начальные этапы отношений соседства не будут завершены. Трехстороннее рукопожатие не может быть выполнено, если оба устройства не получают пакеты приветствия друг друга.
Наконец, протокол плоскости управления может полагаться на базовый транспорт для регулирования размеров пакетов, чтобы коммуникационные устройства могли их принимать. Этот механизм в основном используется в плоскостях управления, предназначенных для наложения какой-либо другой плоскости управления, особенно в случае междоменной маршрутизации и виртуализации сети. Плоскости управления наложением часто полагаются на обнаружение MTU пути (Path MTU) для обеспечения точного MTU между двумя устройствами, подключенными через несколько переходов.
Сам размер MTU может оказать большое влияние на производительность плоскости управления с точки зрения ее скорости сходимости. Например, предположим, что протокол должен передавать информацию, описывающую 500 000 пунктов назначения по многопоточному каналу с задержкой 500 мс, и для описания каждого пункта назначения требуется 512 бит:
Если MTU меньше 1000 бит, для плоскости управления потребуется 500 000 циклов туда и обратно для обмена всей базой данных доступных пунктов назначения, или около 500 000 × 500 мс, что составляет 250 000 секунд или около 70 часов.
Если MTU составляет 1500 октетов или 12000 битов, плоскости управления потребуется около 21000 циклов туда и обратно для описания всей базы данных доступных пунктов назначения, или около 21000 × 500 мс, что составляет около 175 минут.
Важность сжатия такой базы данных с использованием какого-либо оконного механизма для сокращения числа полных обходов, необходимых для обмена информацией о достижимости, и увеличения MTU вполне очевидна.
Далее почитайте материал о том, как происходит обнаружение соседей в сетях.
Управление памятью в операционных системах
Введение
Управление памятью – это критически важная и при этом довольно сложная задача для операционной системы. Это дает возможность запускать несколько процессов одновременно без сбоев.
Понимание того, как работает управление памятью в операционных системах, имеет ключевое значение для стабильности и высокой производительности системы.
В этой статье мы рассмотрим ключевые концепции управления памятью в операционных системах.
Что такое управление памятью?
Основные компоненты управления памятью – это процессор и блок памяти. Эффективность системы зависит от того, как эти два компонента взаимодействуют друг с другом.
Эффективность управления памятью зависит от двух факторов:
1.
Организация блока памяти
. Блок памяти состоит из нескольких типов памяти. Иерархия и организация памяти компьютера влияют на скорость доступа к данным и размер хранилища. Более быстрые и меньшие кэши хранятся ближе к процессору, а более крупная и медленная память – дальше.
2.
Доступ к памяти
. Процессор постоянно обращается к данным, которые хранятся в памяти. Эффективный доступ к памяти влияет на то, насколько быстро процессор выполняет задачи и становится доступным для новых. Доступ к памяти предусматривает работу с адресами и определение правил доступа на разных уровнях памяти.
Управление памятью позволяет найти компромисс между скоростью, вместимостью и энергопотреблением компьютера. Основная память обеспечивает быстрый доступ, но не постоянное хранение. А вот вспомогательная память обеспечивает постоянное хранение, но медленный доступ.
Для чего нужно управление памятью?
Основная память – это неотъемлемая часть операционной системы. С ее помощью процессор может получать доступ к данным, которые необходимы для запуска процессов. Однако многочисленные операции чтения-записи замедляют работу системы.
В связи с этим, чтобы оптимизировать использование процессора и повысить скорость компьютера, в памяти размещаются несколько процессов сразу. Управление памятью необходимо для того, чтобы наиболее эффективно разделить память между процессами.
Таким образом, управление памятью влияет на следующие факторы:
Использование ресурсов
. Управление памятью – это ключевой аспект распределения ресурсов компьютера. Центральный компонент – оперативная память, и процессы используют ее для работы. Операционная система сама решает, как разделить память между процессами. Правильное распределение гарантирует, что каждый процесс получит необходимое количество памяти для одновременного выполнения.
Оптимизация производительности
. Те или иные механизмы управления памятью оказывают значительное влияние на скорость и стабильность системы. Все эти механизмы направлены на то, чтобы сократить количество операций получения доступа к памяти, которые дают большую нагрузку на процессор.
Безопасность
. Управление памятью обеспечивает безопасность данных и процессов. Изоляция памяти позволяет сделать так, чтобы процессы использовали только ту память, которую им предоставили. Кроме того, управление памятью позволяет реализовать механизм прав доступа, который поможет предотвратить вход в закрытые области памяти.
Для отслеживания выделенной процессам памяти операционные системы используют адреса памяти.
Адреса памяти
Адреса памяти крайне важны для управления памятью в операционных системах. Адрес памяти – это уникальный идентификатор конкретной области или ячейки памяти. С помощью адресов можно легко находить и получать доступ к информации, которая хранится в памяти.
Механизмы управления памятью позволяют отслеживать каждую ячейку памяти, сопоставлять адреса и управлять адресным пространством памяти. В различных ситуациях могут потребоваться разные способы обращения к ячейкам памяти.
Ниже описаны два типа адресов основной памяти. Каждый из них играет свою роль в управлении памятью и служит определенной цели.
Физические адреса
Физический адрес – это числовой идентификатор, который указывает на ячейку физической памяти. Этот адрес представляет собой фактическое расположение данных в аппаратном обеспечении и играет важнейшую роль в низкоуровневом управлении памятью.
Аппаратные компоненты, такие как процессор и контроллер памяти, используют именно физические адреса. Эти адреса уникальны и указывают на конкретную ячейку, за счет чего аппаратное обеспечение может быстро находить любые данные. Для пользовательских программ физические адреса непригодны.
Виртуальные адреса
Виртуальный адрес – это адрес, сгенерированный программой. Он представляет собой абстракцию физической памяти. Все процессы используют адресное пространство виртуальной памяти в качестве выделенной памяти.
Виртуальные адреса не соответствуют никаким ячейкам физической памяти. Программы читают и создают виртуальные адреса, не подозревая о существовании физического адресного пространства. Блок оперативной памяти (MMU - Main Memory Unit) отвечает за сопоставление виртуальных адресов с физическими, чтобы обеспечить правильный доступ к памяти.
Для более эффективного использования памяти виртуальное адресное пространство разделено на сегменты и страницы.
Статическая и динамическая загрузка
Статическая и динамическая загрузка – это
два способа выделения памяти под исполняемые программы
. Они различаются количеством используемой памяти и ресурсов. Выбор зависит от количества доступной памяти и ресурсов, а также необходимой производительности.
Статическая загрузка
распределяет память и адреса при запуске программы. Однако, когда программа заранее загружается в память вместе со всеми необходимыми ресурсами, мы получаем предсказуемое, но крайне неэффективное использование ресурсов. Системные утилиты и приложения используют статическую загрузку с целью упростить распространение программ. Исполняемые файлы требуют компиляции и, как правило, представляют собой довольно большие файлы. Как правило, статическую загрузку используют операционные системы реального времени, загрузчики и устаревшие системы.
Динамическая загрузка
распределяет память и адреса непосредственно во время выполнения программы, и сама программа запрашивает ресурсы по мере необходимости. Динамическая загрузка позволяет снизить объем потребляемой памяти и обеспечивает многозадачную среду. Исполняемые файлы меньше по размеру, но добавляют дополнительную сложность за счет утечек памяти, потребления ресурсов и ошибок в процессе выполнения. Современные операционные системы (Linux, macOS, Windows), мобильные операционные системы (Android, iOS) и веб-браузеры используют именно динамическую загрузку.
Статическое и динамическое связывание
Статическое и динамическое связывание — это два способа работы с библиотеками и зависимостями программ, аналогичные статической и динамической загрузке:
Статическое связывание
выделяет память для библиотек и зависимостей при запуске программы и до компиляции. Программы являются полностью готовыми и не требуют внешних библиотек в процессе компиляции.
Динамическое связывание
выделяет память для библиотек и зависимостей после запуска программы и по мере необходимости. После компиляции программы находятся в поиске необходимых внешних библиотек.
Как правило, статическая загрузка и связывание объединяются в единый подход управления памятью, при котором все ресурсы программы определяются заранее. Аналогичным образом динамическая загрузка и связывание создают свою стратегию, в которой программы распределяют и ищут ресурсы по мере необходимости.
Комбинирование различных стратегий загрузки и связывания в некотором смысле возможно. Такой смешанный подход будет довольно сложен с точки зрения управления, но при этом даст преимущества обоих методов.
Подкачка
Подкачка (англ. swapping) – это механизм управления памятью, который операционные системы используют для того, чтобы освобождать место в оперативной памяти. Механизм позволяет перемещать неактивные процессы или данные между оперативной памятью и вспомогательным хранилищем, например, жестким или SSD-диском.
Для разрешения вопроса, связанного с ограниченным размером оперативной памяти, процесс подкачки прибегает к использованию виртуальной памяти. За счет этого, подкачка считается крайне важным методом управления памятью в операционных системах. Этот метод использует область вспомогательной памяти и создает там swap-память, то есть дополнительный раздел или файл.
Swap-пространство позволяет превысить объем оперативной памяти за счет разделения данных на блоки фиксированного размера (страницы). Механизм подкачки отслеживает, какие страницы находятся в оперативной памяти, а какие откачиваются из-за ошибок страниц.
Чрезмерная подкачка приводит к снижению производительности, так как вспомогательная память начинает работать медленнее. Различные стратегии подкачки и значения коэффициента подкачки позволяют минимизировать ошибки страниц, гарантируя, что в оперативной памяти находятся только необходимые данные.
Фрагментация
Фрагментация – это то, что мы получаем при попытке разделить память на разделы. Операционная система занимает только часть основной памяти. Оставшаяся основная память предназначена для процессов и делится на более мелкие разделы. Такое разделение не подразумевает использование виртуальной памяти.
Существует два способа, как можно разбить оставшуюся память: на разделы фиксированного или динамически меняющегося размера. В результате вы получите два разных типа фрагментации:
Внутренняя
. Если оставшаяся память разделена на одинаковые по размеру разделы, то программы, размер которых превышает размер раздела, требуют перекрытия, а программы меньшего размера занимают больше места, чем им положено. И все это нераспределенное пространство создает внутреннюю фрагментацию.
Внешняя
. Динамическое разделение оставшейся памяти позволяет создавать разделы с изменяемым размером. Процесс получает ровно столько памяти, сколько ему необходимо. Когда процесс завершается, пространство освобождается. Через какое-то время начинают появляться неиспользуемые интервалы памяти, что приводит к внешней фрагментации.
Внутренняя фрагментация требует конструктивных изменений. Как правило, это разрешается с помощью механизма подкачки и сегментации.
Внешняя фрагментация требует, чтобы операционная система выполняла периодическую дефрагментацию и освобождала неиспользуемое пространство.
Методы управления памятью
Разные методы управления памяти решают разные проблемы, возникающие вследствие неправильной организации памяти. Одна из основных целей этих методов – оптимизировать потребление ресурсов в системе.
Существует два основных подхода к распределению и управлению памятью:
управление
непрерывной памятью
и
управление
несмежной памятью
. Каждый из этих подходов имеет свои преимущества, и выбор зависит от требований системы и аппаратной архитектуры.
Схемы управления непрерывной памятью
Схемы управления непрерывной памятью выделяют процессам блоки непрерывной памяти. Адреса памяти и процессы имеют линейную зависимость, что упрощает реализацию этой системы.
Существуют различные способы реализации схем управления непрерывной памятью. Ниже мы представили краткое описание известных схем.
Выделение общей непрерывной памяти
Персональное выделение непрерывной памяти – это один из первых методов управления памятью. При такой схеме оперативная память делится на два раздела:
Раздел операционной системы
. Раздел закреплен за операционной системой, которая загружается в него при запуске.
Раздел пользовательского процесса
. Второй раздел предназначен для загрузки одного пользовательского процесса и всех связанных с ним данных.
Такая схема была реализована в более старых операционных системах, таких как MS-DOS. Система довольно простая, и отслеживать необходимо всего два раздела. Но такой простой подход не обеспечивает изоляцию процессов и приводит к тому, что память тратиться впустую.
Современные операционные системы не используют такой метод управления памятью. Но эта схема заложила фундамент для развития других методов управления памятью.
Распределение с фиксированными разделами
Распределение с фиксированными разделами – это схема управления памятью, которая подразумевает деление оперативной памяти на разделы одинакового размера. Размер раздела определяется заранее, поэтому необходимо заранее знать, сколько памяти требуется процессам.
Операционная система отслеживает и выделяет процессам разделы. Каждый процесс получает выделенный ему раздел, который обеспечивает изоляцию памяти и безопасность процесса.
Однако использование разделов фиксированного размера приводит к фрагментации. Если процессы оказываются меньше раздела, то возникает внутренняя фрагментация. А внешняя фрагментация возникает со временем, в результате чего становится сложнее выделять память под более крупные процессы.
Алгоритм двойников
Алгоритм двойников – это схема динамического управления памятью. Здесь оперативная память делится на блоки переменного размера. Зачастую размеры представляются степенями двойки (2 Кб, 4 Кб, 8 Кб, 16 Кб и т.д.).
Когда процесс запрашивает память, ОС начинает искать наиболее подходящий блок наименьшего размера, чтобы выделить его под этот процесс. Если блоков поменьше нет, тогда большие блоки делятся пополам. Когда память освобождается, ОС проверяет, свободны ли соседние блоки (блоки-двойники), и объединяет их в более крупные.
Для отслеживания состояния блоков памяти и поиска свободных алгоритм двойников использует двоичное дерево. Такая схема поддерживает баланс между фрагментацией и эффективным распределением памяти. Самые примечательные области применения – это память ядра Linux и встроенные системы.
Схемы управления несмежной памятью
Схемы управления несмежной памятью позволяют распределять процессы по всей памяти. Адреса памяти и процессы имеют нелинейную зависимость, и процессы могут получить память где угодно.
Эти схемы направлены на решение проблем фрагментации, но они довольно сложны с точки зрения реализации. Большая часть современных операционных систем используют именно управление несмежной памятью.
Ниже мы привели описание самых важных механизмов управления несмежной памятью.
Страничная организация памяти
Страничная организация памяти – это подход к управлению оперативной и виртуальной памятью. При таком подходе память делится на блоки одинакового размера:
Страницы
. Блоки виртуальной памяти с логическими адресами.
Страничные кадры
. Блоки оперативной памяти с физическими адресами.
Этот механизм к каждому процессу применяет таблицу страниц, где отслеживает процесс сопоставления адресов страниц и кадров. А вот операционная система по мере необходимости перемещает данные между оперативной и вспомогательной памятью, используя подкачку.
Страничная организация памяти позволяет сократить внешнюю фрагментацию. Это гибкий, переносимый и эффективный механизм управления памятью. Его используют многие современные операционные системы (Linux, Windows и macOS).
Сегментация
Сегментация — это схема управления памятью, при которой память делится на логические сегменты. Каждый сегмент соответствует определенной области, где в рамках процесса выполняются различные функции и задачи.
В отличие от страниц, сегменты имеют разные размеры. Каждый сегмент имеет уникальный идентификатор, который называется дескриптором сегмента. Операционная система хранит таблицу сегментов, содержащую дескриптор, смещение и базовый адрес. И чтобы вычислить физический адрес, процессор объединяет смещение и базовый адрес.
Сегментация - это динамический, безопасный и логический подход к управлению памятью. Однако этот механизм довольно сложен и подходит не для всех случаев.
Заключение
Прочитав данное руководство, вы ознакомились со всеми подробностями управления памятью в операционных системах.
