
17 Lectures / Таненбаум Э - Архитектура Компьютера
.pdf
Примеры микроархитектурного уровня |
323 |
Общий обзорсистемы picoJava II
Диаграмма микроархитектуры picoJava II представлена на рис. 4.36. Микросхема процессора содержит разделенную кэш-память первого уровня. Кэш-память команд факультативна. Ее объем можетсоставлять 1 Кбайт, 2 Кбайт, 4 Кбайт, 8 Кбайт или 16 Кбайт. Это кэш-память прямого отображения. Размер строки составляет 16 байтов. Кэш-память данных тоже факультативна, и ее объем может составлять 1 Кбайт, 2 Кбайт, 4 Кбайт, 8 Кбайт или 16 Кбайт. Это двувходовая ассоциативная кэш-память. Размер строки также составляет 16 байтов. Она использует обратную запись и заполнение по записи. Каждая кэш-память соединяется с шиной памяти по 32-битному каналу. Система microjava 701 имеет оба блока кэш-памяти в обязательном порядке, объем каждого из них составляет 16 Кбайт. Факультативный блок с плавающей точкой также является частью разработки picoJava II.
Интерфейс памяти и устройств ввода-вывода |
|
|||
'32 |
|
•' 32 |
|
|
-' |
|
|
|
|
Кэш-память |
|
Кэш-память |
|
|
команд |
|
данных |
|
|
(0-16Кбайт) |
|
(0-16 Кбайт) |
|
|
' 3 2 |
|
• ' 32 |
|
|
• |
|
|
|
|
Блок выборки |
Блок управления |
Блок целых |
|
|
с упре;«дением, |
чисел и чисел |
'2x32 |
||
выполнением |
||||
декодк рования |
с плавающей |
|||
команд |
|
|||
и свертывания |
точкой |
|
||
|
|
i
f '3x32
6432-битныхрегистрадляхранения верхних64словстека
Рис.4.36.ДиаграммасистемыpicoJavaIIскэш-памятьюпервогоуровняиблоком сплавающейточкой.ЭтоконфигурациясистемыmicroJava701
Кэш-память команд передает в блок вызова, декодирования и свертывания по 8 байтов за раз. Этот блок, в свою очередь, связан с контроллером выполнения и с основным трактом данных (блоком операций с целыми числами и с плавающей точкой). Ширина тракта данных составляет 32 бита для целочисленных операций. Этот тракт данных может также управляться с плавающей точкой с одинарной и двойной точностью (IEEE 754).
Наиболее интересная часть рис. 4.36 — это регистровый файл, состоящий из 64 32-битных регистров. В этих регистрах могут содержаться верхние 64 слова стека JVM, что сильно повышает скорость доступа к словам в стеке. И стек операндов,

