Уровень архитектуры современных компьютеров который поддерживает машинные команды каждого компьютера

Обновлено: 04.07.2024

Человек пишет команды, которые в совокупности формируют язык, называемый условно Я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.

Уровень 2 мы будем называть уровнем архитектуры набора команд. Каждый производитель публикует руководство для компьютеров, которые он продает, под названием «Руководство по машинному языку X», «Принципы работы компьюте- ра У» и т. п. Подобное руководство содержит информацию именно об этом уров- не. Описываемый в нем набор машинных команд в действительности выполняется микропрограммой-интерпретатором или аппаратным обеспечением.

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

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

У этого уровня есть некоторые дополнительные особенности: новый набор ко- манд, другая организация памяти, способность выполнять две и более программы одновременно и некоторые другие. При построении уровня 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.1. Между языками программирования и существующей виртуальной машиной существует тесная связь. Язык, находящийся в самом низу иерархической структуры компьютера, является примитивным, а тот, что расположен на ее вершине, — самым сложным. Большинство современных вычислительных машин включают 6—7 уровней виртуализации. Нижние уровни, начиная с машинного, более консервативны к изменениям.

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


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

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

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

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

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

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

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

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

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

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

Рис. 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 состоит из интерпретатора для конкретной прикладной области, например символической логики. Он предусматривает данные и операции для решения задач в этой области, выраженные при помощи специальной терминологии.

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

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

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

Многоуровневая структура компьютера: языки, уровни и виртуальные машины

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

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

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

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

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

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

Современные многоуровневые компьютеры

Современные компьютеры можно представить как структуру, состоящую из 6 уровней:

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

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

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

Уровень 0: Цифровой логический уровень

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

Уровень 1: уровень Микроархитектуры

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

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

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

Уровень 2: уровень архитектуры набора команд

Уровень 2 мы будем называть уровнем архитектуры набора команд. Каждый производитель публикует руководство для компьютеров, которые он продает, под названием «Руководство по машинному языку X», «Принципы работы компьютера У» и т. п. Подобное руководство содержит информацию именно об этом уровне. Описываемый в нем набор машинных команд в действительности выполняется микропрограммой-интерпретатором или аппаратным обеспечением. Если производитель поставляет два интерпретатора для одной машины, он должен издать два руководства по машинному языку, отдельно для каждого интерпретатора.

Уровень 3: уровень операционной системы

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

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

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

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

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

Уровень 4: уровень Ассемблера

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

Уровень 5: уровень языка прикладных программистов

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

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

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

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

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

Структура организации вычислительной системы (ВС):

Прикладные программы
Системы программирования
Управление логическими устройствами
Управление физическими устройствами
Аппаратные средства

Основой функционирования любой ЭВМ является ее способность выполнять заданные действия. Аппаратные средства любой ЭВМ способны выполнять только ограниченный набор сравнительно простых команд. Эти примитивные команды составляют так называемый машинный язык машины. Говоря о сложности аппаратуры компьютера, машинные команды целесообразно делать как можно проще, но примитивность большинства машинных команд делают их использование неудобным и трудным. Вследствие чего разработчики вводят другой набор команд более удобный для человеческого. Большинство современных ЭВМ включают 6-7 уровней виртуализации. Нижние уровни, начиная с машинного более консервативны к изменениям. Многие коммерческие ЭВМ принципиально могут не иметь уровня нанопрограммирования, но и даже микропрограммирования (по крайней мере, на уровне пользователя). В современных ЭВМ машинные команды, как правило, интерпретируются с помощью микропрограмм. Уровень ОС обычно является смешанным уровнем, т.к. большинство супервизорных команд являются командами машинного уровня. В состав уровня ОС дополнительно включаются команды, которые фактически являются некоторыми типовыми программами машинного уровня (команды ввода-вывода, переключения между программами). Во многих ЭВМ были варианты, когда отдельные программы ОС непосредственно интерпретируются микропрограммами. В современных ЭВМ прослеживается тенденция все боле тесной связи уровня ОС с микропрограммным уровнем. Можно также найти массу команд уровня ОС, реализованных, на уровне ассемблирования. Простые пользователи, как правило, ограничиваются уровнем изучения начиная с машинного. Нижние уровни необходимы для разработчиков.

