Особая благодарность Джиму Гудману (Jim Goodman) за его вклад в создание этой книги (в частности, глав 4 и 5). Идея использовать JVM принадлежит именно ему. Книга значительно улучшилась благодаря его содействию.
Наконец, я хотел бы поблагодарить Сюзанну за ее любовь и недюжинное терпение. Это уже 15-я книга, и мы до сих пор вместе! Спасибо Барбаре и Марвину за то, что они такие замечательные дети — теперь они знают, чем профессора зарабатывают себе на жизнь. В 2004 году Королевская академия искусств и наук Голландии предоставила мне долгожданный статус академика, тем самым освободив меня от наименее привлекательных обязанностей университетского работника (например, от долгих и нудных совещаний ученого совета), за что я безмерно благодарен уважаемым коллегам.
Эндрю С. Таненбаум
От издателя перевода
Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты [email protected] (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение!
Подробную информацию о наших книгах вы найдете на веб-сайте издательства http://www.piter.com.
Глава 1
Введение
Цифровой компьютер — это машина, которая может решать задачи, выполняя данные ей команды. Последовательность команд, описывающих решение определенной задачи, называется программой. Электронные схемы каждого компьютера могут распознавать и выполнять ограниченный набор простых команд. Все программы перед выполнением должны быть превращены в последовательность таких команд, которые обычно не сложнее, чем, например:
4 сложить 2 числа;
4 проверить, не является ли число нулем;
4 скопировать блок данных из одной части памяти компьютера в другую.
Эти примитивные команды в совокупности составляют язык, на котором люди могут общаться с компьютером. Такой язык называется машинным. Разработчик при создании нового компьютера должен решить, какие команды включить в машинный язык этого компьютера. Это зависит от назначения компьютера и от задач, которые он должен решать. Обычно стараются сделать машинные команды как можно проще, чтобы избежать сложностей при разработке компьютера и снизить затраты на необходимую электронику. Большинство машинных языков крайне примитивны, из-за чего писать на них и трудно, и утомительно.
Это простое наблюдение с течением времени привело к построению ряда уровней абстракций, каждая из которых надстраивается над абстракцией более низкого уровня. Именно таким образом можно преодолеть сложности при общении с компьютером. Мы называем этот подход многоуровневой компьютерной организацией. В следующем разделе мы поясним, что этот термин значит. Затем мы расскажем об истории развития проблемы и положении дел в настоящий момент, а также рассмотрим некоторые важные примеры.
Многоуровневая компьютерная организация
Как мы уже сказали, существует огромная разница между тем, что удобно людям, и тем, что могут компьютеры. Люди хотят сделать X, но компьютеры могут сделать только У. Из-за этого возникает проблема. Цель данной книги — объяснить, как решить эту проблему.
Языки, уровни и виртуальные машины