
- •Министерство образования и науки Российской Федерации
- •Цель лекции
- •План лекции
- •1 Происхождение вычислительных машин
- •2 Изучение алгоритмов
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Биты и их хранение
- •2 Оперативная память
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Устройства внешней памяти
- •3 Хранение и поиск файлов
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Представление числовых значений
- •2 Хранение целых чисел
- •3 Хранение дробей
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Представление текста
- •2 Представление изображений
- •Достоинства пиксельной графики
- •Недостатки пиксельной графики
- •Достоинства векторной графики
- •Недостатки векторной графики
- •3 Представление звука
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Сжатие изображений
- •2 Ошибки передачи данных
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Архитектура эвм
- •2 Связь процессора с другими устройствами
- •3 Другие архитектуры
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Машинный язык
- •2 Пример машинного языка
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Выполнение программы
- •2 Пример выполнения программы
- •3 Программы и данные
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Логические операции
- •2 Операции сдвига
- •3 Арифметические операции
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Эволюция операционных систем
- •2 Архитектура операционных систем
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Понятие процесса
- •2 Управление процессами
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Классификация сетей
- •2 Сетевые протоколы*
- •3 Безопасность сетей
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Понятие алгоритма
- •2 Представление алгоритма
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Теория решения задач
- •2 Общие методы решения задач
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Алгоритм последовательного поиска
- •2 Управление циклами
- •3 Алгоритм сортировки методом вставки
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Алгоритмы поиска и сортировки
- •2 Управление рекурсией
- •3 Разработка рекурсивных процедур
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Эффективность алгоритмов
- •2 Верификация программ
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Эволюция и классификация языков программирования
- •2 Концепции традиционного программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Процедурные единицы
- •2 Реализация языка программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Объектно-ориентированное программирование
- •2 Декларативное программирование
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Структуры данных
- •Integer Scores (2.9).
- •2 Статические и динамические структуры
- •3 Указатели
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Массивы
- •2 Списки
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Структура и функции стека
- •2 Реализация стека
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Очереди
- •2 Деревья
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Пользовательские типы данных
- •Int Age;
- •2 Классы
- •Int *StackEntries;
- •3 Стандартная библиотека шаблонов
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Роль операционной системы
- •2 Последовательные файлы
- •3 Вопросы программирования
- •0000000010000110
- •001100010011001100110100
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Основные положения индексации
- •2 Вопросы программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Основные положения хеширования
- •2 Вопросы программирования
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Общие вопросы
- •2 Система управления базой данных
- •3 Поддержка целостности баз данных
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Модели баз данных
- •2 Реляционная модель баз данных
- •3 Объектно-ориентированные базы данных
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Интеллект и машины
- •2 Распознавание образов
- •3 Мышление
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Искусственные нейронные сети
- •2 Генетические алгоритмы
- •Контрольные вопросы
- •Невычислимые функции Цель лекции
- •План лекции
- •1 Основы машины Тьюринга
- •2 Невычислимая функция
- •3 Сложность задач
- •Листинг 1. Процедура MergeLists для объединения двух упорядоченных списков
- •Листинг 2. Алгоритм сортировки слиянием, реализованный в процедуре MergeSort
- •Контрольные вопросы
- •Цель лекции
- •План лекции
- •1 Шифрование с открытым ключом
- •2 Модульная арифметика
- •Контрольные вопросы
- •Литература
- •Internet-ресурсы
2 Ошибки передачи данных
Когда информация передается между различными частями компьютера, или с Земли на Луну и обратно, или просто оставляется на запоминающем устройстве, существует вероятность того, что полученный двоичный код не тождественней исходному коду. Частицы пыли или жира на магнитном носителе или сбой схемы могут привести к неправильной записи или к неправильному чтению данных. Кроме того, фоновое излучение некоторых устройств может привести к изменению кода, хранящегося в оперативной памяти машины.
Для решения таких проблем было разработано большое количество методов кодирования, позволяющих обнаружить и даже исправить ошибки. Сегодня эти методы включены во внутренние составляющие вычислительных машин и не видны пользователю. Тем не менее их наличие является важным и составляет значительную часть научных исследований. Поэтому мы рассмотрим некоторые из этих методов, обеспечивающих надежность современного компьютерного оборудования.
Контрольный разряд четности. Простой метод обнаружения ошибок основывается на том принципе, что если известно, что обрабатываемый двоичный код должен содержать нечетное число единиц, а полученный код содержит четное число единиц, то произошла ошибка. Для того чтобы использовать этот принцип, нам нужна система, в которой каждый код содержит нечетное число единиц. Этого легко достичь, добавив дополнительный разряд, контрольный разряд соответствия (parity bit), на место старшего разряда. (Следовательно, каждый 8-битовый код ASCII станет 9-битовым, а 16-битовой дополнительный код станет 17-битовым.) В каждом случае мы присваиваем этому разряду значение 1 или 0, так чтобы весь код содержал нечетное число единиц. Например, ASCII-код буквы А становится 101000001 (контрольный разряд четности 1), а код буквы F становится 001000110 (контрольный разряд четности 0) (рис. 1.28). Хотя 8-битовый код А содержит четное число единиц, а 8-битовый код F — нечетное, 9-битовый код этих символов содержит нечетное количество единиц. Теперь, когда мы модифицировав нашу систему кодирования, код с четным числом единиц будет означать, что произошла ошибка и что обрабатываемый двоичный код — неправильный.
Рисунок 1 - ASCII-коды букв А и F, измененные для проверки на нечетность
Система контроля, описанная выше, называется контролем нечетности (odd parity), так как мы построили нашу систему таким образом, что каждый код содержит нечетное число единиц. Существует также метод-антипод — контроль четности (even parity). Б таких системах каждый двоичный код содержит четное число единиц, и, следовательно, об ошибке говорит появление кода с нечетным числом единиц.
Сегодня использование контрольных разрядов четности в оперативной памяти компьютера довольно распространено. Хотя мы говорили, что ячейка памяти машин состоит из восьми битов, на самом деле она состоит из девяти битов, один из которых используется в качестве контрольного бита. Каждый раз, когда 8-битовый код передается в запоминающую схему, схема добавляет контрольный бит соответствия и сохраняет получающийся 9-битовый код. Если код уже был получен, схема проверяет его на четность. Если в нем нет ошибки, память убирает контрольный бит и возвращает 8-битовый код. В противном случае память возвращает восемь информационных битов с предупреждением о том, что возвращенный код может не совпадать с исходным кодом, помещенным в память.
Длинные двоичные коды часто сопровождает набор контрольных битов четности, которые образуют контрольный байт. Каждый разряд в байте соответствует определенной последовательности битов, находящейся в коде. Например, один контрольный бит может соответствовать каждому восьмому биту кода, начиная с первого, а другой может соответствовать каждому восьмому биту, начиная со второго. В этом случае больше вероятность обнаружить скопление ошибок в какой-либо области исходного кода, поскольку они будут находиться в области действия нескольких контрольных битов четности. Разновидностью контрольного байта являются такие схемы для обнаружения ошибок, как контрольная сумма и циклический избыточный код.
Коды с исправлением ошибок. Хотя использование контрольного разряда четности и позволяет обнаружить ошибку, но не дает возможности исправить ее. Многие удивляются тому, что коды с исправлением ошибок построены таким образом, что с их помощью можно не только найти ошибку, но и исправить ее. Интуиция подсказывает нам, что мы не сможем исправить ошибку в полученном сообщении, не зная информацию, которая в нем содержится. Однако простой корректирующий код представлен на рис. 2.
Рисунок 2 – Коды с исправлением ошибок
Для того чтобы понять, как работает этот код, определим сначала расстояние Хемминга (Hamming distance) между двумя кодами как число различающихся разрядов. Это расстояние названо в честь Р. В. Хемминга (R. W. Hamming), который первым стал исследовать коды с исправлением ошибок, поняв ненадежность релейных машин в 40-х годах XX века. Например, расстояние Хемминга между кодами символов А и В равно четырем (см. рис. 1.29), а расстояние Хемминга между В и С равно трем. Важное свойство этой системы кодирования состоит в том, что расстояние Хемминга между любыми двумя кодами больше или равно трем. Поэтому если один бит в коде будет изменен, ошибку можно будет обнаружить, так как результат не будет допустимым кодом. (Для того чтобы код выглядел, как другой допустимый код, мы должны изменить по меньшей мере три бита.)
Кроме того, если появится ошибка в коде (см. рис. 1.29), мы сможем понять, как выглядел исходный код. Расстояние Хемминга между измененным кодом и исходным будет равно единице, а между ним и другими допустимыми кодами — по меньшей мере двум. Для того чтобы расшифровать сообщение, мы просто сравниваем каждый полученный код с кодами в системе до тех пор, пока не найдем код, находящийся на расстоянии, равном единице, от исходного кода. Это и будет правильный символ. Например, предположим, что мы получили код 010100. Если мы сравним его с другими кодами, то получим таблицу расстояний (рис. 3). Следовательно, мы можем сделать вывод, что был послан символ D, так как между его кодом и полученным кодом наименьшее расстояние.
Рисунок 3 – Расшифровка кодов 010100 с использованием кодов из рисунка 2
Вы увидите, что использование этой системы (коды на рис. 2) позволяет обнаружить до двух ошибок в одном коде и исправить одну. Если мы создадим систему, в которой расстояние Хемминга между любыми двумя кодами будет равно самое меньшее пяти, мы сможем обнаружить до четырех ошибок в одном коде и исправить две. Конечно, создание эффективной системы кодов с большими расстояниями Хемминга представляет собой непростую задачу. В действительности, она является частью раздела математики, который называется алгебраической теорией кодов и входит в линейную алгебру и теорию матриц.
Методы исправления ошибок широко применяются для того, чтобы повысить надежность компьютерного оборудования. Например, они часто используются ii дисководах для магнитных дисков большой емкости, чтобы уменьшить вероятность того, что изъян на магнитной поверхности диска разрушит данные. Кроме того, главное различие между форматом первоначальных компакт-дисков, которые использовались для звукозаписей, и более поздним форматом, который используется для хранения данных в компьютере, состоит в степени исправления ошибок. Формат CD-DA включает в себя возможности исправления ошибок, которые сводят частоту появления ошибок к одной ошибке на два компакт-диска. Этого достаточно для звукозаписи, но компании, использующие компакт-диски для поставки программного обеспечения покупателям, сказали бы, что наличие дефектов в 50 процентах дисков — слишком много. Поэтому в компакт-дисках для хранения данных применяются дополнительные возможности исправления ошибок, сокращающие вероятность появления ошибки до одной ошибки на 20 000 дисков.