Устройство стековых и регистровых процессоров
Любая программа выполняется процессором, теми физическими ресурсами, которые он может предоставить. У процессора нет типов данных, типов переменных, нет сложных циклов. Есть только if (условие: если - то) и jmp (от jump - прыжок, перемещение по коду).
Язык Си -- это самый простой "ассемблер высокого уровня" - уже есть структурные операторы, абстрактные типы данных, указатели, зачаточные модули и т.п.
Сноска: Операторы в Си
Но есть и проблемы. Указатели, например, ведут к небезопасному коду, нет некоторых желаемых возможностей и т.д. Решением является создание виртуальной машины, виртуального ЦПУ, вместо реального физического ЦПУ. В виртуальном ЦПУ убраны все опасные операции и он лучше переносится на другую среду.
Виртуальные машины делятся на стековые и регистровые.
Стековая машины работает с данными на верхушке стека. То есть, код получается проще, компилятор писать проще и т.д. Но при этом получается дополнительный уровень косвенности, вместо работы с imm значениями работаем со значениями по ссылке (в верхушке стека)
Самые популярные виртуальные машины - Java VM и Common Intermediate Language от Microsoft - стековые. Стековая архитектура обеспечивает большую независимость виртуальной машины от системы, в которую она портируется.
Регистровый виртуальный процессор в этом смысле "ближе к железу". Виртуальные регистры похожи на реальные регистры. Но, компилятор должен быть хитрее - раскладывать переменные по регистрам (задача раскраски графа). Это довольно хитрая задача, поэтому регистровый байткод встречается реже.
Регистровые и стековые машины
Два мира виртуальных машин
Стековая и регистровая архитектура
Язык Си -- это самый простой "ассемблер высокого уровня" - уже есть структурные операторы, абстрактные типы данных, указатели, зачаточные модули и т.п.
Сноска: Операторы в Си
Но есть и проблемы. Указатели, например, ведут к небезопасному коду, нет некоторых желаемых возможностей и т.д. Решением является создание виртуальной машины, виртуального ЦПУ, вместо реального физического ЦПУ. В виртуальном ЦПУ убраны все опасные операции и он лучше переносится на другую среду.
Виртуальные машины делятся на стековые и регистровые.
Стековая машины работает с данными на верхушке стека. То есть, код получается проще, компилятор писать проще и т.д. Но при этом получается дополнительный уровень косвенности, вместо работы с imm значениями работаем со значениями по ссылке (в верхушке стека)
Самые популярные виртуальные машины - Java VM и Common Intermediate Language от Microsoft - стековые. Стековая архитектура обеспечивает большую независимость виртуальной машины от системы, в которую она портируется.
Регистровый виртуальный процессор в этом смысле "ближе к железу". Виртуальные регистры похожи на реальные регистры. Но, компилятор должен быть хитрее - раскладывать переменные по регистрам (задача раскраски графа). Это довольно хитрая задача, поэтому регистровый байткод встречается реже.
Регистровые и стековые машины
Два мира виртуальных машин
Стековая и регистровая архитектура