Перевірка парності Інформатика програмування

Перевірка парності Інформатика програмування



Перевірка парності

Контроль парності або корекція помилок (ECC (код виправлення помилок)) використовується в основному лише у життєво важливих комп'ютерних системах, де неприпустима навіть одна помилка у кілька десятиліть. Перевірка парності – досить простий спосіб виявлення помилок пам'яті, без можливості відновлення. Кожен байт даних пов'язаний з одним бітом парності або так званим паритетним бітом. Цей біт встановлюється під час запису, потім розраховується і порівнюється під час читання. Зміна стану цього біта говорить про помилку, що виникла. Цей метод обмежений визначенням зміни стану одиночного біта в байті. У разі зміни стану двох бітів, можлива ситуація, коли обчислення паритетного біта збігається із записаним. В цьому випадку система не визначить помилку, і станеться екстрена зупинка системи. Так як приблизно 90% всіх нерегулярних помилок відбувається саме з одиночним розрядом, перевірки парності досить для більшості ситуацій. На жаль, необхідність у додаткових обчисленнях паритетного біта потребує деяких витрат процесорного часу, що дещо знижує продуктивність усієї системи. Цікавішим методом перевірки помилок роботи пам'яті є т.зв. ECC або коригування помилок або код виправлення помилок. Цей метод включає визначення помилки у одиночному розряді, а й двох, трьох і чотирьох розрядах. Крім того, ECC може також виправляти помилку в одиночному розряді. ECC може бути реалізований або на модулі пам'яті (ECC – on – Simm або EOS) або в чіпсеті. Однак модулі EOS зустрічаються дуже рідко.ECC ґрунтується на алгоритмі «хешингу», який працює одночасно з 8 байтами (64 біти), і розміщує результат у 8-розрядне ECC слово. Під час зчитування результат ECC слова порівнюється з розрахованим, подібно до того, як відбувається у методі перевірки парності. Основна відмінність у тому, що у перевірці парності кожен біт пов'язані з одним байтом, тоді як ECC слово пов'язані з усіма 8 байтами. Це означає, що розрядні значення для ECC не будуть тими ж, що й індивідуальні біти для перевірки парності для тих самих восьми байтів, тому модулі ECC не можуть використовуватися в режимі парності (проте паритетні модулі можуть використовуватися в режимі ECC, як описано нижче) ). ECC модулі можуть використовуватися на непаритетних і на ECC/ non-ECC платах. Модуль ECC не може використовуватись у режимі перевірки парності. Причиною цього є схемотехнічна реалізація модуля ECC. Він не може встановити окремі біти, тому чіпсет не буде записувати правильні дані в ECC слово.

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

Повідомлення з контрольною сумою: 6 23 4 33

Повідомлення після передачі: 6 27 4 33

Як видно, другий байт повідомлення при передачі виявився зміненим з 23 на 27. Приймач може виявити помилку, порівнюючи передану контрольну суму (33) із розрахованою ним самим: 6 + 27 + 4 = 37. Якщо при правильній передачі повідомлення виявиться пошкодженою сама контрольна сума , то таке повідомлення буде неправильно інтерпретовано, як спотворене. Однак, це не найгірша ситуація. Більш небезпечним є одночасне пошкодження повідомлення та контрольної суми таким чином, що все повідомлення можна вважати достовірним. На жаль, виключити таку ситуацію неможливо, і найкраще, чого можна досягти, це знизити ймовірність її появи, збільшуючи кількість інформації у контрольній сумі (наприклад, розширивши її з одного до 2 байт).

Помилки інших виникають при складних перетвореннях повідомлення видалення з нього надлишкової інформації. Однак, ця стаття присвячена лише розрахункам CRC, які відносяться до класу алгоритмів, що не зачіпають самого повідомлення і лише додають у його кінці контрольну суму:

Вище показано, що пошкодження повідомлення може бути виявлено, використовуючи як алгоритм контролю просте підсумовування байтів повідомлення за модулем 256:

Повідомлення з контрольною сумою: 6 23 4 33

Повідомлення після передачі: 6 27 4 33

