OSDev

для всех
Текущее время: 26 сен 2020, 10:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: 19 окт 2019, 12:04 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 окт 2019, 18:22 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 84
Нету там никого после ExitBootServices :)

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 окт 2019, 19:09 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 ноя 2019, 17:47 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 ноя 2019, 11:42 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 84
Ограничений быть не должно, но баги - наше всё. Их столько, сколько биосу 1981-го года и не снилось ;)

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 ноя 2019, 13:20 
Аватара пользователя

Зарегистрирован: 15 дек 2015, 11:12
Сообщения: 15
dixie писал(а):
Ну а в чём проблема, собстно, скопировать-то? ;)


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 ноя 2019, 22:28 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Я полагаю, что не нужно резервировать большой размер памяти под ядро. Для базовых структур ядра не нужно много физической памяти. Модули ядра занимают несколько единиц мегабайтов всего. После перехода в страничный режим, сформировать линейную память можно из фрагментов физической памяти, в этом вся прелесть страничной адресации.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 ноя 2019, 10:54 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 ноя 2019, 11:17 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
В некоторых случаях ядро может не взлететь. Я считаю что страницы по 2МБ достаточно эффективны, в работе задействуется 1-2 таких страниц ядра.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 ноя 2019, 13:37 
Аватара пользователя

Зарегистрирован: 15 дек 2015, 11:12
Сообщения: 15
Это резервный случай, он тоже предусмотрен, если например памяти недостаточно, либо процессор не поддерживает гигабайтные страницы.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB