Какой способ выделения памяти необходимо использовать
Какой способ выделения памяти необходимо использовать
Если необходимы смежные страницы физической памяти, то нужно использовать один из низкоуровневых интерфейсов выделения памяти, или функцию kmalloc(). Это стандартный способ выделения памяти в ядре, и, скорее всего, в большинстве случаев следует использовать именно его. Необходимо вспомнить, что два наиболее часто встречающихся флага, которые передаются этой функции, это флаги GFP_ATOMIC и GFP_KERNEL. Для высокоприоритетных операций выделения памяти, которые не переводят процесс в состояние ожидания, необходимо указывать флаг GFP_ATOMIC. Это обязательно для обработчиков прерываний и других случаев, когда нельзя переходить в состояние ожидания. В коде, который может переходить в состояние ожидания, как, например код, выполняющийся в контексте процесса и не удерживающий спин-блокировку, необходимо использовать флаг GFP_KERNEL. Такой флаг указывает, что должна выполняться операция выделения памяти, которая при необходимости может перейти в состояние ожидания для получения необходимой памяти.
Если есть необходимость выделить страницы верхней памяти, то следует использовать функцию alloc_pages(). Функция alloc_pages() возвращает структуру struct page, а не логический адрес. Поскольку страницы верхней памяти могут не отображаться в адресное пространство ядра, единственный способ доступа к этой памяти — через структуру struct page. Для получения "настоящего" указателя на область памяти необходимо использовать функцию kmap(), которая позволяет отобразить верхнюю память в логическое адресное пространство ядра.
Если нет необходимости в физически смежных страницах памяти, а необходима только виртуально непрерывная область памяти, то следует использовать функцию vmalloc() (также следует помнить о небольшой потере производительности при использовании функции vmalloc() по сравнению с функцией kmalloc()). Функция vmalloc() выделяет область памяти, которая содержит только виртуально смежные страницы, но не обязательно физически смежные. Это выполняется почти так же, как и в программах пользователя путем отображения физически несмежных участков памяти в логически непрерывную область памяти.
Если необходимо создавать и освобождать много больших структур данных, то следует рассмотреть возможность построения слябового кэша. Уровень слябового распределения памяти позволяет поддерживать кэш объектов (список свободных объектов), уникальный для каждого процессора, который может значительно улучшить производительность операций выделения и освобождения объектов. Вместо того чтобы часто выделять и освобождать память, слябовый распределитель сохраняет кэш уже выделенных объектов. При необходимости получения нового участка памяти для хранения структуры данных, уровню слябового распределения часто нет необходимости выделять новые страницы памяти, вместо этого можно просто возвращать объект из кэша.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Необходимо наличие закрывающего тега
Необходимо наличие закрывающего тега В стандарте языка HTML 4.01 допускается пропуск закрывающего тега, если программа, которая будет обрабатывать соответствующий документ, сможет «догадаться» о его наличии. Поэтому вполне допустимо опускать закрывающие теги </p> между
15.5.2. Отладчики выделения памяти
15.5.2. Отладчики выделения памяти Игнорируя такие проблемы, как плохой дизайн программы, для любого крупномасштабного практического приложения единственной сложной задачей программиста на С является управление динамической памятью (посредством malloc(), realloc() и free()).Этот
Какие обработчики нижних половин необходимо использовать
Какие обработчики нижних половин необходимо использовать Решение о том, какой из механизмов обработки нижних половин следует использовать, является важным. В современных ядрах серии 2.6 есть три варианта выбора: отложенные прерывания (softirq), тасклеты (tasklet) и очереди
С чего необходимо начать
С чего необходимо начать Итак, готовы ли вы начать охоту за ошибками? Этот путь может оказаться длинным и полным разочарований. Некоторые ошибки ставили в тупик все сообщество разработчиков ядра на несколько месяцев. К счастью, на каждую из таких злостных ошибок
(7.13) На моём CD-ROM нет CD-CPDIF выхода, или, по какой то причине я не могу его использовать. Можно ли мне как-нибудь получить числовой звук для CD-Audio?
(7.13) На моём CD-ROM нет CD-CPDIF выхода, или, по какой то причине я не могу его использовать. Можно ли мне как-нибудь получить числовой звук для CD-Audio? Можно. W2k позволяет передавать audio информацию с AudioCD через IDE шлейф в числовом виде. Для того что бы задействовать эту функцию,
1.5. Какой компьютер необходимо иметь для нормальной работы XP?
1.5. Какой компьютер необходимо иметь для нормальной работы XP? Microsoft утверждает, что для успешной инсталляции XP необходим процессор не менее 233 мегагерц, 64 мегабайта оперативной памяти и 1.5 гигабайта свободного места на диске. Однако, для более-менее комфортной работы,
6.7. На моём CD-ROM нет CD-CPDIF выхода, или, по какой то причине я не могу его использовать. Можно ли мне как-нибудь получить числовой звук для CD-Audio?
6.7. На моём CD-ROM нет CD-CPDIF выхода, или, по какой то причине я не могу его использовать. Можно ли мне как-нибудь получить числовой звук для CD-Audio? Можно. XP позволяет передавать audio информацию с AudioCD через IDE шлейф в числовом виде. Для того чтобы задействовать эту функцию,
Блоги какой тематики вы ведете? Блоги какой тематики вы хотели бы вести?
Блоги какой тематики вы ведете? Блоги какой тематики вы хотели бы вести? Многие блоггеры или не выделяют одну тему и пишут обо всем понемногу, или описывают свой дневник шутливо: «Да так, попукиваю в воздух».Некоторые блоггеры отвечали, что уже ведут дневники на все
8.5.1. Что необходимо для игры
8.5.1. Что необходимо для игры Яндекс предлагает отдохнуть за онлайновыми играми. Это значит, что для игры вам потребуется браузер. Использовать можно любой из доступных, в том числе Microsoft Internet Explorer, Opera, Mozilla. Игры созданы по технологиям Macromedia Flash и Macromedia Shockwave, поэтому вам
В какой момент лучше использовать технологии допродаж
В какой момент лучше использовать технологии допродаж Всегда! В интернет-магазине существует три момента, когда это можно сделать, – до покупки в момент выбора товаров, во время покупки в корзине с товарами и после покупки до момента оплаты
Какой вид контекстной рекламы использовать для продвижения своего сайта
Какой вид контекстной рекламы использовать для продвижения своего сайта Контекстная реклама считается одним из самых эффективных инструментов привлечения посетителей на сайт, поскольку реклама показывается только потенциально заинтересованным пользователям Сети и
60. Избегайте выделения и освобождения памяти в разных модулях
60. Избегайте выделения и освобождения памяти в разных модулях РезюмеЗолотое правило программиста — положи, где взял. Выделение памяти в одном модуле, а освобождение в другом делает программу более хрупкой, создавая тонкую дальнюю зависимость между этими модулями. Такие
1.6.5. Правило простоты: необходимо проектировать простые программы и "добавлять сложность" только там, где это необходимо
1.6.5. Правило простоты: необходимо проектировать простые программы и "добавлять сложность" только там, где это необходимо Многие факторы приводят к усложнению программ (а следовательно, делают их более дорогими и более уязвимыми относительно ошибок). Программисты — это
1.6.5. Правило простоты: необходимо проектировать простые программы и "добавлять сложность" только там, где это необходимо
1.6.5. Правило простоты: необходимо проектировать простые программы и "добавлять сложность" только там, где это необходимо Многие факторы приводят к усложнению программ (а следовательно, делают их более дорогими и более уязвимыми относительно ошибок). Программисты — это
Какой класс памяти применять?
Какой класс памяти применять? Ответ на вопрос почти всегда один - "автоматический". В конце концов почему этот класс памяти выбран по умолчанию? Мы знаем, что на первый взгляд использование внешних переменных очень соблазнительно. Опишите все ваши переменные как
4.2.3. Когда необходимо отменять поток
4.2.3. Когда необходимо отменять поток В общем случае не рекомендуется отменять поток, если его можно просто завершить. Лучше всего каким-то образом просигнализировать потоку о том, что он должен прекратить работу, а затем дождаться его завершения. Подробнее о способах