Программное резервирование
Часто нет возможности увеличить надежность вычислительной системы путем ввода резервных элементов, так как могут накладываться жесткие ограничения на габариты, массу, потребляемую мощность и другие параметры аппаратуры. В этом случае прибегают к программным методам повышения надежности и живучести вычислительных систем.
Эти методы можно поделить на три группы:
1. Методы с временной избыточностью.
2. Методы с программной избыточностью.
3. Методы с информационной избыточностью.
К первой группе методов относится многократное решение задач на одном и том же оборудовании и сравнение полученных результатов. При этом корректным считается тот результат, который совпал большее число раз. Такой метод позволяет фиксировать и исправлять сбои, вызванные, например, наводкой в аппаратуре или другими внешними воздействиями.
Если ошибка будет носить стабильный характер, то необходимо прибегать к иным методам. Например, периодически запускать эталонные задачи и сравнивать полученный результат с предполагаемым. Этот метод относится к программной избыточности.
К программной избыточности так же можно отнести выполнение одних и тех же функций на разных модулях вычислительной системы с одними темеи же исходными данными и сравнение полученных результатов. Либо решение задачи разными способами на разных вычислительных системах и выбора правильного на основе мажоритарной логики.
Информационная избыточность – это увеличение количества информации с целью повышения надежности и достоверности передачи или хранения данных.
Информационную избыточность можно поделить на два тип методов:
1. Методы обнаружения ошибок.
2. Методы коррекции ошибок.
Методы обнаружения ошибок позволяют только зафиксировать факт наличия ошибки. Обычно, они применяются в совокупности с программами восстановления данных. Например, если ошибка обнаружена при пересылке данных, то запрашивается повторная отправка. А если ошибка обнаружена в блоке сохраненной информации, то производится ее восстановление из резервной копии.
Например, к методам обнаружения ошибок относится проверка на четность. В этом случае блоки информации при отправке или перед сохранением дополняются до четного количества единиц (в бинарном коде), а при приеме или считывании проверяется, является ли количество единиц четным. Также можно дополнять блоки информации до нечетного количества единиц.
Однако, этот метод может фиксировать только нечетное количество ошибок. Если одновременно произошло четное количество сбоев, то такая ошибка не будет зафиксирована, так как количество единиц останется четным (или нечетным, если используется дополнение до нечетности).
Более надежным является метод контрольного суммирования. Простейшая реализация метода – это сложение байтов массива с переносом разряда переполнения.
Приведем пример подсчета контрольной суммы массива, состоящего из 5 элементов, с помощью этого метода.
Исходный массив: 25; 178; 3; 240; 34.
Подсчет контрольной суммы:
1) KS = 25 + 178 = 203
2) KS = 203 + 3 = 206
3) KS = 206 + 178 = 384
4) KS = 384 – 255 + 1 = 130
5) KS = 130 + 34 = 164
Таким образом, контрольная сумма исходного массива будет 164. В данном случае на третьем шаге контрольного суммирования произошло переполнение байта, отведенного для контрольной суммы, а на четвертом шаге был перенесен разряд переполнения в младший разряд контрольной суммы.
Есть более сложные и надежные методы контрольного суммирования, например, контрольное суммирование CRC, базирующееся на свойствах деления многочлена на многочлен. Фактически CRC является остатком от деления многочлена, соответствующего исходным данным, на порожденный многочлен фиксированной длины. В зависимости от длины порожденного многочлена, различают алгоритмы контрольного суммирования CRC8, CRC16, CRC32 и т.д.
К методам коррекции ошибок относится такое кодирование информации, которое позволяет не только обнаружить ошибку, но и исправить ее. Число ошибок, которое можно исправить, ограничено и зависит от вида применяемого кодирования. Естественно, коды коррекции можно использовать и для обнаружения ошибок, причем они могут обнаружить одновременных ошибок больше, чем в состоянии исправить. Например, к таким кодам относятся коды Хэмминга и сверточные коды.
Программные методы повышения надежности и живучести могут быть достаточно эффективными, и во многих случаях позволяют достичь заданной надежности, не прибегая к увеличению объема аппаратуры и потребляемой мощности. Однако, наиболее эффективным является совмещение программных и аппаратных методов повышения надежности, что обычно и применяют на практике.
|