Вы находитесь на странице: 1из 55

Контроль

() Контроль 2016 год 1 / 54


Обеспечение надежности
передачи и хранения информации

() Контроль 2016 год 2 / 54


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

Шеннон доказал теоретическую возможность передачи сообщения без


потерь информации по реальным каналам, если при этом выполнен ряд
условий. Задача была сформулирована в виде теоремы, которая затем
получила строгое математическое доказательство.

Первая теорема Шеннона относилась к кодированию информации при


передаче по идеальному каналу связи. Критерием оптимальности
кодирования служила избыточность кода, которую, как было показано,
можно сделать сколь угодно близкой к нулю, применяя блочное кодирование
по методу Хаффмана.
Критерием оптимальности кодирования при передаче по реальным каналам
может служить уровень потерь информации.
() Контроль 2016 год 3 / 54
Вторая теорема Шеннона

Вторая теорема Шеннона относится к реальным каналам связи и


гласит следующее:

При передаче информации по каналу с шумом всегда име-


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

Смысл данной теоремы в том, что при передаче по реальным каналам можно
закодировать сообщение таким образом, что действие шумов не приведет к
потере информации. Это достигается за счет повышения избыточности кода
(то есть увеличения длины кодовой цепочки); безусловно, возрастает время
передачи, что следует считать платой за надежность.
При этом в теореме и при ее доказательстве не указывается, каким образом
следует осуществлять такое кодирование — она лишь утверждает
принципиальную его возможность; поиск же кода – самостоятельная задача.
() Контроль 2016 год 4 / 54
Потери при хранении информации
Пластмассовые корпуса микросхем памяти компьютеров содержат,
хоть и в ничтожных количествах, тяжелые элементы, которые
вследствие радиоактивного распада испускают α-частицы. Попадая в
полупроводниковые элементы памяти, они могут вызвать изменение
их состояния, то есть искажение хранимой информации. Как часто
можно ожидать такого сбоя? Лабораторные эксперименты показали,
что «время наработки на отказ» отдельно взятого элемента
превышает миллион лет. Казалось бы, это обстоятельство не дает
оснований для беспокойства. Однако следует учесть, что общее
количество подобных элементов в памяти современного компьютера
весьма велико. Например, память емкостью 1 Мбайт содержит
8388608 двоичных элементов1 . Следовательно, среднее время
появления ошибки составит:

106 1
t≈ ≈ года ≈ 45 дней.
8 · 106 8
1
8 транзисторов на бит.
() Контроль 2016 год 5 / 54
Это уже совсем небольшая величина, которая, с учетом того, что
память современных ПК составляет 32 – 64 Мбайт, сокращается до
1 дня. В то же время нет экономичных технических способов
исключения влияния этих α-частиц. Данная оценка показывает, что
проблема защиты информации от искажения даже при ее хранении
весьма актуальна.
Решение проблемы, как уже было сказано, состоит в использовании
таких методов кодирования информации, которые позволили бы
контролировать правильность передачи (хранения) и при обнаружении
ошибки исправлять ее. При этом можно в качестве самостоятельных
рассмотреть две ситуации:
1. кодирование обеспечивает только установление факта искажения
информации — в этом случае исправление производится путем ее
повторной передачи;
2. кодирование позволяет локализовать и автоматически исправить
ошибку передачи (хранения).

() Контроль 2016 год 6 / 54


Условия использования кодов,
обнаруживающих (исправляющих) ошибки

Общим условием является использование только равномерных кодов.


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

Надежность обеспечивается тем, что наряду с битами,


непосредственно кодирующими сообщение (будем называть их
информационными битами), передаются (хранятся) дополнительные
биты, по состоянию которых можно судить о правильности передачи
(будем называть их контрольными битами).

() Контроль 2016 год 7 / 54


