Шрифт:
Получение страниц заполненных нулями
Для того чтобы получаемые страницы памяти были заполнены нулями, необходимо использовать следующую функцию.
Эта функция аналогична функции
Таблица 11.2. Низкоуровневые средства выделения памяти
| Функция | Описание |
|---|---|
alloc_page(gfp_mask) | Выделяет одну страницу памяти и возвращает указатель на соответствующую ей структуру page |
alloc_pages(gfp_mask, order) | Выделяет 2 order страниц памяти и возвращает указатель на структуру page первой страницы |
__get_free_page(gfp_mask) | Выделяет одну страницу памяти и возвращает указатель на ее логический адрес |
__get_free_pages(gfp_mask, order) | Выделяет 2 order страниц памяти и возвращает указатель на логический адрес первой страницы |
get_zeroed_page(gfp_mask) | Выделяет одну страницу памяти, обнуляет ее содержимое и возвращает указатель на ее логический адрес |
Освобождение страниц
Для освобождения страниц, которые больше не нужны, можно использовать следующие функции.
Необходимо быть внимательными и освобождать только те страницы памяти, которые вам выделены. Передача неправильного значения параметра
Значение
Обратите внимание на проверку ошибок после вызова функции
Низкоуровневые функции выделения памяти полезны, когда необходимы участки памяти, которые находятся в смежных физических страницах, особенно если необходима одна страница или очень большое количество страниц. Для более общего случая, когда необходимо выделить заданное количество байтов памяти, ядро предоставляет функцию
Функция
Функция
Рассматриваемая функция определена в файле
Данная функция возвращает указатель на участок памяти, который имеет размер хотя бы
63
Данная функция может выделить памяти больше, чем указано, и нет никакой возможности узнать, на сколько больше! Поскольку в своей основе система выделения памяти в ядре базируется на страницах, некоторые запросы на выделение памяти могут округляться, чтобы хорошо вписываться е области доступной памяти. Ядро никогда не выделит меньше памяти, чем необходимо. Если ядро не в состоянии найти хотя бы указанное количество байтов, то операция завершится неудачно и функции возвратит значение
Рассмотрим пример. Допустим, нам необходимо выделить достаточно памяти для того, чтобы в ней можно было разместить некоторую воображаемую структуру
Если вызов функции