Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Танненбаум Е. Архітектура компютера [pdf]

.pdf
Скачиваний:
103
Добавлен:
02.05.2014
Размер:
5.59 Mб
Скачать

Увеличение производительности

313

чтобы выполнение этих команд началось раньше, а полученные результаты были бы доступны в тот момент, когда они понадобятся. Естественно, при каждой итерации требуется только одно значение, поэтому остальные команды LOAD будут отбрасываться, но если кэш-память и основная память конвейеризированы, то подобная процедура имеет смысл. Выполнение команды до того, как стало известно, понадобится ли вообще эта команда, называется спекулятивным выполнением. Чтобы использовать эту технологию, требуется поддержка компилятора, аппаратного обеспечения, а также некоторое усовершенствование архитектуры. В большинстве случаев переупорядочение команд за пределами одного базового элемента находится вне компетенции аппаратного обеспечения, поэтому компилятор должен перемещать команды явным образом.

В связи со спекулятивным выполнением команд возникают некоторые интересные проблемы. Например, очень важно, чтобы ни одна из спекулятивных команд не имела окончательного результата, который нельзя отменить, поскольку позднее может оказаться, что эти команды не нужно было выполнять Обратимся к листингу 4.6 и рис. 4 30. Очень удобно производить сложение, как только появляется значение к (даже до условною оператора if), но нежелательно сохранять результаты в памяти. Чтобы предотвратить перезапись регистров до того, как стало известно, полезны ли полученные результаты, нужно переименовать (подменить) все выходные регистры, которые используются спекулятивной командой. Как вы можете себе представить, счетчик обращений для отслеживания всего этого очень сложен, но при наличии соответствующего аппаратного обеспечения его вполне можно сделать.

Однако при наличии спекулятивных команд возникает еще одна проблема, которую нельзя решить путем подмены регистров А что происходит, если спекулятивная команда вызывает исключение (exception)? В качестве примера можно привести команду LOAD, которая вызывает промах кэш-памяти в компьютере с достаточно большим размером строки кэш-памяти (скажем, 256 байт) и памятью, которая работает гораздо медленнее, чем центральный процессор и кэш. Если нам требуется команда LOAD и работа машины останавливается на много циклов, на то время, пока загружается строка кэш-памяти, то это не так страшно, поскольку данное слово действительно нужно Но если машина простаивает, чтобы вызвать слово, которое, как окажется позднее, совершенно ни к чему, это совершенно не рационально. Еслиподобных «оптимизаций» слишкоммного, тоцентральный процессор будет работать медленнее, чем если бы этих «оптимизаций» вообще не было. (Если машина содержит виртуальную память, которая обсуждается в главе 6, то спекулятивное выполнение команды LOAD может даже вызвать обращение к отсутствующей странице Подобные ошибки могут сильно повлиять на производительность, поэтому важно их избегать )

В ряде современных компьютеров данная проблема решается следующим образом. В них содержится специальная команда SPECULATIVE-LOAD, которая производит попытку вызвать слово из кэш-памяти, а если слова там нет, просто прекращает вызов. Если значение находится там и если в данный момент оно действительно требуется, его можно использовать, но если оно в данный момент не требуется, аппаратное обеспечение должно сразу получить это значение. А если окажется, что данное значение нам не нужно, то никаких потерь не будет.

314 Глава 4. Микроархитектурный уровень

Более сложную ситуацию можно проиллюстрировать следующим выражением: if (x>0) z-y/x;

где х, у иz — переменныес плавающейточкой. Предположим, что всеэти переменные поступают в регистры заранее и что команда деления с плавающей точкой (эта команда выполняется медленно) перемещается вверх и выполняется еще до условного оператора i f. К сожалению, если х равен 0, то программа завершается в результате попытки деления на 0. Таким образом, спекулятивная команда приводит к сбою в изначально правильной программе. Еще хуже то, что программист изменяет программу, чтобы предотвратить подобную ситуацию, но сбой все равно происходит.

Одно из возможных решений — специальные версии команд, которые могут вызвать исключения (exceptions). Кроме того, к каждому регистру добавляется специальный бит (poison bit). Если спекулятивная команда дает сбой, она не вызывает trap (ловушку), а устанавливает бит присутствия в регистр результатов. Если этот регистр позднее используется обычной командой, происходит trap (как и должно быть). Однако если этот результат не используется, бит присутствия сбрасывается и не причиняет программе никакого вреда.