324 |
Глава 4. Микроархитектурный уровень |
и стек локальных переменных под ним могут находиться в регистровом файле, Доступ к регистровому файлу «свободный» (то есть происходит без задержек, тогда как доступ к кэш-памяти данных требует дополнительного цикла). Ширина канала между регистровым файлом и блоком операций с целыми числами и с плавающей точкой составляет 96 битов. За один цикл канал выдерживает 2 32-битных считывания из стека и одну 32-битную запись в стек.
Если, например, стек операндов состоит из двух слов, то в регистровом файле может находиться до 62 слов локальных переменных. Естественно, при помещении еще одного слова в стек возникает проблема. Происходит так называемый дрибблинг — это когда одно или несколько слов, находящихся глубоко в стеке, записываются обратно в память. Точнотак же, если несколько слов выталкиваются из стека операндов, в регистровом файле освобождается место, и поэтому некоторые слова, находящиеся глубоко в стеке, могут перезагружаться в регистровый файл. Специальные регистры на микросхеме определяют, насколько полным должен быть регистр, чтобы слова из нижней части стека записывались в память, и насколько пустым он может быть для того, чтобы перезагрузить регистровый файл из памяти. Чтобы легко произвести дрибблинг без копирования, регистровый файл действует как кольцевой буфер с указателями на самое нижнее и на самое верхнее слова. Дрибблинг происходит автоматически всякий раз, когда регистровый файл переполняется или пустеет.
Конвейер системы picoJava И
Конвейер системы picoJava II состоит из шести стадий. Он показан на рис. 4.37. На первой стадии из кэш-памяти команд в буфер команд вызываются команды по 8 байтов за раз. Емкость буфера команд составляет 16 байтов. На следующей стадии команды декодируются и определенным образом объединяются. На выходе из блока декодирования получается последовательность микроопераций, каждая из которых содержит код операции и три номера регистров (двух входных и одного выходного регистров). В этом отношении машина picoJava II сходна с Pentium II: обе машины получают поток команд CISC, который превращается в последовательность микроопераций RISC. Однако, в отличие от Pentium II, машина picoJava II не является суперскалярной и микрооперации выполняются и завершаются в том порядке, в котором они запускаются. В случае промаха кэш-памяти, если операнд приходится вызывать из основной памяти, процессор должен простаивать.
Выборка из |
—»- |
Декодирование |
Вызов |
Выполнение |
—*- |
Доступ |
Запись |
кэш-памяти |
операндов |
к данным |
результатов |
||||
команд |
|
и свертывание |
изстека |
команд |
|
кэш-памяти |
в стек |
|
|
|
|
Рис. 4.37. Шесть стадий конвейера в машине picoJava II
На третьей стадии вызываются операнды из стека (фактически из регистрового файла), чтобы они были в наличии для четвертой стадии. Четвертая стадия — это блок выполнения команд. На пятой стадии в случае необходимости производится обращение к кэш-памяти данных (например, чтобы сохранить там результаты). Наконец, на шестой стадии результаты записываются обратно в стек.

Примеры микроархитектурного уровня |
325 |
Свертывание команд
Как мы упоминали выше, блок декодирования способен свертывать команды вместе. Чтобы объяснить, как происходит этот процесс, рассмотрим следующее выражение:
Трансляция на (I)JVM может быть следующей:
ILOAD 7
IL0AD 1 IADD
ISTORE 3,
Предполагается, что k, m и п — локальные переменные 7,1 и 3 соответственно. Процесс выполнения этих четырех команд изображен на рис. 4,38, а.
|
|
Без свертывания |
|
|
Со свертыванием |
|||
|
SP —*- |
S P - * |
m |
k + m |
|
|
|
|
SP- |
к |
к |
|
|
|
|||
|
|
|
|
|
|
|
||
в |
к |
к |
к |
к |
к |
к |
к |
|
7 |
||||||||
6 |
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
4 |
п |
п |
п |
п |
k+m |
п |
k + m |
|
2 |
||||||||
m |
m |
m |
m |
m |
m |
m |
||
1 |
||||||||
0 |
|
|
|
|
|
|
|
|
|
Начало |
После |
После |
После |
После |
Начало |
После |
|
|
выполнения выполнения |
выполнения выполнения |
|
выполнения |
||||
|
команды |
команды |
команды |
команды |
|
свертывания |
||
|
|
ILOAD k |
ILOAD m |
IADD |
ISTORE n |
|
команды |
Рис. 4.38. Выполнение последовательности из четырех команддля вычисления выражения n=k+m (а); таже последовательность, свернутаядо одной команды (б)
Если предположить, что все три переменные находятся достаточно высоко в стеке, настолько высоко, что все они содержатся в регистровом файле, то для выполнения этой последовательности команд вообще не требуются обращения к памяти. Первая команда ILOAD 7 копирует слово, находящееся в седьмой локальной переменной, в вершину стека и увеличивает указатель стека на 1. Сходным образом команда ILOAD 1 производит копирование из регистра в регистр. Команда IADD складывает два регистра, а команда ISTORE копирует значение регистра в регистровый файл. Избавление от любых обращений к памяти — главный способ улучшения производительности.
Однако машина picojava II делает не только это. Данная последовательность из четырех команд просто складывает два регистра и сохраняет полученное значение в третьем регистре. Блок декодирования определяет это условие и запускает однумикрооперацию: трехрегистровую командуADD. Таким образом, вместо четырех командJVM, для которых требуется 9 обращений к памяти, мы получаем одну