Избыточность сообщения
При равномерном кодировании2 сообщения длина кодовой цепочки на знак
(или группу знаков) k складывается из длины информационной части ki и
числа контрольных битов kc . Очевидно, k ≥ ki . Подобно введенной ранее
(формула ??) величине Q, характеризующей относительную избыточность
кода при передаче по идеальному каналу, в рассматриваемом случае удобно
определить избыточность сообщения для реального канала L следующим
образом:
k ki + kc kc
L= = =1+ (1)
ki ki ki
Относительная избыточность сообщения — это характеристика,
показывающая, во сколько раз требуется удлинить сообщение, чтобы
обеспечить его надежную (безошибочную) передачу (хранение).
Очевидно, что L характеризует эффективность кодирования при передаче по
реальным каналам и при равных надежностях передачи предпочтение
должно быть отдано тому способу кодирования, при котором избыточность
окажется наименьшей. Правда, для практики важна также простота
технической реализации того или иного способа кодирования.
2
Далее в этой главе будет идти речь только о равномерном кодировании
() Контроль 2016 год 8 / 54
Коды, обнаруживающие ошибку

() Контроль 2016 год 9 / 54


Коды, обнаруживающие ошибку

Задача обнаружения ошибки может быть решена довольно легко.


Достаточно просто передавать каждую букву сообщения дважды.
Например, при необходимости передачи слова «гора» можно передать
«ггоорраа». При получении искаженного сообщения, например,
«гготрраа» с большой вероятностью можно догадаться, каким было
исходное слово.
Конечно, возможно такое искажение, которое делает неоднозначным
интерпретацию полученного сообщения, например, «глоорраа»,
«ггоорреа» или «кгоорраа». Однако цель такого способа кодирования
состоит не в исправлении ошибки, а в фиксации факта искажения и
повторной передаче части сообщения в этом случае.
Недостаток данного способа обеспечения надежности состоит в том,
что избыточность сообщения оказывается очень большой — очевидно,
L = 2.

() Контроль 2016 год 10 / 54


Контроль по чётности. Обнаружение одиночной ошибки

Поскольку ошибка должна быть только обнаружена, можно


предложить другой способ кодирования. Пусть имеется цепочка
информационных бит длиной ki . Добавим к ним один контрольный
бит (kc = 1), значение которого определяется тем, что новая кодовая
цепочка из ki + 1 бит должна содержать чётное количество единиц —
по этой причине такой контрольный бит называется битом чётности.

Например, для информационного байта 01010100 бит чётности будет


иметь значение 1, а для байта 11011011 бит чётности равен 0.
В случае одиночной ошибки передачи число перестает быть чётным,
что и служит свидетельством сбоя.

() Контроль 2016 год 11 / 54


Эффективность контроля по чётности

Например, если получена цепочка 110110111 (контрольный бит


выделен цветом), ясно, что передача произведена с ошибкой,
поскольку общее количество единиц равно 7, то есть нечётно.
Предложенный способ кодирования не позволяет установить, в каком
конкретно бите содержится ошибка и, следовательно, не дает
возможности ее исправить. Избыточность сообщения при этом равна:
ki + 1 1
L= =1+
ki ki
На первый взгляд кажется, что путем увеличения ki , можно сколь
угодно приближать избыточность к ее минимальному значению
(Lmin = 1). Однако с ростом ki , во-первых, растет вероятность парной
ошибки, которая контрольным битом не отслеживается; во-вторых,
при обнаружении ошибки потребуется заново передавать много
информации.
Поэтому обычно ki = 8 или 16 и, следовательно, L = 1,125 (1,0625).
() Контроль 2016 год 12 / 54
Коды, исправляющие ошибку

() Контроль 2016 год 13 / 54


