ПРЕДИСЛОВИЕ
Эта книга является вводным курсом в вычислительную технику. Она включает в себя широкий круг тем, рассмотренных достаточно глубоко, чтобы дать полное представление о предмете.
Читатели книги
Данное пособие предназначено не только для студентов, специализирующихся в области вычислительной техники, но и для студентов, изучающих другие дисциплины. Что касается учащихся, специализирующихся в области вычислительной техники, то многие из них начинают обучение с иллюзией, что вычислительная техника — это программирование и просмотр веб-страниц, так как это, в сущности, все, что они видели. Однако вычислительная техника представляет собой гораздо большее. Кроме того, студенты, начинающие изучать вычислительную технику, нуждаются в представлении объема того предмета, по которому они планируют специализироваться. Дать это представление и является целью настоящей книги. Она содержит обзор тем по вычислительной технике — базу, с помощью которой студенты в будущем смогут понять уместность определенного курса и отношения между курсами.
Такие знания необходимы и студентам, специализирующимся по другим дисциплинам, если им предстоит общаться со специалистами в этой области. Курс вычислительной техники для неспециалистов должен обеспечивать фундаментальное понимание области целиком, а не просто содержать введение в популярные пакеты прикладных программ. Этот подход к книге как к обозрению используется для вводных курсов в естественных науках, и именно этой модели придерживался автор при написании данной книги. Главной целью была доступность для читателей, не являющихся специалистами в этой области. В результате предыдущие издания книги с успехом использовались в курсах для студентов самых различных направлений. Настоящее издание продолжает эту традицию.
Содержание книги
Книга построена по восходящему принципу, повествование развертывается от конкретного к абстрактному, в порядке, который обеспечивает педагогически правильное изложение материала, когда каждая тема ведет к другой. Книга начинается с основ архитектуры ЭВМ (часть 1), переходит к программному обеспечению и процессу разработки программного обеспечения (часть 2), исследует вопросы организации и хранения данных (часть 3) и завершается применением компьютерных технологий в настоящем и некоторыми прогнозами на будущее. При написании книги автор старался выстроить единый сюжет. Поэтому не удивительно, что многие студенты сравнивают чтение книги с чтением романа. С другой стороны, книга разделена на большие независимые главы и разделы, которые можно читать по отдельности (см. «Введение», рис. 0.5) или изменить порядок прочтения. В действительности, книга часто используется как учебное пособие для курсов, которые преподносят материал в различном порядке. Наиболее распространенная альтернатива — начинать с материала, излагаемого в главах 4 и 5 («Алгоритмы» и «Языки программирования»), и затем по желанию возвращаться к более ранним главам. Однако бывало, что изложение курса начиналось с материалов по вычислимости из главы 11. (Во всех остальных случаях книга использовалась в базовых курсах, где она служила основой для студентов разных направлений). Вот предлагаемая последовательность для тех, кто желает получить «полную версию романа»:
Помимо общего содержания существует несколько тем, которые не выделены в отдельный раздел. Одна из них — это вычислительная техника в развитии. Некоторые вопросы рассматриваются с точки зрения истории, обсуждается современное состояние области, и обозначаются направления текущих исследований. Другая тема — роль абстракции и способ использования абстрактных инструментов для контроля сложности.
ВЕБ-СТРАНИЦЫ
Поддержка книги осуществляется страницей http://www.aw.com/brookshear. Она является официальной страницей книги и обслуживается компанией Addison-Wesley. Там можно найти материалы и для студентов, и для преподавателей, такие как программное обеспечение поддержки (например, имитатор машины, которая приводится в качестве примера в главе 2 и описывается в приложении В), лабораторные справочники, ссылки на страницы с темами, которые могут быть интересными, руководство для преподавателей и слайды). Также есть возможность посетить персональную страницу автора — http://mscs.mu.edu/~glennb. Она не слишком официальная, но автор старается размещать там информацию, которая может быть полезна для читателей.
Студентам от автора
Я впервые столкнулся с вычислительной техникой во время моей командировки в военно-морские силы США в конце 60-х - начале 70-х годов. (Да, этот факт старит меня, но это случится и с вами. Кроме того, возраст делает меня мудрым, поэтому вам следует прислушиваться к моим словам.) Большую часть того времени я провел, обслуживая систему программного обеспечения на вычислительной установке в морском ведомстве в Лондоне. После завершения миссии я вернулся в университет и в 1975 году получил докторскую степень. С тех пор я преподаю вычислительную технику и математику.
С годами многое в вычислительной технике изменилось, но и многое осталось прежним. В частности, она была и остается завораживающей. В этой сфере происходит много впечатляющих событий. Развитие Интернета, прогресс в области искусственного интеллекта, способность собирать и распространять информацию в немыслимых количествах — вот только некоторые из процессов, которые оказывают влияние на нашу жизнь. Вы живете в удивительном меняющемся мире, и у вас есть возможность быть частью происходящего. Воспользуйтесь этой возможностью!
Я немного диссидент (некоторые из моих друзей сказали бы — более чем), поэтому, принявшись за написание книги, я не всегда следовал совету, который получил. А именно многие заявляли, что некоторые материалы являются слишком сложными для начинающих студентов. Но я считаю, что если тема уместна, то она уместна, даже если ученое сообщество рассматривает ее как «продвинутую». Вы заслуживаете книги, которая дает полную картину вычислительной техники, а не только ее разбавленную версию, содержащую искусственно упрощенные представления тех тем, которые считались допустимыми для начинающих студентов.
Я не опускал сложные темы, а искал лучшие объяснения. Я попытался достаточно глубоко дать полную картину того, что представляет собой вычислительная техника. (Существует разница между тем фактом, что при запуске космического корабля много шума, и осознанием того, что он проникает в каждую клетку вашего тела.) Как в случае со специями в рецепте: может быть, вы захотите пропустить некоторые из разделов, но они все равно присутствует здесь, чтобы вы при желании могли попробовать их — и я призываю вас сделать это.
Наконец, я должен подчеркнуть, что, как и в любом другом курсе, касающемся техники, те знания, которые вы приобретете сегодня, могут не понадобиться вам завтра. Область вычислительной техники динамична, и это замечательно. Этот учебник даст вам картину современного состояния предмета и покажет его историческое развитие. С такими знаниями вы будете подготовлены к тому, чтобы расти вместе с технологиями. Я призываю вас начать процесс развития сейчас, с изучения этой книги. Учитесь учиться.
Спасибо за доверие, которое вы оказали мне, выбрав мою книгу. Как автор я обязан написать труд, который стоил бы вашего времени. Я надеюсь, что выполнил это обязательство.
Преподавателям от автора
В этой книге содержится больше материала, чем может вместить один семестр, поэтому можете без колебаний опускать те разделы, которые не соответствуют целям вашего курса, или заменять порядок их следования на более подходящий. Я написал эту книгу, чтобы она использовалась как источник материалов для курсов, а не как их определение. Вы обнаружите, что хотя учебник имеет некоторый план, темы в нем даются независимо друг от друга, что позволяет вам выбирать любые из них по желанию (см. введение, рис. 0.5).
На первой странице каждой главы я использовал знак звездочка (*), чтобы обозначить те разделы, которые я считаю факультативными: они более глубоко освещают темы, которые, возможно, вы не захотите затрагивать. Но это только предложение. В частности, вы обнаружите, что краткая версия учебника, обрисованная ранее в этом предисловии, пропускает более чем просто «факультативные» разделы. Для ясности посмотрите главу 7 «Структуры данных». В зависимости от целей вашего курса вы можете поступать с этой главой любым из способов, к которым я прибегал время от времени. Во-первых, в курсе «компьютерной грамотности», вы можете опустить всю главу. Если вы хотите просто познакомить студентов с предметом структур данных, вы можете дать только разделы 7.1 и 7.2 (как предполагается в краткой версии). Если, кроме того, вы хотите представить и основные структуры, вам необходимо дать разделы 7.1-7.6. Наконец, если вы хотите расширить изучение и включить типы данных или указатели в машинном языке, вы можете дать «факультативные» разделы 7.7 и/или 7.8.
Я также предлагаю использовать некоторые разделы в качестве дополнительного чтения для студентов. Я думаю, мы недооцениваем студентов, считая, что все должны объяснять в аудитории. Мы должны помогать им учиться самостоятельно.
Я уже упоминал, что учебник имеет восходящую, от конкретного к абстрактному, структуру, но я хотел бы рассказать об этом более подробно. Как ученые, мы часто полагаем, что студенты оценят наше видение предмета, приобретаемое годами работы в этой области. Представляется более эффективным давать материал с учетом психологии студента. Именно поэтому книга начинается с представления и хранения данных, архитектуры ЭВМ и машинного языка. Это темы, которые студенты охотно изучают: они видят составляющие компьютера, могут потрогать их, и большинство студентов будут их использовать. Начиная курс с этих тем, я предполагал, что студенты найдут ответы на многочисленные «почему», копившиеся годами, и научатся воспринимать этот курс как практический, а не как теоретический. После этого будет естественным перейти к более абстрактным вопросам: к алгоритмам, к проектированию, представлению данных и к оценке сложности задач, которые многими рассматриваются как главные темы курса.
Мы все знаем, что студенты узнают гораздо больше того, чему мы учим их непосредственно в аудитории, и знания, которые они получают извне, часто усваиваются лучше, чем полученные непосредственно на лекции. Это важно, когда мы приступаем к «обучению» решать задачи. Студенты не научатся решать задачи, изучая методы их решения как изолированный предмет. Они научатся решать задачи, только решая задачи. Поэтому я включил в книгу много заданий. Я призываю вас использовать их.
Другой вопрос, который я причисляю к той же категории, это вопрос профессионализма, этики и социальной ответственности. Я считаю, что эти темы не должны быть представлены изолированно. Вместо этого они должны быть расположены там, где это уместно, что и сделано в данной книге. Вы увидите, что разделы 0.5, 3.7, 6.1, 6.8, 9.6, 10.1 и 10.7 включают такие темы, как безопасность, секретность, ответственность и социальная осведомленность в контексте таких вопросов, как организация сетей, системы баз данных, разработка программного обеспечения и искусственный интеллект. Вы также обнаружите, что каждая глава включает круг вопросов, названных «Социальные вопросы», который призывает студентов подумать над материалом книги применительно к обществу, в котором они живут.
Педагогические особенности
Эта книга является результатом многих лет преподавательской деятельности. Поэтому в ней много учебных материалов. Прежде всего, большое количество задач, требующих участия студента, — более 1000 в этом седьмом издании (1010, если быть точным). Они разделены на «Вопросы и упражнения», «Повторение материала» и «Социальные вопросы». «Вопросы и упражнения» находятся в конце каждого раздела. Они дают обзор только что обсуждавшегося материала, расширяют предыдущее обсуждение или намекают на родственные темы, которые будут обсуждаться позднее. Ответы на эти вопросы приводятся в приложении Е.
«Повторение материала» находится в конце каждой главы (кроме «Введения») и представляет собой задания для домашней работы, они охватывают материал целой главы и для них не приводятся ответы.
Также в конце каждой главы находятся разделы «Социальные вопросы». Они предназначены для размышления и обсуждения. Многие из них могут использоваться в качестве задания провести исследование и представить письменный или устный доклад.
Седьмое издание
Хотя это седьмое издание имеет такую же структуру, как и предыдущее, в него были добавлены некоторые новые разделы, а некоторые, наоборот, удалены; большая часть материала переписана заново, чтобы дать современное и релевантное представление о вычислительной технике.
Седьмое издание наиболее существенно отличается от шестого в педагогическом плане. Большая часть материала реорганизована и переписана для того, чтобы сделать учебник более понятным, а объяснения более простыми. Например, реорганизованы разделы 2.1 и 2.2 («Архитектура ЭВМ» и «Машинный язык»), смягчено введение в алгоритмы в разделе 4.1, реорганизовано введение в структуры данных (раздел 7.1), раздел 7.7 («Дополнительные типы данных») был упрощен, материал по последовательным и текстовым файлам объединен в один раздел (8.2), материал по вычислимости (разделы 11.1-11.3) переписан. Кроме того, в книгу добавлено много рисунков и улучшено качество схем.
Также было добавлено много новых разделов, таких как способы кодирования звука (глава 1), более широкое освещение организации сетей (глава 3), разработка открытых исходных текстов (глава 6), дополнительные материалы по авторским правам и патентам (глава 6), XML (глава 8) и ассоциативная память (раздел 10.4). Кроме того, по всему тексту были добавлены многочисленные вставки, которые расширяют материал текста.
Благодарности
Прежде всего, я хочу выразить благодарность тем, кто поддержал эту книгу, читая и используя ее предыдущие издания. Я польщен.
С каждым новым изданием книги список тех, кто способствовал изданию книги как рецензенты и консультанты, растет. Сегодня этот список включает следующие имена: Дж. М. Адаме (J. M. Adams), С. М. Аллен (С. М. Allen), Д. С. С. Эл-лисон (D. С. S. Allison), Б. Ауэрнхаймер (В. Auernheimer), П. Бэнкстон (P. Bank-ston), М. Барнард (М. Barnard), П. Бендер (P. Bender), К. Бауер (К. Bowyer), П. У. Брашхер (P. W. Brashear), С. М. Браун (С. М. Brown), Б. Каллони (В. Cal-loni), М. Кланси (М. Clancy), Р. Т. Клоуз (R. Т. Close), Д. X. Кули (D. H. Cooley), Л. Д. Корнелл (L. D. Cornell), М. Дж. Кроули (М. J. Crowley), Ф. Дик (F. Deek), М. Дикерсон (М. Dickerson), М. Дж. Дункан (М. J. Duncan), С. Фокс (S. Fox), Н. Е. Гиббс (N. E. Gibbs), Дж. Д. Харрис (J. D. Harris), Д. Хаском (D. Hascom), Л. Хелф (L. Health), П. Б. Хендерсон (Р. В. Henderson), Л. Хант (L. Hunt), M. Хат-ченрувер (М. Hutchenreuther), Л. Э. Джен (L. A. Jehn), К. Корб (К. Korb), Дж. Кренц (G. Krenz), Дж Ли (J. Liu), Т. Дж. Лонг (Т. J. Long), С. Мэй (С. May), У. Мак-Коун (W. McCown), С. Дж. Мэрилл (S. J. Merill), К. Мессершмит (К. Mes-sersmith), Дж. С. Мойер (J. С. Моуег), М. Мерфи (М. Murphy), Дж. П. Майерс (J. P. Mayers), Д. С. Нонан (D. S. Noonan), С. Олариу (S. Olariu), Дж. Райе (G. Rice), Н. Рикерт (N. Rickert), С. Ридезел (С. Riedesel), Дж. Б. Роджерс (J. В. Rogers), Дж. Саито (G. Saito), У. Савич (W. Savitch), Р. Шлафли (R. Schlafly), Дж. С. Шлим-мер (J. С. Schlimmer), С. Селлс (S. Sells), Дж. Шеппард (G. Sheppard), 3. Сцен (Z. Seen), Дж. С. Симмс (J. С. Simms), М. С. Слаттери (М. С. Slattery), Дж Сли-мик (J. Slimick), Дж. А. Сломка (J. A. Slomka), Д. Смит (D. Smith), Дж. Солдерич (J. Solderitsch), Р. Стиджервальд (R. Stiegerwald), Л. Штейнберг (L. Steinberg), С. А. Страбл (С. A. Struble), С. Л. Страбл (С. L. Struble), У. Дж. Таффе (W. J. Taffe), Дж. Талберт (J. Talburt), П. Тромович (P. Tromovitch), Е. Д. Винтер (Е. D. Winter), Е. Райт (Е. Wright), М. Циглер (М. Ziegler) и один неизвестный. Всем этим людям я выражаю свою искреннюю благодарность.
Я также выражаю благодарность людям из Addison-Wesley, Argosy Publishing и Theurer Briggss Design, чьи усилия отражены на этих страницах. Коллектив, который проходит через процесс издания книги, становится семьей. Во время подготовки этого седьмого издания моя семья выросла и приобрела прекрасных людей.
Моя жена Эрлен и дочь Черил были для меня огромной поддержкой все эти годы. Я благодарю их за то, что мирились с автором во мне. Они поняли, что книга может лишить рассеянного профессора чувства реальности. Утешительно быть способным погрузиться в такое ученое занятие, как написание книги, зная, что кто-то другой сохраняет связь с реальностью. В частности, утром 11 декабря 1998 года я остался в живых после сердечного приступа только потому, что моя жена привезла меня вовремя в больницу. (Для тех из вас, кто молод, я могу объяснить, что пережить сердечный приступ — это что-то вроде получения отсрочки при выполнении домашнего задания.)
Наконец, я благодарю моих родителей, которым и посвящена эта книга, за то, что внушили мне важность образования. Я заканчиваю следующим высказыванием, источник которого пусть останется анонимным: «Книга нашего сына действительно хорошая. Каждый должен прочитать ее».
J. G. В.
От издательства
Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
Подробную информацию о наших книгах вы найдете на веб-сайте издательства http://www.piter.com.
ВВЕДЕНИЕ
Вычислительная техника (computer science) является научной дисциплиной, призванной дать научное обоснование таким вопросам, как проектирование ЭВМ, программирование на компьютере, обработка информации, алгоритмические решения задач и алгоритмические процессы. Она обеспечивает основание для применения компьютера сегодня и в будущем. Широта предмета означает, что невозможно быть хорошо осведомленным в вычислительной технике, изучив только несколько разделов как изолированные друг от друга предметы или просто разобравшись, как использовать современное компьютерное оборудование. Чтобы понять вычислительную технику, нужно освоить множество разделов этой науки в их развитии.
Цель данной книги — предоставить эти сведения. Она являет собой полный вводный курс вычислительной техники. Следовательно, может служить пособием для студентов, начинающих изучать вычислительную технику, или источником материала для студентов, ищущих информацию о современном состоянии науки.
Изучение алгоритмов
Мы начинаем с наиболее фундаментального понятия вычислительной техники, а именно с понятия алгоритма (algorithm). Неформально, алгоритм — это набор шагов, которые определяют выполнение какой-либо задачи1. Например, существует алгоритм для построения модели самолета (выраженный в форме инструкции), для управления стиральной машиной (обычно изображен на лицевой стороне машины), для исполнения музыки (последовательность нот в нотной записи) и для выполнения фокусов.
Перед тем как машина сможет выполнить какую-либо задачу, необходимо разработать алгоритм и представить его в форме, совместимой с машиной. Представление алгоритма, совместимое с машиной, называется программой (program). Программы и алгоритмы, которые они представляют, называются программным обеспечением (software), в отличие от самой ЭВМ, которая называется аппаратным обеспечением (hardware).
Более точно, алгоритм — это упорядоченный набор однозначных, выполнимых шагов, которые определяют конечный процесс.
АЛГОРИТМ ФОКУСА
Эффект: Фокусник достает несколько карт из обычной колоды игральных карт и кладет их на стол изображением вниз, тщательно перемешивает их, распределяя по столу. Затем, когда зрители просят показать или черную, или красную карту, фокусник переворачивает карту нужного цвета.
Секрет и последовательность действий:
Шаг 1. Из обычной колоды карт возьмите десять красных и десять черных карт. Распределите их на столе по цвету в две колонки изображениями вверх.
Шаг 2. Объявите, что вы вытащили несколько красных и несколько черных карт.
Шаг 3. Соберите красные карты. Под видом того, что собираете их в маленькую колоду, возьмите их в левую руку и при помощи большого и указательного пальца правой руки придайте картам слегка вогнутую форму. Затем положите колоду красных карт на стол изображением вниз со словами: «В этой стопке красные карты».
Шаг 4. Соберите черные карты. Способом, описанным в шаге 3, придайте картам слегка выпуклую форму. Затем верните эти карты на стол изображением вниз со словами: «А в этой стопке черные карты».
Шаг 5. Сразу после того, как вы положите черные карты на стол, двумя руками перемешайте карты, распределяя их по поверхности стола. Объясните зрителям, что вы тщательно перемешиваете карты.
Шаг 6. Пока на столе остаются карты, расположенные изображением вниз, выполняйте следующие шаги:
6.1. Попросите зрителей назвать красную или черную карту.
6.2. Если назван красный цвет и на столе есть карта, лежащая изображением вниз, с вогнутой формой, переверните такую карту со словами «Вот красная карта».
6.3. Если назван черный цвет, и на столе есть карта, лежащая изображением вниз, с выпуклой формой, переверните такую карту со словами: «Вот черная карта».
6.4. В противном случае скажите зрителям, что больше нет карт нужного цвета, и в доказательство переверните оставшиеся карты.
Изучение алгоритмов началось как раздел математики. Действительно, математики занимались поиском алгоритмов задолго до создания современного компьютера. Главной целью было нахождение набора указаний, который бы описывал решение всех задач определенного типа. Одним из наиболее известных примеров этих исследований является алгоритм для нахождения отношения двух сложных чисел. Другой пример — алгоритм Евклида для нахождения наибольшего общего делителя двух положительных целых чисел, открытый античным греческим математиком Евклидом.
АЛГОРИТМ ЕВКЛИДА
Описание: Этот алгоритм предполагает наличие на входе двух положительных целых чисел и вычисляет их наибольший общий делитель.
Последовательность действий:
Шаг 1. Присвоить переменным М и N значения большего и меньшего числа соответственно. Шаг 2. Разделить М на N и значение остатка присвоить переменной R.
Шаг 3. Если R не равно 0, тогда присвоить М значение N, присвоить N значение R и возвратиться к шагу 2; в противном случае наибольшим общим делителем является значение, присвоенное N.
Как только алгоритм решения задачи найден, выполнение этой задачи больше не требует понимания принципов, лежащих в основе алгоритма. Вместо этого процесс выполнения задачи сводится к процессу простого следования указаниям. (Мы можем следовать алгоритму деления для нахождения отношения двух чисел или алгоритму Евклида для нахождения наибольшего общего делителя, не понимая, почему этот алгоритм работает.) В известном смысле, интеллект, необходимый для решения поставленной задачи закодирован в алгоритме.
Именно благодаря этой способности собрать и передать интеллект посредством алгоритмов, мы можем конструировать машины, которые показывают разумное поведение. Следовательно, уровень интеллекта, обнаруживаемый машинами, ограничен интеллектом, который может быть передан через алгоритмы. Только если мы найдем алгоритм, который управляет выполнением задачи, мы можем построить машину, которая ее выполнит. Также если не существует алгоритма решения задачи, то решение этой задачи выходит за пределы способностей машины.
Таким образом, разработка алгоритмов является главной задачей в области вычислительной техники и, следовательно, значительная часть данной науки занимается проблемами, связанными с этой задачей. В свою очередь, мы можем обрести понимание вычислительной техники, рассмотрев некоторые из этих проблем. На первом месте находится вопрос, как разрабатывается алгоритм — вопрос, который тесно связан с проблемой решения задач вообще. Найти алгоритм решения задачи — это, в сущности, обнаружить ее решение. Значит, исследования в этой области вычислительной техники происходят из таких областей психологии, как решение задач человеком и теория обучения. Мы рассмотрим некоторые из этих идей в главе 4.
Когда найден алгоритм для решения задачи, следующий шаг (— представить алгоритм так, чтобы он мог быть передан машине или другим людям. Это означает, что мы должны трансформировать понятийный алгоритм в набор однозначных инструкций. Исследования, возникшие из этой необходимости, исходили из наших знаний языка и грамматики и привели к большому количеству систем представления алгоритмов, называемых языками программирования (programming language), в основе которых лежит многообразие подходов к процессу программирования, называемых парадигмами программирования. Мы рассмотрим некоторые из этих языков и парадигм, лежащих в их основании, в главе 5.
Поскольку компьютерные технологии применялись к все более и более сложным задачам, ученые обнаружили, что проектирование больших систем программного обеспечения включает в себя больше, чем просто разработку отдельных алгоритмов для выполнения требуемых действий. Оно влечет за собой также проектирование взаимодействия между этими компонентами. В результате возник новый раздел вычислительной техники, который называется разработкой программного обеспечения и происходит из таких различных областей научного знания, как аппаратура, управление проектом, руководство кадрами и проектирование языков программирования. Разработка программного обеспечения обсуждается в главе 6.
Другая важная область вычислительной техники занимается проектированием и конструированием аппаратов для выполнения алгоритмов. Эту тему мы будем рассматривать в главах 1 и 2. Хотя изучение архитектуры ЭВМ включает в себя обсуждение современных технологий, нашей целью не является овладение всеми деталями того, как современная архитектура ЭВМ реализуется в электрической схеме. Это завело бы нас слишком далеко в область электротехники. Кроме того, как вчерашние механические вычисляющие устройства уступили дорогу электрическим устройствам, так и современная электроника скоро может быть заменена другими технологиями, среди которых первым кандидатом является оптика. Наша цель — получить достаточное представление о современных технологиях, для того чтобы понять их применение в современных машинах и их влияние на развитие вычислительной техники.
Мы бы хотели, чтобы архитектура ЭВМ была следствием только наших знаний об алгоритмических процессах и не была ограничена возможностями технологий. То есть вместо того, чтобы позволять технологиям определять проектирование ЭВМ и, следовательно, способ представления алгоритма, мы бы хотели, чтобы наши знания были движущей силой, определяющей строение машины. С развитием технологий эта мечта приближается к реальности. Сегодня возможно построить машину, которая позволяет представить алгоритм в виде сложных последовательностей инструкций, выполняемых одновременно, или в виде системы соединений между многочисленными элементами, подобно тому как наш мозг представляет информацию в форме связей между нейронами (глава 10).
Мы изучаем архитектуру ЭВМ также в контексте хранения и получения данных. В этом случае внешние характеристики машины часто отражают ее внутренние свойства. Мы рассматриваем эти свойства и способы избежать их нежелательного эффекта в главах 1, 7, 8 и 9.
С конструированием вычислительных машин тесно связана разработка связи машины с внешним миром. Например, как поместить алгоритм в машину или сообщить ей, какой алгоритм выполнять? Решение таких проблем при условии, что от машины ожидается выполнение большого количества задач, требует решения многих проблем, связанных с согласованием действий и распределением ресурсов. Мы исследуем некоторые из таких решений при обсуждении операционных систем в главе 3.
Так как от машин требовалось выполнение все более и более сложных задач, компьютерная наука обратилась к изучению интеллекта человека в надежде на то, что, понимая, как рассуждает и воспринимает наш собственный мозг, мы будем в состоянии создать алгоритм, который бы имитировал эти процессы, и, следовательно, сможем передать эти способности машине. В результате возникла область вычислительной техники, которая называется искусственным интеллектом и опирается на исследования в психологии, биологии и лингвистике. Некоторые из этих аспектов обсуждаются в главе 10.
Поиск алгоритмов для решения все более и более сложных проблем ведет к вопросам, касающимся предельных ограничений алгоритмических процессов. Если не существует алгоритма для решения задачи, тогда эта задача не может быть решена машиной, то есть машины способны решать только алгоритмически разрешимые задачи.
Осознание того, что существуют задачи, не имеющие алгоритмического решения, появилось как отдельный предмет исследования в математике с публикацией теоремы о неполноте Курта Геделя в 30-х годах XX века. Эта теорема утверждает, что в любой математической теории, заключающей в себе традиционную систему арифметики, существуют утверждения, которые не могут быть ни доказаны, ни опровергнуты. Короче говоря, любое полное знание нашей системы арифметики выходит за пределы возможностей алгоритмических процессов.
Стремление к изучению ограничений применения алгоритмических методов, которое последовало за теоремой Геделя, привело математиков к проектированию абстрактных машин для выполнения алгоритмов (это было до того, как технологии позволили создать действующие машины) и исследованию теоретических возможностей таких гипотетических машин. Сейчас изучение алгоритмов и машин составляет основу вычислительной техники. Некоторые из этих вопросов обсуждаются в главе 11.






