Виртуальные машины

Программно-определяемые процессоры

Зачем нужны виртуальные машины?

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

Что есть виртуальная машина:

Совокупность аппаратной, программной и интерфейсной спецификаций, полностью определяющих некоторую вычислительную среду.

Зачем нужна виртуальная машина:

Описание предметной области в абстрагированном от конкретной вычислительной платформы виде – средо-ориентированное программирование.

Удобная для ряда применений (не просто приложений) архитектура системы команд

Выжившие машины и концепции

Виртуальный процессор

Стековая машина


Цепные интерпретивные коды


Виртуальная машина Java

Команды ВМ Java

Поддержка ООП в ВМ Java

Платформа Java против стекового микропроцессора

Java на кристалле - JSTAR

Сопроцессор ядра ARM, позволяющий исполнять команды как ARM, так и байт-коды Джава. Изначально служит для ускорения исполнения Java-приложений на встраиваемых устрйоствам, подключенных к Интернет, поскольку имеющиеся ресурсы не позволяют компилировать байт-код Java в машинные команды "на лету".

Java на кристалле - Jazelle

А вот это уже реальный рыночный продукт.

Закономерный итог - десятикратное увеличение скорости программ, реализованных в байт-коде Java.

Java на кристалле - JVXtreme

Отдельный стековый процессор, с оптимизацией использования стека (folding)

Java на кристалле – Hot-Shot от Chicory Systems

JIT-в-железе – не больше, не меньше

Java на кристалле – Espresso и Decaf

Полнофункциональный процессор или сопроцессор

Espresso: суперскаляр, 2 5-ти ступенчатых конвейера, исполняет до 8 инструкций (14 байт-кодов) за такт

Decaf – низкопотребляющая версия Espresso, 1 конвейер, до 4 инструкций за такт (7 байт-кодов), обработка как целых чисел, так и 32 и 64 битовых чисел с плавающей точкой

Java на кристалле – Decaf

Движение к Java на кристалле

Зачем изобретать велосипед, если можно просто помочь JIT-компилятору

Решение:Thumb-2EE (Execution Envorinment) для Динамических Адаптивных Компиляторов (Smart JIT)

Технология .NET и CIL

Всё та же стековая архитектура системы команд – Common Intermediate Language, стандартизован Дальнейшее продвижение к объектно-ориентированной архитектуре виртуальной машины – managed execution. Основная цель - дать разработчику удобный переносимый инструмент, выбить почву из-под ног конкурентов и предоставить эффективный инстрвмент для отлавливания ошибок уменьшая головную боль менеджеру и позволяя снизить требования к квалификации программистов.

Основные особенности:

Лирическое отступление – слабости JIT

JIT является не панацеей

Эффективность JIT зависит от «высокоуровневости» промежуточного кода представления программы и полноты «метаинформации» о обрабатываемом коде, представленной (и переданной) каким-то образом

CIL: Метаинформация:

таблицы,

связи

Сама по себе обработка метаинформации уже является нетривиальной задачей

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

Например:

Одна из возможных реализаций CIL-процессора на базе DSP-ядра (2005, ННГУ, Wireless Lab)

Технология .NET и CIL

SmallTalk: чистый объектный

Чистейший объектнейший язык программирования. Мечта всех объектно-ориентированных программистов.

SmallTalk: система команд