Многоуровневая компьютерная организация кратко

Обновлено: 06.07.2024

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

Многоуровневая компьютерная организация

Цифровой компьютер — это машина, которая может решать задачи, выполняя данные ей команды. Последовательность команд, описывающих решение опре­деленной задачи, называется программой. Электронные схемы каждого компью­тера могут распознавать и выполнять ограниченный набор простых команд. Все программы перед выполнением должны быть превращены в последовательность таких команд, которые обычно не сложнее, чем, например:

♦ сложить 2 числа;

♦ проверить, не является ли число нулем;

♦ скопировать блок данных из одной части памяти компьютера в другую.

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

Это простое наблюдение с течением времени привело к построению ряда уровней абстракций, каждая из которых надстраивается над абстракцией более низкого уровня. Именно таким образом можно преодолеть сложности при обще­нии с компьютером. Мы называем этот подход многоуровневой компьютерной организацией. В следующем разделе мы поясним, что этот термин значит. Затем мы расскажем об истории развития проблемы и положении дел в настоящий мо­мент, а также рассмотрим некоторые важные примеры.

Как мы уже сказали, существует огромная разница между тем, что удобно лю­дям, и тем, что могут компьютеры. Люди хотят сделать X, но компьютеры могут сделать только Y. Из-за этого возникает проблема. Цель данной книги — объяс­нить, как решить эту проблему.

Языки, уровни и виртуальные машины

Вышеупомянутую проблему можно решить двумя способами. Оба способа подра­зумевают разработку новых команд, более удобных для человека, чем встроенные машинные команды. Эти новые команды в совокупности формируют язык, кото­рый мы будем называть Я 1. Встроенные машинные команды тоже формируют язык, и мы будем называть его Я 0. Компьютер может выполнять только про­граммы, написанные на его машинном языке Я 0. Два способа решения пробле­мы различаются тем, каким образом компьютер будет выполнять программы, на­писанные на языке Я 1, — ведь в конечном итоге компьютеру доступен только машинный язык Я 0.

Первый способ выполнения программы, написанной на языке Я 1, подразумева­ет замену каждой команды эквивалентным набором команд на языке Я 0. В этом случае компьютер выполняет новую программу, написанную на языке Я 0, вме­сто старой программы, написанной на Я 1. Эта технология называется трансля­цией.

Второй способ означает создание программы на языке Я 0, получающей в ка­честве входных данных программы, написанные на языке Я 1. При этом каждая команда языка Я 1 обрабатывается поочередно, после чего сразу выполняется эквивалентный ей набор команд языка Я 0. Эта технология не требует составле­ния новой программы на Я 0. Она называется интерпретацией, а программа, ко­торая осуществляет интерпретацию, называется интерпретатором.

Между трансляцией и интерпретацией много общего. В обоих подходах ком­пьютер в конечном итоге выполняет набор команд на языке Я 0, эквивалентных командам Я 1. Различие лишь в том, что при трансляции вся программа Я 1 пе­ределывается в программу Я 0, программа Я 1 отбрасывается, а новая программа на Я 0 загружается в память компьютера и затем выполняется.

Впрочем, чем мыслить категориями трансляции и интерпретации, гораздо проще представить себе существование гипотетического компьютера или вирту­альной машины, для которой машинным языком является язык Я 1. Назовем та­кую виртуальную машину М 1, а виртуальную машину для работы с языком Я 0 — М 0. Если бы такую машину М 1 можно было бы сконструировать без больших денежных затрат, язык Я 0, да и машина, которая выполняет программы на язы­ке Я 0, были бы не нужны. Можно было бы просто писать программы на языке Я 1, а компьютер сразу бы их выполнял. Даже с учетом того, что создать вирту­альную машину, возможно, не удастся (из-за чрезмерной дороговизны или труд­ностей разработки), люди вполне могут писать ориентированные на нее про­граммы. Эти программы будут транслироваться или интерпретироваться программой, написанной на языке Я 0, а сама она могла бы выполняться сущест­вующим компьютером. Другими словами, можно писать программы для вирту­альных машин так, как будто эти машины реально существуют.

Трансляция и интерпретация целесообразны лишь в том случае, если языки Я 0 и Я 1 не слишком отличаются друг от друга. Это значит, что язык Я 1 хотя и лучше, чем Я 0, но все же далек от идеала. Возможно, это несколько обескуражи­вает в свете первоначальной цели создания языка Я 1 — освободить программи­ста от бремени написания программ на языке, понятном компьютеру, но мало­приспособленном для человека. Однако ситуация не так безнадежна.

Очевидное решение проблемы — создание еще одного набора команд, кото­рые в большей степени, чем Я 1 ориентированы на человека и в меньшей степе­ни на компьютер. Этот третий набор команд также формирует язык, который мы будем называть Я 2, а соответствующую виртуальную машину — М 2. Человек может писать программы на языке Я 2, как будто виртуальная машина для рабо­ты с машинным языком Я 2 действительно существует. Такие программы могут либо транслироваться на язык Я 1, либо выполняться интерпретатором, напи­санным на языке Я 1.

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

clip_image002

Между языком и виртуальной машиной существует важная зависимость. Ка­ждая машина поддерживает какой-то определенный машинный язык, состоящий из всех команд, которые эта машина может выполнять. В сущности, машина определяет язык. Сходным образом язык определяет машину, которая может выполнять все программы, написанные на этом языке. Машину, определяемую тем или иным языком, очень сложно и дорого конструировать из электронных схем, однако представить себе такую машину мы можем. Компьютер для работы с машинным языком С или С++ был бы слишком сложным, но в принципе его можно разработать, учитывая высокий уровень современных технологий. Одна­ко существуют веские причины не создавать такой компьютер — это крайне не­эффективное, по сравнению с другими, решение. Действительно, технология должна быть не только осуществимой, но и рациональной.

Человеку, который пишет программы для виртуальной машины уровня п, не обязательно знать о трансляторах и интерпретаторах более низких уровней. Ма­шина выполнит эти программы, и не важно, будут они поэтапно выполняться интерпретатором или же их обработает сама машина. В обоих случаях результат один и тот же — это выполнение программы.

Большинству программистов, использующих машину уровня п, интересен только самый верхний уровень, который меньше всего сходен с машинным язы­ком. Однако те, кто хочет понять, как в действительности работает компьютер, должны изучить все уровни. Также должны быть знакомы со всеми уровнями разработчики новых компьютеров или новых уровней (то есть новых виртуаль­ных машин). Понятия и технические приемы разработки машин как системы уровней, а также подробное описание этих самых уровней, составляют главный предмет данной книги.

Таненбаум Э. Архитектура компьютера. 5-е изд. (+CD). — СПб.: Питер, 2007. — 844 с: ил.

Большинство современных компьютеров состоит из двух и более уровней (Рис. 2.1).



Рис. 2.1. Компьютер с шестью уровнями. Способ поддержки каждого уровня указан под ним. В скобках указывается название поддерживающей программы

Уровень 0

На самом нижнем уровне,цифровом логическом, объекты называются вентилями. Хотя вентили состоят из аналоговых компонентов, таких как транзис­торы, они могут быть точно смоделированы как цифровые средства. У каждого вентиля есть одно или несколько цифровых входных данных (сигналов, представ­ляющих 0 или 1). Вентиль вычисляет простые функции этих сигналов, такие как И или ИЛИ. Каждый вентиль формируется из нескольких транзисторов. Несколько вентилей формируют 1 бит памяти, который может содержать 0 или 1. Биты памя­ти, объединенные в группы, например, по 16, 32 или 64, формируютрегистры. Каж­дый регистр может содержать одно двоичное число, соответствующее его разрядности (количеству бит). Из вентилей может состоять и сам компьютер.

Уровень 1

Следующий уровень –микроархитектурный уровень. На этом уровне можно видеть совокупности 8 или 32 регистров, которые формируют локальную память и схему, называемуюАЛУ(арифметико-логическое устройство). АЛУ выполня­ет простые арифметические операции. Регистры вместе с АЛУ формируюттракт данных. Основная операция тракта данных со­стоит в следующем: выбирается один или два регистра, АЛУ производит над ними какую-либо операцию, например сложения, а результат помещается в один из этих регистров.

Уровень 2