Примеры микроархитектурного уровня

В этом разделе мы рассмотрим три современных процессора в свете понятий, изученных в этой главе. Наше изложение будет кратким, поскольку компьютеры чрезвычайно сложны, содержат миллионы вентилей и у нас нет возможности давать подробное описание. Примеры будут те же, которые мы использовали до сих пор; Pentium II, UltraSPARC II и picojava П.

Микроархитектура процессора Pentium II

Pentium II — один из процессоров семейства Intel. Он поддерживает 32-битные операнды и арифметику, 64-битные операции с плавающей точкой, а также 8- и 16-битные операнды и операции, которые унаследованы от предыдущих процессоров данного семейства. Процессор может адресовать до 64 Гбайт памяти и считывать слова из памяти по 64 бита за раз. Обычная система Pentium II изображена на рис. 3.47.

Как мы уже говорили раньше и как показано на рис. 3.40, картридж с однорядным расположением контактов (SEC) системы Pentium II состоит из двух интегральных схем: центрального процессора (на котором находится разделенная кэшпамять первого уровня) и объединенной кэш-памяти второго уровня. На рис. 4.31 показаны основные компоненты центрального процессора: блок вызова/декодирования, блок отправки/выполнения и блок возврата, которые вместе действуют как конвейер высокого уровня. Эти три блока обмениваются данными через пул команд — место для хранения информации о частично выполненных командах. Информация в пуле команд находится в таблице, которая называется ROB (ReOrder Buffer буфер переупорядочивания команд). Если излагать кратко,

Примеры микроархитектурного уровня

315

блок вызова/декодирования вызывает команды и разбивает их на микрооперации для хранения в ROB. Блок отправки выполнения получает микрооперации из буфера ROB и выполняет их. Блок возврата завершает выполнение каждой операции и обновляет регистры. Команды поступают в буфер ROB по порядку, могут выполняться в произвольном порядке, но завершаться опять должны по порядку.

Связь с кэш-памятью

 

Локальная шина,

второгоуровня

 

 

связанная с мостом PCI

\7

 

\7

 

Устройствосопряжениясшиной

 

Кэш-память первого

 

Кэш-память первого

уровня для команд

 

уровня для данных

1

 

 

 

Блок вызова

Блокотправки

Блок возврата

декодирования

выполнения

 

 

 

Задатчик

последовательности

микроопераций

Рис.4 . 31 .МикроархитектураPentiumИ

Блок сопряжения с шиной отвечает за обмен информацией с системой памяти (и с кэш-памятью второго уровня, и с основной памятью). Кэш-память второго уровня не связана с локальной шиной, поэтому блок сопряжения с шиной отвечает за вызов данных из основной памяти через локальную шину, а также за загрузку всех блоков кэш-памяти. Система Pentium II использует протокол синхронизации кэш-памяти MESI, который мы будем рассматривать, когда дойдем до мультипроцессоров в разделе «Архитектуры UMA SMP с шинной организацией» главы 8.

Блок вызова/декодирования

Блок вызова/декодирования отличается высокой степенью конвейеризации (содержит семь стадий). На рис. 4.32 эти семь стадий обозначены IFU0,..., ROB. Блок отправки/выполнения и блок возврата имеют еще пять стадий, то есть всего стадий 12. Команды поступают на конвейер на стадии IFUO (IFU — аббревиатура от Instruction Fetch Unit — блок выборки команд), куда из кэша команд загружаются целые 32-байтные строки. Всякий раз, когда внутренний буфер пуст, туда копируется следующая строка кэш-памяти. Регистр NEXT IP (NEXT Instruction Pointer — следующий указатель команды) управляет процессом вызова команд.

316

Глава4.Микроархитектурныйуровень

 

 

 

Кэш-память первого

 

 

 

уровнядля команд

 

 

Стадия конвейера

 

 

 

 

IFU0

Блоквыборки строк

Next IP

 

 

кэш-памяти

 

 

 

 

 

 

 

IFU1

Декодер длины команд

Устройство динамического

 

прогнозирования ветвления

 

 

 

 

 

 

 

 

 

 

 

IFU2

Блоквыравнивания команд

 

 

 

 

 

Задатчик

 

ID0

m

пи

: ^

поеледовательности

 

микроопераций

 

 

 

 

 

 

 

