Как работает эмулятор Linux на Javascript Фабриса Белларда?

#javascript #linux #emulation

#javascript #linux #эмуляция

Вопрос:

Сегодня у меня был потрясающий момент, когда я увидел эмулятор Linux на Javascript: http://bellard.org/jslinux

Он компилирует программы на C, у него есть vi и emacs, он поддерживает все команды оболочки и т.д. И т.п.

Как это работает?

Комментарии:

1. Это довольно круто. Вы обратили внимание на ссылку «технические подробности» , не так ли?

2. Смотреть на достижения Фабриса Белларда — это очень унизительный опыт для любого программиста.

3. Кто-то читал /. Я думаю: p.

Ответ №1:

Сначала я тоже думал, что это просто эмулятор терминала, соединяющий вас с виртуальной машиной, но это не так. Если вы посмотрите на сетевые подключения, то увидите, что после загрузки данные больше не передаются.

Итак, это реально.

Процессор — это не что-то волшебное; фактически все, что он делает, это считывает байты из памяти и изменяет оперативную память в соответствии с тем, что означают команды.

В этом случае эмулятор процессора основан на коде qemu. Что он делает, так это создает массив функций, где индексом является следующий байт на ПК (счетчик программ).

Теперь все, что вам нужно, это простой дистрибутив Linux, который не требует никаких экзотических команд процессора, таких как арифметика с плавающей запятой или MMX-код, и вуаля.

Что интересно, так это скорость зверя. Все это немного вяло, но ведь это JavaScript в браузере.

Вывод: Впечатляет. Не могу дождаться, чтобы увидеть эмулятор C64 🙂

Комментарии:

1. есть такой, который может эмулировать чипы SID и VIC?

Ответ №2:

Смотрите http://www.quora.com/CPU-Emulation/How-does-bellard-org-jslinux-work

Упрощенное объяснение

jslinux — это, по сути, полноценный компьютер, реализованный программным обеспечением, в частности JavaScript. Это, конечно, известно как эмулятор. Эта конкретная версия настроена для запуска Linux, но теоретически она может запускать другие операционные системы вместо этого.

Эмулятор (JavaScript, уменьшенный до ~ 90 КБ, отформатированный в ~ 7000 строк) загружается в браузер. Версия Linux, ранее скомпилированная в машинный код для процессора x86, загружается и копируется в большой массив целых чисел, который действует как оперативная память эмулируемого компьютера. Затем процессору эмулятора указывают на первую инструкцию машинного кода и говорят начать интерпретацию инструкций (таких как чтение / запись оперативной памяти, выполнение арифметических и логических операций, переход к различным инструкциям и т.д.). Иногда он записывает данные (например, системный журнал или командную строку оболочки) в «терминал» через другой фрагмент кода JavaScript, который имитирует последовательный порт и терминал с использованием DOM браузера. Ваши нажатия клавиш также отправляются обратно в Linux через этот имитированный последовательный порт…

Комментарии:

1. О, сообщество Quora на самом деле дало лучший ответ на этот вопрос.