Який спосіб виділення пам’яті необхідно використовувати

Якщо необхідні суміжні сторінки фізичної памяті, то потрібно використовувати один з низькорівневих інтерфейсів виділення памяті, або функцію kmalloc () Це стандартний спосіб виділення памяті в ядрі, і, швидше за все, в більшості випадків слід використовувати саме його Необхідно згадати, що два найбільш часто зустрічаються прапора, які передаються цієї функції, це прапори GFP_ATOMIC і GFP_KERNEL Для високопріоритетних операцій виділення памяті, які не переводять процес в стан очікування, необхідно вказувати прапор GFP_ATOMIC Це обовязково для обробників переривань та інших випадків, коли не можна переходити в стан очікування У коді, який може переходити в стан очікування, як, наприклад код, що виконується в контексті процесу і не утримує спін-блокування, необхідно використовувати прапор GFP_KERNEL Такий прапор вказує, що повинна виконуватися операція виділення памяті, яка при необхідності може перейти в стан очікування для отримання необхідної памяті

Якщо є необхідність виділити сторінки верхньої памяті, то слід використовувати функцію alloc_pages () Функція alloc_page s () повертає структуру struc t page, а не логічний адресу Оскільки сторінки верхньої памяті можуть не відображатися в адресний простір ядра, єдиний спосіб доступу до цієї памяті – через структуру struc t page Для отримання справжнього покажчика на область памяті необхідно використовувати функцію kmap (), яка дозволяє відобразити верхню память в логічне адресний простір ядра

Якщо немає необхідності в фізично суміжних сторінках памяті, а необхідна тільки віртуально безперервна область памяті, то слід використовувати функцію vmalloc () (також слід памятати про невелику втрати продуктивності при використанні функції vmalloc () в порівнянні з функцією kmalloc ()) Функція vmalloc () виділяє область памяті, яка містить тільки віртуально суміжні сторінки, але не обовязково фізично суміжні Це виконується майже так само, як і в програмах користувача шляхом відображення фізично несуміжних ділянок памяті в логічно безперервну область памяті

Якщо необхідно створювати і звільняти багато великих структур даних, то слід розглянути можливість побудови слябової кеша Рівень слябової розподілу памяті дозволяє підтримувати кеш обєктів (список вільних обєктів), унікальний для кожного процесора, який може значно поліпшити продуктивність операцій виділення і звільнення обєктів Замість того щоб часто виділяти і звільняти память, слябової розподільник зберігає кеш вже виділених обєктів При необхідності отримання нової ділянки памяті для зберігання структури даних, рівню слябової розподілу часто немає необхідності виділяти нові сторінки памяті, замість цього можна просто повертати обєкт з кеша

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*