Многоуровневая организация вычислительных машин

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

Достоинства такого представления вычислительных машин:

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

Понятие семантического разрыва между уровнями

Преобразование операторов языков высокого уровня в машинный код или в микрокоманды требует от транслятора, во-первых, умения распознать операторы и команды различных уровней и, во-вторых, для любого оператора языка высокого уровня генерировать десятки или сотни команд низкого уровня. Это приводит к усложнению транслятора, увеличению трудоемкости его разработки, снижению производительности генерируемых программ. Наличие этих проблем называют семантическим разрывом между уровнями. Основным способом его преодоления является специализация машин, при которой операторы проблемно-ориентированных языков могут непосредственно выполняться аппаратными средствами машины и не требовать трансляции. Примеры: аппаратная реализация графических преобразований; аппаратная реализация операций с векторами и матрицами.

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

Основой функционирования любой вычислительной машины является ее способность выполнять заданные действия. Аппаратные средства любой вычислительной машины способны выполнять только ограниченный набор сравнительно простых команд. Эти примитивные команды составляют так называемый машинный язык машины. Говоря о сложности аппаратуры компьютера, машинные команды целесообразно делать как можно проще, но примитивность большинства машинных команд делает их использование неудобным и трудным. Для эффективной работы человека с компьютером разработчики вводят другой набор команд, более удобный для человеческого общения (языки более высокого уровня).

Появляются новые языки программирования еще более высокого уровня, и каждый такой язык использует своего предшественника как основу, поэтому вычислительную машину рассмотрим в виде ряда многоуровневой машины, структура которой изображена на рис. 1.1. Между языками программирования и существующей виртуальной машиной существует тесная связь. Язык, находящийся в самом низу иерархической структуры компьютера, является примитивным, а тот, что расположен на ее вершине, — самым сложным. Большинство современных вычислительных машин включают 6—7 уровней виртуализации. Нижние уровни, начиная с машинного, более консервативны к изменениям.

Виртуальная машина Мп с машинным языком Я

Уровень п

Уровень 2

Уровень 1

Уровень О

Структура многоуровневой вычислительной машины

Рис. 1.1. Структура многоуровневой вычислительной машины

Программы на языке Мп либо интерпретируются программой-интерпретатором, работающей на машине более низкого уровня, либо транслируются на машинный язык более низкого уровня

Программы на языке М2 либо интерпретируются программой-интерпретатором, работающей на машине более низкого уровня, либо транслируются на машинный язык более низкого уровня

Программы на языке М1 либо интерпретируются программой-интерпретатором, работающей на машине более низкого уровня, либо транслируются на машинный язык более низкого уровня

Программы на языке М0 либо интерпретируются программой-интерпретатором, работающей на машине более низкого уровня, либо транслируются на машинный язык более низкого уровня

Компьютер с п уровнями можно рассматривать как п разных виртуальных машин, у каждой из которых есть свой машинный язык. Термины «уровень» и «виртуальная машина» мы будем использовать как синонимы. Только программы, написанные на Я0, могут выполняться компьютером без трансляции или интерпретации. Программы, написанные на Яь Я2,..., Ял, должны проходить через интерпретатор более низкого уровня или транслироваться на язык, соответствующий более низкому уровню.

Современные многоуровневые вычислительные машины

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

Уровень 5

Уровень 4

Уровень 3

Уровень 2

Уровень 1

Уровень О

Структура шестиуровневого компьютера

Рис. 1.2. Структура шестиуровневого компьютера

Способ поддержки каждого уровня указан под ним, в скобках дано название соответствующего программного обеспечения.

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

Уровень 0: цифровой логический уровень. Цифровой логический уровень представляет собой аппаратное обеспечение компьютера. Объектами цифрового логического уровня являются цифровые логические устройства. Для описания того, как функционируют цифровые логические устройства, используется математический аппарат алгебры логики, в которой используются логический ноль и логическая единица.

