- •Глава 2. Многоуровневая организация компьютера. Архитектура и структура компьютера
- •2.1 Сущность многоуровневой организации компьютера
- •2.2. Современные многоуровневые компьютеры
- •2.3. Развитие многоуровневых компьютеров
- •2.4. Аппаратное и программное обеспечение логически эквивалентны
- •2.5. Изобретение микропрограммирования
- •2.6. Изобретение операционной системы
- •2.7. Смещение функциональности на уровень микрокода
- •2.8. О терминах "архитектура и структура" компьютера
- •2.9. Методы исследования сложных систем
- •Контрольные вопросы
Глава 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, … Яп, должны проходить через интерпретатор более низкого уровня или транслироваться на язык, соответствующий более низкому уровню.
Человеку, который пишет программы для виртуального компьютера Кп, не обязательно знать о трансляторах и интерпретаторах более низких уровней. Компьютер выполнит эти программы, и не важно, будут они поэтапно выполняться интерпретатором или же их обработает сам компьютер. В обоих случаях результат один и тот же — это выполненная программа.
Большинству программистов, использующих компьютер уровня п, интересен только самый верхний уровень, который меньше всего сходен с машинным языком. Однако те, кто хочет понять, как в действительности работает компьютер, должны изучить все уровни. Также должны быть знакомы со всеми уровнями разработчики новых компьютеров или новых уровней (то есть новых виртуальных компьютеров).