Недолік цього алгоритму в тому, що він дуже простий. Якщо станеться кілька спотворень, то в 1 випадку із 256 не зможемо їх виявити. Наприклад:

Повідомлення з контрольною сумою: 6 23 4 33

Повідомлення після передачі: 8 20 5 33

Для підвищення надійності можна було б змінити розмір регістру з 8 бітного на 16 бітний (тобто сумувати за модулем 65536 замість модуля 256), що швидше за все знизить ймовірність помилки з 1/256 до 1/65536. Хоча це і непогана ідея, однак, вона має той недолік, що застосовувана формула розрахунку не "випадкова" в належній мірі - кожен байт, що підсумовується, впливає лише на один байт підсумовуючого регістру, при цьому ширина самого регістра не має жодного значення. Наприклад, у другому випадку сумуючий регістр міг би мати ширину хоч мегабайт, проте помилка все одно не була б виявлена. Проблема може бути вирішена лише заміною простого підсумовування складнішою функцією, щоб кожен новий байт впливав на весь регістр контрольної суми.

Таким чином, сформульовано 2 вимоги для формування надійної контрольної суми:

Ширина: Розмір регістру для обчислень повинен забезпечувати початкову низьку ймовірність помилки (наприклад, 32 байт регістр забезпечує ймовірність помилки 1/232).

Випадковість: Необхідний такий алгоритм розрахунку, коли кожен новий байт може вплинути на будь-які біти регістру.

Звернемо увагу, що термін "контрольна сума" спочатку описував досить прості підсумовуючі алгоритми, проте, в даний час він використовується в більш широкому сенсі для позначення складних алгоритмів розрахунку, таких як CRC. Алгоритми CRC, які й розглядатимемо надалі, дуже добре задовольняють другу умову і, крім того, можуть бути адаптовані для роботи з різною шириною контрольної суми.

Контрольна сума (Checksum) – Число, яке є функцією повідомлення.Буквальна інтерпретація цього слова вказує на те, що виконується просте підсумовування байтів повідомлення, що, мабуть, і робилося в ранніх реалізаціях розрахунків. Однак, на сьогоднішній момент, незважаючи на використання більш складних схем, цей термін має широке застосування.

Якщо додавання, очевидно, не придатне для формування ефективної контрольної суми, то такою дією цілком може виявитися поділ за умови, що дільник має ширину регістра контрольної суми.

Основна ідея алгоритму CRC полягає у поданні повідомлення вигляді величезного двійкового числа, розподіл його на інше фіксоване двійкове число і використання залишку цього поділу в якості контрольної суми. Отримавши повідомлення, приймач може виконати аналогічну дію та порівняти отриманий залишок з "контрольною сумою" (переданим залишком).

Припустимо, що повідомлення складається з 2 байт (6, 23), як і попередньому прикладі. Їх можна розглядати, як шістнадцяткове число 0167h, або як двійкове число 0000 0110 0001 0111. Припустимо, що ширина регістра контрольної суми становить 1 байт, а як дільник використовується 1001, тоді сама контрольна сума буде рівна00000 1001. Хоча у цій ситуації розподіл може бути виконано з використанням стандартних 32 бітних регістрів, у випадку це не так. Тому скористаємося розподілом "в стовпчик". Тільки цього разу воно буде виконуватися в двійковій системі числення:

. 0000010101101 = 00AD = 173 =

9= 1001 ) 0000011000010111 = 0617 = 1559 =

У десятковому вигляді це звучатиме так: "приватне від поділу 1559 на 9 дорівнює 173 і 2 у залишку".

Хоча вплив кожного біта вихідного повідомлення на приватне менш істотно, проте 4 бітний залишок під час обчислень може радикально змінитися, і що більше байтів є у вихідній повідомленні (у ділимому), то сильніше змінюється щоразу величина залишку. Ось чому розподіл виявляється застосовним там, де звичайне додавання працювати відмовляється.

У нашому випадку передача повідомлення разом із 4 бітною контрольною сумою виглядала б (у шістнадцятковому вигляді) наступним чином: 06172, де 0617 – це повідомлення, а 2 – контрольна сума. Приймач, отримавши повідомлення, міг би виконати аналогічний поділ та перевірити, чи дорівнює залишок переданому значенню (2).

