Что касается вопроса RPi, взгляните на эту ветку (по сути, вы можете использовать что-то вроде QEMU для запуска образов).
Чтобы ответить на главный вопрос:
Можно ли виртуализировать любой процессор на любом другом процессоре?
Да (в некоторой степени), однако, это может быть не так эффективно, как вы думаете. И следует заметить, что тип виртуализации VirtualBox/VMWare отличается от того, о чем вы спрашиваете, а на самом деле Is it possible to EMULATE any CPU on any other CPU?
,
ЦП - это аппаратные компоненты, в которых встроен определенный набор инструкций (также называемых операционными кодами); эти коды операций представляют собой конкретные числовые значения, которые можно перевести на электрическом уровне, так что ЦП фактически «что-то сделает».
Когда программное обеспечение написано, чтобы сказать процессору «что-то делать» (например, калькулятор), программное обеспечение должно быть создано (предназначено) для конкретного процессора. Иными словами, мое программное обеспечение должно быть скомпилировано (переведено) и собрано так, чтобы машинные инструкции могли быть понятны на машине, на которой я запускаю свое программное обеспечение, в противном случае, если оно вообще выполняется, я могу не получить ТОЧНЫХ результатов, которые Я ожидаю. Инструкции по сборке (op-коды) для чего-то вроде 2+2 на ARM могут не совсем соответствовать инструкциям по сборке на PIC или FPGA, и то, что я получу обратно, будет мусором (опять же, ЕСЛИ оно выполнится).
Каждый процессор «делает что-то» немного по-своему, во многом как я могу писать на английском языке, чтобы донести до вас свои мысли, я мог бы также передать те же мысли на испанском или японском, хотя мне пришлось бы передавать их совсем по-другому, потому что не только к синтаксическим различиям в английском / испанском / японском языках, но также и к различиям в том, как эти языки анализируются контекстуально. Если бы мы с вами разговаривали (вместо письменного общения), а вы говорили только по-японски, а я по-испански, то нам нужен переводчик, свободно владеющий обоими языками, чтобы правильно общаться, хотя это было бы медленнее, чем прямое общение, потому что мы нужно, чтобы наши языки были правильно проанализированы, чтобы ничего не было потеряно в переводе.
Это та же концепция, что и для CPU «виртуализация / эмуляция». Если вы хотите запускать приложения, которые не были созданы для процессора, на котором вы работаете (т.е. я хочу запускать программное обеспечение ARM на моем компьютере с архитектурой x86), то программе необходимо взять сборку ARM и преобразовать ее в сборку x86, чтобы призыв draw word on screen
- это не вызов erase RAM location X
Вот почему не обязательно выполнимо должным образом эмулировать любой процессор на любом другом процессоре (если это вообще возможно, так как на самом деле нельзя эмулировать x86 на PIC как таковом). Процессоры делают намного больше, чем просто «решающие числа», и они делают все это «БОЛЬШЕ» очень ОЧЕНЬ быстро, и для многих требуется, чтобы время было точным. Когда вы эмулируете процессор, вы по существу добавляете слой перевода между программным и аппаратным обеспечением. Добавление этого уровня может значительно увеличить время выполнения инструкций из-за того, сколько дополнительных инструкций может потребоваться выполнить. Это добавленное время может быть настолько большим, что программное обеспечение перестает отвечать на запросы или вообще становится непригодным для использования (например, играть в видеоигру со скоростью 1 кадр в секунду, конечно, вы можете это сделать, но для написания «начала печати» потребуется 2 минуты) текст на экране).
Следует отметить, что если аппаратное обеспечение (ЦП) имеет тот же встроенный набор команд, оно должно «делать то же самое», что и другой набор команд, предназначенный; то есть (за исключением проблем с патентами / лицензиями) Intel может принять решение добавить наборы команд для процессора ARM в линейку своих процессоров x86_64, чтобы вы могли потенциально запускать двоичные файлы ARM непосредственно на этом процессоре, но они все равно должны иметь архитектуру «делать», как это делает архитектура ARM, иначе выходные данные могут быть неточными.
Таким образом, может быть возможно эмулировать один тип процессора на другом типе процессора, но в зависимости от того, как / что эмулируется, он может быть настолько медленным, что может считаться неуправляемым, или может быть неразличимым с человеческой точки зрения (то есть субъективно это "так быстро", как работает на родном оборудовании, но технически это не так).
Я надеюсь, что это может помочь добавить некоторую ясность.