Прикладное программное обеспечение необходимо для решения задач из конкретных областей.

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

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



Прикладные программы
Системы программирования
Управление логическими устройствами
Управление физическими устройствами
Аппаратные средства

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

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

Следующий уровень - это уровень, который ориентирован на сглаживание аппаратных особенностей. Он целиком и полностью предназначен для создания более комфортных условий в работе пользователя. Если предположим мы работаем с устройством внешней памяти «жесткий магнитный диск», то параметрами, которые характерны для конкретного диска, могут быть, предположим, сколько считывающих и записывающих головок имеет это устройство, сколько поверхностей, на которых находится хранящий информацию слой. И, соответственно, набор команд управления этого устройства ориентирован на эти параметры. И конечно, вам, как программистам, не интересно работать в терминах: считать бит со второй поверхности десятого цилиндра такой-то дорожки. Это тяжело и неинтересно. Этот уровень логических ресурсов создает некоторое обобщенное устройство одно на всю систему, и пользователь работает в терминах этого обобщенного устройства. А уже программы логического уровня разбираются к какой из программ управления физическими устройствами надо обратиться чтобы запрос пользователя к логическому устройству правильно оттранслировать к конкретному физическому устройству.




Обычно каждый компьютер оснащен операционной системой основное назначение кото­рой - позволить пользователю управлять работой компьютера: вызывать для выполнения конкретные программы, обеспечивать средства для сохранения данных (каталог), иметь доступ к информации на диске. Прикладная программа служит для решения задач, которые возникают в предметной области. При этом компьютер используется как инструмент и основное внимание уделяется реализации алгоритма, решающего поставленную проблему, а не функционированию ЭВМ. В то время как системные программы предназначены для обеспечения работы собственно компьютера. Операционной системой или системным программным обеспечением можно назвать комплекс программ, который является надстройкой над аппаратными средствами и предназначены для удобства общения пользователя с ЭВМ, предоставления сервисных услуг программам, и который управляет аппаратными и программными ресурсами ЭВМ с целью повышения надежности работы оборудования и для большей эффективности их использования. Вследствие этого они обычно тесно связаны со структурой той машины, на которой они работают, то есть они являются машиннозависимыми компонентами программного обеспечения компьютера. Например, ассемблеры и компиляторы при создании исполняемого кода из текста программы должны учитывать аппаратные характеристики машины, такие как, машинные команды, способы адресации операндов, наличие регистров и возможности их использования и т.д. Операционные системы непосредственно отвечают за управление всеми ресурсами вычислительной системы. С другой стороны, системное программное обеспечения имеет ряд аспектов непосредственно не связанных с типом вычислительной системы, которую они поддерживают. Так, общая схема и алгоритмы их работы в основном не различаются для большинства ЭВМ. Итак, основные функции ОС: - обеспечение интерфейса с пользователем, поддержка операционного окружения пользовательских задач, распределение заданий и управление аппаратными ресурсами.