Хоча арифметичне розподіл, описане вище, дуже схоже на схему розрахунку контрольної суми, званої CRC, сам алгоритм CRC трохи складніший, і, щоб зрозуміти його, необхідно поринути в теорію цілих чисел.

Поліном (Polynomial) – Поліном є дільником алгоритму CRC.

Всі алгоритми CRC засновані на поліноміальних обчисленнях, і для будь-якого алгоритму CRC можна вказати, який поліном він використовує.

Замість уявлення дільника, поділеного (повідомлення), частки та залишку у вигляді позитивних цілих чисел можна подати їх у вигляді поліномів з двійковими коефіцієнтами або у вигляді рядка біт, кожен з яких є коефіцієнтом полінома. Наприклад, десяткове число 23 у шістнадцятковій системі числення має вигляд 17, а в двійковому – 10111, що збігається з поліномом:

1*x^4 + 0*x^3 + 1*x^2 + 1*x^1 + 1*x^0

І повідомлення, і дільник можуть бути представлені у вигляді поліномів, з якими, як і раніше, можна виконувати будь-які арифметичні дії. Припустимо, що хочемо перемножити, наприклад, 1101 та 1011.Це можна виконати як множення поліномів:

+ x^3 + x^1 + x^0) = x^6 + x^5 + x^4 + 3*x^3 + x^2 + x^1 + x^0

Тепер для отримання правильної відповіді необхідно вказати, що Х дорівнює 2 і виконати перенесення біта від члена 3*x^3.

Все це дуже схоже на звичайну арифметику, з тією різницею, що основа у нас лише передбачається, а не суворо задано. Якщо X невідомий, то не можемо виконати перенесення. Невідомо, що 3*x^3 – те саме, як і x^4 + x^3, оскільки знаємо, що X=2. У поліноміальній арифметиці зв'язку між коефіцієнтами не встановлені, і тому коефіцієнти при кожному члені полінома стають строго типізованими - коефіцієнт при x^2 має інший тип, ніж при x^3.

Якщо коефіцієнти кожного члена полінома абсолютно ізольовані друг від друга, можна працювати з будь-якими видами поліноміальної арифметики, просто змінюючи правила, якими коефіцієнти працюють. Одна з таких схем для нас надзвичайно цікава, а саме коли коефіцієнти складаються за модулем 2 без перенесення – тобто коефіцієнти можуть мати значення лише 0 або 1, перенесення не враховується. Це називається "поліноміальна арифметика за модулем 2".

Повертаючись до попереднього прикладу:

= x^6 + x^5 + x^4 + 3*x^3 + x^2 + x^1 + x^0

За правилами звичайної арифметики коефіцієнт члена 3*x^3 розподіляється за іншими членами полінома, використовуючи механізм перенесення і припускаючи, що X = 2. У "поліноміальній арифметиці за модулем 2" не відомо, чому дорівнює "X", переносів тут не існує , а всі коефіцієнти розраховуються за модулем 2. В результаті отримуємо:

= x^6 + x^5 + x^4 + x^3 + x^2 + x^1 + x^0

Таким чином, поліноміальна арифметика за модулем 2 - це фактично двійкова арифметика за модулем 2 без урахування переносів. Хоча поліноми мають зручні математичні засоби для аналізу CRC алгоритмів та алгоритмів корекції помилок, для спрощення подальшого обговорення вони будуть замінені на безпосередні арифметичні дії в системі, з якою вони ізоморфні, а саме в системі двійкової арифметики без переносів.

Двійкова арифметика без урахування переносів

Залишимо поліноми поза полем нашої уваги, і сфокусуємо його на звичайній арифметиці, оскільки дії, що виконуються під час обчислення CRC, є арифметичними операціями без урахування переносів. Ця арифметична система є основною частиною розрахунків CRC.

