Обработка необработанной операции в системах с множеством наборов команд
Иллюстрации
Показать всеИзобретение относится к области обработки данных, более конкретно к обработке необработанных операций в системах, поддерживающих множество наборов команд. Техническим результатом является обеспечение возможности обработки необработанных операций перед эмуляцией первого набора команд. Указанный результат достигается за счет того, что обнаруживают необработанную операцию программной команды из первого набора команд, например Java-байт-кода, запускают эмуляцию упомянутой первой команды с использованием одной или более команд дополнительного набора команд, например ARM-команд, обрабатывают любую последующую необработанную операцию, возникающую во время эмуляции упомянутой команды первого набора команд с использованием средства обработки исключительных ситуаций. Данный подход хорошо подходит для обработки необработанной операции команд переменной длины, которые интерпретируются процессорным ядром, имеющим собственный набор команд фиксированной длины. 3 н. и 57 з.п. ф-лы, 30 ил.
Реферат
Настоящее изобретение относится к области систем обработки данных. Более конкретно, данное изобретение относится к обработке необработанных операций в системах, поддерживающих множество наборов команд.
Известны системы обработки данных, которые поддерживают множество наборов команд. Примером таких систем являются Thumb-активируемые процессоры компании ARM Limited of Cambridge, England. Эти Thumb-активируемые процессоры поддерживают как выполнение 32-разрядных ARM-команд, так и выполнение 16-разрядных Thumb-команд.
В системе обработки данных иногда возникает ситуация, при которой программную команду невозможно обработать непосредственно системой обработки данных. Поэтому известно обеспечение средств для обработки таких необработанных операций. В качестве примера такой ситуации можно назвать преждевременные прекращения выполнения команды предварительной выборки. Известно, что при предварительной выборке команд в системе виртуальной памяти загрузка команды может пересечь границу страницы и может произойти преждевременное прекращение выполнения, так как новая страница еще не отображена соответствующим образом в системе виртуальной памяти. После этого можно правильно поместить отображение и повторно выдать предварительную выборку команды.
Еще одним примером такой ситуации является выполнение команд с плавающей точкой. Известно, что во время выполнения операций с плавающей точкой могут возникать ситуации, которые невозможно обработать непосредственно системой обработки данных. Это особенно касается систем с плавающей точкой, совместимых со спецификацией IEEE 754. Примеры таких ситуаций включают в себя деление на нуль, любые операции, связанные с NaN (Not a Number, «не число»), любые операции, связанные с бесконечностью, или некоторые операции, связанные с денормализованными числами.
Возникающая при этом проблема заключается в том, что при добавлении нового набора команд требуются значительные усилия и развитие, чтобы гарантировать, что будут обеспечены соответствующие средства для всех возможных преждевременных прекращений выполнения.
Особая проблема появляется при возникновении необработанной операции с плавающей точкой. В основе многих систем определение операции с плавающей точкой, которая не была обработана, осуществляется посредством анализа потока команд. При новом наборе команд эти системы необходимо переписать, чтобы принять во внимание новый набор команд. Кроме того, проблема возникает, когда новый набор команд может сформировать множество операций с плавающей точкой для одной команды нового набора команд. В этом случае система может оказаться неспособной определить, какая операция с плавающей точкой не была обработана при анализе потока команд, так как одна команда может породить более чем одну необработанную операцию с плавающей точкой.
Еще одна проблема возникает, когда необработанные операции с плавающей точкой неточные, то есть когда необработанная операция с плавающей точкой обнаруживается не в момент выполнения команды, породившей операцию с плавающей точкой, а несколько позже. Эта ситуация возникает из-за параллельного характера множества систем с плавающей точкой. Система обработки данных, встретив команду, задающую операцию с плавающей точкой, выдает операцию с плавающей точкой в подсистему обработки данных с плавающей точкой. После выдачи операции с плавающей точкой в подсистему обработки данных с плавающей точкой главная система обработки данных продолжает выполнять следующие команды в потоке команд. Многие команды можно выполнить до того, как подсистема обработки данных с плавающей точкой обнаружит необработанную операцию с плавающей точкой и подаст сигнал о состоянии «необработанная операция» в главную систему обработки данных. В этом случае причину необработанной операции с плавающей точкой невозможно определить посредством анализа потока команд. Известно, что в таких случаях система с плавающей точкой содержит регистр, который идентифицирует необработанную операцию с плавающей точкой, например векторную систему с плавающей точкой компании ARM Limited of Cambridge, England.
Во многих системах подсистема обработки данных с плавающей точкой не может подавать сигнал о необработанной операции в главную систему обработки данных в произвольный момент, напротив, она может подавать сигнал в главную систему обработки данных только в точно определенные моменты, когда главная система обработки данных выполняет квитирование с подсистемой обработки данных с плавающей точкой. Типично, такие квитирования выполняются только после выполнения команды, задающей операцию с плавающей точкой. В этом случае сигнал о необработанной операции с плавающей точкой не может быть передан в главную систему обработки данных до тех пор, пока главная система обработки данных не выполнит следующую команду, задающую операцию с плавающей точкой.
Введение нового набора команд, который может выполнять множество операций с плавающей точкой на одну команду вместе с неточными необработанными операциями с плавающей точкой, обуславливает возникновение очень сложных проблем или делает невозможным для системы обработать необработанную операцию с плавающей точкой. Система не может определить, какая команда вызвала необработанную операцию с плавающей точкой, а также не может определить, когда должно продолжиться выполнение в потоке команд после того, как будет обработана необработанная операция с плавающей точкой.
В работе Ludwig Claβen, Ulrich Weisner: 80286-Programmierung, 1990, VEB Verlag Technik, Berlin, ISBN 3-341-00867-5 раскрыта система, в которой в необязательном порядке присутствует математический сопроцессор. Конфигурационный флажок служит индикатором отсутствия математического сопроцессора. Если математический сопроцессор отсутствует, то выполняется эмуляция команд математического сопроцессора.
Согласно одному аспекту изобретения предложено устройство для обработки данных под управлением программных команд из первого набора команд и одного или нескольких дополнительных наборов команд, характеризуемое тем, что содержит:
детектор (238) необработанной операции, предназначенный для обнаружения необработанной операции, возникающей во время выполнения программной команды первого набора команд,
обработчик (250) необработанной операции, предназначенный, после обнаружения упомянутой необработанной операции, для запуска эмуляции упомянутой команды первого набора команд с использованием одной или нескольких команд из по меньшей мере одного из упомянутых одного или нескольких дополнительных наборов команд,
средство (236) обработки исключительных ситуаций, относящееся к упомянутым одному или нескольким дополнительным наборам команд и предназначенное для обработки любой последующей необработанной операции, возникающей во время эмуляции упомянутой команды первого набора команд.
В изобретении признается, что перечисленные выше проблемы можно существенно уменьшить, создав для систем возможность распознавания необработанных операций в первом наборе команд, но при этом не требуя обязательного исправления данной ситуации и повторного выполнения данной команды первого набора команд. Вместо этого, команда первого набора команд (или нового набора команд), которая вызвала появление необработанной операции, эмулируется одной или несколькими командами одного или нескольких дополнительных наборов команд (например, второго набора команд). В зависимости от типа возникшей необработанной операции существует возможность, что необработанная операция не повторится снова после эмуляции. Альтернативно, если необработанная операция возникает также и после эмуляции с использованием команд одного или нескольких дополнительных наборов команд, можно использовать существующие средства для работы с такими необработанными операциями одного или нескольких дополнительных наборов команд, чтобы преодолеть необработанную операцию.
Обработчик необработанной операции может выдавать команды для устранения состояния "необработанная операция" системы обработки данных. Некоторые системы обработки данных содержат один или несколько флажков, которые регистрируют, находится ли система обработки данных в состоянии "необработанная операция". Может потребоваться сброс этого флажка обработчиком необработанной операции до эмуляции упомянутой команды первого набора команд. Нужно ли снимать флажок, зависит от типа необработанной операции, а также от того, имеется ли в наличии флажок, связанный с данным типом необработанной операции.
Хотя предложенная методика может иметь самое широкое применение, она особенно хорошо подходит для систем, в которых первый набор команд является набором команд переменной длины, а один или более дополнительных наборов команд являются наборами команд фиксированной длины. При такой комбинации в наборе команд переменной длины могут возникать новые типы необработанной операции, которые невозможны в наборе команд фиксированной длины, и средства, разработанные для работы с этими необработанными операциями в одном или нескольких дополнительных наборах команд, невозможно легко адаптировать для работы с необработанной операцией, когда она возникает в связи с первым набором команд переменной длины как таковым.
Конкретная ситуация, в которой настоящая методика обеспечивает особые преимущества, касается преждевременного прекращения выборки команд переменной длины. В такой ситуации команда переменной длины может распространяться более чем на одно командное слово, и поэтому может быть неясно, выборка какой команды вызвала данную необработанную операцию. Это затрудняет правильную обработку необработанной операции.
Настоящая методика также особенно хорошо подходит для систем, содержащих систему или подсистему обработки данных с плавающей точкой, в которой одна команда первого набора команд может сформировать множество операций с плавающей точкой или в которой сигнализация о необработанных операциях с плавающей точкой является неточной.
Конкретная ситуация, в которой настоящая методика особенно предпочтительна, касается систем, в которых одна команда первого набора команд может сгенерировать множество операций с плавающей точкой вместе с неточной сигнализацией о необработанных операциях с плавающей точкой. В такой ситуации система, возможно, будет не способна определить, какая команда первого набора команд послужила причиной необработанной операции с плавающей точкой.
В предложенной методике эта ситуация преодолевается запуском эмуляции команды первого набора команд, которая выполнялась, когда была запущена необработанная операция с плавающей точкой, с использованием одной или нескольких команд одного или нескольких дополнительных наборов команд. Команда первого набора команд, которая выполнялась, когда была запущена необработанная операция с плавающей точкой, может быть или не быть командой, ставшей причиной данной необработанной операции с плавающей точкой. Независимо от того, вызвала ли или нет команда первого набора команд, которая выполнялась, когда была запущена необработанная операция с плавающей точкой, необработанную операцию с плавающей точкой, эмуляция команды первого набора команд, которая выполнялась, когда была запущена необработанная операция с плавающей точкой, вынудит применить существующие средства, предназначенные для обработки таких необработанных операций одного или нескольких дополнительных наборов команд, чтобы преодолеть необработанную операцию.
Перед эмуляцией команды первого набора команд с использованием команд одного или нескольких дополнительных наборов команд может потребоваться, чтобы обработчик необработанной операции с плавающей точкой удалил флажок необработанной операции с плавающей точкой, если таковой имеется.
Если команда первого набора команд, которая выполнялась, когда была запущена необработанная операция с плавающей точкой, была командой, которая вызвала данную необработанную операцию с плавающей точкой, то та же самая необработанная операция с плавающей точкой повторится при эмуляции команды, и существующие средства, предназначенные для обработки таких необработанных операций одного или нескольких дополнительных наборов команд, будут использованы для преодоления необработанной операции.
Если команда первого набора команд, которая выполнялась, когда была запущена необработанная операция с плавающей точкой, не была командой, которая вызвала необработанную операцию с плавающей точкой, потому что система обработки данных использует неточное обнаружение необработанной операции с плавающей точкой, то та же самая необработанная операция с плавающей точкой не повторится при эмуляции этой команды. В этом случае система обработки данных обычно имеет флажок необработанной операции с плавающей точкой или эквивалентное средство для регистрации того факта, что произошла необработанная операция с плавающей точкой. Кроме того, система обработки данных обычно регистрирует операцию с плавающей точкой, которая вызвала данную необработанную операцию с плавающей точкой.
Удаление флажка или другого средства, используемого для регистрации того факта, что произошла необработанная операция с плавающей точкой, обычно приводит к использованию существующих средств, предназначенных для работы с такими необработанными операциями одного или нескольких дополнительных наборов команд, чтобы преодолеть необработанную операцию.
В других системах может быть необходимым проверить флажок или другое средство, и если он указывает, что была зарегистрирована необработанная операция с плавающей точкой, то после этого прямо используются средства одного или нескольких дополнительных наборов команд, предназначенные для работы с необработанными операциями, перед сбросом флажка или другого средства. При использовании средств одного или нескольких наборов команд, предназначенных для работы с такими необработанными командами, сброс флажка или другого средства может также происходить автоматически, в этом случае нет необходимости, чтобы обработчик необработанной операции с плавающей точкой явным образом сбрасывал флажок или другое средство.
В следующих видах систем может отсутствовать необходимость проверки флажка или другого средства. Вместо этого может быть достаточным использовать средства одного или нескольких дополнительных наборов команд для работы с необработанной операцией. Этого может быть достаточно, потому что уже известно, что флажок или другое средство установлено в силу того факта, что система исполняет код в обработчике необработанной операции с плавающей точкой, или может возникнуть случай, при котором применение данных средств повлечет проверку и возможный последующий сброс флажка или другого средства в качестве неотъемлемой части применения таких средств.
Независимо от точных методик, применяемых в обработчике необработанной операции с плавающей точкой, которые могут быть разными в разных системах, если команда первого набора команд, которая выполнялась, когда была запущена необработанная операция с плавающей точкой, не была командой, которая вызвала необработанную операцию с плавающей точкой, то необработанная операция с плавающей точкой будет разрешена до эмуляции команды первого набора команд, которая запустила необработанную операцию с плавающей точкой. В этом случае эмуляция команды первого набора команд может стать или не стать причиной необработанной операции. Однако неизвестно, вызовет ли она необработанную операцию или нет, и поэтому невозможно просто возобновить выполнение, так как это может привести к возможному бесконечному циклу с многократным запуском необработанной операции с плавающей точкой и многократному повторному выполнению команды обработчиком необработанной операции с плавающей точкой. Поэтому необходимо эмулировать команду первого набора команд и возобновить выполнение на следующей команде.
Предложенный способ также особенно пригоден для ситуаций, в которых один или несколько дополнительных наборов команд являются собственным набором команд процессорного ядра, и при этом характерно наличие набора хорошо разработанных обработчиков преждевременного прекращения, и первый набор команд является интерпретированным набором команд такого типа, для которого может быть желательным добавить поддержку на более позднем этапе. Конкретным примером такого интерпретированного первого набора команд переменной длины могут служить команды Java-байт-кода.
Согласно другому аспекту настоящего изобретения предложен способ обработки данных под управлением программных команд из первого набора команд и одного или нескольких дополнительных наборов команд, заключающийся в том, что
обнаруживают (238) необработанную операцию, возникающую во время выполнения программной команды первого набора команд,
после обнаружения упомянутой необработанной операции запускают эмуляцию (250) упомянутой команды первого набора команд с использованием одной или более команд по меньшей мере одного из упомянутых одного или нескольких дополнительных наборов команд,
обрабатывают любую последующую необработанную операцию, возникающую во время эмуляции упомянутой команды первого набора команд, с использованием средства обработки исключительных ситуаций, относящегося к упомянутым одному или нескольким дополнительным наборам команд.
Согласно следующему аспекту изобретения предложен компьютерный программный продукт для управления устройством обработки данных, предназначенным для обработки данных под управлением программных команд из первого набора команд и одного или нескольких дополнительных наборов команд, характеризуемый тем, что содержит
логическое средство обработчика (250) необработанной операции, предназначенное, после обнаружения необработанной операции, возникающей во время выполнения команды первого набора команд, для запуска эмуляции упомянутой команды, которая вызвала упомянутую необработанную операцию, с использованием одной или нескольких команд по меньшей мере одного из упомянутых одного или нескольких дополнительных наборов команд,
логическое средство (236) обработки исключительных ситуаций, относящееся к упомянутым одному или нескольким дополнительным наборам команд и предназначенное для обработки любой последующей необработанной операции, возникающей во время эмуляции упомянутой команды первого набора команд.
Кроме представления в виде устройства и способа работы устройства настоящее изобретение может быть представлено в виде компьютерного вспомогательного кода, который служит в качестве обработчика необработанной операции. Этот вспомогательный код можно распространять на отдельных записываемых носителях, внедрять в качестве встроенных программ во встроенную систему обработки или какими-либо другими путями.
Далее исключительно в качестве примера будут описаны варианты осуществления изобретения со ссылкой на прилагаемые чертежи, на которых
фиг.1 иллюстрирует систему обработки данных, содержащую аппаратный транслятор байт-кодов,
фиг.2 схематически иллюстрирует программную интерпретацию команд байт-кодов,
фиг.3 изображает алгоритм работы кодового фрагмента в программном интерпретаторе команд, который заканчивается командой завершения последовательности,
фиг.4 изображает примерный кодовый фрагмент, исполняемый вместо байт-кода,
фиг.5 иллюстрирует примерный вариант системы обработки данных, которая не имеет аппаратной поддержки исполнения байт-кодов,
фиг.6 изображает алгоритм, иллюстрирующий работу программного интерпретатора команд при работе с системой, изображенной на фиг.5,
фиг.7 иллюстрирует отображение между Java-байт-кодами и операциями обработки,
фиг.8 иллюстрирует программируемую трансляционную таблицу в форме ассоциативной памяти,
фиг.9 иллюстрирует программируемую трансляционную таблицу в форме памяти с произвольным доступом,
фиг.10 изображает алгоритм, схематически иллюстрирующий инициализацию и программирование программируемой трансляционной таблицы,
фиг.11 изображает схематически часть конвейера обработки в системе, которая выполняет интерпретацию Java-байт-кодов,
фиг.12 схематически изображает команду переменной длины, распространяющуюся на два командных слова и две страницы виртуальной памяти,
фиг.13 схематически иллюстрирует часть конвейера системы обработки данных, включающую средство для работы с преждевременными прекращениями предварительной выборки такого типа, как показан на фиг.12,
фиг.14 представляет логическое выражение, показывающее один из путей, как можно обнаружить преждевременное прекращение предварительной выборки, такого типа, как показан на фиг.12,
фиг.15 схематически иллюстрирует комбинацию вспомогательного кода для обработки преждевременного прекращения и эмуляции команды,
фиг.16 изображает алгоритм, схематически иллюстрирующий обработку, выполняемую для преодоления преждевременных прекращений предварительной выборки команд байт-кода переменной длины,
фиг.17 иллюстрирует взаимосвязь между операционной системой и разными процессами, которыми она управляет,
фиг.18 иллюстрирует систему обработки, включающую процессорное ядро и Java-ускоритель,
фиг.19 изображает алгоритм, схематически иллюстрирующий операции операционной системы при управлении конфигурацией Java-ускорителя,
фиг.20 изображает алгоритм, схематически иллюстрирующий работу виртуальной машины Java в связи с механизмом ускорения Java, используемую при управлении конфигурацией механизма ускорения Java,
фиг.21 иллюстрирует систему обработки данных, содержащую аппаратный транслятор байт-кодов, как на фиг.1, дополнительно содержащую подсистему обработки данных с плавающей точкой,
фиг.22 иллюстрирует систему обработки данных, содержащую аппаратный транслятор байт-кодов, как на фиг.1, и подсистему обработки данных с плавающей точкой, как на фиг.21, а также дополнительно содержащую регистр операции с плавающей точкой и флажок состояния "необработанная операция",
фиг.23 изображает ARM-команды с плавающей точкой, сформированные для Java-команд с плавающей точкой,
фиг.24 изображает последовательность ARM-команд, которая может быть сгенерирована аппаратным Java-ускорителем для Java-команд "dmul" и "dcmpg",
фиг.25 изображает последовательность операций при выполнении команды "dmul", за которой следует команда "dcmpg", когда необработанная операция с плавающей точкой вызвана выполнением команды FCMPD, сгенерированной аппаратным Java-ускорителем для Java-команды "dmul", причем показана последовательность операций для системы с использованием неточного обнаружения необработанной операции, соответствующего фиг.22,
фиг.26 изображает состояние регистра операции с плавающей точкой и флажок состояния "необработанная операция" после исполнения команды FMULD на фиг.25,
фиг.27 изображает последовательность операций при выполнении команды "dmul", за которой следует команда "dcmpg", когда необработанная операция с плавающей точкой вызвана исполнением команды FCMPD, сгенерированной аппаратным Java-ускорителем для Java-команды "dcmpg", причем показана последовательность операций для системы с использованием неточного обнаружения необработанной операции, соответствующего фиг.22,
фиг.28 показывает состояние регистра операций с плавающей точкой и флажка состояния "необработанная операция" после выполнения команды FCMPD на фиг.27,
фиг.29 показывает последовательность операций при выполнении команды "dmul", за которой следует команда "dcmpg", когда необработанная операция с плавающей точкой вызвана выполнением команды FMULD, сгенерированной аппаратным Java-ускорителем для Java-команды "dmul", причем последовательность операций показана для системы с использованием точного обнаружения необработанной операции, соответствующего фиг.21,
фиг.30 показывает последовательность операций при выполнении команды "dmul", за которой следует команда "dcmpg", когда необработанная операция с плавающей точкой вызвана выполнением команды FCMPD, сгенерированной аппаратным Java-ускорителем для Java-команды "dcmpg", причем последовательность операций показана для системы с использованием точного обнаружения необработанной операции с плавающей точкой, соответствующего фиг.21.
На фиг.1 изображена система 2 обработки данных, которая содержит процессорное ядро 4, например процессор ARM, и аппаратный транслятор 6 байт-кодов (также именуемый Jazelle). Процессорное ядро 4 содержит банк 8 регистров, декодер 10 команд и информационный канал 12 для выполнения различных операций обработки данных после сохранения значений данных в регистрах банка 8 регистров. Предусмотрен регистр 18, который содержит флажок 20, контролирующий, включен ли в данный момент аппаратный транслятор 6 байт-кодов. Кроме того, предусмотрен регистр 19, который содержит флажок 21, указывающий, активен ли в данный момент аппаратный транслятор байт-кодов. Иными словами, флажок 21 указывает, выполняет ли в данный момент система обработки данных Java-байт-коды или ARM-команды. Понятно, что в других вариантах регистры 18 и 19 могут быть выполнены в виде одного регистра, содержащего оба флажка 20 и 21.
В процессе работы, если выполняются Java-байт-коды и активен аппаратный транслятор 6 байт-кодов, Java-байт-коды поступают в аппаратный транслятор байт-кодов и служат для формирования последовательности соответствующих ARM-команд (в данном конкретном примерном неограничительном варианте осуществления) или, по меньшей мере, сигналов управления процессорным ядром, представляющих ARM-команды, которые затем подаются в процессорное ядро 4. Следовательно, аппаратный транслятор 6 байт-кодов может отобразить простой Java-байт-код в последовательность соответствующих ARM-команд, которые могут исполняться процессорным ядром 4. Когда аппаратный транслятор байт-кодов не активен, процесс идет в обход, и нормальные ARM-команды могут подаваться в декодер 10 ARM-команд для управления процессорным ядром 4 в соответствии с его собственным набором команд. Понятно, что по всему описанию последовательности ARM-команд могут быть также последовательностями Thumb-команд и/или комбинацией команд из разных наборов команд, и такие альтернативы предусмотрены изобретением и подпадают под его объем.
Понятно, что аппаратный транслятор 6 байт-кодов может обеспечить поддержку аппаратной трансляции только для поднабора возможных Java-байт-кодов, которые могут встретиться. Некоторые Java-байт-коды могут потребовать настолько обширной и абстрактной обработки, что будет неэффективным пытаться отобразить их в аппаратных средствах в соответствующие операции ARM-команд. Соответственно, когда аппаратный транслятор 6 байт-кодов встречает такой не поддерживаемый аппаратно байт-код, он запускает программный интерпретатор команд, записанный в собственных ARM-командах, для выполнения обработки, указанной не поддерживаемым аппаратно Java-байт-кодом.
Программный интерпретатор команд может быть записан для обеспечения программной поддержки всем возможным Java-байт-кодам, которые могут быть интерпретированы. Если предусмотрен и включен аппаратный транслятор 6 байт-кодов, то в обычном случае только не поддерживаемые аппаратно Java-байт-коды будут отсылаться к соответствующим фрагментам кода в программном интерпретаторе команд. Однако если аппаратный транслятор 6 байт-кодов не предусмотрен или отключен (например, во время отладки или т.п.), то все Java-байт-коды будут отсылаться в программный интерпретатор команд.
На фиг.2 схематически проиллюстрирована работа программного интерпретатора команд. Поток Java-байт-кодов 22 представляет программу Java. Между Java-байт-кодами могут находиться операнды. Следовательно, после выполнения данного Java-байт-кода следующий подлежащий исполнению Java-байт-код может появиться непосредственно в следующей позиции байта или позже, через несколько позиций, если присутствуют перемежающие байты операнда.
Как показано на фиг.2, может встретиться Java-байт-код ВС4, который не поддерживается аппаратным транслятором 6 байт-кодов. Этот факт запускает исключительную ситуацию в аппаратном трансляторе 6 байт-кодов, при которой производится просмотр таблицы 24 указателей с использованием значения ВС4 байт-кода в качестве индекса для считывания указателя Р#4 на кодовый фрагмент 26, который будет выполнять обработку, заданную не поддерживаемым аппаратно байт-кодом ВС4. Значение базового адреса из таблицы указателей можно также сохранить в регистре. Выбранный кодовый фрагмент затем вводится с указанием R14 на неподдерживаемый байт-код ВС4.
Как видно на чертеже, поскольку имеется 256 возможных значений байт-кодов, таблица 24 указателей содержит 256 указателей. Аналогичным образом, до 256 собственных кодовых фрагментов ARM-команд предусмотрено для выполнения обработки, заданной всеми возможными Java-байт-кодами. (Их может быть меньше 256 в тех случаях, когда два байт-кода могут использовать один и тот же кодовый фрагмент). Аппаратный транслятор 6 байт-кодов будет типично обеспечивать аппаратную поддержку для множества простых Java-байт-кодов, чтобы повысить скорость обработки, и в этом случае соответствующие кодовые фрагменты в программном интерпретаторе команд не будут использоваться никогда, за исключением вынужденных случаев, например во время отладки или в других обстоятельствах, таких как преждевременное прекращение предварительной выборки, которые будут обсуждаться ниже. Однако, поскольку они обычно являются более простыми и короткими кодовыми фрагментами, их обеспечение не потребует большого объема дополнительной памяти. Кроме того, этот небольшой объем дополнительной памяти более чем компенсируется родовым характером программного интерпретатора команд и его способностью справиться со всеми возможными Java-байт-кодами в обстоятельствах, когда аппаратный транслятор байт-кодов отсутствует или отключен.
Можно заметить, что каждый из кодовых фрагментов 26 по фиг.2 заканчивается командой BXJ завершения последовательности. Команда BXJ завершения последовательности имеет разное действие в зависимости от состояния системы 2 обработки данных, как будет проиллюстрировано на фиг.3. На фиг.3 представлен алгоритм, иллюстрирующий в весьма схематичном виде обработку, выполняемую кодовым фрагментом 26 в программном интерпретаторе команд. На этапе 28 выполняется операция, указанная интерпретируемым Java-байт-кодом. На этапе 30 считывается из потока 22 байт-кодов следующий подлежащий исполнению Java-байт-код, и указатель байт-кода в потоке 22 Java-байт-кодов, соответствующий данному следующему Java-байт-коду, сохраняется в регистре банка 8 регистров, а именно R14. Следовательно, для Java-байт-кода ВС4 следующим байт-кодом будет ВС5, и в регистр R14 будет загружен указатель на следующую ячейку памяти Java-байт-кода ВС5.
На этапе 32 указатель в таблице указателей 24, соответствующий следующему Java-байт-коду ВС5, считывается из таблицы указателей 24 и сохраняется в регистре банка 8 регистров, а именно в регистре R12.
Понятно, что на фиг. 3 этапы 28, 30 и 32 проиллюстрированы как выполняемые раздельно и последовательно. Однако согласно известным методикам программирования обработка этапов 30 и 32 может перемежаться с обработкой этапа 28, чтобы воспользоваться возможностями (циклами) в обработке этапа 28, которые в противном случае будут потеряны. Следовательно, обработка этапов 30 и 32 может быть обеспечена с относительно небольшими затратами скорости выполнения.
На этапе 34 выполняется команда BXJ завершения последовательности с регистром R14, заданным как операнд.
До выполнения команды BXJ на этапе 34 состояние системы было установлено с указателем на следующий Java-байт-код в потоке 22 Java-байт-кодов, сохраненном в регистре R14, и с указателем на кодовый фрагмент, соответствующий этому следующему Java-байт-коду, сохраненному в регистре R12. Выбор конкретных регистров может варьироваться, при этом ни один из них, один или оба задаются как операнды для команды завершения последовательности или задаются заранее и определяются архитектурой.
Этапы 28, 30, 32 и 34 преимущественно являются программными. Этапы, следующие за этапом 34, преимущественно являются аппаратными и выполняются без отдельных идентифицируемых программных команд. На этапе 36 аппаратные средства определяют, активен ли аппаратный транслятор 6 байт-кодов. Это реализуется посредством считывания значений флажков регистров для определения наличия и включенного состояния аппаратного транслятора 6 байт-кодов. Возможны также другие механизмы определения наличия активного аппаратного транслятора 6 байт-кодов.
Если аппаратный транслятор 6 байт-кодов присутствует и включен, то обработка переходит к этапу 38, на котором управление передается аппаратному транслятору 6 байт-кодов вместе с содержимым регистра R14, определяющим указатель байт-кода на байт-код в потоке 22 байт-кодов, который аппаратный транслятор 6 байт-кодов должен попытаться выполнить как свой следующий байт-код. После этого действие кодового фрагмента 26 заканчивается.
Альтернативно, если на этапе 36 определено, что аппаратный транслятор 6 байт-кодов отсутствует или он отключен, обработка переходит к этапу 40, на котором осуществляется переход в собственном коде ARM-команд, чтобы начать исполнение данного кодового фрагмента в программном интерпретаторе команд, который указан адресом, хранимым в регистре R12. Следовательно, инициируется быстрое выполнение следующего кодового фрагмента, что обеспечивает преимущество в скорости обработки.
На фиг.4 более подробно показан конкретный кодовый фрагмент. Данный пример является Java-байт-кодом прибавления целого числа с символьным обозначением iadd.
Первая собственная ARM-команда использует указатель байт-кода в регистре R14, увеличенный на единицу, для считывания следующего значения байт-кода (команда прибавления целого числа не имеет каких-либо последующих операндов байт-кода и поэтому следующий байт-код будет следовать сразу за текущим байт-кодом). Указатель байт-кода в регистре R14 также обновляется посредством данного значения, увеличенного на единицу.
Вторая и третья команды служат для извлечения из стека двух значений целочисленных операндов, которые должны быть сложены.
Четвертая команда использует то, что в противном случае было бы потерянным циклом обработки из-за взаимоблокировки регистра на регистре R0, чтобы извлечь значение адреса кодового фрагмента для следующего байт-кода, хранимого в регистре R4, и сохранить этот адрес в регистре R12. Регистр Rexc используется для хранения базового указателя на начало таблицы указателей 24.
Пятая команда выполняет целочисленное сложение, заданное Java-байт-кодом.
Шестая команда записывает результат Java-байт-кода обратно в стек.
Последняя команда представляет собой команду BXJ завершения последовательности, заданную операндом R12. Регистр R12 сохраняет адрес фрагмента ARM-кода, который необходим для программной интерпретации следующего Java-байт-кода, если бы потребовалась программная интерпретация. Выполнение команды BXJ определяет, имеется ли включенный аппаратный транслятор 6 байт-кодов. Если он имеется, то управление переходит к аппаратному транслятору 6 байт-кодов вместе с операндом, сохраненным в регистре R14, задающем адрес следующего байт-кода. Если активный аппаратный транслятор 6 байт-кодов отсутствует, то начинается выполнение кодового фрагмента для следующего байт-кода, указанного значением адреса в регистре R12.
На фиг.5 схематически изображена система 42 обработки данных, аналогичная показанной на фиг.1, за исключением того, что в данном случае не предусмотрено аппаратного транслятора 6 байт-кодов. В этой системе флажок 21 всегда показывает, что выполняются ARM-команды, и попытки ввести выполнение Java-байт-кода с командой BXJ всегда рассматриваются, как если бы аппаратный транслятор 6 байт-кодов был отключен, не обращая внимания на флажок 20.
Фиг.6 иллюстрирует алгоритм обработки, выполняемой системой 42 при выполнении Java-байт-кода. Эта процедура аналогична обработке по фиг.3 в том, что используется такой же код программного интерпретатора, за исключ