Подтвердить что ты не робот

Простейшая возможная архитектура, которая может быть виртуализирована и запускать ядро ​​Linux

Я был вдохновлен воплощением x86 виртуальной машины в Javascript, и я хотел бы попробовать написать простейший возможная виртуальная машина, способная запускать ядро ​​Linux. Это чисто воспитательная работа, без каких-либо целей, кроме понимания и обмена кодом, который делает это возможным.

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

Я прочитал этот вопрос, в котором спрашивается, как эмулировать архитектуру x86, и ответ предлагает начать с чего-то более простого, такого как архитектура ARM. Мой вопрос более конкретный: какая самая простая архитектура, которую я могу попытаться эмулировать, которая сможет запускать ядро ​​Linux?

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

4b9b3361

Ответ 1

Простейшая возможная архитектура будет с точки зрения простоты реализации. Поскольку вы создаете эмулятор, который полностью эмулирует машину, в зависимости от того, какой из них будет иметь самый простой дизайн/дизайн. Архитектуры RISC, несомненно, лучше. Но выбор архитектуры, которая не широко используется, также не очень хороша, если вам нужна поддержка, некоторые из них смогут вам помочь. Написание симулятора - это не кусок пирога. Я бы сказал, что либо идет для ARM или MIPS, оба популярны:

Также вы должны знать, что виртуальная машина Javascript Fabrice Bellard использует 32-разрядный процессор, совместимый с x86, что поддерживается Linux изначально. Вам придется подключать ядро ​​linux (использовать инструментальные цепочки) для ARM или MIPS самостоятельно. См. Ссылки на использование ядра linux

Для MIPS:

Для ARM:

Ответ 2

Список архитектур, поддерживаемых ядром Linux:

http://en.wikipedia.org/wiki/List_of_Linux_supported_architectures

"Простейший возможный" несколько субъективен, но вот что я считаю менее сложным из этого списка:

  • MIPS
  • H8 (μClinux)
  • 68k/Coldfire (μClinux)

Ответ 3

Как я уже сказал в комментариях, я бы сбалансировал три аспекта:

  • простой набор команд (несколько форматов команд, несколько кодов операций: что-то НЕ нравится x86)
  • документация: широко доступна. Это означает, что вы можете отказаться от некоторых простых архитектур, чтобы сосредоточиться на широко поддерживаемых (например, x86 выигрывает здесь, но вы также найдете много материалов о RISC и особенно MIPS из академических кругов). Или идите для чего-то открытого, например OpenRisc
  • простота использования в "режиме ядра". В привилегированном режиме ядра существует целый новый мир регистров, инструкций и внутренних компонентов. И не забывайте, что процессор поставляется с шиной, а простые процессоры могут иметь очень сложные шины! И вам тоже нужно будет подражать этому. ИЛИ, вы можете пойти User mode Linux, если вы довольны им.

В конце концов, я бы предложил что-то "старое": достаточно простое, особенно в привилегированном режиме, хорошо изученное и задокументированное. Например, оригинальный MIPS, семейство Motorola 68k или что-то близкое к оригинальному RISC (http://en.wikipedia.org/wiki/Berkeley_RISC), если есть вариант Linux для этого!

Ответ 4

Вы можете посмотреть на microBlaze, процессор, предназначенный для эффективной реализации на FPGA. Он имеет только два формата команд и 32 основных значения кода операции.

Он определяется и поддерживается Xilinx для своей строки FPGA, эталонный документ находится по адресу: http://www.xilinx.com/support/documentation/sw_manuals/mb_ref_guide.pdf