ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 6670
Скачиваний: 8
Глава 1
Предисловие
Цифровой компьютер — это машина, которая может решать задачи, выполняя дан-
ные ей команды. Последовательность команд, описывающих решение определен-
ной задачи, называется
программой.
Электронные схемы каждого компьютера
могут распознавать и выполнять ограниченный набор простых команд. Все про-
граммы перед выполнением должны быть превращены в последовательность та-
ких команд, которые обычно не сложнее чем:
• сложить 2 числа;
• проверить, не является ли число нулем;
• скопировать кусок данных из одной части памяти компьютера в другую.
Эти примитивные команды в совокупности составляют язык, на котором люди
могут общаться с компьютером. Такой язык называется
машинным языком.
Раз-
работчик при создании нового компьютера должен решать, какие команды вклю-
чить в машинный язык этого компьютера. Это зависит от назначения компьютера,
от того, какие задачи он должен выполнять. Обычно стараются сделать машинные
команды как можно проще, чтобы избежать сложностей при конструировании ком-
пьютера и снизить затраты на необходимую электронику. Так как большинство
машинных языков очень примитивны, использовать их трудно и утомительно.
Это простое наблюдение с течением времени привело к построению ряда уров-
ней абстракций, каждая из которых надстраивается над абстракцией более низкого
уровня. Именно таким образом можно преодолеть сложности при общении с компью-
тером. Мы называем этот подход
многоуровневой компьютерной организацией.
Так мы и назвали эту книгу. В следующем разделе мы расскажем, что понимаем
под этим термином. Затем мы расскажем об истории развития этой проблемы и поло-
жении дел в настоящий момент, а также рассмотрим некоторые важные примеры.
Многоуровневая компьютерная
организация
Как мы уже сказали, существует огромная разница между тем, что удобно для лю-
дей, и тем, что удобно для компьютеров. Люди хотят сделать X, но компьютеры
могут сделать только Y. Из-за этого возникают проблемы. Цель данной книги —
объяснить, как можно решать эти проблемы.
Многоуровневая компьютерная организация 19
Языки, уровни и виртуальные машины
Проблему можно решить двумя способами. Оба эти способа включают в себя разра-
ботку новых команд, которые более удобны для человека, чем встроенные машин-
ные команды. Эти новые команды в совокупности формируют язык, который мы
будем называть Я 1. Встроенные машинные команды тоже формируют язык, и мы
будем называть его Я 0. Компьютер может выполнять только программы, напи-
санные на его машинном языке Я 0. Упомянутые два способа решения проблемы
различаются тем, каким образом компьютер будет выполнять программы, написан-
ные на языке Я 1.
Первый способ выполнения программы, написанной на языке Я 1, — замена
каждой команды на эквивалентный набор команд в языке Я 0. В этом случае ком-
пьютер выполняет новую программу, написанную на языке Я 0, вместо старой про-
граммы, написанной на Я 1. Эта технология называется
трансляцией.
Второй способ — написание программы на языке Я 0, которая берет програм-
мы, написанные на языке Я 1, в качестве входных данных, рассматривает каждую
команду по очереди и сразу выполняет эквивалентный набор команд языка Я 0.
Эта технология не требует составления новой программы на Я 0. Она называется
интерпретацией,
а программа, которая осуществляет интерпретацию, называется
интерпретатором.
Трансляция и интерпретация сходны. При применении обоих методов компью-
тер в конечном итоге выполняет набор команд на языке Я 0, эквивалентных ко-
мандам Я 1. Различие лишь в том, что при трансляции вся программа Я 1 переде-
лывается в программу Я 0, программа Я 1 отбрасывается, а новая программа на
Я 0 загружается в память компьютера и затем выполняется.
При интерпретации каждая команда программы на Я 1 перекодируется в Я 0
и сразу же выполняется. В отличие от трансляции, здесь не создается новая про-
грамма на Я 0, а происходит последовательная перекодировка и выполнение ко-
манд. Оба эти метода, а также их комбинация широко используются.
Обычно гораздо проще представить себе существование гипотетического ком-
пьютера или
виртуальной машины,
для которой машинным языком является язык
Я 1, чем думать о трансляции и интерпретации. Назовем такую виртуальную ма-
шину М 1, а виртуальную машину с языком Я 0 — М 0. Если бы такую машину М 1
можно было бы сконструировать без больших денежных затрат, язык Я 0, да и ма-
шина, которая выполняет программы на языке Я 0, были бы не нужны. Можно
было бы просто писать программы на языке Я 1, а компьютер сразу бы их выпол-
нял. Даже если виртуальная машина слишком дорога или ее очень трудно сконст-
руировать, люди все же могут писать программы для нее. Эти программы могут
транслироваться или интерпретироваться программой, написанной на языке Я 0,
которая сама могла бы выполняться фактически существующим компьютером.
Другими словами, можно писать программы для виртуальных машин, как будто
они действительно существуют.
Чтобы трансляция и интерпретация были целесообразными, языки Я 0 и Я 1
не должны сильно различаться. Это значит, что язык Я 1 хотя и лучше, чем Я 0, но
все же далек от идеала. Возможно, это несколько обескураживает в свете первона-
чальной цели создания языка Я 1 — освободить программиста от бремени написа-
20
Глава 1. Предисловие
ния программ на языке, который более удобен для компьютера, чем для человека.
Однако ситуация не так безнадежна.
Очевидное решение этой проблемы — создание еще одного набора команд, ко-
торые в большей степени ориентированы на человека и в меньшей степени на ком-
пьютер, чем Я 1. Этот третий набор команд также формирует язык, который мы
будем называть Я 2, а соответствующую виртуальную машину — М 2. Человек
может писать программы на языке Я 2, как будто виртуальная машина с машинным
ЯЗЫКОМ Я2 действительно существует. Такие программы могут или транслиро-
ваться
на язык
Я 1, или выполняться интерпретатором, написанным на языке Я 1.
Изобретение целого ряда языков, каждый из которых более удобен для челове-
ка, чем предыдущий, может продолжаться до тех пор, пока мы не дойдем до подхо-
дящего нам языка. Каждый такой язык использует своего предшественника как
основу, поэтому мы можем рассматривать компьютер в виде ряда уровней, как
показано на рис. 1.1. Язык, находящийся в самом низу иерархической структуры —
самый примитивный, а находящийся на самом верху — самый сложный.
Уровень п
Уровень 3
Уровень 2
Уровень 1
Уровень О
Виртуальная машина М л
с машинным языком Я п
Виртуальная машина М 3
с машинным языком Я 3
Виртуальная машина М 2
с машинным языком Я 2
Виртуальная машина М 1
с машинным языком Я 1
Виртуальная машина М О
с машинным языком Я О
Программы на языке Я 1 либо
интерпретируются программой-
интерпретатором, работающей
на машине более низкого уровня,
либо транслируются на машинный
язык машины более низкого уровня
Программы на языке Я 1 либо
интерпретируются программами-
интерпретаторами, работающими
на машине М 1 или М 0, либо
транслируются на Я 1 или Я О
Программы на языке Я 1 либо
интерпретируются программой-
интеопретатором, работающей
на кашине М 0, либо
транслируются на Я О
Программы Я 0 непосредственно
выполняются электронными схемами
Рис. 1.1. Многоуровневая машина
Между языком и виртуальной машиной существует важная зависимость. У каж-
дой машины есть какой-то определенный машинный язык, состоящий из всех
команд, которые эта машина может выполнять. В сущности, машина определяет
язык. Сходным образом язык определяет машину, которая может выполнять все
программы, написанные на этом языке. Машину, задающуюся определенным язы-
ком, очень сложно и дорого сконструировать из электронных схем, но мы можем
представить себе такую машину. Компьютер с машинным языком C++ или COBOL
был бы слишком сложным, но его можно было бы сконструировать, если учиты-
Многоуровневая компьютерная организация 21
вать высокий уровень современных технологий. Однако существуют веские при-
чины не создавать такой компьютер: это слишком сложно по сравнению с другими
техническими приемами.
Компьютер с п уровнями можно рассматривать как п разных виртуальных
машин, у каждой из которых есть свой машинный язык. Термины «уровень» и «вир-
туальная машина» мы будем использовать как синонимы. Только программы,
написанные на Я 0, могут выполняться компьютером без применения трансляции
и
интерпретации. Программы, написанные на Я 1, Я 2,..., Я п, должны проходить
через интерпретатор более низкого уровня или транслироваться на язык, соответ-
ствующий более низкому уровню.
Человеку, который пишет программы для виртуальной машины уровня п, не обя-
зательно знать о трансляторах и интерпретаторах более низких уровней. Машина
выполнит эти программы, и не важно, будут ли они выполняться шаг за шагом
интерпретатором или их будет выполнять сама машина. В обоих случаях результат
один и тот же: программа будет выполнена.
Большинство программистов, использующих машину уровня п, интересуются
только самым верхним уровнем, то есть уровнем, который меньше всего сходен
с машинным языком. Однако те, кто хочет понять, как в действительности работа-
ет компьютер, должны изучить все уровни. Те, кто проектирует новые компьюте-
ры или новые уровни (то есть новые виртуальные машины), также должны быть
знакомы со всеми уровнями. Понятия и технические приемы конструирования ма-
шин как системы уровней, а также детали уровней составляют главный предмет
этой книги.
Современные многоуровневые машины
Большинство современных компьютеров состоит из двух и более уровней. Суще-
ствуют машины даже с шестью уровнями (рис. 1.2). Уровень 0 — аппаратное обес-
печение машины. Его электронные схемы выполняют программы, написанные на
языке уровня 1. Ради полноты нужно упомянуть о существовании еще одного уров-
ня, расположенного ниже уровня 0. Этот уровень не показан на рис. 1.2, так как он
попадает в сферу электронной техники и, следовательно, не рассматривается в этой
книге. Он называется
уровнем физических устройств.
На этом уровне находятся
транзисторы, которые являются примитивами для разработчиков компьютеров.
Объяснять, как работают транзисторы, — задача физики.
На самом нижнем уровне,
цифровом логическом уровне,
объекты называются
вентилями.
Хотя вентили состоят из аналоговых компонентов, таких как транзис-
торы, они могут быть точно смоделированы как цифровые средства. У каждого
вентиля есть одно или несколько цифровых входных данных (сигналов, представ-
ляющих 0 или 1). Вентиль вычисляет простые функции этих сигналов, такие как
И или ИЛИ. Каждый вентиль формируется из нескольких транзисторов. Несколько
вентилей формируют 1 бит памяти, который может содержать 0 или 1. Биты памя-
ти, объединенные в группы, например, по 16,32 или 64, формируют регистры. Каж-
дый регистр может содержать одно двоичное число до определенного предела.
Из вентилей также может состоять сам компьютер. Подробно вентили и цифро-
вой логический уровень мы рассмотрим в главе 3.
22
Глава 1. Предисловие
Уровень 5
Уровень 4
Уровень 3
Уровень 2
Уровень 1
Уровень О
Язык высокого уровня
Трансляций (компилятор)
Уровень языка ассемблера
Трансляция (ассемблер)
Уровень операционной системы
Трансляция (ассемблер)
Уровень архитектуры команд
Интерпретация (микропрограмма)
или непосредственное выполнение
Микроархитектурный уровень
Аппаратное обеспечение
Цифровой логический уровень
Рис. 1.2. Компьютер с шестью уровнями. Способ поддержки каждого уровня указан под ним.
В скобках указывается название поддерживающей программы
Следующий уровень —
микроархитектурный уровень.
На этом уровне можно
видеть совокупности 8 или 32 регистров, которые формируют локальную память
и схему, называемую
АЛУ (арифметико-логическое устройство).
АЛУ выполня-
ет простые арифметические операции. Регистры вместе с АЛУ формируют
тракт
данных,
по которому поступают данные. Основная операция тракта данных со-
стоит в следующем. Выбирается один или два регистра, АЛУ производит над
ними какую-либо операцию, например сложения, а результат помещается в один
из этих регистров.
На некоторых машинах работа тракта данных контролируется особой програм-
мой, которая называется
микропрограммой.
На других машинах тракт данных
контролируется аппаратными средствами. В предыдущих изданиях книги мы на-
звали этот уровень «уровнем микропрограммирования», потому что раньше он
почти всегда был интерпретатором программного обеспечения. Поскольку сейчас
тракт данных обычно контролируется аппаратным обеспечением, мы изменили
название, чтобы точнее отразить смысл.
На машинах, где тракт данных контролируется программным обеспечением,
микропрограмма — это интерпретатор для команд на уровне 2. Микропрограмма
вызывает команды из памяти и выполняет их одну за другой, используя при этом
тракт данных. Например, для того чтобы выполнить команду ADD, эта команда вы-
зывается из памяти, ее операнды помещаются в регистры, АЛУ вычисляет сумму,
а затем результат переправляется обратно. На компьютере с аппаратным контро-
лем тракта данных происходит такая же процедура, но при этом нет программы,
которая контролирует интерпретацию команд уровня 2.