Как сделать ядро тобота

Добавил пользователь Алексей Ф.
Обновлено: 05.10.2024

Преступники похищают доктора Франклина Чара, который занимается расследованием цепи загадочных автокатастроф. После этого происшествия в дело вступают Тоботы – роботы, превращенные из автомобилей с помощью специального кода, которых создал доктор. Самые главные из них, являются помощниками сыновей-близнецов доктора. И начинается яростная борьба с преступниками, тоботы становятся на защиту своего города.

Возрастная аудитория: 3-10 10-14
Для: подростков детей мальчиков
Про: человека машинки приключения войну будущее роботов супергероев трансформеров

Герои Тобот (8):

Мы отказались от фото-материалов мультфильма. Мы не нарушаем авторское право создателей.

Один из главных вопросов, который терзает многих перед покупкой нового компьютера – это правильное количество ядер процессора. Сегодня в магазинах предлагаются чипы от двух ядер с невысокой тактовой частотой, до 16-ядерных монстров типа Ryzen 9 5950X. Также есть и 10-ядерные скоростные камни, обладающие высокой тактовой частотой. Ещё пять лет назад никто и не задумывался о необходимости большого количества ядер для игр, а 4 быстрых ядра хватало всем. С тех пор игровая индустрия изменилась, а студии научились работать со сложным оборудованием, выжимая из него максимум возможного. Это значит, что самое время узнать, сколько же ядер нужно для современных игр.

реклама


Тестирование проведено ребятами Youtube-канала Testing Games, а сама методика построена на отключении части ядер процессора с последующим тестированием и сравнением результатов. Основой для теста выступил процессор Ryzen 9 5950X, в качестве видеокарты была выбрана скоростная GeForce RTX 3080. Игры: Call of Duty: Warzone, Microsoft Flight Simulator, Forza Horizon 4, Cyberpunk 2077 и Red Dead Redemption 2. Результаты получены в разрешении 1080р, все настройки есть на видео.

игра/ядра 4 6 8 10 12 16
Forza Horizon 170 187 191 196 196 196
Call of Duty: Warzone 90 159 182 181 181 185
Cyberpunk 2077 80 108 116 119 122 122
Red Dead Redemption 2 96 146 163 166 167 167
Microsoft Flight Simulato 47 53 54 54 55 59

  • Forza Horizon не использует многоядерность. Слегка растёт fps при переходе из 4 ядер к 6, но дальше всё замирает. Здесь вам подойдёт какой-нибудь старый Core i7-4790K, разогнанный до 4.7GHz и выше.
  • Call of Duty: Warzone. Отличная оптимизация при переходе с четырёх на шесть ядер, но дальше всё замирает, а значит здесь вам хватит Core i5-10600 с высокой тактовой частотой или его конкурента в лице Ryzen 3 3600Х. Всё более дорогое можно оставить на полке магазина.
  • Cyberpunk 2077 и Red Dead Redemption 2 выдают результаты, полностью идентичные предыдущей игре, а значит повторяться мы не будем. Отметим лишь, что смысл обратить внимание на 6-ядерные модели есть, ведь 4 ядра откровенно пасуют.
  • Microsoft Flight Simulator. Разработчики, похоже, забыли о существовании многоядерных процессоров. Всё настолько плохо, что прироста от шести и более ядер нет вообще. К сожалению, именно подобные проекты тянут индустрию вниз, поскольку студии отказываются вкладывать деньги в разработку современных движков.

Из всего вышеописанного можно сделать следующие выводы:

Здесь стоить сделать одно важное замечание. Многие эксперты уверяют, что уже вскоре нас ждёт так называемый Next Gen, связывая приход чуда с игровыми приставками нового поколения. Это связано с большим количеством ядер, которые вот-вот научатся загружать разработчики. Возможно, в отдалённом будущем это будет весьма актуально, вот только нужно ли покупать процессор впрок, ожидая получить буст в будущем за счёт программистов студий или любых других оптимизаций? Реальность такова, что никто и ничего нам бесплатно не даст. Ваш процессор останется ровно таким, какой был на старте, а значит самое время взвесить все за и против, перенаправив высвободившиеся от экономии на Core i9-10900К деньги на скоростную память или современный накопитель. Любой из вариантов позволит улучшить реальные показатели вашей системы, не ожидая наступления счастливого будущего.

Я пытаюсь сделать свою собственную ОС, и мне нужна помощь с моим кодом. Это мой загрузчика.asm:

я компилирую его с этим:

это ядра.c:

я компилирую его с этим:

Я хочу знать, что я делаю неправильно, потому что, когда я тест с в QEMU он не работает. Может кто-нибудь дать несколько советов улучшение kernel.c поэтому мне не нужно использовать функцию call_main ()?

при тестировании я использую:

Мои Другие Файлы

a20.inc:

gdt.inc:

существует ряд проблем, но в целом ваш код сборки работает. Я написал ответ StackOverflow, который имеет советы для общая разработка загрузчика.