Блок формирования

Устройство статического

 

 

очереди микрооперации

прогнозирования ветвления

RAT Распределитель регистров

ROB Микрооперации поступают в регистр ROB

Рис.4.32.Внутренняяструктураблокавызова/декодирования(вупрощенномвиде)

Поскольку в наборе команд Intel, который часто называют IA-32 (32-разряд- ная архитектура для процессоров Intel), содержатся команды разной длины и различного формата, на следующей стадии, IFU1, происходит анализ потока байтов, чтобы определить начало каждой команды. В случае необходимости на стадии IFU1 может рассматриваться до 30 команд архитектуры IA-32 вперед. К сожалению, вследствие этого обычно встречаются 4 или 5 условных переходов, не все из которых правильно прогнозируются, поэтому в обработке такого большого количества команд заранее нет особого смысла. На стадии IFU2 команды выравниваются, поэтому в следующей стадии они без труда декодируются.

Декодирование начинается на стадии Ш0 (Instruction Decoding — декодирование команды). Декодирование в системе Pentium II состоит из превращения каждой команды IA-32 в одну или несколько микроопераций, как и в микроархитектуре Mic-4. Простые команды, например перемещение из одного регистра в другой, переделываются в одну микрооперацию. Выполнение более сложных команд может занимать до четырех микроопераций. Несколько чрезвычайно сложных команд требуют еще больше микроопераций и используют ПЗУ последовательности микроопераций для упорядочения этих микроопераций.

На стадии ID0 имеется три внутренних декодера. Два из них предназначены для простых команд, а третий обрабатывает остальные команды. На выходе получается последовательность микроопераций. Каждая микрооперация содержит код операции, два входных и один выходной регистр.

Очередь микрокоманд выстраивается на стадии ID1. Этот блок аналогичен блоку формирования очереди, изображенному на рис. 4.23. На этой стадии также про-

Примеры микроархитектурного уровня

317

исходит прогнозирование ветвления (сначала статическое, на всякий случай). Прогноз зависит от нескольких факторов, но для переходов, связанных с текущей командой, считается, что переходы назад будут производиться, а переходы вперед — нет Затем идет динамическое прогнозирование с использованием специального алгоритма, как показано на рис. 4 29, только в данном случае для прогнозирования используется не два, а четыре бита. Должно быть ясно, что если речь идет о конвейере с 12 стадиями, очень велика вероятность неправильного предсказания, и поэтому нужно так много битов. Если перехода в таблице динамики нет, используется статическое прогнозирование.

Чтобы избежать взаимозависимостей WAR и WAW, система Pentium II поддерживает переименования (подмены), как мы видели в табл. 4.13. Реальные регистры в командах IA-32 могут быть заменены в микрооперациях любым из 40 внутренних временных регистров, находящихся в буфере ROB. Подмена происходит на стадии RAT.

И наконец, микрооперации копируются в буфер ROB со скоростью три микрооперации за цикл. Сюда же собираются операнды, если они имеются в наличии. Если операнды микрооперации и регистр результатов доступны, а операционный блок свободен, микрооперацию можно выпустить. В противном случае она находится в буфере ROB, пока не появятся все необходимые ресурсы.

Блок отправки/выполнения

Перейдем к блоку отправки/выполнения, который изображен па рис. 4.33. Этот блок устанавливает очередность и выполняет микрооперации, разрешает взаимозависимости и конфликты ресурсов. Хотя за один цикл можно декодировать всего три команды (на стадии ID0), за один цикл можно выпустить для выполнения целых пять микроопераций, по одной на каждый порт. Такую скорость нельзя поддерживать, поскольку она превышает способности работы блока возврата. Микрооперации могут запускаться не по порядку, но блок возврата должен завершать их выполнение по порядку. Чтобы следить за микрооперациями, регистрами и функциональными блоками, требуется сложный счетчик обращений. Когда операция готова для выполнения, она может начаться, даже если другие операции, которые поступили в буфер ROB раньше нее, еще не готовы, Если несколько микроопераций пригодны для выполнения одним и тем же функциональным блоком, с помощью сложного алгоритма выбирается важнейшая из них, и именно она и запускается следующей Например, выполнение перехода гораздо важнее, чем выполнение арифметического действия, поскольку первый из них влияет на ход программы.

