Реклама:

Таненбаум Э.- Архитектура компьютера. стр.199

Следует упомянуть, что все машины используют стек для хранения локальных переменных, но не все используют его для хранения операндов. В большинстве машин нет стека операндов, но и у JVM, и у IJVM он есть. Стековые операции мы рассмотрим подробно в главе 5.

Модель памяти IJVM

А теперь мы можем рассмотреть архитектуру IJVM. Она состоит из памяти, которую можно рассматривать либо как массив из 4 294 967 296 байт (4 Гбайт), либо как массив из 1 073 741 824 слов, каждое из которых содержит 4 байта. В отличие от большинства архитектур команд, виртуальная машина Java не выполняет обращений к памяти, видимых на уровне команд, но имеет несколько неявных адресов, которые составляют основу указателя. IJVM-команды могут обращаться к памяти только через эти указатели. Определены следующие области памяти:

♦ Набор констант. Эта область, недоступная для записи из IJVM-програм-мы, состоит из констант, строк и указателей на другие области памяти, на которые можно делать ссылку. Данная область загружается в момент загрузки программы в память и после этого не меняется. Имеется скрытый регистр СРР (Constant Pool Pointer — указатель набора констант), который содержит адрес первого слова набора констант.

♦ Фрейм локальных переменных. Эта область предназначена для хранения переменных во время выполнения процедуры. Она, как уже отмечалось, называется фреймом локальных переменных. В начале этого фрейма располагаются параметры (или аргументы) вызванной процедуры. Фрейм локальных переменных не включает в себя стек операндов. Он помещается отдельно. Исходя из соображений производительности, мы поместили стек операндов прямо над фреймом локальных переменных. Существует скрытый регистр, который содержит адрес первой переменной фрейма. Мы назовем этот регистр LV (Local Variable — локальная переменная). Параметры вызванной процедуры хранятся в начале фрейма локальных переменных.

♦ Стек операндов. Стек операндов не должен быть больше определенного размера, который заранее вычисляется компилятором Java. Пространство стека операндов располагается прямо над фреймом локальных переменных, как показано на рис. 4.9. В данном случае стек операндов удобно считать частью фрейма локальных переменных. В любом случае существует виртуальный регистр, который содержит адрес верхнего слова стека. Отметим, что в отличие от регистров СРР и LV, этот указатель меняется во время выполнения процедуры, поскольку операнды помещаются в стек и выталкиваются из него.

♦ Область процедур. Наконец, существует область памяти, в которой содержится программа. Есть виртуальный регистр, содержащий адрес команды, которая должна вызываться следующей. Этот указатель называется счетчиком команд (Program Counter, PC). В отличие от других областей памяти, область процедур представляет собой массив байтов.

Таненбаум Э.- Архитектура компьютера.

Рис. 4.9. Области памяти IJVM

Следует сделать одно замечание по поводу указателей. Регистры СРР, ЬУ и БР указывают на слова, а не на байты, и смещения происходят на определенное число слов. Например, величины ЬУ, ЬУ + 1 и ЬУ + 2 указывают на первые три слова фрейма локальных переменных, а ЬУ, ЬУ + 4 и ЬУ + 8 — на слова, расположенные на расстоянии четырех слов (16 байт) друг от друга.


⇐ Предыдущая страница| |Следующая страница ⇒