OSDev
http://osdev.ru/

Вопрос по передаче mmap из EFI загрузчика в ядро
http://osdev.ru/viewtopic.php?f=6&t=3893
Страница 1 из 1

Автор:  TechnoWiz@rd [ 19 окт 2019, 12:04 ]
Заголовок сообщения:  Вопрос по передаче mmap из EFI загрузчика в ядро

Доброго времени суток.
Может кто подскажет. Для получения карты памяти в загрузчике используется динамическое выделение памяти AllocatePool, которое перед передачей в ядро освобождается функцией ExitBootServices, можно ли передать этот указатель напрямую ядру учитывая что сразу за ExitBootServices идут передача управления ядру и нет никаких функций работы с памятью, или есть шанс что EFI сервисы без моего участия могут в фоне переписать этот участок памяти(например по прерыванию) ?

Автор:  dixie [ 26 окт 2019, 18:22 ]
Заголовок сообщения:  Re: Вопрос по передаче mmap из EFI загрузчика в ядро

Нету там никого после ExitBootServices :)

Т.е. есть, конечно, но и аллокация памяти и прочая консоль - всё уже неживое. Оставшийся "райнтайм" - может использовать только свои блоки в GetMemoryMap, которые, опять же, не надо затирать - всему остальному ты уже полный хозяин.

Собстно, никто не мешает вообще свалить в реальный и начать оттуда. Только acpi/runtime блоки один фиг не трогать :)

Автор:  TechnoWiz@rd [ 29 окт 2019, 19:09 ]
Заголовок сообщения:  Re: Вопрос по передаче mmap из EFI загрузчика в ядро

Спасибо, просто только начал изучать EFI, а там судя по всему вообще ОС в миниатюре, которая живёт своей жизнью, отсюда и опасения :lol: Рантайм естественно не трогаю. В итоге всё равно решил сделать копию в своем, несколько упрощенном формате, чтобы не тянуть заголовочные файлы EFI в ядро.

Автор:  TechnoWiz@rd [ 11 ноя 2019, 17:47 ]
Заголовок сообщения:  Re: Вопрос по передаче mmap из EFI загрузчика в ядро

Доброго времени суток.
Чтобы не плодить новых тем задам вопрос тут. Переделал чуток распределение памяти таким образом, чтобы при возможности ядро грузилось на свободный участок размером в гигабайт с выравниваем по границе гигабайтной страницы. На ноуте, из-за того что EFI судя по всему писал какой-то нехороший человек, первые четыре гига нашинкованы с начала и до конца кусочками RAM вперемешку с EfiBootCode и EfiBootData, полноценного куска в 1 гиг не нашлось. Первый подходящий кусок начинается с 5го гигабайта(0x100000000), но тут возникла загвоздка - после считывания файла в озу ничего кроме мусора, при этом функция возвращает правильный размер файла ядра. Вот хотелось бы узнать, это баг конкретной реализации прошивки или функция рассчитана только на чтение файлов в первые 4 гигабайта ОЗУ ? И может есть альтернативы SIMPLE_FILE_SYSTEM_PROTOCOL ?(Я использую gnu-efi для сборки загрузчика, загрузчик 64-х битный). Или только чтение в первые 4Гб и последующее копирование куда надо ?

-- Добавлено --
Перерыл спецификацию, не нашел ни упоминаний, ни ограничений на область памяти для функции Read. Плохо блин, система получается новая(относительно BIOS), а болячки старые(640Кб хватит всем!). Хотя если следовать логике, не должно быть там таких ограничений. Ведь EFI строит MMU таблицы для всей памяти, а не только для первых 4ГБ...

Автор:  dixie [ 18 ноя 2019, 11:42 ]
Заголовок сообщения:  Re: Вопрос по передаче mmap из EFI загрузчика в ядро

Ограничений быть не должно, но баги - наше всё. Их столько, сколько биосу 1981-го года и не снилось ;)

Да - и первые 4 га по жизни так нашинкованы... Учитывая, что оно обычно сверху вниз память выделяет (от конца 4га вниз) - странно, конечно... А на старых интелёвых мамках, наборот - снизу вверх. Т.е. закладываться вообще ни на что нельзя.

Я тупо беру большой блок и там живу, но у меня свой 32-битный мир, в EFI хожу тока по надобности :)

Ну а в чём проблема, собстно, скопировать-то? ;)

Автор:  TechnoWiz@rd [ 18 ноя 2019, 13:20 ]
Заголовок сообщения:  Re: Вопрос по передаче mmap из EFI загрузчика в ядро

dixie писал(а):
Ну а в чём проблема, собстно, скопировать-то? ;)


Да не проблема это конечно, просто как-то не по феншую чтоли) Видимо я слишком многого ждал от наступающей в 2020-м эры 64-х бит и EFI :lol:

Автор:  Himik [ 18 ноя 2019, 22:28 ]
Заголовок сообщения:  Re: Вопрос по передаче mmap из EFI загрузчика в ядро

Я полагаю, что не нужно резервировать большой размер памяти под ядро. Для базовых структур ядра не нужно много физической памяти. Модули ядра занимают несколько единиц мегабайтов всего. После перехода в страничный режим, сформировать линейную память можно из фрагментов физической памяти, в этом вся прелесть страничной адресации.

Автор:  TechnoWiz@rd [ 19 ноя 2019, 10:54 ]
Заголовок сообщения:  Re: Вопрос по передаче mmap из EFI загрузчика в ядро

Я и не резервирую, просто ядро размещаю на отдельной гигабайтной странице, для ускорения преобразования адресов и ликвидации TLB промахов в режиме ядра. Эта область так-же управляется через менеджер памяти и может быть выделена и приложениям тоже в случае чего(так-же как и ядро для своих нужд может выделять память за пределами этой области), простая оптимизация не более того. Что-то вроде ZONE DMA в линукс, только у меня "ZONE KERNEL", менеджер памяти приберегает эту область для нужд ядра в первую очередь, но в случае нехватки памяти будет выделять её из этой области.

Автор:  Himik [ 19 ноя 2019, 11:17 ]
Заголовок сообщения:  Re: Вопрос по передаче mmap из EFI загрузчика в ядро

В некоторых случаях ядро может не взлететь. Я считаю что страницы по 2МБ достаточно эффективны, в работе задействуется 1-2 таких страниц ядра.

Автор:  TechnoWiz@rd [ 19 ноя 2019, 13:37 ]
Заголовок сообщения:  Re: Вопрос по передаче mmap из EFI загрузчика в ядро

Это резервный случай, он тоже предусмотрен, если например памяти недостаточно, либо процессор не поддерживает гигабайтные страницы.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/