Блок отправки/выполнения состоит из резервации и функциональных блоков, которые связаны с пятью портами Резервация представляет собой очередь из 20 элементов для микроопераций, которые имеют собственные операнды. Они ожидают своей очереди в резервации, пока не освободится нужный функциональный блок.

Между резервацией и функциональными блоками имеется пять портов. Некоторые функциональные блоки разделяют один порт, как показано на рисунке. Блок загрузки и блоки запоминающих устройств выдают информацию для операций загрузки и сохранения соответственно Для запоминающих устройств есть два порта. Поскольку через один порт за один цикл может выдаваться только одна микрооперация, то если двум микрооперациям нужно пройти через один и тот же порт, одной из них придется подождать.

318 Глава4. Микроархитектурныйуровень

 

 

 

Блок выполнения

 

 

 

команд ММХ

 

Блок выполнения

 

операцийнад

 

числами с

Резервация

плавающейточкой

 

Блок выполнения

 

 

 

операцийнад

 

 

ПортО

целымичислами

 

 

 

 

 

 

 

 

Блок выполнения

Из регистра ROB/

 

 

команд ММХ

в регистр ROB

Блок выполнения

 

 

операцийнад

 

числами с

 

плавающейточкой

Порт1

Блок выполнения

 

 

операцийнад

 

 

 

 

 

 

целыми числами

 

 

Порт 2

Блок загрузки

-

Загрузка

ПортЗ

Блок

-

Сохранение

сохранения

 

 

 

Порт 4

Блок

-

Сохранение

сохранения

 

 

 

Рис.4.33.Блокотправки/выполнения

Блоквозврата

Когда микрооперация выполнена, она переходит обратно в резервацию, а затем в буфер ROB, и там ожидает возврата. Блок возврата отвечает за отправку результатов в нужные места — в соответствующий регистр или в другие устройства блока отправки/выполнения, которым требуется данное значение. Блок отправки/выполнения содержит «официальные» регистры, то есть те, в которых хранятся значения завершенных команд. Блок возврата содержит ряд «промежуточных» регистров, значения которых были вычислены командой, которая еще не завершилась, поскольку выполнение предыдущих команд не закончилось.

Система Pentium II поддерживает процедуру спекулятивного выполнения, поэтому некоторые команды будут выполняться напрасно, и их результаты никуда не нужно будет сбрасывать. Именно поэтому и нужна способность возвращаться в предыдущее состояние. Если стало известно, что какая-то микрооперация пришла из команды, которую не нужно было выполнять, результаты этой микрооперации

Примеры микроархитектурного уровня

319

отбрасываются. Все это контролирует блок возврата. Только результаты «официально» выполненных команд могут возвращаться в регистры, причем это должно происходить в том же порядке, что и в программе, даже если команды выполнялись в произвольном порядке.

Микроархитектура процессора UltraSPARC II

Серия UltraSPARC, произведенная компанией Sun, — это реализация версии 9 архитектуры SPARC. Все модели сходны друг с другом и различаются главным образом производительностью и ценой. Тем не менее, чтобы избежать путаницы, в этом разделе мы будем говорить о системе UltraSPARC II и описывать те характеристики, по которым этот процессор отличается от других процессоров того же семейства.

UltraSPARC II — это 64-разрядная машина с 64-разрядными регистрами и 64-разрядным трактом данных, но в целях совместимости с машинами версии 8 (которые являются 32-разрядными) она может обращаться с 32-разрядными операндами, а программное обеспечение, написанноедля 32-разрядных версий SPARC, изменять не нужно. Хотя внутренняя архитектура машины использует 64 разряда, ширина шины памяти составляет 128 битов, аналогично процессору Pentium II с 32-разрядной архитектурой и 64-разрядной шиной памяти. Ядро системы UltraSPARC II показано на рис. 3.44.

Вся серия SPARC с самого начала представляла собой систему RISC. У большинства команд есть два входных и один выходной регистр, поэтому они хорошо подходят для конвейерного выполнения в одном цикле. Разбивать старые команды CISC на микрооперации RISC, как в системе Pentium II, не нужно.