На некоторых машинах работа тракта данных контролируется особой програм­мой, которая называетсямикропрограммой. На других машинах тракт данных контролируется аппаратными средствами.

На машинах, где тракт данных контролируется программным обеспечением, микропрограмма – это интерпретатор для команд на уровне 2. Микропрограмма вызывает команды из памяти и выполняет их одну за другой, используя при этом тракт данных. Например, для того чтобы выполнить команду ADD, эта команда вы­зывается из памяти, ее операнды помещаются в регистры, АЛУ вычисляет сумму, а затем результат переправляется обратно. На компьютере с аппаратным контро­лем тракта данных происходит такая же процедура, но при этом нет программы, которая контролирует интерпретацию команд уровня 2.

Уровень 3

У этого уровня есть не­которые дополнительные особенности: набор новых команд, другая организация памяти, способность выполнять две и более программ одновременно и некоторые другие. При построении этого уровня возможно больше вариантов, чем при построении первого и второго.

Уровень 4

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

Уровни с четвертого и выше предназначены для прикладных программистов, решающих конкретные задачи. Если машинные языки уровней 1, 2 и 3 – цифровые, то уровень 4 представляет собой символическую форму одного из язы­ков более низкого уровня. На этом уровне можно писать программы в приемлемой для человека форме. Эти программы сначала компилируются на язык уровня 1, 2 или 3, а затем интерпретируются соответствующей виртуальной или фактически существующей машиной. Программа, которая выполняет компиляцию, называет­сяассемблером.

Уровень 5

Этот уровень обычно состоит из языков, разработанных для прикладных про­граммистов. Такие языки называютсяязыками высокого уровня. Существуют сотни языков высокого уровня, наиболее известные среди них: BASIC, С, C++, Java, LISP и Prolog. Программы, написанные на этих языках, обычно компилиру­ются на уровень 3 или 4. Необходимо отметить, что иногда также используется метод интер­претации, например, программы на языке Java или BASIC обычно интерпретируются.

Таким образом, компьютер проектируется как иерархическая структура уровней, каж­дый из которых надстраивается над предыдущим. Каждый уровень представляет собой определенную абстракцию с различными объектами и операциями. Рассмат­ривая компьютер подобным образом, мы можем не принимать во внимание не­нужные нам детали и свести сложный предмет к более простому для понимания.

Набор типов данных, операций и особенностей каждого уровня называетсяар­хитектурой. Архитектура связана с аспектами, которые видны программисту, на­пример, сведения о том, сколько памяти можно использовать при написании про­граммы – часть архитектуры. А техническая сторона разработки компьютера (например, какая технология используется при создании памяти) не являются частью архитектуры.

Человек пишет команды, которые в совокупности формируют язык, называемый условно Я1. Встроенные машинные команды тоже формируют язык, и мы будем называть его Я 0. Компьютер может выполнять только пропрограммы, написан- ные на его машинном языке Я 0. Компьютер не будет выполнять программы, на- писанные на языке Я 1, — ведь в конечном итоге компьютеру доступен только машинный язык Я 0.

Первый способ выполнения программы, написанной на языке Я 1, подразумевает замену каждой команды эквивалентным набором команд на языке Я 0. В этом случае компьютер выполняет новую программу, написанную на языке Я 0, вместо старой программы, написанной на Я 1. Эта технология называется трансляцией.

Второй способ означает создание программы на языке Я 0, получающей в качест- ве входных данных программы, написанные на языке Я 1. При этом каждая ко- манда языка Я 1 обрабатывается поочередно, после чего сразу выполняется экви- валентный ей набор команд языка Я 0. Эта технология не требует составления но- вой программы на Я 0. Она называется интерпретацией, а программа, которая осуществляет интерпретацию, называется интерпретатором.

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

0 загружается в память компьютера и затем выполняется. При интерпретации ка-

ждая команда программы на Я 1 перекодируется в Я 0 и сразу же выполняется. В отличие от трансляции, здесь не создается новая программа на Я 0, а происходит последовательная перекодировка и выполнение команд.

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

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

туры, — самый примитивный, а тот, что расположен на ее вершине — самый сложный.


Большинство современных компьютеров состоит из двух и более уровней.

