Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

СОДЕРЖАНИЕ

ПРЕДИСЛОВИЕ 7

ВЕБ-СТРАНИЦЫ 8

ВВЕДЕНИЕ 11

1 АРХИТЕКТУРА ЭВМ 21

1.1 Биты и их хранение 21

1.1.1 Вентили и триггеры 21

1.1.2 Другие способы хранения битов 24

1.1.3 Шестнадцатеричная система счисления 24

1.2 Оперативная память 25

1.2.1 Структура памяти 25

1.2.2 Измерение емкости памяти 27

1.3 Устройства хранения данных 27

1.3.1 Магнитные диски 28

1.3.2 Компакт-диски 29

1.3.3 Магнитные ленты 30

1.3.4 Хранение и поиск файлов 31

1.4 Представление информации в виде двоичного кода 32

1.4.1 Представление текста 32

1.4.2 Американский национальный институт стандартов 32

1.4.3 ISO - международная организация по стандартизации 33

1.4.4 Представление числовых значений 33

1.4.5 Представление изображений 35

1.4.6 Представление звука 36

1.5 Двоичная система счисления 37

1.5.1 Альтернатива двоичной системе счисления 38

1.5.2 Дроби в двоичной системе счисления 38

1.5.3 Аналоговые и цифровые устройства 39

1.6 Хранение целых чисел 39

1.6.1 Представление в двоичном дополнительном коде 39

1.6.2 Сложение в двоичном дополнительном коде 41

1.6.3 Проблема переполнения 41

1.6.4 Представление с избытком 42

1.7 Хранение дробей 43

1.7.1 Представление с плавающей точкой 43

1.7.2 Ошибка усечения 45

1.8 Сжатие данных 46

1.8.1 Общие методы сжатия данных 46

1.8.2 Сжатие звука 47

1.8.3 Сжатие изображений 48

1.9 Ошибки передачи данных 49

1.9.1 Контрольный разряд четности 50

1.9.2 Коды с исправлением ошибок 51

2 МАНИПУЛИРОВАНИЕ ДАННЫМИ 52

2.1 Архитектура ЭВМ 52

2.1.1 Сложение двух чисел, хранящихся в оперативной памяти 53

2.1.2 Кто и что изобрел? 53

2.2 Машинный язык 54

2.2.1 Система команд 54

2.2.2 Кэш-память 54

2.2.3 Арифметико-логические команды 55

2.2.4 Команды управления 55

2.2.5 Деление двух значений, хранящихся в памяти 55

2.3 Выполнение программы 58

2.3.1 Пример выполнения программы 59

2.3.2 Команды переменной длины 61

2.3.3 Программы и данные 61

2.4 Арифметические и логические операции 61

2.4.1 Логические операции 61

2.4.2 Сравнение вычислительной мощности эвм 63

2.4.3 Операции сдвига 63

2.4.4 Арифметические операции 64

2.5 Связь с другими устройствами 64

2.5.1 Связь через контроллер 65

2.5.2 Строение шины 66

2.5.3 Скорость передачи данных 67

2.6 Другие архитектуры 68

2.6.1 Конвейерная обработка 68

3 ОПЕРАЦИОННЫЕ СИСТЕМЫ И ОРГАНИЗАЦИЯ СЕТЕЙ 71

3.1 3.1. Эволюция операционных систем 71

3.1.1 Однопроцессорные системы 71

3.1.2 Многопроцессорные системы 73

3.2 Архитектура операционной системы 74

3.2.1 Программное обеспечение 74

3.2.2 Полезное единообразие или вредная монополия? 75

3.2.3 Компоненты операционной системы 76

3.2.4 Операционная система linux 76

3.2.5 Начало работы операционной системы 78

3.3 Координирование действий машины 79

3.3.1 Понятие процесса 79

3.3.2 Управление процессами 80

3.3.3 Модель «клиент-сервер» 81

3.4 Обработка конкуренции между процессами 82

3.4.1 Семафор 82

3.4.2 Взаимная блокировка 84

3.5 Сети 85

3.5.1 Основы организации сетей 85

3.5.2 Интернет 87

3.5.3 Топология сети Интернет 87

3.5.4 Система адресов Интернета 88

3.5.5 Электронная почта 89

3.5.6 Всемирная паутина 89

3.6 Сетевые протоколы 91

3.6.1 Управление правом отправки сообщений 91

3.6.2 Сеть ethernet 92

3.6.3 JAVASCRIPT, апплеты, CGI и сервлеты 93

3.6.4 Многоуровневый принцип программного обеспечения Интернета 93

3.6.5 Комплект протоколов TCP/IP 96

3.6.6 Протоколы РОРЗ и IMAP 97

3.7 Безопасность 98

3.7.1 Протокол защищенных сокетов 99

3.7.2 Группа компьютерной «скорой помощи» 100

4 АЛГОРИТМЫ 102

4.1 Понятие алгоритма 102

4.1.1 Предварительные замечания 102

4.1.2 Формальное определение алгоритма 102

4.1.3 Определение алгоритма 102

4.1.4 Абстрактная природа алгоритма 103

4.2 Представление алгоритма 104

4.2.1 Примитивы 104

4.2.2 Псевдокод 106

4.3 Создание алгоритма 109

4.3.1 Искусство решения задач 109

4.3.2 Итеративные структуры в музыке 110

4.3.3 Первый шаг в решении задачи 111

4.4 Итеративные структуры 113

4.4.1 Алгоритм последовательного поиска 113

4.4.2 Управление циклом 114

4.4.3 Алгоритм сортировки методом вставок 116

4.5 Рекурсивные структуры 119

4.5.1 Поиск и сортировка 119

4.5.2 Алгоритм двоичного поиска 119

4.5.3 Управление рекурсивными структурами 124

4.6 Эффективность и правильность 125

4.6.1 Эффективность алгоритма 125

4.6.2 Проверка правильности программного обеспечения 128

4.6.3 По ту сторону проверки правильности программ 128

5 ЯЗЫКИ ПРОГРАММИРОВАНИЯ 132

5.1 Исторический обзор 132

5.1.1 Ранние поколения 132

5.1.2 Интерплатформенное программное обеспечение 133

5.1.3 Независимость от машины 134

5.1.4 Парадигмы программирования 135

5.2 Основные понятия традиционного программирования 139

5.2.1 Культуры языков программирования 139

5.2.2 Переменные и типы данных 140

5.2.3 Структуры данных 141

5.2.4 Константы и литералы 143

5.2.5 Операторы присваивания 144

5.2.6 Управляющие операторы 145

5.2.7 Комментарии 147

5.3 Процедурные единицы 148

5.3.1 Процедуры 149

5.3.2 Событийно-управляемые программные системы 150

5.3.3 Параметры 150

5.3.4 Функции 152

5.3.5 Операторы ввода-вывода 153

5.4 Реализация языка программирования 155

5.4.1 Процесс трансляции программы 155

5.4.2 Реализация java 156

5.4.3 Компоновка и загрузка 160

5.4.4 Пакеты разработки программного обеспечения 160

5.5 Объектно-ориентированное программирование 161

5.5.1 Классы и объекты 161

5.5.2 CORBAи RMI 162

5.5.3 Конструкторы 163

5.5.4 Дополнительные возможности 164

5.6 Параллельные операции 165

5.7 Декларативное программирование 167

5.7.1 Логическая дедукция 167

5.7.2 Язык программирования Prolog 169

6 РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 171

6.1 Разработка программного обеспечения 171

6.1.1 Ассоциация по вычислительной технике 171

6.1.2 Институт инженеров по электротехнике и электронике 172

6.2 Жизненный цикл программы 173

6.2.1 Цикл как единое целое 173