UltraSPARC II — это суперскалярная машина, которая может выдавать 4 команды за цикл. Команды запускаются по порядку, но завершаться могут и в произвольном порядке. Тем не менее прерывания являются точными (то есть всегда точно известно, в каком месте программы была машина, когда произошло прерывание). Существует аппаратная поддержка для спекулятивных загрузок в виде команды PREFETCH, которая не вызывает ошибок при промахе кэша. Она даже не блокирует последовательные обращения к памяти. Следовательно, компилятор может вставлять одну или несколько команд PREFETCH задолго до того, как они понадобятся, в надежде, что они пригодятся позже, не испытывая никаких неприятностей в случае, если нужного слово не окажется в кэш-памяти,

Общий обзор системы UltraSPARC II

Диаграмма UltraSPARC II представлена на рис. 4.34. Все указанные компоненты расположены на микросхеме центрального процессора. Исключение составляет кэш-память второго уровня, которая является внешней по отношению к процессору. Кэш команд — это 16 Кбайт двувходовой ассоциативной кэш-памяти, со строками по 32 байта и с возможностью возврата половины строки. Половина строки кэш-памяти (16 байтов) содержит ровно четыре команды, и все эти четыре команды могут выдаваться за один цикл. Кэш-память данных — это 16 Кбайт кэш-памя- ти прямого отображения со сквозной записью и без заполнения по записи. Здесь тоже используются 32-байтные строки, разделенные на 2 части по 16 байтов.

3 2 0

Глава4.Микроархитектурныйуровень

 

 

 

 

 

 

Связьсосновной

 

 

 

 

 

памятью

 

 

 

 

Интерфейспамяти

 

 

Кэш-память

 

Внешняя кэш-память

 

 

второго уровня

 

 

 

 

 

 

 

 

 

 

 

 

 

Блок выборки/отправки

 

 

 

 

 

Кэш-память

 

 

 

 

 

первого уровня

 

 

 

 

 

Схемы группировки

 

 

 

 

 

 

 

 

 

 

 

 

Блоквыполнениякоманд

Блок выполнения команд

Блок загрузки/

с целыми числами

с целыми числами

сохраниния

Регистрыдля

Регистры с

Кэш-память

целых чисел

плавающей точкой

первого уровня

 

 

 

 

АЛУ

АЛУ

АЛУ с

АЛУ с

для данных

плавающей

плавающей

 

 

 

 

 

 

 

 

точкой

точкой

Очередь

Очередь

 

 

Графический блок

на загрузку

на сохранение

 

 

 

 

Рис.4.34.МикроархитектураUltraSPARCII

В случае промаха кэш-памяти первого уровня нужная строка ищется в кэшпамяти второго уровня. Если поиск завершился успехом, строка копируется в кэшпамять первого уровня. В случае неудачи внешняя кэш-память (кэш-память второго уровня) посылает устройству сопряжения с памятью команду вызова строки из основной памяти.

Рассмотрим функциональные блоки системы UltraSPARC II. Блок выборки отправки в целом похож на блок вызова/декодирования в системе Pentium II (см. рис. 4.31). Однако у этого блока работа проще, поскольку входные команды уже представлены в трех регистрах в виде микроопераций, поэтому их не нужно разбивать. Блок может вызывать команды и из кэш-памяти первого уровня, и из кэш-памяти второго уровня без потери времени. За один цикл вызываются четыре команды.

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

Примеры микроархитектурного уровня

321

При этом используется 2-битный алгоритм прогнозирования, сходный с тем, который показан на рис. 4.29. Более того, UltraSPARC II содержитряд команд перехода, в которых компилятор может сообщать аппаратному обеспечению, каким именно способом предсказывать переход. Вызванные заранее команды помещаются в очередь из 12 элементов, а затем передаются в схему группировки.

Схема группировки — это блок, который выбирает по четыре команды за один раз из очереди для запуска. Задача состоит в том, чтобы найти 4 команды, которые можно выпустить одновременно. Блок целых чисел содержит два раздельных АЛУ, что позволяет выполнять две команды параллельно. Блок вычислений с плавающей точкой также содержит два АЛУ. Следовательно, в одной группе может находиться по две команды каждого типа, но не четыре команды одного типа. Чтобы сделать группирование оптимальным, команды должны запускаться не по порядку, что разрешается Завершаются они также в произвольном порядке.

Блок целых чисел и блок вычислений с плавающей точкой содержат собственные регистры, поэтому команды берут операнды прямо внутри блока и там же оставляют результаты. Регистр целых чисел и регистр с плавающей точкой разделены, поэтому значения никогда не переходят из одного блока в другой. В блоке вычислений с плавающей точкой также находится графический блок, который выполняет специальные команды для двух- и трехмерных изображений, аудио и видео, аналогичные командам ММХ в системе Pentium II.

