что происходит, когда код ядра сборки aarch64 завершается? - PullRequest
0 голосов
/ 06 июня 2019

Я пишу ядро ​​для raspi3 и имитирую его с помощью QEMU4.0.0

Я знаю, что при написании ядра у вас обычно есть зацикленный код.В моем случае я делаю 3 из 4 моих эмулируемых ядер raspi3 с помощью:

1:   wfe
     b    1b

И в основной программе на C мое последнее ядро ​​запускает цикл while(1), где он просто повторяет нажатия клавиш stdin

Однако мне пришло в голову, что причина для спин-блокировки ядер заключается в том, что они не выполняют код, который не должны делать, т.е. кодируют дальше в файле ядра сборки Aarch64.Разве я не могу просто отправить ядра в конец файла, где больше нет инструкций для запуска?

1:
//EOF

Я попробовал это, и оно скомпилировалось и запустилось (по крайней мере, в QEMU4.0.0), но теперь мне любопытно, что именно происходит, когда указатель инструкции не находит больше ничего сделать.

Что происходит, когда ядро ​​достигает конца файла сборки?Это останавливается?Это начинает читать то, что является следующим в памяти?Разве эмулятор умнее меня и управляет им так, как не может это делать настоящее оборудование?

1 Ответ

2 голосов
/ 06 июня 2019

Процессоры запускают код из памяти, а не из файлов.Если ЦП «отваливается» в конце программы, которая была загружена в память, он начинает пытаться выполнить код из памяти после вашей программы.Поскольку эта память, вероятно, не будет содержать действительный код, процессор, скорее всего, сгенерирует недопустимое исключение инструкции.Однако также возможно, что данные, следующие за вашей программой , будут по совпадению действительным кодом, и этот код может привести к непредсказуемому поведению системы - так что добавление цикла вращения в конце вашей программы является хорошимидея.

...