3 2 6 Глава 4. Микроархитектурный уровень
микрооперацию для сложения, как показано на рис. 4.38,6. И хотя на входе в конвейер были команды CISC с многочисленными обращениями к памяти, в результате выполнена была всего одна простая микрооперация. Таким образом, picojava II может выполнять программы на языке Java, скомпилированные для JVM, так же быстро, как будто они были скомпилированы намашинный язык компьютера RISC.
Как мы только что увидели, возможность сворачивать несколько команд JVM в одну микрооперацию является ключом к высокой производительности. Следовательно, стоит кратко изложить, как блок декодирования осуществляет свертывание. Для этого команды распределяются по шести группам (табл. 4.14). Первая группа содержит команды, которые не сворачиваются. Во второй находятся команды загрузки локальных переменных. ВIJVM имеется одна такая команда, ILOAD, a JVM содержит и другие команды. Третья группа состоит из команд запоминания, например ISTORE. Четвертая и пятая группы предназначены для команд переходов с одним и двумя операндами соответственно. Последняя группа состоит из команд, которые выталкивают два операнда из стека, выполняют с ними какиенибудь вычисления и помещают результат обратно в стек.
Таблица 4.14. Распределение команд JVM по группам для свертывания
Группа |
Описание |
^~- |
Пример |
NF |
Несвертываемые команды |
|
GOTO |
LV |
Помещают слово в стек |
|
ILOAD |
MEM |
Выталкивают слово из стека |
|
ISTORE |
BG1 Операции с использованием одного стекового операнда |
IFEQ |
||
BG2 Операции с использованием двух стековых операндов |
IF^CMPEQ |
||
OP |
Вычисления над двумя операндами с одним результатом |
IADD |
Блок декодирования передает 74-битные микрооперации операционному блоку (через блок вызова операндов). Большинство этих микроопераций содержат код операции и три регистра и могут быть выполнены за один цикл. Когда блок декодирования выталкивает команды JVM из буфера команд, он превращает их в последовательность микроопераций. Кроме того, блок декодирования определяет, какие последовательности команд JVM можно свернуть в одну микрооперацию. В такой последовательности может быть до четырех команд. Если обнаружена подходящая последовательность, выдается соответствующая микрооперация, а изначальные команды отбрасываются.
В табл. 4.15 приведены некоторые типичные последовательности команд JVM, которые можно свернуть. Когда в блоке декодирования оказывается одна из таких последовательностей, он замещает обычное разбиение команд на одну микрооперацию, которая выполняет работу всей этой последовательности за один цикл. Например, он превращает последовательность из четырех команд в одну трехрегистровую микрооперацию ADD, как мы видели на рис. 4.38. Процесс свертывания происходит только тогда, когда требуемые локальные переменные находятся достаточно близко от вершины стека, то есть содержатся в регистровом файле.