6.2.2 Разработка программного обеспечения на практике 174

6.2.3 Этапы разработки программного обеспечения 174

6.2.4 Анализ 174

6.2.5 Проектирование 175

6.2.6 Реализация 175

6.2.7 Тестирование 175

6.2.8 Современные тенденции 175

6.3 Модульность 177

6.3.1 Модульная реализация программы 177

6.3.2 Связь модулей системы 178

6.3.3 Связность модуля 180

6.4 Методики проектирования 181

6.4.1 Нисходящее и восходящее проектирование 181

6.4.2 Модели проектирования 181

6.4.3 Разработка открытых программных продуктов 183

6.5 Инструменты проектирования 184

6.6 Тестирование 187

6.7 Документация 188

6.8 Право собственности на программное обеспечение и ответственность 189

7 СТРУКТУРЫ ДАННЫХ 193

7.1 Основы структур данных 193

7.1.1 Опять абстракция 193

7.1.2 Статические и динамические структуры 193

7.1.3 Указатели 194

7.2 Массивы 194

7.3 Списки 196

7.3.1 Непрерывные списки 196

7.3.2 Реализация непрерывных списков 197

7.3.3 Связные списки 197

7.3.4 Поддержка абстрактного списка 199

7.4 Стеки 200

7.4.1 Откат 200

7.4.2 Реализация стека 202

7.5 Очереди 202

7.5.1 Проблема указателей 204

7.6 Деревья 205

7.6.1 Реализация дерева 206

7.6.2 Сбор мусора 207

7.6.3 Пакет бинарного дерева 208

7.7 Пользовательские типы данных 212

7.7.1 Пользовательские типы 212

7.7.2 Классы 213

7.7.3 Описательное и процедурное знание 214

7.7.4 Стандартная библиотека шаблонов 215

7.8 Указатели в машинном языке 215

8 ФАЙЛОВЫЕ СТРУКТУРЫ 218

8.1 Роль операционной системы 218

8.1.1 Таблицы размещения файлов 219

8.2 Последовательные файлы 220

8.2.1 Обработка последовательных файлов 220

8.2.2 Консорциум производителей программного обеспечения для www 221

8.2.3 Текстовые файлы 223

8.2.4 Текстовые и двоичные файлы 223

8.2.5 Вопросы программирования 226

8.2.6 Семантическая сеть 227

8.3 Индексация 227

8.3.1 Основные положения индексации 227

8.3.2 Вопросы программирования 229

8.3.3 Расположение файлов на дисках 230

8.4 Хэширование 230

8.4.1 Хэш-система 231

8.4.2 Проблемы распределения 232

8.4.3 Аутентификация посредством хэширования 233

8.4.4 Вопросы программирования 234

9 СТРУКТУРЫ БАЗ ДАННЫХ 236

9.1 Общие вопросы 236

9.2 Многоуровневый подход к реализации базы данных 238

9.2.1 Система управления базой данных 238

9.2.2 Распределенные базы данных 239

9.2.3 Модели баз данных 240

9.3 Реляционная модель баз данных 240

9.3.1 Вопросы реляционного проектирования 241

9.3.2 Системы баз данных для персональных компьютеров 241

9.3.3 Хронологические базы данных 242

9.3.4 Реляционные операции 245

9.3.5 Вопросы реализации 248

9.3.6 Язык SQL 249

9.4 Объектно-ориентированные базы данных 250

9.5 Поддержка целостности базы данных 252

9.5.1 Пространственные базы данных 252

9.5.2 Протоколы фиксации/отката изменений 252

9.5.3 Блокировка 253

9.6 Воздействие технологий баз данных на общество 254

10 ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ 257

10.1 Интеллект и машины 257

10.1.1 Конечный результат или имитация 257

10.1.2 Истоки искусственного интеллекта 257

10.1.3 Тест Тьюринга 258