Существуют компьютеры с шестью уровнями (рисунок 2). Уровень 0 — это аппа- ратаппаратное обеспечение машины. Электронные схемы на уровне 1 выполняют машинно-зависимые программы. Ради полноты нужно упомянуть о существова- нии еще одного уровня, который расположен ниже нулевого. Этот уровень не по- казан на рисунке 2, так как он попадает в сферу электронной техники и называет- ся уровнем физических устройств.

На самом нижнем цифровом логическом уровне, объекты называются вентилями. Хотя вентили состоят из аналоговых компонентов, таких как транзисторы, они мо- гут быть точно смоделированы как цифровые устройства. У каждого вентиля есть один или несколько цифровых входов (сигналов, представляющих 0 или 1). Вен- тиль вычисляет простые функции этих сигналов, такие как И или ИЛИ. Каждый вентиль формируется из нескольких транзисторов. Несколько вентилей формиру- ют 1 бит памяти, который может содержать 0 или 1.


Биты памяти, объединенные в группы, например, по 16, 32 или 64, формируют ре- гистры. Каждый регистр может содержать одно двоичное число до определенного предела. Из вентилей также может состоять сам компьютер.

Следующий уровень называется уровнем микроархитектуры. На этом уровне находятся совокупности 8 или 32 регистров, которые формируют локальную па- мять и схему, называемую АЛУ (арифметико-логическое устройство). АЛУ вы- полняет простые арифметические операции. Регистры вместе с АЛУ формируют тракт данных, по которому поступают данные. Тракт данных работает следующим образом. Выбирается один или два регистра, АЛУ производит над ними какую- либо операцию, например сложения, после чего результат вновь помещается в один из этих регистров.

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

На компьютерах, где тракт данных контролируется программным обеспечением, микропрограмма — это интерпретатор для команд на уровне 2. Микропрограм- ма вызывает команды из памяти и выполняет их одну за другой, используя при этом тракт данных. Например, при выполнении команды ADD она вызывается из памяти, ее операнды помещаются в регистры, АЛУ вычисляет сумму, а затем ре-

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

Если производитель поставляет два интерпретатора для одной машины, он должен издать два руководства по машинному языку, отдельно для каждого интерпрета- тора.

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

У этого уровня есть некоторые дополнительные особенности: новый набор ко- манд, другая организация памяти, способность выполнять две и более программы одновременно и некоторые другие. При построении уровня 3 возможно больше вариантов, чем при построении уровней 1 и 2.

Новые средства, появившиеся на уровне 3, выполняются интерпретатором, кото- рый работает на втором уровне. Этот интерпретатор был когда-то назван операци- онной системой. Команды уровня 3, идентичные командам уровня 2, выполняют- ся микропрограммой или аппаратным обеспечением, но не операционной систе- мой. Другими словами, одна часть команд уровня 3 интерпретируется операцион- ной системой, а другая часть — микропрограммой. Вот почему этот уровень счи- тается гибридным.

Между уровнями 3 и 4 есть существенная разница. Нижние три уровня задуманы не для того, чтобы с ними работал обычный программист. Они изначально ориен- тированы на интерпретаторы и трансляторы, поддерживающие более высокие уровни. Эти трансляторы и интерпретаторы составляются так называемыми сис- темными программистами, которые специализируются на разработке новых вир- туальных машин. Уровни с четвертого и выше предназначены для прикладных программистов, решающих конкретные задачи.

Еще одно изменение, появившееся на уровне 4, — механизм поддержки более вы- соких уровней. Уровни 2 и 3 обычно интерпретируются, а уровни 4, 5 и выше обычно, хотя и не всегда, транслируются.

Другое различие между уровнями 1, 2, 3 и уровнями 4, 5 и выше — особенность языка. Машинные языки уровней 1, 2 и 3 — цифровые. Программы, написанные

на этих языках, состоят из длинных рядов цифр, которые воспринимаются компь- ютерами, но малопонятны для людей. Начиная с уровня 4, языки содержат слова и сокращения, понятные человеку.

Уровень 4 представляет собой символическую форму одного из языков более низ- кого уровня. На этом уровне можно писать программы в приемлемой для человека форме. Эти программы сначала транслируются на язык уровня 1, 2 или 3, а затем интерпретируются соответствующей виртуальной или фактически существующей машиной. Программа, которая выполняет трансляцию, называется ассемблером.