Примеры микроархитектурного уровня |
327 |
Таблица 4.15.Некоторые последовательности командJVM, которые можно сворачивать
Последовательность команд |
|
Пример |
|
||||||
LV |
LV |
OP |
MEM |
ILOAD, ILOAD, IADD, ISTORE |
|||||
LV |
LV |
OP |
|
|
ILOAD, ILOAD, IADD |
||||
LV |
LV |
BG2 |
|
|
ILOAD, ILOAD, IF_CMPEQ |
||||
LV |
BG1 |
|
|
ILOAD, IFEQ |
|||||
LV |
BG2 |
|
|
|
ILOAD, IF_CMPEQ |
||||
LV |
MEM |
|
|
|
ILOAD, ISTORE |
||||
ОР |
MEM |
|
|
|
IADD, ISTORE |
|
|
||
|
|
|
|
|
|
Свертывание команд происходит довольно часто, поэтому существенная часть программыJVM может быть выполнена настолько быстро, как будто она была скомпилирована прямо для конвейеризированного процессора RISC. Измерения показывают, что picojava II может выполнять программы на языкеJava в пять раз быстрее, чем если те же программы скомпилировать на машинный язык для Pentium, который работает с такой же тактовой частотой, и в 15 раз быстрее, чем при интерпретируемом выполнении той же программы на машине Pentium.
В машине picojava II используется чрезвычайно примитивный алгоритм прогнозирования ветвлений: она всегда предсказывает, что перехода не будет. За этим стоит идея сохранить микросхему простой и дешевой, а не тратить существенное пространство микросхемы на схемы прогнозирования. Однако благодаря длине конвейера (6 стадий вместо 12, как в системе Pentium II) проигрыш при непраэдшдкил предсказании перехода составляет всего три цикла.
Сравнение Pentium, UltraSPARC и picojava
Данные три примера во многом отличаются друг от друга, однако у них есть удивительная общность, которая может сказать кое-что о том, как лучше разрабатывать компьютер. Машина Pentium II содержит старый набор команд CISC, который инженеры компании Intel были бы рады выкинуть в бухту Сан-Франциско, но тогда они нарушили бы законы о загрязнении воды. UltraSPARC II — система RISC. Picojava II — машина со стековой организацией и командами различной длины, которые совершают огромное число обращений к памяти. '
Несмотря на эти различия, все три машины имеют сходные функциональные блоки. Все функциональные блоки принимают микрооперации, которые содержат код операции, два входных регистра и один выходной регистр. Все они могут выполнять микрооперацию за один цикл. Все они конвейеризированы и применяют прогнозирование ветвления. Все они содержат разделенную кэш-память для команд и для данных, объем каждой составляет 16 Кбайт.
Такое внутреннее сходство не случайно, и причиной его является вовсе не постоянные переходы с одной работы на другую инженеров Силиконовой долины. Когда мы рассматривали микроархитектуры Mic-З и Mic-4, мы увидели, что достаточно просто построить конвейеризированный тракт данных, который исполь-

328 Глава 4. Микроархитектурный уровень
зует два регистра в качестве источников, пропускает значения этих регистров через АЛУ и сохраняет результат в регистре. На рисунке 4.22 представлено графическое изображение такого конвейера. Для современной техники это наиболее эффективная разработка.
Главное различие между Pentium II, UltraSPARC II и picojava II — переход от набора команд к функциональному блоку. Компьютеру Pentium II приходится разбивать команды CISC, чтобы переделать их в трехрегистровый формат, который нужендля функционального блока. Именно этот процесс показан нарис. 4.32 — разбиение больших команд на маленькие микрооперации. У машины picojava II обратная проблема — как скомбинировать несколько команд вместе, чтобы получить простую микрооперацию. Такой процесс называется свертыванием. Машине UltraSPARC II вообще не нужно ничего делать, поскольку ее первоначальные команды уже представляют собой маленькие удобные микрооперации. Вот почему большинство новых архитектур команд — архитектуры типа RISC, если, конечно, у них нет какого-нибудь скрытого мотива (например, вызов программ на языке Java через Интернет и их выполнение на произвольной машине).
Полезно будет сравнить нашу последнюю разработку, микроархитектуру Mic-4, с этими тремя реальными машинами. Mic-4 больше всего похожа на Pentium II. Обе системы интерпретируют команды, которые не являются командами типа RISC. Для этого обе системы разбивают команды на микрооперации с кодом операции, двумя входными регистрами и одним выходным регистром. В обоих случаях помещаются в очередь для дальнейшего выполнения. Микроархитектура Mic-4 запускает микрооперации строго по порядку, выполняет их строго по порядку и завершает выполнение тоже строго по порядку, a Pentium II запускает по порядку, выполняет в произвольном порядке, а завершает опять по порядку. Кроме того, внутренняя структура конвейера Pentium II, особенно та его часть, которая показана на рис. 4.32, во многом сходна с Mic-4.
А теперь сравним Mic-4 с picojava П. Хотя кажется, что эти две архитектуры должны быть похожи по логике вещей — они интерпретируют один и тот же набор команд, но на самом деле это не совсем так. Причина этого различия состоит в том, что блоки декодирования имеют диаметрально противоположные стратегии. Mic-4 берет каждую входящую команду IJVM и сразу разбивает ее на микрооперации, a picojava II пытается соединить (свернуть) несколько команд IJVM в одну микрооперацию. Простая операция присваивания i=j+k занимает 14 циклов на Mic-4 и 1 цикл на picojava II. В данном случае свертывание улучшает производительность в 14 раз. Очевидно, что второй метод ведет к более быстрому выполнению команд, но сложность процесса свертывания тоже существенна.
Mic-4 и UltraSPARC II вообще нельзя сравнивать, поскольку команды системы UltraSPARC II — это команды RISC (то естьтрехрегистровые микрооперации). Их не нужно ни разбивать, ни объединять. Их можно выполнять в том виде, в каком они есть, каждую за один цикл тракта данных.
Все четыре машины конвейеризированы. Pentium II имеет 12 стадий, UltraSPARC II — 9 стадий, picojava II — 6 стадий, Mic-4 — 7 стадий. У Pentium II больше стадий, поскольку этой машине приходится разбивать сложные команды. UltraSPARC II содержит больше стадий, чем ему нужно, поскольку конвейер для целочисленных вычислений был искусственно удлинен на 2 стадии, чтобы опера-