Додавання двох чисел у CRC арифметиці повністю аналогічне звичайному арифметичному дії за винятком відсутності переносів з розряду в розряд. Це означає, що кожна пара бітів визначає результат свого розряду незалежно від інших пар. Наприклад:

Для кожної пари бітів можливі 4 варіанти:

Те саме справедливо і для віднімання:

коли є також 4 можливі комбінації:

Фактично, як операція складання, так і операція віднімання в CRC арифметиці ідентичні операції "Виключає АБО" (eXclusive OR - XOR), що дозволяє замінити 2 операції першого рівня (складання та віднімання) однією дією, яка одночасно виявляється інверсною самому собі. Дуже зручна властивість такої арифметики.

Згрупувавши додавання та віднімання в одну єдину дію, CRC арифметика виключає з поля своєї уваги всі величини, що лежать за межами найстаршого свого біта.Хоча цілком ясно, що значення 1010 більше, ніж 10, це виявляється не так, коли кажуть, що 1010 має бути більшим, ніж 1001.

Щоб зрозуміти чому, спробуйте отримати з 1010 значення 1001, відібравши або додавши до нього одну й ту саму величину:

Це зводить нанівець всяке уявлення про порядок. Визначивши дію додавання, перейдемо до множення і поділу.

Звернемо увагу: під час підсумовування використовується CRC додавання.

Поділ дещо складніший, оскільки потрібно знати, коли "одне число перетворюється на інше". найстаршого одиничного біта числа Y. Нижче наведено приклад розподілу:

Це так і є. Однак, перш ніж йти далі, варто ще трохи затриматись на цих діях.

Знаючи, що дії складання та віднімання в нашій арифметиці – це одне й те саме.

Якщо число A отримано множенням числа B, то в CRC арифметиці це означає, що існує можливість сконструювати число A з нуля, застосовуючи операцію XOR до B, зсунутому, на різну кількість позицій. то може сконструювати A з B наступним способом:

Однак, якби A дорівнювало б 0111010111, то не вдалося скласти його за допомогою різних зрушень числа тому кажуть, що в CRC арифметиці воно не ділиться на B.

Таким чином, видно, що CRC арифметика зводиться головним чином до операції "Виключає АБО" деякого значення при різних величинах зсуву.

Визначивши всі правила CRC арифметики, тепер можна охарактеризувати обчислення CRC як простий розподіл, чим він фактично і є. Щоб обчислити CRC, необхідно вибрати дільник. Говорячи математичною мовою, дільник називається генераторним поліномом (generator polinomial), чи навіть поліномом, і це ключове слово будь-якого CRC алгоритму. Для простоти називати CRC поліном просто поліномом. Можна вибрати та використовувати в CRC будь-який поліном. Ступінь полінома W (Width - ширина) (позиція найстаршого одиничного біта) надзвичайно важлива, тому що від неї залежать всі інші розрахунки. Зазвичай вибирається ступінь 16 мул 32, оскільки це полегшує реалізацію алгоритму на сучасних комп'ютерах. Ступінь полінома - це дійсна позиція старшого біта, наприклад, ступінь полінома 10011 дорівнює 4, а не 5.

Ступінь (Width) – Ступінь (або ширина) CRC алгоритму відповідає степу не використовуваного полінома (або довжині полінома мінус одиниця). Наприклад, якщо використовується поліном 11010, то рівень алгоритму дорівнює 4. Зазвичай використовується ступінь, кратна 8

Вибравши поліном приступимо до розрахунків. Це буде простий поділ (у термінах CRC арифметики) повідомлення на наш поліном. Єдине, що треба буде зробити до початку роботи, так це доповнити повідомлення W нульовими бітами. Отже, почнемо.

Вихідне повідомлення: 1101011011

Повідомлення, доповнене W бітами: 11010110110000

Тепер просто поділимо повідомлення на поліном, використовуючи правила CRC арифметики. Раніше вже розглядалася ця дія.

10011) 11010110110000 = вирівняне повідомлення (1101011011 + 0000)

В результаті отримуємо приватне, яке нас не цікавить і тому відкидається за непотрібністю, і залишок, який і використовується як контрольна сума. Розрахунок закінчено. Як правило, контрольна сума додається до повідомлення і разом із ним передається каналами зв'язку. У нашому випадку буде передано таке повідомлення:

На іншому кінці каналу приймач може зробити одну з рівноцінних дій:

1. Виділити текст власне повідомлення, обчислити йому контрольну суму (не забувши у своїй доповнити повідомлення W бітами), і порівняти її з переданої.

2. Обчислити контрольну суму для всього переданого повідомлення (без додавання нулів) і подивитися, чи вийде в результаті нульовий залишок.

Обидва ці варіанти абсолютно рівноправні.

Таким чином, при обчисленні CRC необхідно виконати такі дії:

1. Вибрати ступінь полінома W та поліном G (ступеня W).

2. Додати до повідомлення W нульових бітів. Назвемо отриманий рядок M'.

3. Поділимо M' на G з використанням правил CRC арифметики. Отриманий залишок буде контрольною сумою.

Слід зазначити, що передане повідомлення T є твором полінома. Щоб зрозуміти це, зверніть увагу, що 1) останні W біт повідомлення – це залишок від поділу доповненого нулями вихідного повідомлення на обраний поліном, і 2) додавання рівносильне віднімання, тому додавання залишку доповнює значення повідомлення до наступного повного твору. Тепер дивіться, якщо повідомлення під час передачі було пошкоджено, то отримаємо зі спілкування T E, де E – це вектор помилки, а ' ' – це CRC додавання (або операція XOR). Отримавши повідомлення, приймач ділить TE на G. Оскільки T mod G = 0, (TE) mod G = E mod G.Отже, якість полінома, який вибираємо для перехоплення деяких певних видів помилок, визначатиметься набором творів G, оскільки у випадку, коли E також є твором G, така помилка не буде виявлена. Отже, наше завдання полягає в тому, щоб знайти такі класи G, твори яких будуть якнайменше схожі на шуми в каналі передачі (які викликають пошкодження повідомлення). Розглянемо, які типи шумів у каналі передачі можемо очікувати.

Однобітові помилки. Така помилка означає, що E=1000. 0000. Можемо гарантувати, що помилки цього класу завжди буде розпізнано за умови, що G принаймні 2 біти встановлені в "1". Будь-який добуток G може бути сконструйований операціями зсуву і додавання, і, в той же час, неможливо отримати значення з 1 одиничним бітом зсуву і складаючи величину, що має більше 1 одиничного біта, так як в результаті завжди буде присутній принаймні 2 біти.

Двох бітових помилок. Для виявлення будь-яких помилок виду 100. 000100. 000 (тобто коли E містить принаймні 2 одиничні біти) необхідно вибрати таке G, яке не мало множників 11, 101, 1001, 10001, і так далі. Такі поліноми повинні існувати - поліном з одиничними бітами в позиціях 15, 14 і 1, який не може бути дільником жодного числа менше 1. 1, де. » 32767 нулів.

Помилки з непарною кількістю бітів. Може перехопити будь-які пошкодження, коли E має непарне число біт, вибравши поліном G таким, щоб він мав парну кількість біт.1) CRC множення є простою операцією XOR постійного регістрового значення з різними усуненнями; 2) XOR - це всього лише операція перемикання бітів; і 3) якщо застосовується в регістрі операція XOR до величини з парним числом бітів, парність кількості одиничних бітів у регістрі залишиться незмінною. Наприклад, почнемо з E=111 і спробуємо скинути всі 3 біти "0" послідовним виконанням операції XOR з величиною 11 і одним з 2 варіантів зрушень (тобто, "E=E XOR 011" і "E=E XOR 110" ). Це аналогічно задачі про перевертання склянок, коли за одну дію можна перевернути одночасно будь-які дві склянки. Більшість популярних CRC поліномів містять парну кількість одиничних бітів.

Пакетні помилки. Пакетна помилка має вигляд E=000. 000111. 11110000. 00, тобто E складається з нулів за винятком групи одиниць десь у середині. Цю величину можна перетворити на E=(10000. 00)(1111111. 111), де є z нулів у лівій частині та n одиниць у правій. Для виявлення цих помилок необхідно встановити молодший біт G в 1. При цьому необхідно, щоб ліва частина не була множником G. При цьому завжди, поки G ширше правої частини, помилка завжди буде розпізнана.

Ось кілька популярних поліномів:

16 бітні: (16,12,5,0) [стандарт «X25»]

32 бітні: (32,26,23,22,16,12,11,10,8,7,5,4,2,1,0) [Ethernet]

Припустимо, що слово складається з m бітів даних, до яких додаємо додаткових бітів (контрольних розрядів). Нехай загальна довжина слова буде n (тобто n-m+г). п-бітну одиницю, що містить m бітів даних та г контрольних розрядів, часто називають кодованим словом. Для будь-яких двох кодованих слів, наприклад 10001001 та 10110001, можна визначити, скільки відповідних бітів у них різниться. У цьому прикладі таких біта три.Щоб визначити кількість бітів, що розрізняються, потрібно над двома кодованими словами зробити логічну операцію ВИКЛЮЧАЄ АБО і порахувати число бітів зі значенням 1 в отриманому результаті. Число бітових позицій, якими розрізняються два слова, називається інтервалом Хеммінга. Якщо інтервал Хеммінга для двох слів дорівнює d, це означає, що достатньо d бітових помилок, щоб перетворити одне слово на інше. Наприклад, інтервал Хеммінга кодованих слів 11110001 та 00110000 дорівнює 3, оскільки для перетворення першого слова на друге достатньо 3 помилок у бітах. Пам'ять складається з m-бітних слів, і, отже, існує 2 m варіантів поєднання бітів. Кодовані слова складаються з n бітів, але через спосіб підрахунку контрольних розрядів допустимі лише 2 т із 2" кодованих слів. Якщо в пам'яті виявляється неприпустиме кодоване слово, комп'ютер знає, що сталася помилка. За наявності алгоритму для підрахунку контрольних розрядів можна скласти повний Список допустимих кодованих слів і з цього списку знайти два слова, для яких інтервал Хеммінга буде мінімальним. Це інтервал Хеммінгу повного коду. d+1, оскільки помилок d не можуть змінити одне допустиме кодоване слово на інше допустиме кодоване слово.Відповідно, щоб виправити d помилок у бітах, необхідний код з інтервалом 2d+l, оскільки в цьому випадку допустимі кодовані слова так сильно відрізняються один від одного, що навіть якщо станеться d змін, початкове кодоване слово буде ближчим до помилкового, ніж будь-яке інше кодоване слово, тому його легко можна буде визначити.

Як простий приклад коду з виявленням помилок розглянемо код, у якому до даних приєднується один біт парності. Біт парності вибирається таким чином, що число бітів зі значенням 1 кодованому слові парне (або непарне). Інтервал цього коду дорівнює 2, оскільки будь-яка помилка в бітах призводить до кодованого слова з неправильною парністю. Іншими словами, достатньо двох помилок у бітах для переходу від одного припустимого кодованого слова до іншого припустимого слова. Такий код може використовуватись для виявлення поодиноких помилок. Якщо з пам'яті зчитується слово, що містить неправильну парність, надходить сигнал про помилку. Програма не зможе продовжуватися, але не буде невірних результатів.

Як простий приклад коду з виправленням помилок розглянемо код із чотирма допустимими кодованими словами:

0000000000, 0000011111, 1111100000 та 1111111111

Інтервал цього коду дорівнює 5. Це означає, що може виправляти подвійні помилки. Якщо з'являється кодоване слово 0000000111, комп'ютер знає, що початкове слово має бути 0000011111 (якщо не більше двох помилок). За наявності трьох помилок, якщо, наприклад, слово 0000000000 змінилося на 0000000111, цей метод неприпустимий. Уявімо, що хочемо розробити код з m бітами даних і контрольних розрядів, який дозволив би виправляти всі помилки в бітах.Кожне з 2 r припустимих слів має n неприпустимих кодованих слів, які відрізняються від допустимого одним бітом. Вони утворюються інвертуванням кожного з n бітів у n-бітному кодованому слові. Отже, кожне з 2 r допустимих слів вимагає п+1 можливих поєднань бітів, що приписуються цьому слову (п можливих помилкових варіантів і один правильний). Оскільки загальна кількість різних поєднань бітів дорівнює 2 n, то (n+l)2 m

