Понимание распределения памяти ядра с использованием систем Buddy и Slab
11 марта 2023 г.* Знаете ли вы, как выделить память ядра? * Какова идеальная стратегия распределения памяти ядра? * Как можно эффективно использовать систему друзей в ОС?
Если все эти вопросы, связанные с распределением памяти, волнуют вас, то этот пост в блоге идеально подходит для вас.
Системы Buddy в ОС и slab-системы — это два эффективных метода, используемых для выделения свободной памяти в процессах ядра. Поскольку ядро рекламируется как предлагающее физическую непрерывную память, ему часто требуются области памяти для выделения памяти или минимизации внешней фрагментации.
Именно тогда появляются концепции партнерских систем и слэб-систем!
Выделение памяти ядра
Во-первых, мы должны рассмотреть, почему в первую очередь необходимо выделять память ядра. Когда процесс запускается, ему может потребоваться дополнительная память. Хотя страницы будут выделяться из списка фреймов страниц, поддерживаемых ядром, в основном это свободные страницы.
Такой тип памяти обычно выделяется из пула памяти для выполнения процесса в обычном режиме, потому что:
* Запрошенная память в структуре данных может различаться по размеру или страницам. Таким образом, память должна использоваться консервативно из-за фрагментации. Это важно, так как операционная система может не использовать код ядра для систем подкачки.
* Страницы, которые могут быть выделены, могут не храниться в непрерывной физической памяти. Однако некоторые аппаратные устройства могут напрямую взаимодействовать с физической памятью. Хотя для этого также может потребоваться память, которая находится на страницах физической памяти.
Поэтому необходимо управлять памятью, задействованной в процессах ядра. Вот почему мы обычно следуем двум стратегиям: системе друзей в ОС и системе плит.
Система друзей в ОС
Это идеальная концепция распределения памяти, которая делит вашу память на две степени. Он пытается удовлетворить ваш запрос памяти, разделяя память и используя ее на равные половины, чтобы увидеть, где она подходит лучше всего.
Предположим, что ваша память имеет размер 2m. Размер этого процесса обозначается P.
В случае 2m-1 < P<= 2m, вы можете рассчитать память в своем процессе. В противном случае мы можем выделить память пополам. Если он не удовлетворяет заданному условию, повторяйте шаги до тех пор, пока не будет выполнено указанное выше условие.
Пример:
Нам дают систему buddy с физическим адресом, 256 КБ. Затем нам нужно найти размер раздела 36 КБ.
Поскольку 36 КБ больше 32 КБ, но меньше доступных 64 КБ. Таким образом, для хранения процесса подходит 64 КБ памяти.
Важность системы друзей в ОС
Система друзей в вашей ОС крайне необходима по следующим причинам:
* Существует ограничение на количество заданных процессов в статическом позиционировании. Места будет недостаточно, если будет большая разница в размере процесса и размере раздела.
* Динамическое программирование считается более сложным, поскольку размер раздела изменяется при выделении памяти новым процессам.
* Система Buddy каким-то образом существует между динамическим и статическим программированием. Хотя поддержка может быть ограничена, нам необходимо объединить блоки памяти
Типы систем друзей
Существуют различные типы систем напарников, которые вы должны принять во внимание.
Они:
* Двоичная партнерская система: в этой партнерской системе блоки памяти делятся на равные части, чтобы удовлетворить рекуррентному соотношению Li = Li - 1 + Li - 1
* Система друзей Фибоначчи: использует блоки размером 16, 32, 48, 80, 128 и 208 байт. Каждый блок будет суммой двух предшествующих ему блоков.
* Взвешенная система друзей: здесь блок памяти размером 2 КБ +2 разделен на блоки размером 2 КБ и 3,2 КБ
Система перекрытий
Второй стратегией, которая обычно применяется для выделения памяти ядра, является slab-система. Блок состоит из одной или нескольких смежных страниц. Например; будет отдельный кеш для структур данных, файловых объектов, семафоров и т.д.
Возьмем другой пример двух ядер по 3 КБ с тремя объектами размером 7 КБ. Распределение плит использует уловы для хранения объекта. Они отмечены как свободные и будут использоваться для размещения объектов.
В этом случае плита размером 12 КБ будет хранить как минимум 6 объектов размером 2 КБ, причем все они будут помечены как свободные. Новые объекты будут помечены для необходимой структуры данных. Запрос ядра в распределителе slab описывает описание процесса. В системе Linux дескриптор процесса будет иметь размер struct с максимальным объемом памяти 1,7 КБ. Это создаст несколько новых задач для объектов этого кеша.
Этот кеш сможет выполнять объекты, выделенные в плите, чтобы пометить их как свободные.
В Linux данный блок будет иметь три состояния:
- Полный: все объекты здесь будут помечены как используемые.
- Пусто: все объекты в блокноте отмечены как свободные.
- Частично: в этом случае плита состоит из всех свободных или используемых объектов.
Основная цель распределителя плит будет заключаться в удовлетворении запросов, заданных в частичной плите. Если ничего из этого не существует, свободный объект будет назначен вашей пустой плите.
Дополнительное обучение: аномалия Белади в ОС
Еще одно важное понятие, которое вам следует знать, если вы работаете с операционной системой, – это Аномалия Белади в ОС. Это рассматривается как явление, которое помогает увеличить количество кадров страниц, чтобы увеличить количество ошибок страниц в вашей памяти.
Подведение итогов
Я надеюсь, что с помощью этого руководства вы получили глубокое понимание системы друзей в ОС и системы плит для выделить память ядра. Оставайтесь в этом блоге и оборудуйте свой банк знаний.
н
Оригинал