Определяя ЭВМ как цифровую вычислительную машину дискретного действия (полное имя ее ЭЦВМ) следует помнить, что буква Э служила для исключения от рассмотрения класса ЦВМ, сконструированных на механических (машина Бэббиджа) и электромеханических (Марк-1) элементах. Только совокупность электронных элементов, выполненных на радиолампах и транзисторах, дает право на букву "Э". Усложнение периферии ЭВМ и появление многопроцессорных систем породили осторожный термин "вычислительные системы", "платформы", "вычислительные среды" и т.д. Вероятно, в настоящее время, наиболее полное интуитивное понятие ЭВМ - это цифровая вычислительная машина, выполненная как единое устройство. С другой стороны, в понятие ЭВМ можно включить и специализированный микропроцессор управления "рукой" робота, и персональный компьютер, и суперкомпьютер, который, как элемент сети может именоваться также мэйнфреймом. Общим при этом является функциональное назначение ЭВМ - обеспечение потребностей прикладной области. На современном компьютерном рынке наблюдается большое разнообразие различных типов компьютеров. Поэтому возникает вопрос — как оценить возможности конкретной модели компьютера, и каковы его отличительные особенности от компьютеров других типов. Рассмотрения для этого одной лишь только структурной схемы компьютера недостаточно, так как она мало, чем различается у разных машин: у всех компьютеров есть оперативная память, процессор, внешние устройства. Различными являются способы, средства и используемые ресурсы, с помощью которых компьютер функционирует как единый механизм. Чтобы собрать воедино все понятия, характеризующие компьютер с точки зрения его функциональных программно-управляемых свойств, существует специальный термин — архитектура ЭВМ. Впервые понятие архитектура ЭВМ стало упоминаться с появлением машин 3-го поколения для их сравнительной оценки. Архитектурой ЭВМ принято считать совокупность принципов системной, функциональной, логической и физической организации аппаратных и программных средств ЭВМ, в частности и способ организации работы процессора и его система команд, организация памяти, системы адресации, и ввода – вывода данных. Архитектура определяет принципы действия, информационные связи и взаимное соединение основных логических узлов компьютера: процессора, оперативного ЗУ, внешних ЗУ и периферийных устройств. Общность архитектуры разных компьютеров обеспечивает их совместимость с точки зрения пользователя.

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

Двумя основными архитектурами набора команд, используемыми компьютерной промышленностью на современном этапе развития вычислительной техники являются архитектуры CISC и RISC. Основоположником CISC-архитектуры можно считать компанию IBM с ее базовой архитектурой /360, ядро которой используется с1964 года и дошло до наших дней, например, в таких современных мейнфреймах как IBM ES/9000.

Лидером в разработке микропроцессоров c полным набором команд (CISC - Complete Instruction Set Computer) считается компания Intel со своей серией x86 и Pentium. Эта архитектура является практическим стандартом для рынка микрокомпьютеров. Для CISC-процессоров характерно: сравнительно небольшое число регистров общего назначения; большое количество машинных команд, некоторые из которых нагружены семантически аналогично операторам высокоуровневых языков программирования и выполняются за много тактов; большое количество методов адресации; большое количество форматов команд различной разрядности; преобладание двухадресного формата команд; наличие команд обработки типа регистр-память.

Основой архитектуры современных рабочих станций и серверов является архитектура компьютера с сокращенным набором команд (RISC - Reduced Instruction Set Computer). Зачатки этой архитектуры уходят своими корнями к компьютерам CDC6600, разработчики которых (Торнтон, Крэй и др.) осознали важность упрощения набора команд для построения быстрых вычислительных машин. Эту традицию упрощения архитектуры С. Крэй с успехом применил при создании широко известной серии суперкомпьютеров компании Cray Research. Однако окончательно понятие RISC в современном его понимании сформировалось на базе трех исследовательских проектов компьютеров: процессора 801 компании IBM, процессора RISC университета Беркли и процессора MIPS Стенфордского университета.

Разработка экспериментального проекта компании IBM началась еще в конце 70-х годов, но его результаты никогда не публиковались и компьютер на его основе в промышленных масштабах не изготавливался. В 1980 году Д.Паттерсон со своими коллегами из Беркли начали свой проект и изготовили две машины, которые получили названия RISC-I и RISC-II. Главными идеями этих машин было отделение медленной памяти от высокоскоростных регистров и использование регистровых окон. В 1981году Дж.Хеннесси со своими коллегами опубликовал описание стенфордской машины MIPS, основным аспектом разработки которой была эффективная реализация конвейерной обработки посредством тщательного планирования компилятором его загрузки.

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

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

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

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

Следует отметить, что в последних разработках компании Intel (имеется в виду Pentium P54C и процессор следующего поколения P6), а также ее последователей-конкурентов (AMD R5, Cyrix M1, NexGen Nx586 и др.) широко используются идеи, реализованные в RISC-микропроцессорах, так что многие различия между CISC и RISC стираются. Однако сложность архитектуры и системы команд x86 остается и является главным фактором, ограничивающим производительность процессоров на ее основе.

Наиболее распространены следующие архитектурные решения.

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

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

Периферийные устройства (принтер и др.) подключаются к аппаратуре компьютера через специальные контроллеры — устройства управления периферийными устройствами.

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