Табл.1.1 - Розмірність коду

Перевірка на парність

Перевірка парності - це метод, який використовується виявлення помилок під час передачі даних. Він включає додавання додаткового біта до двійкового коду, щоб загальна кількість одиниць у послідовності завжди була непарною (або парною, залежно від типу парності, що використовується). Якщо кількість одиниць у переданих даних відповідає очікуваної парності, передбачається, що з передачі відбулася помилка.

Як працює перевірка парності

Перевірка парності - це проста техніка виявлення помилок, що часто використовується в протоколах передачі для забезпечення цілісності даних. Вона працює шляхом додавання додаткового біта, відомого як біт парності, до двійкового коду. Біт парності обчислюється на основі кількості одиниць у двійковій послідовності.

  • парна парність: При парній парності кількість одиниць у двійковій послідовності, включаючи біт парності, завжди має бути парним числом. Якщо кількість одиниць непарна, передбачається, що під час передачі сталася помилка.
  • Непарна парність: При непарній парності кількість одиниць у двійковій послідовності, включаючи біт парності, завжди має бути непарним числом.Якщо кількість одиниць парна, передбачається, що з передачі сталася помилка.

Коли дані передаються, біт парності додається до двійкової послідовності, щоб загальна кількість одиниць задовольняла обраному типу парності. Наприклад, якщо використовується парна парність, біт парності встановлюється 0, якщо загальна кількість одиниць у послідовності (включаючи біт парності) вже парне. Якщо загальна кількість одиниць непарна, біт парності встановлюється 1, щоб зробити загальну кількість одиниць парним.

Після отримання даних одержувач перераховує парність, підраховуючи кількість одиниць отриманої послідовності, включаючи біт парності. Потім він перевіряє, чи збігається обчислена парність з переданим бітом парності. Якщо є невідповідність, одержувач фіксує помилку, вказуючи на те, що під час передачі сталася помилка.

Реалізуючи перевірку парності у протоколах передачі, можна забезпечити певний ступінь цілісності даних. Однак важливо зазначити, що перевірка парності лише виявляє помилки і не надає коштів для їх виправлення. Якщо виявлено помилку, одержувач може запросити повторну передачу даних або вжити коригуючих дій залежно від протоколу, що використовується.

Поради щодо запобігання

  • Реалізуйте перевірку парності у протоколах передачі даних для забезпечення цілісності даних.
  • Використовуйте коди виявлення помилок, такі як пари парності, щоб виявляти помилки передачі і приймати коригувальні дії.

Пов'язані терміни

  • Коди виявлення помилок: Методи, які використовуються для виявлення помилок під час передачі даних. Коди виявлення помилок, включаючи перевірку парності, відіграють важливу роль у забезпеченні точності та цілісності даних під час передачі.
  • Контрольна сума: Значення, яке використовується для перевірки цілісності даних, що часто використовується при виявленні помилок. Контрольні суми обчислюються на основі даних, що передаються та порівнюються з отриманою контрольною сумою для виявлення помилок у передачі. Хоча контрольні суми складніші, ніж біти парності, вони забезпечують вищий рівень можливостей виявлення помилок.

Схожі статті

  • Що потрібно для програмування
  • Низькорівневе програмування STM32 від включення живлення до Hello World Хабр
  • Перевірка діелектричних рукавичок терміни перевірки
  • Що таке IndexOutOfRangeException ArgumentOutOfRangeException та як його виправити програмування
  • Недавні статті

  • Чому взуття скрипить при ходьбі
  • Коли день народження у стрічці
  • Чи можна кішці їсти сіль
  • Варіанти планування ділянки 15 соток прямокутної форми
  • Що означає півмісяця знак
  • Рейсмусовий верстат для чого
  • У якому віці парують свиней
  • У чому полягає принцип нарахування та у яких випадках він застосовується