Э. Таненбаум - Архитектура компьютера (1127755), страница 3
Текст из файла (страница 3)
Приложения А и Б не изменились, зато появилось совершенно новое приложение В, посвященное программированию на языке ассемблера. Его можно рассматривать как миниатюрное практическое руководство по программированию с привлечением инструментальных средств, имеющихся на сопроводительном компакт-диске и на веб-сайте книги. Автор приложения  — Эверт Ваттель (Ечегг %'агге1) из Свободного университета Амстердама. У него огромный опыт обучения работе с инструментарием программирования на ассемблере, и я очень благодарен ему, что он взялся за эту задачу.
Помимо инструментов ассемблирования, на веб-сайте есть программа моделирования (графический симулятор), предусмотренная для работы с материалом главы 4. Ее разработчиком стал профессор Ричард Солтер (К1слагд 8а1гег) из колледжа Оберлин. Ему — отдельное спасибо. 1 6 Предисловие Наконец, на веб-сайте книги, расположенном по адресу Ьсср://гггин.ргепЬа!!.согп/ сапепЬапш, опубликованы все иллюстрации к книге и презентации в формате РогчегРошс для преподавателей.
После перехода по указанному адресу щелкните на ссылке Согпрапюп ЧгеЬз!Се и выберите искомую страницу в появившемся меню. Преподаватели, организующие свои университетские занятия на основе материала этой книги, могут получить в представительстве издательства Реагзоп Ег)псас!оп методическое пособие, содержащее правильные ответы на все вопросы и решения всех задач. Автор искренне благодарит всех, кто читал рукопись данной книги и высказал ценные замечания и предложения или оказал какую-либо помощь.
Большое спасибо Никитасу Александридису (Ы!!г!саз А)ехапг(г)г!!з), Шекару Боркару (ЯЬе1аг Вогйаг), Герберту Босу (НегЬегс Воз), Скотту Кеннону (Ясосс Саппоп), Дату Кармину (1)опй Сагшеап), Алану Чарльсворту (А1ап СЬаг1езчгогсЬ), Эрику Кота-Роблю (ЕПс Соса-йоЫез), Майклу Феттерману (МгсЬае! Рессеппап), Квинну Джейкобсону (Оп!пп ЯасоЬзоп), Тило Кильману (ТЬг!о Кге1шапп), Иффат Кази (1((ас Как(), Солу Леви (Бап1 1.ечу), Ахмеду Лури (АЬшег! 1.опП), Абиджит Пандя (АЪЬ!1!с Ранг(уа), Кристу Петерсену (КПзС Регегзеп), Марку Руссиновичу (Мзгк Кпзз!поч!сЬ), Рональду Шредеру (Копя!о ЯсЬгоег)ег) и Сайму Юралу (Капп ()га1).
Особая благодарность Джиму Гудману ()!гп Ооойпап) за его вклад в создание этой книги (в частности, глав 4 и 5). Идея использовать )ЧМ принадлежит именно ему. Книга значительно улучшилась благодаря его содействию. Наконец, я хотел бы поблагодарить Сюзанну за ее любовь и недюжинное терпение. Это уже 15-я книга, и мы до сих пор вместе! Спасибо Барбаре и Марвину за то, что они такие замечательные дети — теперь они знают, чем профессора зарабатывают себе на жизнь.
В 2004 году Королевская академия искусств и наук Голландии предоставила мне долгожданный статус академика, тем самым освободив меня от наименее привлекательных обязанностей университетского работника (например, от долгих и нудных совещаний ученого совета), за что я безмерно благодарен уважаемым коллегам. Эндрю С. Таненбаум От издателя перевода Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты согпрфр!Сег.согп (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение! Подробную информацию о наших книгах вы найдете на веб-сайте издательства ЬССр://»гиен.р!Сег.сот. Глава 1 Введение Цифровой компьютер — это машина, которая может решать задачи, выполняя данные ей команды. Последовательность команд, описывающих решение определенной задачи, называется программой. Электронные схемы каждого компьютера могут распознавать и выполнять ограниченный набор простых команд. Все программы перед выполнением должны быть превращены в последовательность таких команд, которые обычно не сложнее, чем, например: + сложить 2 числа; + проверить, не является ли число нулем; + скопировать блок данных из одной части памяти компьютера в другую.
Эти примитивные команды в совокупности составляют язык, на котором люди могут общаться с компьютером. Такой язык называется машинным. Разработчик при создании нового компьютера должен решить, какие команды включить в машинный язык этого компьютера. Это зависит от назначения компьютера и от задач, которые он должен решать. Обычно стараются сделать машинные команды как можно проще, чтобы избежать сложностей при разработке компьютера и снизить затраты на необхолимую электронику.
Большинство машинных языков крайне примитивны, из-за чего писать на них и трудно, и утомительно. Это простое наблюдение с течением времени привело к построению ряда уровней абстракций, каждая из которых надстраивается над абстракцией более низкого уровня. Именно таким образом можно преодолеть сложности при общении с компьютером. Мы называем этот подход многоуровневой компьютерной организацией. В следующем разделе мы поясним, что этот термин значит.
Затем мы расскажем об истории развития проблемы и положении дел в настоящий момент, а также рассмотрим некоторые важные примеры. Многоуровневая компьютерная организация Как мы уже сказали, существует огромная разница между тем, что удобно людям, и тем, что могут компьютеры. Люди хотят сделать Х, но компьютеры могут сделать только У.
Из-за этого возникает проблема. Цель данной книги — объяснить, как решить эту проблему. Языки, уровни и виртуальные машины Вышеупомянутую проблему можно решить двумя способами. Оба способа подразумевают разработку новых команд, более удобных для человека, чем встроенные 18 Глава 1. Введение машинные команды. Эти новые команды в совокупности формируют язык, который мы будем называть Я 1. Встроенные машинные команды тоже формируют язык, и мы будем называть его Я О. Компьютер может выполнять только программы, написанные на его машинном языке Я О.
Два способа решения проблемы различаются тем, каким образом компьютер будет выполнять программы, написанные на языке Я 1, — ведь в конечном итоге компьютеру доступен только машинный язык Я О. Первый способ выполнения программы, написанной на языке Я 1, подразумевает замену каждой команды эквивалентным набором команд на языке Я О. В этом случае компьютер выполняет новую программу, написанную на языке Я О, вместо старой программы, написанной на Я 1.
Эта технология называется трансляцией. Второй способ означает создание программы на языке Я О, получающей в качестве входных данных программы, написанные на языке Я 1. При этом каждая команда языка Я 1 обрабатывается поочередно, после чего сразу выполняется эквивалентный ей набор команд языка Я О. Эта технология не требует составления новой программы на Я О. Она называется интерпретацией, а программа, которая осуществляет интерпретацию, называется интерпретатором. Между трансляцией и интерпретацией много общего. В обоих подходах компьютер в конечном итоге выполняет набор команд на языке Я О, эквивалентных командам Я 1. Различие лишь в том, что при трансляции вся программа Я 1 переделывается в программу Я О, программа Я 1 отбрасывается, а новая программа на Я О загружается в память компьютера и затем выполняется. При интерпретации каждая команда программы на Я 1 перекодируется в Я О и сразу же выполняется.
В отличие от трансляции, здесь не создается новая программа на Я О, а происходит последовательная перекодировка и выполнение команд. С точки зрения интерпретатора, программа на Я 1 есть не что иное, как «сырые» входные данные. Оба подхода широко используются как вместе, так и по отдельности. Впрочем, чем мыслить категориями трансляции и интерпретации, гораздо проще представить себе сушествование гипотетического компьютера или виртуальной машины, для которой машинным языком является язык Я 1. Назовем такую виртуальную машину М 1, а виртуальную машину для работы с языком Я О— М О. Если бы такую машину М 1 можно было бы сконструировать без больших денежных затрат, язык Я О, да и машина, которая выполняет программы на языке Я О, были бы не нужны.
Можно было бы просто писать программы на языке Я 1, а компьютер сразу бы их выполнял. Даже с учетом того, что создать виртуальную машину, возможно, не удастся (из-за чрезмерной дороговизны или трудностей разработки), люди вполне могут писать ориентированные на нее программы. Эти программы будут транслироваться или интерпретироваться программой, написанной на языке Я О, а сама она могла бы выполняться существующим компьютером.
Другими словами, можно писать программы для виртуальных машин так, как будто эти машины реально существуют. Трансляция и интерпретация целесообразны лишь в том случае, если языки Я О и Я 1 не слишком отличаются друг от друга. Это значит, что язык Я 1 хотя и лучше, чем Я О, но все же далек от идеала. Возможно, это несколько обескуражи- Многоуровневая компьютерная организация 19 вает в свете первоначальной цели создания языка Я 1 — освободить программиста от бремени написания программ на языке, понятном компьютеру, но малоприспособленном для человека. Однако ситуация не так безнадежна.
Очевидное решение проблемы — создание еще одного набора команд, которые в большей степени, чем Я 1 ориентированы на человека и в меньшей степени на компьютер. Этот третий набор команд также формирует язык, который мы будем называть Я 2, а соответствующую виртуальную машину — М 2. Человек может писать программы на языке Я 2, как будто виртуальная машина для работы с машинным языком Я 2 действительно существует.
Такие программы могут либо транслироваться на язык Я 1, либо выполняться интерпретатором, написанным на языке Я 1. Изобретение целого ряда языков, каждый из которых более удобен для человека, чем предыдущий, может продолжаться до тех пор, пока мы не дойдем до подходящего нам языка. Каждый такой язык использует своего предшественника как основу, позтому мы можем рассматривать компьютер в виде ряда уровней, изображенных на рис. 1.1. Язык, находящийся в самом низу иерархической структуры, — самый примитивный, а тот, что расположен на ее вершине — самый сложный.