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

отметили
119
человек
в архиве
На языке JavaScript написан полноценный эмулятор ПК, способный загрузить Linux
Французский математик Фабрис Беллард (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
Добавил X86 X86 17 Мая 2011
проблема (17)
Комментарии участников:
godzila
+10
godzila, 17 Мая 2011 , url
Джава скрипт основной язык программирования будущего? Кашмар!
efys
+4
efys, 17 Мая 2011 , url
Да, это полный маразм.
De-Luxis
+1
De-Luxis, 17 Мая 2011 , url
ладно хоть не на пыхе
theifish
-1
theifish, 18 Мая 2011 , url
В вебе JS уже давно стал стандартом де-факто на клиенте, и альтернатив собственно и нету.

А для своих проектов я начал использовать NodeJS — серверный JS, теперь мозг не взрывается от разного синтаксиса и мои волосы мягкие и шелковистые, а по возможностям асинхронный код даёт много очков вперёд алгоритмическому. Так что у JS все шансы.

Но PHP останется, для разных промо и домашних страничек.
godzila
+3
godzila, 18 Мая 2011 , url
А java, C# и прочие радости? И асинхронный код это не открытие, он вообще то весь асинхронный, любой ввод вывод так работает. Классы, закрытые члены, строгая типизация — брррр. Код, который проходит тесты, но любая внешняя библиотека может чего нибудь так изменить, не просто данные а интерфейс! Ужас. А если компонентов несколько сотен, все из разных источников и команд разработчиков и кто нибудь как добавит или удалит какой нибудь метод. Жуткий сон! Я не говорю о страничках, а о промышленном изготовление програмного обеспечения. Система управления космическим кораблем на джава скрипте. Или ядерный реактор. Это не язык создания больших систем, которые будут жить и изменятся десятилетиями.
Но парни конечно круты :)

P.S.
асинхронный код даёт много очков вперёд алгоритмическому
А это как? Извините не удержался :)
bytecat
+1
bytecat, 17 Мая 2011 , url
Не стоит забывать что он не первый.
aiju.de/code/pdp11/
shuron
0
shuron, 17 Мая 2011 , url
Офигеть
Netto
-2
Netto, 18 Мая 2011 , url
Эх, не судьба посидеть под стаrой добrой юниксовой консолью — моя Опера и 3.6 Лисико в пролёте. Кстати, давно, несколько лет назад, у меня была программа эмулирующая на, вроде, 98-й венде, Unix. Ещё до моего первого установленного Red Hat. Может где-то на древних болванках и засейвлено, не помню даже откуда драл, возможно и с BBS.
Dboss
0
Dboss, 18 Мая 2011 , url
Дожили — через современный браузер открывать эмулятор 486 процессора с загрузкой Linux. Месье знает толк в извращениях.
Almarz
0
Almarz, 18 Мая 2011 , url
Ну почему же извращения) Вполне применимо в быту и монетизировать можно.
outcast
+1
outcast, 18 Мая 2011 , url
Раньше был доступен онлайн эмулятор старенького zx-spectrum, тоже на JavaScript'е. Можно было поиграть в игрушки 80х прямо в браузере :) Вот ссылка, может у кого-нибудь откроется.


Войдите или станьте участником, чтобы комментировать