исходный код в вашем вопросе не установил SS регистр сегмента стека. Совет №1 я даю:

когда BIOS переходит на ваш код, вы не можете полагаться на CS, DS, ES, SS, SP регистры, имеющие допустимые или ожидаемые значения. Они должны быть настроены соответствующим образом при запуске загрузчика.

Если вам нужно ES он также должен быть установлен. Хотя в вашем коде это не так (за исключением функции print_string, которую я рассмотрю позже).

самая большая ошибка, которая помешала бы вам далеко уйти в защищенный режим, заключалась в том, что вы настроили глобальная таблица дескрипторов (GDT) в gdt.inc начиная с:

каждый глобальный дескриптор должен быть 8 байт, но dd 0 определяет только 4 байта (двойное слово). Должно быть:

это на самом деле кажется, что второй dd 0 был случайно добавлен в конец комментария к предыдущей строке.

вы написали какую-то print_string код, но он 32-битный код:

вы называете print_string как обработчик ошибок в 16-битном коде, поэтому то, что вы здесь делаете, скорее всего, приведет к перезагрузке компьютера. Нельзя использовать 32-разрядные регистры и адресацию. Код может быть 16-битным с некоторыми корректировками:

основное отличие (в 16-битном коде) заключается в том, что мы больше не используем EAX и EDX 32-битные регистры. Для доступа к видеопамяти @ 0xb8000 нам нужно использовать пару segment: offset, которая представляет то же самое. 0xb8000 может быть представлен как сегмент: offset 0xb800:от 0x0 (вычисляется как (0xb8000xb8000 физический адрес. Мы можем использовать эти знания для хранения b800 на ES регистрация и использование DI регистрация в качестве смещения для обновления видеопамяти. Теперь мы используем:

переместить слово в видеопамять.

одна из проблем при построении ядра заключается в том, что вы неправильно генерируете плоский двоичный образ, который можно загрузить в память напрямую. А не с помощью gcc -ffreestanding -o kernel.bin kernel.c я рекомендую сделать это таким образом:

это собирает ядра.c to ядра.o с отладочной информации ( -g ). Затем компоновщик принимает ядра.o (32-бит эльф binary) и производит эльф исполняемый файл называется ядра.эльф (этот файл будет удобен, если вы хотите отладить свое ядро). Затем мы используем objcopy взять исполняемый файл ELF32 ядра.эльф и преобразовать его в плоское бинарное изображение ядра.бин который может быть загружен BIOS. Ключевая вещь, чтобы отметить, что с -Tlinker.ld вариант мы просим LD(компоновщик) для чтения параметров из файл линкер.ld . Это просто linker.ld вы можете использовать, чтобы начать работу:

здесь следует отметить, что . = 0x9000 говорит компоновщику, что он должен создать исполняемый файл, который будет загружен по адресу памяти 0x9000 . 0x9000 где вы, кажется, разместили свое ядро в своем вопросе. Остальные строки делают доступными C разделы, которые необходимо будет включить в ядро для работы правильно.

я рекомендую делать что-то подобное при использовании NASM так вместо того, чтобы делать nasm -f bin -o boot.bin bootloader.asm сделать это так:

это похоже на компиляцию C ядра. Мы не используем сценарий компоновщика здесь, но мы говорим компоновщику создать наш код, предполагая, что код (загрузчик) будет загружен в 0x7c00 .

для этого, чтобы работать вам нужно будет удалить эта строка из загрузчика.asm :

изменить ядра.c для:

на загрузчика.asm мы должны позвонить main функция (которая будет размещена на 0x9000), а не прыгать на нее. Вместо:

код после вызова будет выполняться, когда C функция main возвращается. Это простой цикл, который эффективно остановит процессор и останется таким до бесконечности, так как нам некуда возвращаться.

загрузчика.asm:

gdt.inc:

a20.inc:

ядра.c:

линкер.ld

если вы используете файлы выше и создаете необходимый загрузчик и файлы ядра, используя эти команды (как упоминалось ранее)

вы можете создать образ диска (в этом случае мы сделаем его размером с дискету) с помощью следующих команд:

это создает образ диска с нулевым заполнением размером 512 * 2880 байт (размер дискеты 1,44 мегабайта). dd if=boot.bin of=disk.img bs=512 conv=notrunc пишет boot.бин в первый сектор файла без усечения образ диска. dd if=kernel.bin of=disk.img bs=512 seek=1 conv=notrunc мест ядра.бин в образ диска начиная со второй сектор. The seek=1 пропускает первый блок (bs=512) перед записью.

если вы хотите запустить ядро, вы можете запустить его как дисковод a: ( -fda ) в в QEMU такой:

вы также можете отлаживать 32-разрядное ядро с помощью в QEMU и отладчик GNU (GDB) с отладочной информацией, которую мы создали при компиляции/сборке кода с приведенными выше инструкциями.

Читайте также: