logo
Bolshakov_Poyasnitelnaya_zapiska

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

Существует два способа исполнения пользовательской программы:

1) прямая интерпретация;

2) трансляция с отложенной интерпретацией.

Для рассматриваемой интегрированной среды разработки приемлемым является второй подход, поскольку:

1) программу на языке С невозможно разбить на независимые команды, которые можно было бы интерпретировать; во время отладки требуется исполнение всей программы;

2) процесс интерпретации может производиться много раз после единожды выполненной трансляции.

В качестве виртуальной машины, исполняющей программу, выбрана lua [46], которая исполняет программу на скомпилированном в байт-код скриптовом языке Lua. Выбор именно данной виртуальной машины обусловлен следующими соображениями:

1) виртуальная машина lua кросплатформенна: работает на Windows и UNIX-подобных операционных системах;

2) виртуальная машина высоко оптимизирована, что обеспечивает ее высокую скорость работы;

3) имеется API для использования языка Java (инструмент LuaJava [47]), который является основным языком реализации разрабатываемой системы;

4) виртуальная машина поддерживает кооперативную многопоточность пользовательских программ;

5) лицензия lua подходит как для учебного использования, так и для коммерческого.

Язык Lua является динамически типизированным языком, т. е. на этом языке тип имеют не сами переменные, а их значения, поэтому в языке отсутствуют определения типов. Для интеграции виртуальной машины lua с языком Java возможно использование библиотеки LuaJava, позволяющей скриптам на языке Lua манипулировать Java-объектами (в том числе вызывать их методы).

Важно отметить, что в языке Lua естественен принцип кооперативной многопоточности, осуществляемый за счет так называемых сопроцедур (coroutine). Использование кооперативной многопоточности объясняется малой ресурсоемкостью, в отличие от реализации многозадачности с вытеснением, поскольку для вытеснения задачи необходимо сохранять весь ее контекст. Поскольку для реализации многозадачности в микроконтроллере было решено использовать операционную систему с кооперативной многозадачностью, то наличие подобной функциональности в виртуальной машине позволяет более точно производить моделирование работы программы.