1

У меня было интервью сегодня, и мне задали этот вопрос. Какую стратегию распределения памяти ядра вы бы использовали, если бы вас попросили выделить память размером 2 КБ, и выделенная память должна быть выровнена по странице.Распределение памяти в ядре Linux

KMALLOC управляет меньшими стратегиями распределения памяти, но самый низкий блок, который он поддерживает, составляет 4 КБ, что является размером физической страницы. Я спросил его, ожидал ли он распределителей плиты? Он не ответил положительно.

+0

Ok .... у вас есть вопрос? –

+0

@Marc: Это мой вопрос: «Какую стратегию распределения памяти ядра вы использовали бы, если бы вас попросили выделить память размером 2 КБ, а выделенная память должна быть выровнена по странице». Я не совсем понимаю, что вы имеете ввиду.. – Ram27

ответ

-1

я прочитал в: http://www.makelinux.net/books/lkd2/ch11lev1sec4

Функция возвращает указатель на область памяти, которая составляет по меньшей мере размер байт

Я знаю, что операционная система x86 (32 бита) - сопоставление максимального размера в ОЗУ 4 ГБ, но оно включает ссылку и информацию грубо.

так что 4 ГБ - это все пространство, конвертируемое для «KB» = 4194304 КБ, память памяти iqual, сетка 4194304 (информация об индексе и боре) или сторона квадрата (в латинском квадрате Radix) SQRT (4194304)) = все размер только индексирует информацию, а также ниже "Int флаги")

аннулируются * kmalloc (размер size_t, внутр флаги)

вы можете использовать функцию , для использования KB diferent 2 или 4.

att

6

Для выделения выделенной строки выделено 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 архитектуры книге. Пройдите через них, это поможет.

Смежные вопросы