Записки Юной Старперши. Web-студия Татьяны Самойловой

Полноценный эмулятор ПК, способный загрузить Linux, написан на JavaScript

Опубликовано Май 18, 2011 в WEB,. WEB-news, Лента событий | 1 коммент.


Французский математик Фабрис Беллард (Fabrice Bellard), основавший в свое время проект QEMU, представил реализацию полноценного эмулятора x86-совместимого ПК, написанную полностью на языке JavaScript. Реализована эмуляция 32-разрядного x86-совместимого CPU, контроллера прерываний 8259, таймера 8254 и приёмопередатчика 1650 UART.

Эмулятор способен загрузить Linux в окне современных web-браузеров (работа проверена в Firefox 4 и Google Chrome 11). После запуска эмулятора производится загрузка Linux-ядра 2.6.20 (конфигурация ядра) c созданием ram-диска, в котором используется файловая система Ext2. Загрузка происходит за несколько секунд, после чего выводится стандартное приглашение командной оболочки из пакета busybox. Окружение содержит работоспособный TCP-стек (по умолчанию поднимается loopback-интерфейс), присутствуют стандартные команды, такие как ifconfig, ping и netstat. В состав загружаемого в эмуляторе Linux-дистрибутива включен достаточно полный набор приложений, например, имеются текстовые редакторы vi и qemacs, компилятор tcc, сетевые серверы dnsd, ntpd, ftpd, httpd, sendmail. В качестве системной библиотеки используется uClibc.

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

В настоящее время эмулируется набор инструкций i486, за исключением поддержки FPU. Отсутствие математического сопроцессора не мешает работе Linux, так Linux поддерживает использованием эмулятора FPU. Кроме того, в эмуляторе пока не реализована поддержка наборов инструкций MMX и SSE, имеются некоторые особенности выполнения проверок при работе с памятью, не реализована поддержка реального режима и 16-разрядного защищенного режима. Отмечается, что в новом эмуляторе реализовано несколько отсутствующих в QEMU оптимизаций, которые позволяют выполнять определенные действия более эффективно, чем в QEMU.

Мотивом создания эмулятора стал интерес Фабриса Белларда к реализации современных JavaScript-движков, которые на современном этапе развития уже достаточно быстры, чтобы выполнять такие задачи как запуск эмуляторов. В будущем Беллард не исключает возможности создания своего JavaScript-движка. По словам Белларда, создание представленного эмулятора стало прекрасной школой по изучению оптимизации JavaScript-кода с учетом особенностей современных JavaScript-движков, таких как Jaeger Monkey (Firefox 4) и V8 (Chrome).

Что касается субъективной оценки производительности, то эмулятор в настоящее время работает при использовании Firefox 4 примерно в два раза быстрее, чем при запуске под управлением Chrome. Причины такого различия пока детально не анализировались, возможно были упущены какие-то особенности движка V8

VN:F [1.9.11_1134]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.11_1134]
Rating: 0 (from 0 votes)

Читатели рекомендуют также прочесть по этой тематике:

  1. Лондонская фондовая биржа завершила перевод первичных систем на Linux
  2. Как развитие браузеров влияет на популярность поисковых систем
  3. Ушли непобеждёнными: Google Chrome и Android выстояли на хакерских соревнованиях Pwn2Own
  4. Linux для всех / [Из песочницы] Один компьютер на двоих (и более) или multiseat на базе Ubuntu 10.04 LTS
  5. Linux для всех / Модули, драйвера, устройства
Интересная статья? Поделитесь ею пожалуйста с другими:

Приглашаю присоединиться ко мне:

Один комментарий

Присоединяйтесь к беседе и оставляйте комментарий.

Трекбеки/Пинги

  1. Записки юной старпёрши | НОВАЯ ЖИЗНЬ - [...] termlib.js [...]

Оставить комментарий