10.1.4 Машина для решения головоломки из восьми фишек 259

10.2 Распознавание образов 260

10.3 Мышление 262

10.3.1 Продукционные системы 262

10.3.2 Интеллект, основанный на поведении 263

10.3.3 Деревья поиска 265

10.3.4 Эвристика 266

10.4 Искусственные нейронные сети 270

10.4.1 Основные свойства 270

10.4.2 Приложение теории 272

10.4.3 Ассоциативная память 275

10.5 Генетические алгоритмы 277

10.6 Прочие области исследования 280

10.6.1 Обработка лингвистической информации 280

10.6.2 Рекурсия в естественных языках 280

10.6.3 Роботы 282

10.6.4 Системы баз данных 283

10.6.5 Экспертные системы 284

10.7 Обдумывая последствия 286

10.7.1 Сильный искусственный интеллект против слабого 287

11 ТЕОРИЯ ВЫЧИСЛЕНИЙ 289

11.1 Функции и их вычисление 289

11.1.1 Теория рекурсивных функций 290

11.2 Машины Тьюринга 290

11.2.1 Основы машины Тьюринга 291

11.2.2 Истоки машины Тьюринга 291

11.2.3 Тезис Черча-Тьюринга 293

11.3 Универсальные языки программирования 293

11.3.1 Скелетный язык 294

11.3.2 Существуют ли инопланетяне? 294

11.3.3 Универсальность скелетного языка 297

11.4 Невычислимая функция 297

11.4.1 Проблема останова 298

11.4.2 Неразрешимость проблемы останова 299

11.5 Сложность задач 301

11.5.1 Измерение сложности задачи 301

11.5.2 Пространственная сложность 302

11.5.3 Полиномиальные и не полиномиальные задачи 304

11.5.4 NP-задачи 306

11.5.5 Детерминированность против недетерминированности 307

11.6 Шифрование с открытым ключом 308

11.6.1 Шифрование при помощи задачи о ранце 308

11.6.2 Популярные системы шифрования 308

11.6.3 Модульная арифметика 310

11.6.4 Обратно к шифрованию 311

Предисловие

Эта книга является вводным курсом в вычислительную технику. Она включает в себя широкий круг тем, рассмотренных достаточно глубоко, чтобы дать полное представление о предмете.

Читатели книги

Данное пособие предназначено не только для студентов, специализирующихся в области вычислительной техники, но и для студентов, изучающих другие дисциплины. Что касается учащихся, специализирующихся в области вычислительной техники, то многие из них начинают обучение с иллюзией, что вычислительная техника — это программирование и просмотр веб-страниц, так как это, в сущности, все, что они видели. Однако вычислительная техника представляет собой гораздо большее. Кроме того, студенты, начинающие изучать вычислительную технику, нуждаются в представлении объема того предмета, по которому они планируют специализироваться. Дать это представление и является целью настоящей книги. Она содержит обзор тем по вычислительной технике — базу, с помощью которой студенты в будущем смогут понять уместность определенного курса и отношения между курсами.

Такие знания необходимы и студентам, специализирующимся по другим дисциплинам, если им предстоит общаться со специалистами в этой области. Курс вычислительной техники для неспециалистов должен обеспечивать фундаментальное понимание области целиком, а не просто содержать введение в популярные пакеты прикладных программ. Этот подход к книге как к обозрению используется для вводных курсов в естественных науках, и именно этой модели придерживался автор при написании данной книги. Главной целью была доступность для читателей, не являющихся специалистами в этой области. В результате предыдущие издания книги с успехом использовались в курсах для студентов самых различных направлений. Настоящее издание продолжает эту традицию.

Содержание книги

Книга построена по восходящему принципу, повествование развертывается от конкретного к абстрактному, в порядке, который обеспечивает педагогически правильное изложение материала, когда каждая тема ведет к другой. Книга начинается с основ архитектуры ЭВМ (часть 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.