Для выделения выделенной строки выделено alloc_pages/alloc_page. Вы также можете использовать _ _get_free_pages/__ get_free_page. В итоге __get_free_page использует только alloc_pages. Эти функции используются для выделения страницы из физической памяти. Распределитель для них физической памяти Распределитель или приятель Распределитель
Ваше предположение, что kmalloc выделяет минимум 4 Кбайт памяти неправильно. kmalloc основан на распределителе плиты. Сделайте cat/proc/slabinfo, вы узнаете, что для kmalloc уже создано несколько слябов. Эти слябы уменьшат фрагментацию внутренней памяти для распределения с помощью kmalloc. Таким образом, если вы выберете 4 байта, тогда из kmalloc-плиты kmalloc-8 будет выделено только 8 байт (4 байта внутренней фрагментации). Если вы выберете 9 байт, тогда из плиты kmalloc-16 будут выделены 16 байт и т. Д.
kmalloc, alloc_page/s, __get_free_page/s не требуют таблиц страниц. Возвращенный адрес виртуальной памяти равен смещенный адрес.
Хотя ты не просил, я упомяну, что vmalloc является другой метод распределения, который использует ресурс карты аллокатора. Несмежные памяти, выделенные с помощью vmalloc осуществляется доступ с помощью ядра главной страницы таблицы (swapper_pg_dir)
Различных распределителей Linux упоминаются в книге Мел Gorman и профессиональной ядро Linux архитектуры книге. Пройдите через них, это поможет.
Ok .... у вас есть вопрос? –
@Marc: Это мой вопрос: «Какую стратегию распределения памяти ядра вы использовали бы, если бы вас попросили выделить память размером 2 КБ, а выделенная память должна быть выровнена по странице». Я не совсем понимаю, что вы имеете ввиду.. – Ram27