Глава 2. Многоуровневая организация компьютера. Архитектура и структура компьютера
Компьютер — это машина, которая может решать задачи, выполняя заданные ей команды. Последовательность команд, описывающих решение определенной задачи, и данные называются программой.
Электронные схемы каждого компьютера могут распознавать и выполнять ограниченный набор простых команд. Все программы перед выполнением должны быть превращены в последовательность таких команд.
Эти примитивные команды в совокупности составляют язык, на котором люди могут общаться с компьютером. Такой язык называется машинным. Разработчик при создании нового компьютера должен решить, какие команды включить в машинный язык этого компьютера. Это зависит от назначения компьютера и от задач, которые он должен решать. Обычно стараются сделать машинные команды как можно проще, чтобы избежать сложностей при разработке компьютера и снизить затраты на необходимую электронику. Большинство машинных языков крайне примитивны, из-за чего писать на них и трудно, и утомительно.
Это простое наблюдение с течением времени привело к построению ряда уровней абстракций, каждая из которых надстраивается над абстракцией более низкого уровня. Именно таким образом можно преодолеть сложности при общении с компьютером. Такой подход называют многоуровневой организацией компьютерна.
2.1 Сущность многоуровневой организации компьютера
Существует огромная разница между тем, что удобно людям, и тем, что могут компьютеры. Люди хотят сделать X, но компьютеры могут сделать только У. Из-за этого возникает проблема.
Вышеупомянутую проблему можно решить двумя способами. Оба способа подразумевают разработку новых команд, более удобных для человека, чем встроенные машинные команды. Эти новые команды в совокупности формируют язык более высокого уровня Я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 хотя и лучше, чем Я0, но все же далек от идеала. Возможно, это несколько обескураживает в свете первоначальной цели создания языка Я1 — освободить программиста от бремени написания программ на языке, понятном компьютеру, но малоприспособленном для человека. Однако ситуация не так безнадежна.
Очевидное решение проблемы — создание еще одного набора команд, который в большей степени, чем язык Я1 ориентирован на человека и в меньшей степени на компьютер. Этот третий набор команд также формирует язык, который можно назвать назвать Я2, а соответствующый виртуальный компьютер — К2. Человек может писать программы на языке Я2, как будто виртуальный компьютер для работы с машинным языком Я2 действительно существует. Такие программы могут либо транслироваться на язык Я1, либо выполняться интерпретатором, написанным на языке Я1.
Изобретение целого ряда языков, каждый из которых более удобен для человека, чем предыдущий, может продолжаться до тех пор, пока не будет разработан подходящий язык. Каждый такой язык использует своего предшественника как основу, поэтому можно рассматривать компьютер в виде ряда уровней, изображенных в таблице 2.1.
Таблица 2.1.
Уровень n | Виртуальный компьютер Кn с машинным языком Яn | Программы на языке Яn либо интерпретируются программой –интерпретатором, работающей на компьютере более низкого уровня, либо транслируются на машинный язык компьютера более низкого уровня |
. . . | ||
Уровень 3 | Виртуальный компьютер К3 с машинным языком Я3 | Программы на языке Я3 либо интерпретируются программой –интерпретатором, работающей на компьютере более низкого уровня К2, либо транслируются на машинный язык компьютера более низкого уровня Я2 уровня К2 |
Уровень 2 | Виртуальный компьютер К2 с машинным языком Я2 | Программы на языке Я2либо интерпретируются программами –интерпретаторами, работающими на компьютерах К1 или К0, либо транслируются на машинные языки более низкого уровня Я1 или Я0 |
Уровень 1 | Виртуальный компьютер К1 с машинным языком Я1 | Программы на языке Я1 либо интерпретируются программой –интерпретатором, работающей на компьютере более низкого уровня К0, либо транслируются на машинный язык более низкого уровня Я0 |
Уровень 0 | Виртуальный компьютер К0 с машинным языком Я0 | Программы на языке К0 непосредственно выполняются электронными схемами |
Язык, находящийся в самом низу иерархической структуры, — самый примитивный, а тот, что расположен на ее вершине — самый сложный.
Между языком и виртуальным компьютером существует важная зависимость. Каждый компьютер поддерживает какой-то определенный машинный язык, состоящий из всех команд, который этот компьютер может выполнять. В сущности, компьютер определяет язык. Сходным образом язык определяет компьютер, который может выполнять все программы, написанные на этом языке. Компьютер, определяемый тем или иным языком, очень сложно и дорого конструировать из электронных схем, однако представить себе такой компьютер можно. Компьютер для работы с машинным языком С или С++ был бы слишком сложным, но в принципе его можно разработать, учитывая высокий уровень современных технологий. Однако существуют веские причины не создавать такой компьютер — это крайне неэффективное, по сравнению с другими, решение. Действительно, технология должна быть не только осуществимой, но и рациональной.
Компьютер с п уровнями можно рассматривать как п разных виртуальных компьютеров, у каждого из которых есть свой машинный язык. Термины «уровень» и «виртуальный компьютер» будут использоваться как синонимы. Только программы, написанные на языке Я0, могут выполняться компьютером без трансляции или интерпретации. Программы, написанные на языках Я1, Я2, … Яп, должны проходить через интерпретатор более низкого уровня или транслироваться на язык, соответствующий более низкому уровню.
Человеку, который пишет программы для виртуального компьютера Кп, не обязательно знать о трансляторах и интерпретаторах более низких уровней. Компьютер выполнит эти программы, и не важно, будут они поэтапно выполняться интерпретатором или же их обработает сам компьютер. В обоих случаях результат один и тот же — это выполненная программа.
Большинству программистов, использующих компьютер уровня п, интересен только самый верхний уровень, который меньше всего сходен с машинным языком. Однако те, кто хочет понять, как в действительности работает компьютер, должны изучить все уровни. Также должны быть знакомы со всеми уровнями разработчики новых компьютеров или новых уровней (то есть новых виртуальных компьютеров).
2.2. Современные многоуровневые компьютеры
Большинство современных компьютеров состоит из двух и более уровней. Существуют компьютеры даже с шестью уровнями (таблица 2.2).
Таблица 2.2. Шестиуровневый компьютер. Способ поддержки каждого уровня показан в строке под ним, в скобках дано название соответствующего программного обеспечения.
Таблица 2.2.
Уровень 5 | Уровень языка прикладных программистов |
Трансляция (компилятор) | |
Уровень 4 | Уровень ассемблера |
Трансляция (ассемблер) | |
Уровень 3 | Уровень операционной системы |
Частичная интерпретация (операционная система) | |
Уровень 2 | Уровень архитектуры набора команд |
Интерпретация (микропрограмма) или непосредственное выполнение | |
Уровень 1 | Уровень структуры |
Аппаратное обеспечение | |
Уровень 0 | Цифровой логический уровень |
Ради полноты нужно упомянуть о существовании еще одного уровня, который расположен ниже нулевого. Этот уровень не показан в таблице 2.2, так как он попадает в сферу электронной техники и, следовательно, не рассматривается в этом учебном пособии. Он называется уровнем физических устройств. На этом уровне находятся транзисторы, которые для разработчиков компьютеров являются примитивами. Объяснить, как работают транзисторы, — задача физики.
Уровень 0 — это аппаратное обеспечение компьютера. На этом уровне объекты называются вентилями. Хотя вентили состоят из аналоговых компонентов, таких как транзисторы, они могут быть точно смоделированы как цифровые устройства. У каждого вентиля есть один или несколько цифровых входов (сигналов, представляющих 0 или 1). Вентиль выполняет простые функции этих сигналов, такие как И или ИЛИ. Каждый вентиль формируется из нескольких транзисторов. Несколько вентилей формируют 1 разряд (бит) памяти, который может содержать 0 или 1. Разряды памяти, объединенные в группы, например, по 16, 32 или 64, формируют регистры. Каждый регистр может содержать одно двоичное число до определенного предела. Из вентилей также может состоять сам компьютер.
Следующий уровень называется уровнем структуры. Электронные схемы на уровне 1 выполняют машинно-зависимые программы. На этом уровне находятся совокупности регистров, которые формируют локальную память и схемы, называемые арифметико-логическими устройствами (АЛУ). АЛУ выполняют арифметические и другие операции. Регистры вместе с АЛУ формируют тракт данных, по которому поступают данные. Тракт данных работает следующим образом. Выбирается один или два регистра, АЛУ производит над их содержимым какую-либо операцию, например сложение, после чего результат вновь помещается в один из этих регистров.
В одних компьютерах работа тракта данных контролируется особой программой, которая называется микропрограммой. В других компьютерах тракт данных контролируется аппаратными средствами.
В компьютерах, где тракт данных контролируется программным обеспечением, микропрограмма — это интерпретатор для команд на уровне 2. Микропрограмма вызывает команды из памяти и выполняет их одну за другой, используя при этом тракт данных. Например, при выполнении команды «сложение» (ADD) она вызывается из памяти, ее операнды помещаются в регистры, АЛУ вычисляет сумму, а затем результат переправляется обратно. На компьютере с аппаратным контролем тракта данных происходит такая же процедура, но при этом нет программы, интерпретирующей команды уровня 2.
Уровень 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 обычно состоит из языков, разработанных для прикладных программистов. Такие языки называются языками высокого уровня. Существует много языков высокого уровня. Некоторые из них — С, С++, Java, LISP, Prolog. Программы, написанные на этих языках, обычно транслируются на уровень 3 или 4. Трансляторы, которые обрабатывают эти программы, называются компиляторами. Отметим, что иногда также имеет место интерпретация. Например, программы на языке Java сначала транслируются на язык, называемый байт-кодом Java, который затем интерпретируется.
В некоторых случаях уровень 5 состоит из интерпретатора для конкретной прикладной области, например символической логики. Он предусматривает данные и операции для решения задач в этой области, выраженные при помощи специальной терминологии.
Таким образом, компьютер проектируется как иерархическая структура уровней, которые надстраиваются друг над другом. Каждый уровень представляет собой определенную абстракцию различных объектов и операций. Рассматривая компьютер подобным образом, можно не принимать во внимание ненужные детали и, таким образом, сделать сложный предмет более простым для понимания.
Набор типов данных, операций и характеристик каждого отдельно взятого уровня называется его архитектурой. Архитектура связана с программными аспектами. Например, сведения о том, сколько памяти можно использовать при написании программы, — часть архитектуры. Аспекты реализации (например, технология, применяемая при реализации памяти) не являются частью архитектуры. Изучая методы проектирования программных элементов компьютерной системы, изучают компьютерную архитектуру. На практике термины «компьютерная архитектура» и «компьютерная организация» употребляются как синонимы.
2.3. Развитие многоуровневых компьютеров
История развития многоуровневых компьютеров показывает как количество и природа уровней менялись с годами. Программы, написанные на машинном языке (уровень 1), могут сразу без применения интерпретаторов и трансляторов выполняться электронными схемами компьютера (уровень 0). Эти электронные схемы вместе с памятью и средствами ввода-вывода формируют аппаратное обеспечение. Аппаратное обеспечение состоит из осязаемых объектов — интегральных схем, печатных плат, кабелей, источников электропитания, модулей памяти и принтеров. Абстрактные понятия, алгоритмы и команды к аппаратному обеспечению не относятся.
Программное обеспечение, напротив, состоит из алгоритмов (подробных последовательностей команд, которые описывают, как решить задачу) и их компьютерных представлений, то есть программ. Программы могут храниться на жестком диске или других носителях, но это не так уж важно; в сущности, программное обеспечение — это набор команд, составляющих программы, а не физические носители, на которых эти программы записаны.
В самых первых компьютерах граница между аппаратным и программным обеспечением была очевидна. Со временем, однако, произошло значительное размывание этой границы, в первую очередь благодаря тому, что в процессе развития компьютеров уровни добавлялись, убирались и сливались друг с другом. В настоящее время очень сложно отделить их друг от друга.
Дата добавления: 2015-09-29; просмотров: 3219;