Контроль чётности
Контроль чётности (англ. parity check) — это метод обнаружения ошибок в цифровых данных, основанный на проверке количества единичных битов в блоке данных (обычно байте или слове) на чётность или нечётность. Относится к классу помехоустойчивого кодирования и является одним из простейших способов обеспечения целостности информации при передаче или хранении. Контроль чётности не позволяет исправлять ошибки, но даёт возможность обнаружить однократную ошибку (или любое нечётное количество ошибок) в контролируемом блоке.
Принцип работы
Метод заключается в добавлении к каждому блоку данных (например, к 7 битам информации) одного дополнительного бита — бита чётности (parity bit). Значение этого бита устанавливается таким образом, чтобы общее количество единиц в блоке (включая сам бит чётности) было либо чётным (чётный контроль, even parity), либо нечётным (нечётный контроль, odd parity).
При передаче или чтении данных устройство повторно вычисляет бит чётности для полученного блока и сравнивает его с переданным. Если значения не совпадают, фиксируется ошибка. Если совпадают — данные считаются корректными, хотя это не гарантирует отсутствия ошибок (например, две ошибки в одном блоке не изменят чётность).
Чётный контроль (Even Parity)
При чётном контроле бит чётности выбирается так, чтобы общее количество единичных битов в блоке (включая бит чётности) было чётным. Например, если исходные данные содержат 3 единицы, бит чётности устанавливается в 1, чтобы получить 4 единицы (чётное число). Если единиц уже чётное количество (например, 2), бит чётности равен 0.
Нечётный контроль (Odd Parity)
При нечётном контроле бит чётности выбирается так, чтобы общее количество единиц было нечётным. Если исходные данные содержат 3 единицы, бит чётности устанавливается в 0 (остаётся 3 — нечётное). Если единиц 2, бит чётности равен 1 (становится 3 — нечётное).
История
Контроль чётности как метод обнаружения ошибок начал применяться в ранних цифровых вычислительных системах и телекоммуникациях. Одним из первых массовых применений стали перфоленты и перфокарты, где бит чётности добавлялся для контроля правильности считывания отверстий. В 1950-х годах метод был стандартизирован в ряде протоколов передачи данных, включая асинхронный последовательный интерфейс (RS-232). В 1960-х годах контроль чётности стал частью конструкции оперативной памяти (RAM) в мейнфреймах, а затем и в персональных компьютерах.
Применение
Оперативная память (RAM)
В модулях памяти с контролем чётности (parity RAM) каждый байт данных дополняется одним битом чётности. При каждом чтении контроллер памяти проверяет чётность и в случае несовпадения генерирует сигнал ошибки (обычно немаскируемое прерывание, NMI). Такая память использовалась в серверах и рабочих станциях для повышения надёжности. В современных системах контроль чётности в оперативной памяти вытеснен более сложными кодами коррекции ошибок (ECC, Error-Correcting Code), которые могут не только обнаруживать, но и исправлять однобитовые ошибки.
Последовательные интерфейсы
В протоколах асинхронной последовательной передачи данных (UART, RS-232) бит чётности является одним из параметров кадра. Передатчик и приёмник договариваются о типе контроля (чётный, нечётный, без контроля). При обнаружении ошибки приёмник может запросить повторную передачу или проигнорировать данные. В современных интерфейсах (USB, Ethernet) контроль чётности не используется, уступив место более надёжным циклическим избыточным кодам (CRC).
Хранение данных
В некоторых системах хранения данных (например, RAID-массивы уровня 3 или 4) контроль чётности применяется на уровне блоков для восстановления информации при отказе одного диска. Однако в современных RAID-системах чаще используются коды Рида — Соломона или XOR-суммы.
Телекоммуникации
В ранних протоколах передачи данных (например, в телеграфии) контроль чётности использовался для обнаружения ошибок, вызванных помехами в линии. В современных цифровых системах связи (GSM, Wi-Fi) контроль чётности является частью более сложных схем помехоустойчивого кодирования, таких как свёрточные коды и турбокоды.
Ограничения и недостатки
- Неспособность обнаружить чётное количество ошибок. Если в блоке данных произошло 2, 4, 6 и т. д. ошибок, чётность останется неизменной, и ошибка не будет обнаружена.
- Отсутствие возможности исправления. Контроль чётности лишь сигнализирует о наличии ошибки, но не указывает, какой именно бит повреждён.
- Низкая эффективность при высокой вероятности ошибок. В каналах с большим уровнем шума контроль чётности даёт много ложных срабатываний и пропусков.
Разновидности
Горизонтальный и вертикальный контроль чётности
При передаче блоков данных (например, матрицы битов) может применяться комбинация горизонтального (по строкам) и вертикального (по столбцам) контроля чётности. Это позволяет не только обнаруживать, но и локализовать одиночную ошибку (на пересечении строки и столбца с нарушением чётности). Такой метод называется двумерным контролем чётности (two-dimensional parity check) и использовался, например, в протоколах передачи данных IBM BSC.
Контроль чётности в RAID
В RAID-массивах уровня 5 и 6 контроль чётности вычисляется не для отдельных байтов, а для блоков данных (обычно размером 512 байт или 4 КБ). При отказе одного диска данные восстанавливаются путём вычисления XOR-суммы оставшихся дисков и блока чётности. Этот метод является разновидностью контроля чётности, но с возможностью восстановления.
Интересные факты
- В ранних компьютерах (например, IBM System/360) контроль чётности был обязательным для всех модулей памяти, и его отсутствие считалось серьёзным дефектом.
- В некоторых архитектурах (например, в микропроцессорах Intel 8086) бит чётности (PF, Parity Flag) в регистре флагов автоматически устанавливается на основе результата последней арифметической или логической операции, что позволяет программно реализовать контроль чётности.
- Контроль чётности используется в некоторых протоколах передачи данных для обнаружения ошибок в заголовках пакетов (например, в IPv4 — контрольная сумма заголовка, хотя она не является строго битом чётности).
Источники
- Таненбаум Э., Уэзеролл Д. «Компьютерные сети». 5-е издание. — СПб.: Питер, 2012.
- Хэмминг Р. В. «Коды с обнаружением и исправлением ошибок». — Bell System Technical Journal, 1950.
- ГОСТ 34.311-95 «Информационная технология. Криптографическая защита информации. Функция хэширования».
- Intel Corporation. «Intel 64 and IA-32 Architectures Software Developer's Manual». Volume 1, Chapter 3.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →