- •Спекулятивная загрузка
- •Краткое содержание главы
- •Вопросы и задания
- •Глава 6
- •Виртуальная память
- •Страничная организация памяти
- •Реализация страничной организации памяти
- •Вызов страниц по требованию и рабочее множество
- •Политика замещения страниц
- •Размер страниц и фрагментация
- •Сегментация
- •Реализация сегментации
- •Виртуальная память Pentium 4
- •Виртуальная память UltraSparc III
- •Виртуальная память и кэширование
- •Виртуальные команды ввода-вывода
- •Реализация виртуальных команд ввода-вывода
- •Команды управления каталогами
- •Виртуальные команды для параллельной работы
- •Формирование процесса
- •Состояние гонок
- •Синхронизация процесса с использованием семафоров
- •Краткое содержание главы
- •Вопросы и задания
- •Уровень ассемблера
- •Знакомство с ассемблером
- •Макросы
- •Процесс ассемблирования
- •Компоновка и загрузка
- •Глава 8
- •Параллельные компьютерные архитектуры
Вопросы и задания
Слову в системе с прямым порядком следования байтов присвоено численное значение 3. Предположим, что это слово байт за байтом передается в систему с обратным порядком следования байтов и сохраняется в ней, причем исходный байт 0 соответствует целевому байту 0 и т. д. Каким станет численное значение слова в системе с обратным порядком следования байтов?
В Pentium 4 команды могут содержать любое число байтов, даже нечетное. В UltraSPARC III все команды содержат четное число байтов. В чем преимущество Pentium 4?
Разработайте расширенный код операций, который позволяет закодировать в 36-разрядной команде следующее:
+ 7 команд с двумя 32-разрядными адресами и номером одного 3-разряд- ного регистра;
+ 500 команд с одним 15-разрядным адресом и номером одного 3-разряд - ного регистра;
+ 50 команд без адресов и регистров.
Пусть в машине поддерживаются 16-разрядные команды и 6-разрядные адреса. Одни команды содержат один адрес, другие — два. Если существует п двухадресных команд, то каково максимальное число одноадресных команд?
Можно ли разработать такой расширенный код операций, который позволял бы кодировать в 12-разрядной команде следующее (размер регистра составляет 3 бита):
4 команды с тремя регистрами;
255 команд с одним регистром;
+ 16 команд без регистров.
Пусть имеется одноадресная машина с регистром-сумматором. Вот значения некоторых слов памяти:
слово 20 содержит число 40;
+ слово 30 содержит число 50;
+ слово 40 содержит число 60;
+ слово 50 содержит число 70;
Какие значения загрузят в регистр-сумматор перечисленные ниже команды?
LOAD IMMEDIATE 20 LOAD DIRECT 20 LOAD INDIRECT 20 LOAD IMMEDIATE 30 LOAD DIRECT 30 LOAD INDIRECT 30
Для каждого из четырех видов машин — безадресной, одноадресной, двухадресной и трехадресной — напишите программу вычисления следующего выражения:
X = (А + В х C)/(D - Ex F).
В наличии имеются следующие команды:
безадресные: PUSH М, POP М, ADD, SUB, MUL, DIV;
одноадресные: LOAD M, STORE M, ADD M, SUB M, MUL M, DIV M;
+ двухадресные: MOV (X = 7), ADD (X = X + 7), SUB (X = X - 7),
MUL (I = Ix 7), DIV (X = X/7);
+ трехадресные: MOV (X = 7), ADD (X = 7 + Z), SUB (X = 7 - Z),
MUL (X =7xZ), DIV (X = 7/Z).
Здесь M — это 16-разрядный адрес памяти, а X, 7 и Z — либо 16-разрядные адреса, либо 4-разрядные регистры. Безадресная машина использует стек, одноадресная машина — регистр-аккумулятор, а оставшиеся две имеют 16 регистров и команды, которые оперируют всеми комбинациями ячеек памяти и регистров. Команда SUB X,Y вычитает 7 из X, а команда SUB X,Y,Z вычитает Z из 7 и помещает результат в X. Если длина кодов операций равна 8 бит, а размеры команд кратны величине 4 бит, сколько битов нужно каждой машине для вычисления X?
Придумайте такой механизм адресации, который позволяет определять в 6-раз- рядном поле произвольный набор из 64 адресов, не обязательно смежных.
В чем недостаток самомодифицирующихся программ, о котором не было упомянуто в тексте этой главы?
Переделайте следующие формулы из инфиксной записи в обратную польскую запись:
\) А + В+ C + D + E]
(А + В) х (С + D) + Е;
(А х В) + (С х £>) + £;
(А - В) х (((С - D х E)/F)/G) х Я.
И. Какие из следующих пар формул в обратной польской записи математически эквивалентны?
А В + С + и А В С + +;
АВ-С-иАВС--;
АВхС+иАВС + х.
Переделайте следующие формулы из обратной польской записи в инфиксную запись:
АВ + C + Dx;
А В / С D / +;
ABCDE+xx/;
А В CDExF / + G - Н / х +.
Напишите три формулы в обратной польской записи, которые нельзя переделать в инфиксную запись.
Переделайте следующие инфиксные логические формулы в обратную польскую запись:
(А И В) ИЛИ С]
(А ИЛИ В) И (А ИЛИ С);
(А И В) ИЛИ (С И D).
Переделайте следующую инфиксную формулу в обратную польскую запись и напишите IJVM-код, чтобы ее выполнить:
(5x2 + 7)- (4/2 + 1)
Пусть имеется команда ассемблера:
MOV REG,ADDR
Это — команда Pentium 4 для загрузки регистра из памяти, а в UltraSPARC III для загрузки регистра из памяти нужно написать:
LOAD ADDR.REG
Почему порядок записи операндов разный?
Сколько регистров в машине, форматы команд которой представлены на рис. 5.17?
В форматах команд на рис. 5.17 бит 23 позволяет различать варианты 1 и 2 формата. Однако для определения варианта 3 формата никакого специального бита не предусмотрено. Как аппаратное обеспечение узнает, что нужен вариант 3?
Обычно программа определяет местонахождение переменной X в пределах интервала от А до В. Если бы имелась трехадресная команда с операндами А, В и X, сколько битов кода условия было бы установлено этой командой?
Pentium 4 содержит бит кода условий, состояние которого зависит от переноса бита 3 после выполнения арифметической операции. Зачем это нужно?
В UltraSPARC III нет такой команды, которая загружает в регистр 32-разрядное число. Вместо нее обычно используется последовательность из двух команд: SETHI и ADD. Существуют ли еще какие-нибудь способы загрузки 32-разрядного числа в регистр? Аргументируйте.
Один из ваших друзей стучится к вам в комнату в 3 часа ночи и радостно сообщает, что у него появилась замечательная идея — создать команду с двумя кодами операций. Что вы сделаете в этой ситуации: отправите своего друга получать патент или пошлете его (думать дальше)?
В процессоре 8051 не предусмотрены команды смещения более чем на 8 бит. Значит ли это, что адресация памяти в диапазоне выше 255 невозможна? Если возможна, объясните, как она осуществляется.
В программировании очень распространены следующие формы проверки:
if (к—0) ... if (a>b) ... if (к<5) ...
Предложите команду, которая будет эффективно проверять эти условия. Какие поля будут в вашей команде?
Покажите, каким будет 16-разрядное двоичное число 1001 0101 1100 ООН после:
сдвига вправо на 4 бита с заполнением нулями;
сдвига вправо на 4 бита с расширением по знаку;
сдвига влево на 4 бита;
циклического сдвига влево на 4 бита;
циклического сдвига вправо на 4 бита.
Как в машине, в которой нет команды CLR, очистить слово памяти?
Вычислите логическое выражение (А И В) ИЛИ С для:
А = 1101 0000 1010 1101;
+ £ = 1111 1111 0000 1111;
С = 0000 0000 0010 0000.
Придумайте, как поменять местами две переменные, А и В, не использовав при этом третьей переменной или регистра. Подсказка: подумайте о команде ИСКЛЮЧАЮЩЕЕ ИЛИ.
На некоем компьютере можно перемещать число из одного регистра в другой, сдвигать каждый из них влево на разное количество байтов и складывать полученные результаты быстрее, чем при умножении. При каком условии эта последовательность команд будет полезна для вычисления произведения «константа х переменная»?
Разные машины имеют разную плотность команд (то есть разное число байтов, которое требуется для выполнения определенного вычисления). Транслируйте следующие три фрагмента Java-nporpaMMbi на ассемблер Pentium 4, UltraSPARC III и IJVM. Затем подсчитайте, сколько байтов требуется для выполнения каждого выражения для каждой машины. Предполагается, что i и j — это локальные переменные в памяти. В остальном отталкивайтесь от наиболее оптимистичных допущений.
i =3; i = j: i = j - 1:
В этой главе рассматривались команды для циклов for. Разработайте команду для циклов while.
Предположим, что ханойские монахи могут перемещать один диск за 1 минуту (они не торопятся закончить работу, поскольку в Ханое очень мало вакансий для людей с подобными навыками). Сколько времени им потребуется, чтобы решить задачу (то есть переместить все 64 диска)? Ответ дайте в годах.
Почему устройства ввода-вывода помещают вектор прерывания на шину? Разве нельзя вместо этого сохранить соответствующую информацию в таблице в памяти?
Компьютер для считывания информации с диска использует канал прямого доступа к памяти. Диск содержит 64 сектора по 512 байт на дорожке. Время оборота диска составляет 16 мс. Ширина шины — 16 бит. Каждая передача шины занимает 500 не. В среднем для одной команды процессора требуется два цикла шины. Насколько скорость работы процессора замедляется из-за прямого доступа к памяти?
Почему программам обработки прерываний приписываются определенные приоритеты, а обычные процедуры приоритетов не имеют?
Архитектура IA-64 предусматривает необычайно большое число регистров (64). Связано ли это с предикацией? Если да, то каким образом? Если нет, то зачем тогда их так много?
В этой главе обсуждалось понятие спекулятивной загрузки. Но о командах спекулятивного сохранения мы не упоминали. Почему? Может быть, они просто аналогичны командам спекулятивной загрузки? Или существует какая-то другая причина, по которой мы не стали о них говорить?
Когда нужно связать две локальные сети, между ними помещается мост, соединенный с обеими сетями. Каждый передаваемый какой-либо сетью пакет вызывает прерывание на мосту, чтобы мост мог определить, нужно ли этот пакет пересылать. Предположим, что на обработку прерывания и проверку пакета требуется 250 мке, но пересылка этого пакета в случае необходимости совершается путем прямого доступа к памяти, поэтому центральный процессор от этой работы освобожден. Если размер всех пакетов равен 1 Кбайт, какова максимальная скорость передачи данных на каждой из сетей?
На рис. 5.25 указатель фрейма указывает на первую локальную переменную. Какая информация нужна программе, чтобы выйти из процедуры и вернуться в исходное состояние?
Напишите подпрограмму на ассемблере для преобразования целого двоичного числа со знаком в ASCII-код.
Напишите подпрограмму на ассемблере для преобразования инфиксной формулы в обратную польскую запись.
Процедура для решения задачи «Ханойская башня» — не единственная рекурсивная процедура, любимая многими компьютерщиками. Есть еще одна очень популярная рекурсивная процедура п\, где п\ = п(п - 1)!, которая подчиняется ограничивающему условию 0! = 1. Напишите на вашем любимом ассемблере процедуру для вычисления п\.
Если вы не прочь пошевелить мозгами в свободное время, попробуйте написать программу для решения задачи «Ханойская башня» без рекурсии, а путем поддержания стека в массиве. (Имейте в виду, что решения вы по всей вероятности найти не сможете.)
