Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Внутренние механизмы ядра | Вперед |
Механизмы управление памятью
В ядре Linux существует несколько альтернативных механизмов динамического выделения участка памяти (распределение статически описанных непосредственно в коде областей данных мы не будем затрагивать, хотя это тоже вариант решения поставленной задачи). Каждый из таких механизмов имеет свои особенности, и, естественно, свои преимущества и недостатки перед своими альтернативными собратьями.
Примечание: Отметьте, что (практически) все механизмы динамического выделения памяти в пространстве пользователя (malloc(), calloc(), etc.) являются системными вызовами, которые ретранслируются в рассматриваемые здесь механизмы. Исключение составляет один alloca(), который распределяет память непосредственно из стека выполняемой функции (что имеет свою опасность в использовании). Таким образом, рассматриваемые вопросы имеют прямой практический интерес и для прикладного программирования (пространства пользователя).
Механизмы динамического управления памятью в коде модулей (ядра) имеют два главных направления использования:
- Однократное распределение буферов данных (иногда достаточно и объёмных и сложно структурированных), которое выполняется, как правило, при начальной инициализации модуля (в сетевых драйверах часто при активизации интерфейса командой ifconfig);
- Многократное динамическое создание-уничтожение временных структур, организованных в некоторые списочные структуры;
Первоначально мы рассматриваем механизмы первой названной группы (которые, собственно, и являются механизмами динамического управления памятью), но к концу раздела отклонимся и рассмотрим использование циклических двусвязных списков, ввиду их максимально широкого использования в ядре Linux (и призывов разработчиков ядра использовать только эти, или подобные им, там же описанные, структуры).
Предыдущий раздел: | Оглавление | Следующий раздел: |
Внутренние механизмы ядра | Динамическое выделение участка |