Уровень 5 обычно состоит из языков, разработанных для прикладных программи- стов. Такие языки называются языками высокого уровня. Существуют сотни язы- ков высокого уровня. Наиболее известные среди них — С, C++, Java, LISP и Prolog. Программы, написанные на этих языках, обычно транслируются на уро- вень 3 или 4. Трансляторы, которые обрабатывают эти программы, называются компиляторами. Иногда также имеет место интерпретация.

Например, программы на языке Java сначала транслируются на язык, напоми-

нающий ISA и называемый байт-кодом Java, который затем интерпретируется.

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

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

Многоуровневая компьютерная
организация
Цифровой компьютер (ЭВМ) – машина, которая может
решать задачи, исполняя данные ей команды.
Программа для ЭВМ – последовательность команд,
описывающих решение задачи.
Программа перед исполнением должна быть превращена
в последовательность простых команд, например:
• + сложить два числа;
• + проверить, не является ли число нулем;
• + скопировать блок данных из одной части памяти
компьютера в другую.

Многоуровневая компьютерная
организация
Машинный язык – минимальный набор
примитивных команд, реализуемых компьютером.
От состава машинного языка зависит назначение и
решаемые задачи
• сделать машинные команды проще = упростить
разработку и снизить затраты на электронику.
• большинство машинных языков крайне
примитивны = писать на них и трудно, и
утомительно.

Многоуровневая компьютерная
организация
Многоуровневая компьютерная организация –
построению ряда уровней абстракций, каждая из
которых надстраивается над абстракцией более
низкого уровня.
Цель: преодолеть сложности и сделать процесс
проектирования систематичным и
организованным.

Языки, уровни и виртуальные машины
Чтобы сделать взаимодействие с компьютером проще для
человека, формируется новый набор команд, более удобный, чем
встроенные машинные команды, = язык Я1, а машинный язык = Я0
• Компьютер может исполнять только программы, написанные на
машинном языке Я0.
Два способа решения проблемы борьбы со сложностью отличаются
тем, каким образом компьютер будет исполнять программы,
написанные на языке Я1.
Первый способ исполнения программы, написанной на языке Я1,
подразумевает замену каждой команды Я1 эквивалентным
набором команд на языке Я0 – трансляция.

Языки, уровни и виртуальные машины
Второй способ создание на языке Я0 программы, получающей в
качестве входных данных программы, написанные на языке Я1.
Каждая команда языка Я1 обрабатывается поочередно, и
исполняется эквивалентный ей набор команд языка Я0.
• не требует составления новой программы на Я0 – интерпретация,
а программа, которая осуществляет интерпретацию, называется
интерпретатором.
Гораздо проще представить существование гипотетического
компьютера или виртуальной машины (М1), для которой
машинным языком является язык Я1.
Можно писать программы для виртуальных машин так, как будто
эти машины реально существуют

Языки, уровни и виртуальные машины
• Трансляция и интерпретация целесообразны лишь в том
случае, если языки Я0 и Я1 не слишком отличаются друг
от друга. Язык Я1 хотя и лучше, чем Я0, но все же далек
от идеала.
• Решение проблемы – создание еще одного набора
команд, которые в большей степени ориентированы на
человека и в меньшей степени на компьютер, чем Я1.
• Этот набор команд формирует язык Я2, а виртуальная
машина – М2. Программы могут либо транслироваться
на язык Я1, либо исполняться интерпретатором,
написанным на языке Я1.

Языки, уровни и виртуальные машины
• Изобретение ряда языков, каждый из которых более удобен для
человека, чем предыдущий, может продолжаться бесконечно.
• Язык, находящийся в самом низу иерархической структуры –
самый примитивный, а тот, что расположен на ее вершине –
самый сложный.
• Компьютер, у которого машинным языком был бы C или C++,
оказался бы слишком сложным, но в принципе его можно
разработать – такое решение неэффективно по сравнению с
другими.
• Технология должна быть не только осуществимой, но и
рациональной.
• Компьютер с n уровнями можно рассматривать как n разных
виртуальных машин, у каждой из которых есть свой машинный
язык.

Читайте также: