Читать «Архитектура компьютера» онлайн - страница 76

Эндрю Таненбаум

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

ПередачаОбратный Прямой с преобразованиемпорядок порядок прямого порядка Передачаследования следования следования с перестановкойбайтов байтов байтов в обратный байтов
Рис. 2.10. Запись данных о сотруднике для машины с прямым порядком следования байтов (а); та же запись для машины с обратным порядком следования байтов (б); результат передачи записи с машины с прямым порядком следования байтов на машину с обратным порядком следования байтов (в); результат перестановки байтов в предыдущем случае (г)

налево по одному байту, начиная с байта 0 и заканчивая байтом 19. Для простоты будем считать, что биты не инвертируются при передаче. Таким образом, байт 0 переносится из первой машины на вторую в байт 0 и т. д., как показано на рис. 2.10, в.

Компьютер, получивший запись, имя печатает правильно, но возраст получается 21 X 224, и номер отдела тоже искажается. Такая ситуация возникает, поскольку при передаче записи порядок следования букв в слове меняется так, как нужно, но при этом порядок следования байтов в целых числах тоже меняется, что приводит к неверному результату.

Очевидное решение проблемы — использование программы, которая бы инвертировала байты в слове после создания копии. Результат такой операции представлен на рис. 2.11, г. Мы видим, что числа стали правильными, однако строка превратилась в «MIJTIMS», при этом буква «Н» вообще расположилась отдельно. Строка переворачивается потому, что компьютер сначала считывает байт 0 (пробел), затем байт 1 (M) и т. д.

Простого решения не существует. Есть один способ, но он неэффективен. (Нужно перед каждой единицей данных помещать заголовок, информирующий, какой тип данных следует за ним — строка, целое и т. д. Это позволит компьютеру-получателю производить только необходимые преобразования.) Ясно, что отсутствие стандарта упорядочивания байтов является серьезной проблемой при обмене информацией между разными машинами.

Код исправления ошибок

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

Чтобы понять, как обращаться с ошибками, необходимо внимательно изучить, что представляют собой эти ошибки. Предположим, что слово состоит из m бит данных, к которым мы дополнительно прибавляем r бит (контрольных разрядов). Пусть общая длина слова составит n бит (то есть n = m + r). Единицу из n бит, содержащую m бит данных и r контрольных разрядов, часто называют кодовым словом.