Коды, исправляющие ошибку
По аналогии с предыдущим пунктом можно было бы предложить
простой способ установления ошибки – передавать каждый символ
трижды, например, «гггооорррааа» — тогда при получении сообщения
«гггооопррааа» ясно, что ошибочной оказывается буква «п» и ее
следует заменить на «р». Безусловно, при этом предполагается, что
вероятность появления парной ошибки невелика.
Такой метод кодирования приводит к избыточности сообщения L = 3,
что неприемлемо с экономической точки зрения.
Прежде, чем обсуждать метод кодирования, позволяющий
локализовать и исправить ошибку передачи, произведем некоторые
количественные оценки. Наличие шумов в канале связи ведет к
частичной потере передаваемой информации на величину
возникающей неопределенности, которая при передаче одного бита
исходного сообщения составляет
H = −p · log2 p − (1 − p) · log2 (1 − p),
где p — вероятность появления ошибки в сообщении.
() Контроль 2016 год 14 / 54
Избыточность, позволяющая восстановить информацию

Для восстановления информационного содержания сообщения,


очевидно, следует дополнительно передать количество информации не
менее величины ее потерь, то есть вместо передачи каждого 1 бит
информации следует передавать 1 + H бит. В этом случае
избыточность сообщения составит
1+H
Lmin = = 1 − p · log2 p − (1 − p) · log2 (1 − p). (2)
1
Приведенную избыточность следует считать минимальной (это
указывает ее индекс), поскольку при передаче сообщения по каналу,
характеризуемому вероятностью искажения p, при избыточности,
меньшей Lmin восстановление информации оказывается невозможным.

() Контроль 2016 год 15 / 54


Пример

Какое минимальное количество контрольных бит должно передаваться


вместе с 16-ю информационными для обеспечения восстановимости
информации, если вероятность искажения составляет 1%?
Подставляя p = 0, 01 в (2), находим Lmin ≈ 1,081. При ki = 16 из (1)
получаем k = ki · Lmin ≈ 17,29. Следовательно, с учетом того, что
количество контрольных бит выражается целым числом,
kc ≥ k − ki = 2.
Реальная избыточность согласно (1) составит L = 1,125.
Выражение (2) устанавливает границу избыточности, при которой
возможно восстановление переданной информации, однако, не
указывает, каким образом следует осуществить кодирование, чтобы
ошибка могла быть локализована (то есть определено, в каком бите
она находится) и, естественно, устранена.

() Контроль 2016 год 16 / 54


Код Хемминга, локализующий одиночную ошибку
Метод кодирования, локализующий одиночные ошибки, был
предложен в 1948 г. Р. Хеммингом; построенные по этому методы
коды получили название коды Хемминга.
Между информационными и контрольными разрядами
устанавливается определённая зависимость, позволяющая в случае
искажения одного разряда восстановить его значение.
Количество контрольных разрядов в коде Хемминга определяется
выражением
kc = k − ki = log2 (k + 1).
Например, если мы собираемся передавать 15-битовые посылки в коде
Хемминга, то log2 (15 + 1) = 4 из них должны быть контрольными.
Если пронумеровать все передаваемые биты, начиная с 1, то
контрольные должны располагаться в позициях, номера которых
соответствую целым степеням двойки:
nk = 2s ; s ∈ {0, 1, 2, . . . , (kc − 1)}.
() Контроль 2016 год 17 / 54
Множества Хемминга
Образуем множества номеров передаваемых разрядов таким образом,
что в множество Es войдут номера, содержащие единицу в s-м разряде
своего двоичного представления. Так, для k = 15 контрольными будут
разряды 1 = 20 , 2 = 21 , 4 = 22 , и 8 = 23 , а множества Хемминга Es
сформируем следующим образом:

E0 = {1, 3, 5, 7, 9, 11, 13, 15}; E1 = {2, 3, 6, 7, 10, 11, 14, 15};


E2 = {4, 5, 6, 7, 12, 13, 14, 15}; E3 = {8, 9, 10, 11, 12, 13, 14, 15}.

Заметим, что каждый контрольный разряд входит лишь в одно «своё»


множество, а все остальные разряды в каждом множестве –
информационные. Для формирования значений всех контрольных
разрядов необходимо, чтобы они дополняли до чётности
информационные разряды своего множества, то есть для всех s
X
ai ≡ 0 mod 2 .
i∈Es

() Контроль 2016 год 18 / 54


Простой пример