Блокзагрузки/сохраненияуправляеткомандами LOADиSTORE. Еслиониимеются в кэш-памяти данных первого уровня, то выполняются без задержки. В противном случае нужная строка берется из кэш-памяти второго уровня или основной памяти (если речь идет о команде LOAD) или нужное слово записывается туда (если речь идет о команде STORE). Если бы кэш-память данных была write-allocate, тогда

вслучае промаха кэш-памяти при записи (команда STORE) нужная строка переносилась бы из кэш-памяти второго уровня или из основной памяти. На самом деле, если нужно сохранить отдельное слово, просто осуществляется сквозная запись

вкэш-память второго уровня, а в случае промаха — в основную память. Чтобы избежать блокирования из-за отсутствия нужного слова в кэш-памяти данных, блок загрузки/сохранения хранит очереди незавершенных команд LOAD и STORE, поэтому можно продолжать обрабатывать новые команды, пока завершается выполнение старых.

Конвейеризация системы UltraSPARC II

Система UltraSPARC II содержит конвейер с 9 стадиями. Некоторые из этих стадий различны для команд с целыми числами и команд с плавающей точкой (рис. 4.35). На первой стадии вызываются команды из кэш-памяти команд (если это возможно). При благоприятных обстоятельствах (отсутствии промахов кэшпамяти, неправильного прогнозирования ветвлений, сложных команд, наличии правильной смеси команд и т. п.) машина может продолжать вызывать и запускать по 4 команды за цикл. На стадии декодирования перед копированием команд в очередь к каждой команде прибавляются дополнительные биты. Эти биты ускоряют последующую обработку (например, сразу отправляя команду в соответствующийфункциональныйблок).

322

Глава4.Микроархитектурныйуровень

 

 

 

 

 

Конвейердля обработки целых чисел

 

 

 

Выполнение —*- Кэш г**

N1

N 2

 

 

 

 

 

 

 

/

 

 

V

. .

ВызовнДекодирование Группировка

 

 

N

3 ^ Запись

 

ч Регистр

х2

Х 3

/

 

Конвейердляобработкичиселсплавающей точкой и графическихданных

Рис.4.35.КонвейерсистемыUltraSPARCII

Стадия группировки соответствует схеме группировки, которую мы рассматривали раньше. На этой стадии декодированные команды объединяются в группы. В каждой группе находится по 4 команды. Все команды одной группы должны быть подобраны таким образом, чтобы их можно было выполнять одновременно.

С этого момента стадии конвейера для операций с целыми числами и для операций с плавающей точкой разделяются. На стадии 4 в блоке целых чисел большинство команд выполняется прямо за один цикл. Однако команды STORE и LOAD требуют дополнительной обработки на стадии кэширования. На стадиях Ni и N2 не производится никаких действий для команд, но эти стадии нужны для синхронизации работы двух конвейеров. Если каждая команда с целыми числами будет завершаться на несколько секунд позже, это не такая уж большая потеря, зато конвейер работает равномерно.

Блок с плавающей точкой содержит отдельные 4 стадии. Первая нужна для доступа к регистрам с плавающей точкой. Следующие три нужны для выполнения команды. Все команды с плавающей точкой выполняются за три цикла, за исключением деления (на эту операцию требуется 12 циклов) и квадратного корня (здесь нужно 22 цикла), поэтому длинная последовательность других команд не снижает скорости работы конвейера.

Стадия N3, общая для обоих блоков, нужна для разрешения исключительных ситуаций, например деления на нуль. Наконец, на последней стадии результаты записываются обратно в регистры. Эта стадия напоминает блок возврата системы Pentium II в том, что если команда прошла через эту стадию, она завершена.

Микроархитектура процессора picoJava II

В системе picoJava II двоичные программы JVM могут работать практически без интерпретации. Большинство команд JVM выполняются непосредственно аппаратным обеспечением за один цикл. Около 30 команд JVM являются микропрограммными. Только очень небольшое число команд не может выполняться аппаратным обеспечением picoJava II и вызывает traps (ловушки). Эти команды связаны с особенностями JVM, которые мы не обсуждали, например создание и управление сложными программными объектами.

Соседние файлы в предмете Аппаратное обеспечение ЭВМ, средств телекоммуникаций и сетей