Фирма Sun Microelectronics недавно выпустила первый Java-процессор  -  PicoJava I. Этот процессор разработан специально для наиболее эффективного выполнения байт-кодов языка Java. Очевидно, что прямое выполнение Java-команд устранит некоторые недостатки, присущие этой технологии.

 

До недавнего времени Java-программы запускались только на специальных интерпретаторах или компиляторах. В первом случае выполнение программы сильно замедляется, так как универсальный процессор тратит время на преобразование Java-программ в свой собственный код. В случае же компилирования “на лету” (Just In Time  -  JIT) увеличивается размер программы (раза в три или больше). Если компьютер имеет ограниченный объем памяти, то исполнение Java-программ может привести к серьезным проблемам.

 

Архитектура JavaChip, разработанная Sun Microelectronics, позволяет проектировать процессоры, оптимизированные для быстрого выполнения Java-программ в небольшом объеме памяти. Процессор PicoJava I использует систему команд, определенную спецификацией виртуальной Java-машины. Поскольку коды Java можно выполнять на новом процессоре без их предварительной обработки, то это позволяет избежать интерпретации или компиляции Java-программ.

 

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

 

Виртуальная Java-машина  -  основной механизм, определенный фирмой Sun, для управления Java-программами. Спецификация Java-машины полностью определяет систему команд Java, типы данных, обрабатываемых Java-машиной, и ее регистры. Поскольку большинство команд Java умещаются в один байт, то их часто называют байт-кодом. Для Java-машины определены следующие типы данных: byte  -  байт, short  -  двухбайтовые целые числа, integer  -  четырехбайтовые целые числа, long  -  восьмибайтовые целые числа, float  -  четырехбайтовые вещественные числа, double  -  восьмибайтовые вещественные числа, char  -  двухбайтовые символы, object  -  четырехбайтовая ссылка на объект, returnAddress  -  четырехбайтовый адрес возврата из метода,

 

а также следующие регистры: pc  -  счетчик команд, vars  -  регистр для доступа к локальным переменным, optop  -  указатель на стек операндов, frame  -  указатель на структуру окружения времени выполнения.

 

Байт-коды языка Java разрабатывались для обеспечения компактности программ. Это достигается с помощью небольшого количества регистров и использования указателей. Средняя команда для Java имеет длину всего 1,8 байта, а команды обычных RISC-процессоров  -  около 4 байт. Java-машина имеет стековую архитектуру, так как операнды передаются через регистр процессора “стек операндов”. Таким образом уменьшается длина команды, так как она занимает всего один байт, сопровождаемый (если необходимо) номером операнда  -  0, 1, 2, 3 и т. д.

 

RISC-архитектура Java-процессора

 

При создании процессора, который эффективно реализует “в железе” виртуальную Java-машину, конструкторы PicoJava I использовали RISC-технологию, успешно применяемую специалистами фирмы Sun Microsystems в течение последних 15 лет. Процессор можно легко настроить на различную длину кэша команд и данных, а также включить или выключить вещественный вычислитель.

 

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

 

Во время работы процессора байт-коды Java сначала записываются в кэш команд, размер которого может меняться от нуля до 16 Кб. Хотя командный кэш в PicoJava I и меньше по размеру, чем в других RISC-процессорах, но общий эффект остается примерно таким же, так как в среднем Java-команда короче. Затем байт-коды передаются в буфер команд, который имеет размер 12 байт. Одновременно в него может быть записано не более 4 байт, а прочитано  -  5 байт. Поскольку средняя длина команд составляет 1,8 байта, то за один такт в процессор может быть загружено сразу несколько команд. Пять начальных байт буфера команд могут быть декодированы и переданы на следующую стадию конвейера для дальнейшей обработки.

 

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

 

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

 

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

 

Производительность

 

Процессор PicoJava I разработан для наиболее эффективного выполнения Java-программ. Именно для этого были использованы конвейерная обработка команд, совместное их выполнение и стековая архитектура. Тесты на производительность PicoJava I показывают, что время и усилия, затраченные на разработку этого процессора, не пропали даром. В эталонных тестах PicoJava I работал в 15 - 20 раз быстрее, чем 486 с интерпретатором (с той же частотой), и в 5 раз быстрее Pentium с JIT-компилятором.

 

Язык Java разрабатывался специально для передачи по сетям. Именно поэтому программы, написанные на нем, очень компактны. А высокая производительность PicoJava I, его гибкие настройки и небольшая стоимость делают эту технологию наиболее приемлемой для развития сети. Появление Java-процессора открывает новые возможности для использования компьютерных сетей и интеграции различных платформ.

 

Валерий Коржов

 

К Валерию Коржову можно обратиться по адресу: oskar@get.msk.su.

 

Версия для печати