بیت توازن یا Parity و کاربرد آن در RAID چیست؟

در علم کامپیوتر Parity یا بیت افزونه یا بیت توازن تکنیکی است برای بررسی اینکه اطلاعات و داده ها در طول جابجایی از مکانی در حافظه بین کامپیوترها،  دچار تغییر و خطا شده است یا نه.

بیت توازن چگونه کار می کند؟

از آنجا که انتقال اطلاعات از خطا مبری نیست، اطلاعاتی که دریافت می شود در طول انتقال همیشه همانطور که فرستاده می شود نیست. بنابراین یک بیت به عنوان بیت افزونه یا parity به همراه اطلاعات ارسال می شود تا مشخص شود اطلاعات به درستی منتقل شده است یا خیر.

یک بیت اضافه شده به همراه گروهی از بیت ها منتقل می شود. این بیت که گاهی check bit هم نامیده می شود فقط برای این استفاده می شود که تشخیص دهیم آیا بیت ها با موفقیت ارسال شده اند یا نه.

Parity زوج یا فرد؟

دو نوع بیت parity وجود دارد:

Parity زوج: در این روش تعداد بیت هایی که مقدار آن یک است محاسبه می شود. اگر تعداد بیت ها فرد بود بیت پریتی برابر با یک می شود تا تعداد کل بیت ها به همراه بیت پریتی عددی زوج باشد. اما اگر تعداد بیت های با مقدار یک، زوج بود، بیت parity برابر با صفر خواهد بود تا تعداد کل بیت های با مقدار یک (شامل بیت پریتی) زوج باقی بماند.

Parity  فرد: در این روش نیز اگر تعداد بیت های با مقدار یک زوج بود، بیت پریتی یک و در غیر اینصورت بیت پریتی صفر خواهد بود. در این صورت تعداد کل بیت های با مقدار یک به همراه بیت پریتی مقداری فرد خواهد ماند.

اطلاعات اصلی Parity زوج Parity فرد
00000000 0 1
01011101 1 0
11111111 0 1
00000001 1 0
01010101 0 1

وقتی اطلاعات دریافت شد، تمامی بیت ها به همراه بیت پریتی چک خواهند شد که تعداد آن فرد است یا زوج. اگر خطایی رخ داده باشد سیستم خطا را تشخیص خواهد داد.

پیدا کردن خطا

توضیح بالا نشان می دهد که بیت parity چطور قادر به شناسایی خطاست. برای مثال اگر اطلاعات با پریتی زوج منتقل شده باشند و اطلاعات دریافتی فرد باشد قطعا اطلاعات دریافتی دچار خطا شده است. یعنی یکی از بیت ها در طول انتقال عوض شده است. البته روش دریافت خطا از طریق بیت parity عاری از اشتباه نیست.  چرا که اگر دو بیت در طول انتقال تغییر کرده باشد این روش قادر به دریافت خطا نیست.  برای کامپیوترهای شخصی این روش مفید است اما برای اطلاعاتی که توسط سیستم های کامپیوتری بزرگ منتقل می شود و اطلاعات مهم است تا سه بیت برای دریافت خطا با اطلاعات ارسال می شود.

چک کردن خطا بوسیله parity همچنین درارتباط بین دو مودم نیز استفاده می شود در اینجا parity میتواند زوج یا فرد باشد. همچنین انتقال اطلاعات می تواند بدون پریتی منتقل شود و از راههای دیگر تشخیص خطا در انتقال اطلاعات استفاده شود.

پریتی و رید کردن

تکنیک parity  در آرایه افزونه دیسک های مستقل یا RAID نیز استفاده می شود. RAID Controller ها فرم های پیشرفته تشخیص خطای parity را مانند پریتی افقی یا عمودی به کار می برند. بعضی از انواع RAID – مثل RAID 4 یا RAID 5 – یک یا دو دیسک را به عنوان دیسک پریتی در نظر می گیرند که می تواند داده ها را بعد از خرابی یکی از دیسک ها دوباره بازسازی کند. به عنوان مثال رید پریتی دوتایی (که با نام RAID 6 هم شناخته می شود) داده ها را برای حداقل چهار دیسک درسطح block-level نوار بندی می کند، مثل RAID 5، اما یک دسته اطلاعات دیگر را به عنوان پریتی دوم می سازد که در طول درایوها پخش می شود. این روش امکان بازیابی اطلاعات پس از خرابی دو دیسک را فراهم می سازد. هرچند RAID با دو پریتی نیازمند کنترلر پیچیده، هزینه بیشتر به دلیل دو درایو اضافه و سرعت نوشتن پایین تر است.

یک مثال برای چگونگی دریافت و تصحیح خطا

تک parity:

فرض کنید چهار رشته چهار بیتی اطلاعات به شرح زیر است:

بیت توازن یا Parity چیست ؟

برای ساختن پریتی P به سادگی این چهار رشته را در هم XOR می کنیم.  جدول منطقی عملگر XOR در زیر آمده است:

X Y XOR
0 0 0
0 1 1
1 0 1
1 1 0

بیت توازن یا Parity چیست ؟

P در اینجا یک رشته چهاربیتی است و در واقع همان اطلاعات پریتی است. اگر از بین این پنج رشته یکی از بین برود می توان با استفاده از بقیه  اطلاعات آن رشته را بدست آورد. اگر P از بین برورد با همین روش ساخت پریتی می توان آن را دوباره ساخت. اما اگر یکی از اطلاعات اصلی (مثلا D1) از بین برود کافی است باقی رشته ها که شامل P نیز می شود با هم XOR کرد:

بیت توازن یا Parity چیست ؟

 دو Parity:

برای ساختن پریتی دوم لازم است تا از عملگر Shift برای هر رشته استفاده کرد. تعریف عملگر Shift به شرح زیر است:

بیت توازن یا Parity چیست ؟

استفاده از عملگر Shift یک رشته منحصر بفرد برای هر رشته در اختیار ما قرار می دهد. پریتی دوم به روش زیر محاسبه می شود:

بیت توازن یا Parity چیست ؟

در اینجا در صورتی که یکی از رشته ها از بین برود می توان به راحتی مثل تصحیح خطا در تک پریتی آن را بازسازی کرد. اما در دو پریتی نشان می دهیم در صورتی که دو رشته نیز ازبین برود می توان آنها را بازسازی کرد. اگر رشته P و یکی از رشته های اصلی از بین برود می توان آن رشته را با استفاده از Q و این واقعیت که XOR هر رشته در خودش برابر صفر است بدست آورد. فرض کنید P و D3 از بین رفته باشد. می توان D3 را از این فرمول و در نهایت  با عکس کردن عملگر Shift  محاسبه کرد:

بیت توازن یا Parity چیست ؟

همچنین اگر اطلاعات دو رشته اصلی از بین رفت می توان آنها را با استفاده از P و Q و XOR کردن باقی رشته ها در آنها بدست آورد. فرض کنید D0 و D3 از بین رفته باشد. با استفاده از فرمول زیر می توان به نتیجه رسید:

بیت توازن یا Parity چیست ؟

این یک دومعادله دومجهولی در سطح بیت است که با حل کردن آن می توان دو جواب منحصر به فرد برای D0 و D3 بدست آورد.