если массив==структура, а не linear chunk of memory, сделай несколько чанков и поверх напиши функции для доступа как-у-настоящих-массивов, а внутри чанка уже malloc
Тебе виртуальной или физической? С виртуальной man vmalloc(), аналогично юзеровскому malloc(). Непрерывный кусок физической памяти в Гб - ничего не получиться. Был какой-то костыль, связаный с выделением этой памяти ещё при загрузке ядра, но я точно не помню, ищи в гугле.
В ядре есть ещё пдп и логическая памяти. пдп - для пдп контролёров внешних устройств (dma по ихнему); логическая - я так и не понял, в чём там прикол и как с ней работать.
С виртуальной man vmalloc(), аналогично юзеровскому malloc().
ну да. вот смотри я делаю vmalloc(0x40000000) и в результате получаю 32-битный указатель. куда будет указывать этот указатель если у нас 3G занимает юзерспейс а из оставшегося гига часть уже занята кодом ядра? (Предполагаем что на машине физически 8G рамы)
Непрерывный кусок физической памяти в Гб - ничего не получиться. Был какой-то костыль, связаный с выделением этой памяти ещё при загрузке ядра, но я точно не помню, ищи в гугле.
с выделением памяти на этапе загрузки я уже разобрался :))) а теперь интересно в процессе работы.
Это аллокатор физической памяти на этапе загрузки. с этим моментом я уже разобрался. теперь меня интересует аналогичный аллокатор виртуальной памяти в процессе работы
Я думаю, что в ядре подобные задачи не возникают, поэтому механизмов для обшего решения нет. Ну типа, если тебе такое надо в ядре - ты что-то делаешь не так. Делай себе userspace helper, пускай он памяти сколько надо выделяет, а ты с ним как-нибудь комуницируй.
Чесно, я даже не представляю зачем ядру столько виртуальной памяти.
Был какой-то костыль, связаный с выделением этой памяти ещё при загрузке ядра, но я точно не помню, ищи в гугле.
Такие большие шматы памяти отрезают при старте платформы и наперед знают вирт. адрес этого шмата. По сути исключают этот кусок из struct mem_info при инициализации. Так делать проще всего.
Для 32 битного окружения придумали еще во времена пентиумпро расширенные 4 бита. Тем самым дали возможность работать с 36 битным пространством. Гугли на тему huge table. Oracle даже эту фичу использует, но там некоторое шаманство требуется с пересборкой некоторых библиотек. Этот колхоз необходим когда тебе нужно получить больше чем 3 гига юзерспейса. Я могу что-то неточно излагать покуда этой темой занимался 10 лет назад.