Пусть необходимо передать 11-битный код 10110101011 (старший


разряд – слева и помещается в 15 разряд посылки при передаче.
На рисунке показано, как формируются контрольные разряды для
этого кода.

() Контроль 2016 год 19 / 54


Простой пример

Пусть необходимо передать 11-битный код 10110101011 (старший


разряд – слева и помещается в 15 разряд посылки при передаче.
На рисунке показано, как формируются контрольные разряды для
этого кода.

Sum Mod 2 Sum Mod 2 Sum Mod 2 Sum Mod 2

9 10 11 12 13 14 15 5 6 7 12 13 14 15 3 6 7 10 11 14 15 3 5 7 9 11 13 15
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
1 1 0 0 1 1 1 1 1 1 0 0 1 1 1

() Контроль 2016 год 19 / 54


Декодирование кода Хемминга
В таком виде посылка (15 бит) передаётся по линии связи. На
приёмном конце контролируется чётность по всем четырём
множествам Хемминга Es . Если произошла одиночная ошибка, то
чётность в некоторых множествах Хемминга будут нарушена, причём
двоичный вектор, составленный из значений чётности множеств
E3 . . . E0 однозначно укажет номер ошибочного разряда, что позволяет
автоматически исправить его.
Действительно, представим, что в посылке, приведённой на рисунке 7,
в процессе передачи был искажён разряд 6. Тогда при свёртке
множеств Хемминга чётность будет нарушена в тех из них, в которые
входит этот разряд и, поскольку 6 ∈
/ E0 , 6 ∈ E1 , 6 ∈ E2 , 6 ∈
/ E3 ,
получим следующие значения:
P P
a ≡ 0 mod 2 ; a ≡ 1 mod 2 ;
Pi∈E0 i Pi∈E1 i
a
i∈E2 i ≡ 1 mod 2 ; i∈E3 ai ≡ 0 mod 2 ,

то есть код номера ошибочного разряда — 01102 = 610 .


() Контроль 2016 год 20 / 54
Избыточность кодов Хемминга для различных длин
передаваемых последовательностей
Число Число Избыточность,
информационных битов контрольных битов L
8 4 1,5
16 5 1,31
32 6 1,06
Из сопоставления видно, что выгоднее передавать и хранить более длинные
последовательности битов. При этом, однако, избыточность не должна
оказаться меньше Lmin для выбранного канала связи.
Безусловно, данный способ кодирования требует увеличения объема памяти
компьютера приблизительно на одну треть при 16-битной длине машинного
слова, однако, он позволяет автоматически исправлять одиночные ошибки.
Поэтому, оценивая время наработки на отказ, следует исходить из
вероятности появления парной ошибки в одной последовательности.
Расчеты показывают, что для указанного ранее количества ячеек в памяти
объемом 1 Мбайт среднее время появления ошибки составляет более 80 лет,
что, безусловно, можно считать вполне приемлемым с практической точки
зрения. () Контроль 2016 год 21 / 54
Обнаружение двойных ошибок кодом Хемминга
Код Хемминга может обнаруживать (но не исправлять!) двойные ошибки.
Для этого необходимо в состав слова включить дополнительно нулевой
контрольный разряд, в котором записывать дополнение до чётности всего
передаваемого слова (заметим, что код номера этого разряда – 00 . . . 0 не
содержит ни одной единицы, поэтому разряд не принадлежит ни одному
множеству Es ).
В случае безошибочной передачи ни общая чётность слова, ни чётность всех
Es не будет нарушена, поэтому значения свёрток на чётность как всего кода,
так и множеств Es будут равны 0.
При двойной ошибке общая чётность слова так же не изменится, однако
чётность некоторых из множеств Es обязательно будет нарушена, поскольку
никакая пара разрядов не принадлежит одновременно всем множествам
Хемминга.
Таким образом, сохранение чётности всего слова при нарушении чётности
отдельных множеств Es – признак двойной ошибки. При этом код на
выходах схем свёртки по множествам Es нельзя рассматривать как номер
ошибочного разряда.
() Контроль 2016 год 22 / 54
Контроль арифметических и
логических операций

() Контроль 2016 год 23 / 54


Контроль арифметических и логических операций

Контрольные разряды, используемые для контроля арифметических и


логических операций, формируются по другим принципам, чем для
контроля передач.
Чаще всего для этих целей используются методы контроля по модулю,
причём контрольные коды в этом случае могут использоваться и для
контроля передачи (хранения) информации.

() Контроль 2016 год 24 / 54


Математическое обоснование метода

() Контроль 2016 год 25 / 54


Контрольный код числа
Говорят, что «A сравнимо с ra по модулю q» если между A, ra и q
имеет место следующее соотношение:

A = q · t + ra , (3)

где
A, q, t, ra — целые числа;
A — любое контролируемое n-разрядное число;
q — модуль или остаток;
t — частное;
ra — наименьший остаток от деления числа A на q
(контрольный код числа A).
Записывается соотношение (3) следующим образом:

A ≡ ra mod q . (4)

() Контроль 2016 год 26 / 54


Модуль контроля
Контроль по модулю q = 1 не имеет смысла, так как A ≡ 0 mod 1 при
любых A. Поэтому q ∈ {2, 3, . . . , s}. Верхняя граница модуля — s
ограничена соображениями экономичности и надёжности схем
контроля. Действительно, чем больше q, тем сложнее схемы контроля,
причём сложность схемы растёт значительно быстрее, чем
повышается надёжность контроля.
Остаток ra может принимать значения в пределах
0 ≤ ra ≤ q − 1 . (5)
Иногда, для обнаруженя «нулевых кодов» (например, при отказе или
отсутсвии связи) удобнее пользоваться остатком «с избытком 1»:
1 ≤ ra ≤ q . (6)
Контроль по модулю осуществляется путём сопоставления каждому
числу Ai контрольного кода rai — остатка от деления A на выбранный
модуль q и выполнения на остатками тех же операций, что и над
самими числами.
() Контроль 2016 год 27 / 54
Контроль по модулю
Действительно, пусть
A1 ≡ ra1 mod q
A2 ≡ ra2 mod q
.........
Am ≡ ram mod q
Сложим почленно эти тождества и получим:
m
X m
X
Ai ≡ rai mod q . (7)
i=1 i=1
Аналогично для умножения:
m
Y m
Y
Ai ≡ rai mod q . (8)
i=1 i=1

Таким образом, сумма (произведение) чисел сравнима с суммой


(произведением) остатков этих же чисел по одному и тому же модулю.
() Контроль 2016 год 28 / 54
Виды контроля

Различают два вида контроля по модулю — числовой и цифровой.


В общем случае контрольный код ra как функцию числа A можно
представить в виде тождества

f (A) ≡ ra mod q . (9)

Для двух видов контроля рассматривается два вида функции f (A).


Если f1 (A) = A и, следовательно,

A ≡ ra mod q , (10)

имеет место числовой контроль.


Для числового контроля справедливы тождества (7) и (8), поэтому
они широко используются для контроля арифметических операций.

() Контроль 2016 год 29 / 54


Выбор модуля

Если модуль равен основанию системы счисления (q = p), то

A ≡ a1 mod p,

где a1 — младший разряд числа A и, следовательно, контроль не


имеет смысла.

При q = p h будут контролироваться только h младших разрядов


числа; даже одиночная ошибка в любом разряде, старше h–го не будет
обнаружена таким контролем.

() Контроль 2016 год 30 / 54


Цифровой контроль

При цифровом контроле


n
X
f2 (A) = ai ≡ ra mod q , (11)
i=1

где ai — i-я цифра числа A.

Тождества (7) и (8) выполняются для цифрового контроля при


условии учёта всех межразряднх переносов, возникающих в операции.
Это обстоятельство сильно затрудняет цифровой контроль
арифметических операций. С другой стороны, получить контрольные
коды (остатки) в общем случае проще для цифрового контроля.

() Контроль 2016 год 31 / 54


Числовой контроль передачи информации

Контроль по модулю передачи и хранения информации может с


успехом осуществляться и для цифровой формы, поскольку в этих
операциях отсутствуют межразрядные связи.
Например, при p = q = 2
n
X
f20 (A) = ai ≡ ra mod p , (12)
i=1

имеем знакомый нам уже по предыдущим главам контроль по


чётности; обычно, в соответствии с (6) применяют контроль по
нечётности.

В частных случаях при некоторых соотношениях p и q можно


определять контрольные коды по выражению (11), при этом результат
будет совпадать со значением, полученым по выражению (10).

() Контроль 2016 год 32 / 54


Процесс образования остатка
по произвольному модулю

() Контроль 2016 год 33 / 54


Целое число в позиционной системе счисления
Любое целое n-разрядное число в позиционной системе счисления
может быть представлено в виде:
n−1
X
A = an−1 · p n−1 + an−2 · p n−2 + . . . + a1 · p 1 + a0 · p 0 = ai · p i , (13)
i=0
где
p — основание системы счисления,
ai — цифры числа A.
Если q — модуль, по которому ведётся сравнение, то обозначим
p =q−γ . (14)
Подставим значение p из (14) в (13), получим
n−1
X
A= ai · (q − γ)i . (15)
i=0

() Контроль 2016 год 34 / 54


Степень разности

Степень разности в самом общем виде можно представить:

(q − γ)i = q i − i · q i−1 + i 2 · q i−2 − . . . +


i(i − 1) . . . (i − k + 1) i−k k
+ (−1)k q γ + . . . + (−1)i · γ i . (16)
k!
Из (16) видно, что в образовании остатка по модулю q участвует
только последний член выражения, так как все остальные содержат в
качестве сомножителя q в целой положительной степени. Тогда
n−1
X
ra ≡ ai · (−1)i · γ i mod q . (17)
i=0

() Контроль 2016 год 35 / 54


Практическое применение

Выражение (17) в самом общем виде отображает процесс нахождения


остатка, однако практически его трудно использовать при больших
значениях n.
Например, при n = 36, p = 2, q = 7 получим для γ n−1

γ n−1 = (7 − 2)36−1 = 535 ,

что вычислить практически невозможно.

() Контроль 2016 год 36 / 54


Весовая функция разряда

Упростим формулу (17). Обозначим

σi = (−1)i · γ i . (18)
Поскольку мы, согласно (5), оперируем с наименьшим остатком ra по
модулю q, то можно в выражении (17) заменить σi на rσi —
наименьший остаток от деления σi на q. Тогда
n−1
X
ra ≡ ai · rσi mod q . (19)
i=0

Назовём rσi весовой функцией разряда i. Зная весовые функции


разрядов легко, пользуясь формулой (19), получить значение ra .

() Контроль 2016 год 37 / 54


Весовая функция разряда (продолжение)

Определим rσi для случая q > p. Этот случай представляет


наибольший практический интерес, так как в большинстве ЭВМ p = 2.
Из (14) имеем γ = q − p. Тогда

σi = (−1)i · γ i = (−1)i · (q − p)i . (20)


Для нахождения rσi ≡ σi mod q разложим степень разности (q − p)i
согласно (16). Очевидно, что в образовании остатка будет участвовать
лишь последний член (−1)i · p i . Тогда

rσi ≡ [(−1)i ]2 · p i mod q ≡ p i mod q . (21)


По аналогии для rσi−1

rσi−1 ≡ p i−1 mod q . (22)

() Контроль 2016 год 38 / 54


Весовая функция разряда (продолжение)

Разделив почленно (21) на (22) получим

rσi pi
≡ mod q , (23)
rσi−1 p i−1
откуда получаем

rσi ≡ rσi−1 · p mod q . (24)

Для младшего разряда i = 0 и из (21) получаем rσ0 = 1 для любых p


и q. Для остальных разрядов весовые функции вычисляются по
формуле (24), а контрольный код числа — по формуле (19).

() Контроль 2016 год 39 / 54


Периодичность весовой функции разрядов

Следует отметить, что весовая функция разрядов rσi — периодическая


функция от числа разрядов n, что облегчает техническую реализацию
схем образования остатка.
Например, для p = 2 и q = 3 имеем:
rσ0 = 1
rσ1 = 1 · 2 mod 3 = 2
rσ2 = 2 · 2 mod 3 = 1
rσ3 = 1 · 2 mod 3 = 2
.........
и так далее.

() Контроль 2016 год 40 / 54


Частный случай – совпадение числовых и цифровых
остатков
Очевидно, что наиболее эффективно решить проблемы образования
контрольных кодов (числовых остатков) можно, если
∀rσi = 1, i ∈ {0, 1, . . . , (n − 1)} . (25)
В этом случае способ нахождения числового остатка совпадает с
нахождением остатка цифрового (сравните формулы (11) и (19) при
выполнении условия (25)).
Определим, при каких p и q выполняется условие (25). Подставим
в (24) rσi = rσi−1 = 1, тогда 1 ≡ 1 · p mod q, то есть остаток от
деления p на q равен 1, следовательно p больше q на 1. Итак, при
q =p−1. (26)
выполняется условие (25), то есть остаток от деления числа A на q
равен остатку от деления на q суммы цифр числа A. На этом
свойстве, в частности, основан известный признак делимости на 9 в
десятичной системе счисления.
() Контроль 2016 год 41 / 54
В двоичной системе счисления единственный модуль, отвечающий
условию (26), равен 1, по нему, как показано выше, контроль
проводить нельзя. Зато можно легко перейти от двоичной системы к
системе с основанием 2m . Если в p-ичной системе счисления
n−1
X
A= ai · p i , (27)
i=0

то в P-ичной системе (P = p m )
k−1
X n
A= ai · (p m )i , где k = . (28)
m
i=0

Практически при контроле арифметических операций используются


модули 3, 7, 15.

() Контроль 2016 год 42 / 54


Контроль арифметических операций

() Контроль 2016 год 43 / 54


Пример контроля арифметических операций

Рассмотрим контроль арифметических операций. Для большей


наглядности выполним эти операции в десятичной системе счисления.
Итак, p = 10, q = 3

A ra B rb A+B rA+B ra + rb
Сложение: 28 1 15 0 43 1 ≡ 1+0
17 2 13 1 30 0 ≡ 2+1

A ra B rb A−B rA−B ra − rb
Вычитание: 28 1 15 0 13 1 ≡ 1−0
17 2 13 1 4 1 ≡ 2−1

A ra B rb A×B rA×B ra × rb
28 1 15 0 420 0 ≡ 1×0
Умножение:
17 2 13 1 221 2 ≡ 2×1
17 2 13 1 220 1 6 = 2×1
() Контроль 2016 год 44 / 54
Контроль логических операций

() Контроль 2016 год 45 / 54


Контроль логических операций

Известно, что логические операции над двоичными векторами


выполняются быстрее и проще, чем арифметические. Это объясняется
отсутствием межразрядных связей при выполнении логических
операций. С другой стороны, одиночная ошибка при выполнении
логических операций никак не влияет на значение других разрядов
числа, как младших, так и старших. Таким образом, каждая ошибка в
логической операции меньше «искажает» правильный результат, чем
в арифметической. Поэтому контроль логических операций
выполняется сложнее и дольше, чем арифметических.

Обычно в систему команд процессора включены логические операции


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

() Контроль 2016 год 46 / 54


Докажем следующее утверждение:

Остаток по произвольному модулю от дизъюнкции двух


чисел, равен сумме остатков этих чисел минус остаток от
конъюнкции этих чисел по тому же модулю.

Введём обозначения:
A, B — двоичные вектора;
ra ≡ A mod q, rb ≡ B mod q;
r& ≡ (A&B) mod q;
r⊕ ≡ (A ⊕ B) mod q;
r∨ ≡ (A ∨ B) mod q.
Тогда сформулированное выше утверждение можно записать
следующим образом:

r∨ ≡ (ra + rb − r& ) mod q.

() Контроль 2016 год 47 / 54


Доказательство (продолжение)

Известно, что арифметическая сумма двух чисел может быть


получена путём сложения двоичного вектора — результата
поразрядной функции неравнозначности (суммы по модулю два) и
сдвинутого на один разряд влево слова переносов.

A + B = (A ⊕ B) + 2 · (A&B) . (29)
Кроме того, очевидно3

A ∨ B = (A ⊕ B) + (A&B) . (30)
Из (29) можно получить

(A ⊕ B) = A + B − 2 · (A&B) . (31)

3
Это можно доказать составлением соответствующих таблиц истинности.
() Контроль 2016 год 48 / 54
Доказательство (окончание)

Подставим значение (A ⊕ B) из (31) в (30):

A ∨ B = A + B − 2 · (A&B) + (A&B) = A + B − (A&B) . (32)


Перейдём от выражений для чисел (32) к выражениям для их
остатков по модулю:

r∨ ≡ (ra + rb − r& ) mod q , (33)


что и требовалось доказать.

Выражение (33) позволяет контролировать операции конъюнкции и


дизъюнкции.

() Контроль 2016 год 49 / 54


Контроль операции дизъюнкции

1. Выполняется операция A&B;


2. Формируется значение r& ;
3. По формуле (33) вычисляется значение r∨ mod q;
4. Выполняется операция A ∨ B;
5. Формируется контрольный код результата операции A ∨ B — r∨0 ;
6. Производится сравнение r∨0 ≡ r∨ mod q.

() Контроль 2016 год 50 / 54


Контроль операции конъюнкции

Из (33) можем получить:

r& ≡ (ra + rb − r∨ ) mod q , (34)


Контроль конъюнкции осуществляется подобно контролю дизъюнкции:
1. Выполняется операция A ∨ B;
2. Формируется значение r∨ ;
3. По формуле (34) вычисляется значение r& mod q;
4. Выполняется операция A&B;
5. Формируется контрольный код результата операции A ∨ B — r&0 ;
6. Производится сравнение r&0 ≡ r& mod q.

() Контроль 2016 год 51 / 54


Контроль операции неравнозначности

Перейдя от выражения (31) к остаткам, получим

r⊕ ≡ (ra + rb − 2 · r& ) mod q , (35)


с помощью которого можно проконтролировать операцию
неравнозначности.
1. Выполняется операция A&B;
2. Формируется значение r& ;
3. Выполняется операция A ⊕ B;
4. Формируется r⊕0 – контрольный код результата операции A ⊕ B
5. По формуле (35) вычисляется значение r⊕ mod q;
6. Производится сравнение r⊕0 ≡ r⊕ mod q.

() Контроль 2016 год 52 / 54


Контроль операции инвертирования

Известно соотношение

B n = (2n − 1) − Bn = En − Bn , (36)
где
Bn — n-разрядный двоичный вектор,
. . . 1} .
En = |11 {z
n
Перейдя в (36) к остаткам, получим

rB ≡ (rE − rB ) mod q . (37)


rE — константа, зависящая от p и q. Для q = 2m − 1 и m кратного n

rE mod (2m − 1) ≡ 0 mod (2m − 1) . (38)

() Контроль 2016 год 53 / 54


Контроль операции инвертирования (окончание)

Подставив (38) в (37) получим

rB ≡ (0 − rB ) mod (2m − 1) ≡ (2m − 1 − rB ) mod (2m − 1) ≡

≡ rB mod (2m − 1)
Итак,
rB ≡ r B mod (2m − 1) , (39)
причём это справедливо лишь для m кратных n.

Выражение (39) позволяет легко осуществлять контроль операции


инвертирования двоичного вектора.

() Контроль 2016 год 54 / 54

Вам также может понравиться