Основу для проектирования сложных цифровых устройств составляют функции. Базовые логические элементы — это схемы, содержащие электронные ключи (вентили) и выполняющие основные логические операции. Сложные логические функции можно выразить через совокупность конечного числа базисных логических функций, таких как «НЕ», «И», «ИЛИ».

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

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

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

Уровень 1: уровень микроархитектуры. В компьютерной инженерии микроархитектура (англ, microarchitecture; иногда сокращается до march или uarch), также называемая организацией компьютера, — это способ, которым данная архитектура набора команд (ISA, АН К) реализована в процессоре. Каждая АН К может быть реализована с помощью различных микроархитектур. Реализации могут варьироваться в зависимости от целей конкретной разработки или в результате технологических сдвигов. Архитектура компьютера является комбинацией микроархитектуры, микрокода и АН К.

На этом уровне в обработке команд участвует арифметико-логическое устройство (АЛУ). АЛУ состоит из регистров, сумматора с соответствующими логическими схемами и элемента управления выполняемым процессом. Оперативная память организована в виде последовательностей, которые группируются в машинные слова. Арифметико-логическое устройство работает в соответствии с сообщаемыми ему именами (кодами) операций, которые при пересылке данных нужно выполнить над переменными, помещаемыми в регистры. Над какими кодами производится операция, куда помещается ее результат — определяется выполняемой командой. Примерами обработки могут служить логические операции («И», «ИЛИ», «Исключающего ИЛИ» и т.д.), т.е. побитные операции над операндами, а также арифметические операции (сложение, вычитание, умножение, деление и т.д.). Команды содержат от одного до трех операндов.

В операционном устройстве (АЛУ) реализуется заданная последовательность микрокоманд (команд), в микропрограммном устройстве управления (УУ) задается последовательность микрокоманд (команд).

Различают два вида микрокоманд: внешние — такие микрокоманды, которые поступают в АЛУ от внешних источников и вызывают в нем преобразование информации, и внутренние — те, которые генерируются в АЛУ и оказывают влияние на микропрограммное устройство, изменяя, таким образом, нормальный порядок следования команд.

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

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

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

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

Уровень 2: уровень архитектуры набора команд. Архитектура набора команд (англ, instruction set architecture, ISA) — часть архитектуры компьютера, определяющая программируемую часть ядра микропроцессора. На этом уровне определяются реализованные в микропроцессоре конкретного типа:

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

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

Устройства исполнения также являются ключевыми для микроархитектуры. Они включают арифметико-логические устройства, устройства обработки чисел с плавающей точкой, устройства выборки и хранения, прогнозирование ветвления, параллелизм на уровне данных (5/М/)). Эти блоки производят операции или вычисления процессора. Выбор числа блоков исполнения, их задержек, пропускной способности и способа соединения памяти с системой также является микроархитектурным решением.

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

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

Уровень 3: уровень операционной системы. Третий уровень операционной системы является гибридным. Большинство команд в его языке есть как на третьем уровне, так и на втором — уровне архитектуры набора команд (команды, имеющиеся на одном из уровней, вполне могут быть представлены и на других уровнях). У этого уровня есть некоторые дополнительные особенности: новый набор команд; другая организация памяти; способность выполнять две и более программы одновременно и некоторые другие. При построении уровня 3 возможно больше вариантов, чем при построении уровней 1 и 2.

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

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

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

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

Уровень 4: уровень ассемблера. Уровень 4 представляет собой символическую форму одного из языков более низкого уровня — ассемблера. Ассемблер (от англ, assembler — сборщик) — транслятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.

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

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

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

К прикладному программному обеспечению относятся компьютерные программы, написанные для пользователей или самими пользователями для задания компьютеру конкретной работы. Программы обработки заказов или создания списков рассылки — пример прикладного программного обеспечения. Программистов, которые пишут прикладное программное обеспечение, называют прикладными программистами.

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

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

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

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

 
< Пред   СОДЕРЖАНИЕ     След >