Краткое содержание главы |
329 |
циис целымичислами занимали столько же времени, сколькозанимаютоперации с плавающей точкой. Отсюда следует вывод: при современном состоянии техники оптимальным является конвейер с шестью или семью стадиями, который обрабатывает трехрегистровые микрооперации. Микроархитектура Mic-4 дает хорошее представление о том, как работает такой конвейер (по крайней мере, с командами, которые не являются командами типа RISC).
Краткое содержание главы
Основным компонентом любого компьютера является тракт данных. Он содержит несколько регистров, две или три шины, один или несколько функциональных блоков, например АЛУ, и схему сдвига. Основной цикл состоит из вызова нескольких операндов из регистров и их передачи по шинам к АЛУ и другому функциональному блоку. После выполнения операции результаты сохраняются опять в регистрах.
Тракт данных может управляться задатчиком последовательности, который вызывает микрокоманды из управляющей памяти. Каждая микрокоманда содержит биты, управляющие трактом данных в течение одног о цикла. Эти биты определяют, какие операнды нужно выбирать, какую операцию нужно выполнять и что нужно делать с результатами. Кроме того, каждая микрокоманда определяет своего последователя (обычно в ней содержится адрес следующей микрокоманды). Некоторые микрокоманды изменяют этот базовый адрес с помощью операцииИЛИ
IJVM — это машина со стековой организацией и с 1-байтными кодами операций, которые помещают слова в стек, выталкивают слова из стека и выполняют различные операции над словами из стека (например, складывают их) В главе приводится микропрограмма для микроархитектуры Mic-1. Если добавить блок выборки команд для загрузки команд из потока байтов, то можно устранить большое количество обращений к счетчику команд, и тогда скорость работы машины сильно повысится,
Существует множество способов разработки микроархитектурного уровня Есть много различных вариантов1 двухшинная архитектура — трехшинная архитектура, кодированные поля микрокоманды — декодированные поля микрокоманды, наличие или отсутствие вызова с упреждением и многие другие Mic-1 — это простая машина с программным управлением, последовательным выполнением команд и полным отсутствием параллелизма. Mic-4, напротив, является высокопараллельной микроархитектурой с конвейером с семью стадиями.
Производительность компьютера можно повысить несколькими способами. Главный способ — использование кэш-памяти. Кэш-память прямого отображения и ассоциативная кэш-память с множественным доступом широко используются для того, чтобы ускорить обращения к памяти. Кроме того, применяется прогнозирование ветвления (как статическое, так и динамическое), исполнение с изменением последовательности и спекулятивное выполнение команд.
Наши три примера, Pentium II, UltraSPARC II и picojava II, во многом отличаются друг от друга, но при этом удивительно похожи в плане выполнения команд.

330 Глава 4. Микроархитектурный уровень
Pentium II берет команды CISC и разбивает их на микрооперации, которые обрабатываются суперскалярной архитектурой с прогнозированием ветвления, изменением последовательности команд и спекулятивным выполнением. UltraSPARC II — это современный 64-разрядный процессор с командами типа RISC. Здесь тоже используется прогнозирование ветвления, исполнение с изменением последовательности и спекулятивные команды. Picojavall представляет собой более простой процессор, предназначенный для дешевых устройств, поэтому у него нет таких особенностей, как динамическое прогнозирование ветвления. Однако при применении свертывания команд эта машина способна выполнять команды JVM достаточно быстро, как будто это регистровые команды RISC. Все три машины содержат сходные функциональные блоки, которые обрабатывают трехрегистровые микрооперации, когда они проходят через конвейер.
Вопросы и задания
1. В табл. 4.1 показан один из способов получения результата Л на выходе из АЛУ. Приведите другой способ.
2.В микроархитектуре Mic-1 требуется 1 не на установку регистра MIR, 1 не — на передачу значения регистра на шину В, 3 не — на запуск АЛУ и схемы сдвига и 1 не — на передачу результатов обратно в регистры. Длительность синхронизирующего импульса составляет 2 не. Может ли такая машина работать с частотой 100 МГц? А 150 МГц?
3.На рис. 4.5 регистр шины В закодирован в 4-битном поле, а шина С представлена в виде битового отображения. Почему?
4.На рис. 4.5 есть блок «Старший бит». Нарисуйте его схему.
5.Когда в микрокоманде установлено поле JMPC, регистр MBR соединяется операцией ИЛИ с полем NEXT_ADDRESS, чтобы получить адрес следующей микрокоманды. Существуют ли такие обстоятельства, при которых имеет смысл использовать JMPC, если NEXT_ADDRESS — OxlFF?
6.Предположим, что в примере, приведенном в листинге 4.1, выражение i-0: добавляется после условного оператора. Каким будет новый код ассемблера? Предполагается, что компилятор является оптимизирующим.
7.Напишите две трансляции IJVM для следующего высказывания на языке Java:i=j+k+4;
8.Напишите на языке Java выражение, которое произвело следующую программу IJVM:
ILOAD j ILOAD k ISUB
BIPUSH 6 ISUB DUP IADD ISTORE i

Вопросы и задания |
331 |
9. В этой главе мы упомянули, что во время трансляции выражения
if Ш goto LI; else goto L2
в двоичную форму L2 должно находиться среди младших 256 слов управляющей памяти. А возможно ли иметь L1, скажем, в ячейке с адресом 0x40, a L2 — в ячейке с адресом 0x140? Объясните, почему.
10.В микропрограмме для Mic-1 в микрокоманде if__cmpeq3 значение регистра MDR копируется в регистр Н, а в следующей строке от него отнимается значение регистра TOS. Казалось бы, это удобнее записать в одном высказывании:
if_cmpeq3 Z-MDR-TOS. rd
Почему этого не делают?
11.Сколько времени потребуется машине Mic-1, которая работает с частотой
200МГц, на выполнение следующего высказывания на языке Java: i=j+k; Ответ дайте в наносекундах.
12.Тот же вопрос, что и предыдущий, только для машины Mic-2 с частотой
200МГц. Опираясь на это вычисление, ответьте, сколько времени займет выполнение программы на машине Mic-2, если эта программа выполняется на машине Mic-1 за 100 не?
13.На машине JVM существуют специальные 1-байтные коды операций для загрузки в стек локальных переменных от 0 до 3, которые используются вместо обычной команды IL0AD. Какие изменения нужно внести в машину IJVM, чтобы наилучшим образом использовать эти команды?
14.Команда ISHR (целочисленный арифметический сдвиг вправо) есть в машинеJVM, но ее нет в машине IJVM. Команда берет два верхних слова стека и заменяет их одним словом (результатом). Второе сверху слово стека — это операнд, который нужно сдвинуть. Он сдвигается вправо на значение от 0 до 31 включительно, в зависимости от значения пяти самых младших битов верхнего слова в стеке (остальные 27 битов игнорируются). Знаковый бит дублируется вправо на столько же битов, на сколько осуществляется сдвиг. Код операции для команды ISHR 122 (0x7А).
1.Какая арифметическая операция эквивалентна сдвигу вправо на 2?
2.Расширьте систему микрокоманд, чтобы включить эту команду в IJVM.
15.Команда ISHR (целочисленный сдвиг влево) имеется в JVM, но отсутствует в IJVM. Команда берет два верхних слова стека и замещает их одним значением (результатом). Второе сверху слово в стеке — операнд, который нужно сдвинуть. Он сдвигается влево на значение от 0 до 31 включительно, в зависимости от значения пяти младших бит верхнего слова в стеке (остальные 2 бита верхнего слова игнорируются). Нули сдвигаются влево на столько же битов, на сколько осуществляется сдвиг. Код операции ISHL 120 (0x78).
1.Какая арифметическая операция эквивалентна сдвигу влево на 2?
2.Расширьте систему микрокоманд, чтобы включить эту команду в систему IJVM.
16.Команде INVOKEVIRTUAL в машине JVM нужно знать, сколько у нее параметров. Зачем?

332Глава 4. Микроархитектурный уровень
17.Напишите микропрограмму для Mic-1, чтобы реализовать команду JVM POPTWO. Эта команда убирает два верхних слова из стека.
18.Реализуйте команду JVM DLOAD для Mic-2. Эта команда содержит 1-6айт~ ный индекс и помещает локальную переменную, находящуюся в этом месте,
встек. Затем она помещает следующее старшее слово в стек.
19.Нарисуйте конечный автомат для учета очков при игре в теннис. Правила игры в теннис следующие. Чтобы выиграть, вам нужно получить как минимум 4 очка и у вас должно быть как минимум на 2 очка больше, чем у вашего соперника. Начните с состояния (0, 0), то есть с того, что ни у кого из вас еще нет очков. Затем добавьте состояние (1,0). Это значит, что игрок Л получил очко. Дугу из состояния (0,0) к состоянию (1,0) обозначьте буквой А. Затем добавьте состояние (0,1), чтобы показать, что игрок Л получил очко,
адугу к состоянию (0, 1) обозначьте буквой В, Продолжайте добавлять состояния и дуги до тех пор, пока не нарисуете все возможные состояния.
20.Вернитесь к предыдущему вопросу. Существуют ли такие состояния, которые могут выйти из строя, но при этом никак не повлияют на результат любой игры? Если да, то какие из них эквивалентны?
21.Нарисуйте конечный автомат для прогнозирования ветвления, более надежный, чем тот, который изображен на рис. 4.29. Он должен изменять предсказание только после трех последовательных неудачных предсказаний.
22.Сдвиговый регистр, изображенный на рис. 4.18, имеет максимальную емкость 6 байтов. Можно ли сконструировать более дешевый блок выборки команд с 5-байтным сдвиговым регистром? А с 4-байтным?
23.Предыдущий вопрос связан с более дешевыми блоками выборки команд. Теперь рассмотрим более дорогие. Встанет ли когда-нибудь вопрос о том, чтобы сконструировать сдвиговый регистр гораздо большей емкости, скажем, 12 байтов? Если да, то почему? Если нет, то почему?
24.В микропрограмме для микроархитектуры Mic-2 микрокоманда if_icmpeq6 совершает переход к Т, если Z установлено на 1. Однако микрокоманда Т та же, что и gotol. А возможно ли перейти к gotol сразу, и станет ли машина работать быстрее после этого?
25.В микроархитектуре Mic-4 блок декодирования отображает код операции IJVM в индекс ПЗУ, где хранятся соответствующие микрооперации. Кажется, что было бы проще опустить стадию декодирования и сразу передать код операции IJVM в очередь. Тогда можно использовать код операции IJVM
вкачестве индекса в ПЗУ, точно так же, как в микроархитектуре Mic-1. Что не так в этом плане?
26.Компьютер содержит двухуровневую кэш-память. Предположим, что 80% обращений к памяти — удачные обращения в кэш-память первого уровня, 15% — в кэш-память второго уровня, а 5% — промахи кэша. Время доступа составляет 5 не, 15 не и 60 не соответственно, причем время доступа в кэшпамять второго уровня и в основную память отсчитывается с того момента, как стало известно, что они нужны (например, доступ к кэш-памяти второго уровня не может начаться, пока не произойдет npoMLx кэш-памяти первого уровня). Каково среднее время доступа?