لماذا لا تكفي ساعة الحاسوب؟
داخل عملية واحدة نرى تسلسلًا واضحًا، لكن مقارنة طابعين زمنيين من عقدتين مختلفتين لا تثبت بالضرورة أي الحدثين سبق الآخر؛ فالساعات تنجرف ولا تتزامن بصورة مثالية.
لماذا نقيس الزمن بدقة؟
- لمعرفة وقت وقوع حدث وربط الساعة بمصدر خارجي؛ المثال المذكور هو تدقيق عمليات التجارة الإلكترونية.
- لخوارزميات تعتمد على المزامنة، مثل المحافظة على اتساق قواعد البيانات.
- لوضع طوابع تكفي لترتيب أحداث العقد المختلفة، وهي المهمة التي تصطدم بحدود الدقة والتأخير.
مسارا الحل
- زمن فيزيائي: نقرب الساعات من مصدر خارجي أو من بعضها.
- زمن منطقي: نرتب السببية من ترتيب الأحداث والرسائل، لا من عقارب ساعة حقيقية.
العملية والحالة والحدث والتاريخ
نمثل النظام بمجموعة من N عمليات p_i حيث i=1..N. الرمز الأول في الشريحة 5 ظهر كـ£ بسبب الخط، والمقصود مجموعة العمليات.
الحالة s_i
الوضع الحالي للعملية p_i، مثل قيم متغيراتها.
الفعل Action
عملية تغيّر الحالة، أو ترسل/تستقبل رسالة مع عملية أخرى p_j.
الحدث e
وقوع فعل واحد؛ نقطة ذرية في تاريخ التنفيذ.
لختم الأحداث نحتاج ساعة. تعد الساعة العتادية اهتزازات بلورة ذات تردد اسمي محدد، ويقرأ نظام التشغيل زمن العتاد H_i(t) ليولد الزمن البرمجي C_i(t) الذي يوضع على الحدث كتاريخ ووقت.
الانجراف والتفاوت
Clock drift · انجراف الساعة
اختلاف معدل سير الساعة لأن البلورات تهتز بمعدلات مختلفة. لا يمكن تجنبه كليًا؛ ولذلك يزداد الخطأ مع مرور الزمن إن لم نعد المزامنة.
Clock skew · تفاوت الساعتين
الفرق اللحظي بين قراءتي أي ساعتين. هو لقطة للفرق الآن، بينما drift يصف اختلاف المعدل الذي يصنع هذا الفرق.
أربع ساعات على الشبكة نفسها
خارجية، داخلية، وحدود تأخير معلومة
لكي نعرف زمن أحداث العمليات نزامن ساعاتها. ليكن C_i ساعة العملية p_i، وI فترة من الزمن الحقيقي، وD>0 حد المزامنة.
D فإن أي ساعتين تتفقان داخليًا ضمن 2D، لأن
|Ci−Cj| ≤ |Ci−S| + |S−Cj| < 2D.
بروتوكول نظام متزامن
يرسل المرسل M(t). إذا كان تأخير النقل الحقيقي T_trans محصورًا بين ثابتين معلومين min < T_trans < max، يختار المستقبل منتصف المجال:
لماذا نختار المنتصف؟
مسألة محلولة: حد الخطأ
أرسل المرسل طابعًا t=1000 ms، وكان min=8 ms وmax=12 ms. ما القراءة والحد الأقصى للخطأ؟
- التأخير المقدر:
(8+12)/2 = 10 ms. - تضبط القراءة على
1010 ms. - الوصول الحقيقي بين
1008و1012 ms. - أقصى خطأ:
(12−8)/2 = 2 ms.
Cristian وBerkeley
طريقة Cristian: مزامنة خارجية
يستخدم Cristian خادم وقت لمزامنة الحواسيب خارجيًا. يناسب نظام العميل/الخادم عندما يكون زمن الذهاب والإياب صغيرًا مقارنة بالدقة المطلوبة.
- ترسل العملية
pطلب الوقت في الرسالةm_r. - يضع الخادم
Sالقيمةtفي الردm_tعند آخر نقطة ممكنة قبل الإرسال، لتقليل زمن معالجة الخادم غير المحسوب. - تسجل
pزمن الجولة الكاملT_roundمن إرسال الطلب إلى استقبال الرد. - بافتراض تماثل تقريبي للمسارين، تقدّر زمن الوصول بالقيمة
t + T_round/2.
دورة طلب الوقت
10:00:00.500 وزمن الجولة 40 ms فالتقدير عند وصول الرد 10:00:00.520.
خوارزمية Berkeley: مزامنة داخلية
- يُنتخب حاسوب منسق ليعمل رئيسًا Master.
- يستطلع الرئيس دوريًا ساعات العبيد Slaves، فترد كل عقدة بقراءتها.
- يقدر الرئيس قراءات العقد مع تعويض زمن الذهاب والإياب، بصورة شبيهة بـCristian.
- يحسب متوسط قراءات العبيد مع قراءته؛ وبذلك تتعادل ميول الساعات السريعة والبطيئة.
- يرسل لكل عبد مقدار التعديل المطلوب، وقد يكون موجبًا أو سالبًا، ثم تعدّل العقدة ساعتها.
- يستبعد القراءات المعيبة: يختار مجموعة ساعات لا تختلف بأكثر من حد محدد ويأخذ متوسطها فقط.
- إذا فشل الرئيس يُنتخب رئيس آخر يؤدي وظيفة سلفه بالطريقة نفسها.
بروتوكول NTP
يعرّف Network Time Protocol بنية خدمة وبروتوكولًا لتوزيع معلومات الزمن عبر الإنترنت.
المزامنة الخارجية
مزامنة العملاء المنتشرين عبر الإنترنت بدقة مع UTC، المعيار الدولي لحفظ الوقت.
الاعتمادية
تحمل فقد الاتصال فترات طويلة عبر خوادم زائدة ومسارات زائدة بينها.
القابلية للتوسع
خدمة أعداد كبيرة مع إعادة مزامنة متكررة بما يكفي لتعويض معدلات انجراف معظم الحواسيب.
الأمن
الحماية من التدخل الخبيث أو العرضي في خدمة الوقت.
شبكة المزامنة وطبقات Strata
| الوضع | كيف يعمل؟ | الاستخدام والدقة |
|---|---|---|
| Multicast | يبث خادم أو أكثر الوقت دوريًا إلى حواسيب LAN، فتضبط ساعاتها مع افتراض تأخير صغير. | LAN سريعة؛ دقة منخفضة لكنها كافية لأغراض كثيرة. |
| Procedure-call | يقبل الخادم طلبات ويرد بطابعه الزمني الحالي، مثل Cristian. | أعلى دقة من Multicast. |
| Symmetric | يتبادل زوج خوادم رسائل تحمل معلومات توقيت. | خوادم LAN والمستويات العليا، أي أرقام strata الأقل؛ وهو الأعلى دقة. |
علاقة happened-before
من منظور عملية واحدة ترتب الساعة المحلية الأحداث ترتيبًا فريدًا. لكن لأن الساعات لا تتزامن تمامًا عبر النظام فلا يجوز استعمال الزمن الفيزيائي وحده لترتيب كل زوج عشوائي من الأحداث. عرّف Lamport أصغر علاقة سببية → تحقق:
HB1 · محليًا
إذا وجدت p_i بحيث e →_i e′، إذن e → e′.
HB2 · الرسالة
لكل رسالة m: send(m) → receive(m).
HB3 · الانتقالية
إذا e→e′ وe′→e″، إذن e→e″.
ثلاث عمليات ورسالتان
a→b، وb→c بالرسالة، وc→d، وd→f بالرسالة؛ إذن بالانتقالية a→f. أما a وe فلا سلسلة بينهما، لذلك a || e.e || e′ تعني أنه لا e→e′ ولا e′→e. إنها غياب علاقة سببية يمكن إثباتها، لا اشتراط وقوع الحدثين في اللحظة الفيزيائية نفسها.
ساعات Lamport والترتيب الكلي
ساعة Lamport عداد برمجي متزايد رتيبًا L_i، ولا يلزم أن تكون له أي علاقة بساعة فيزيائية.
LC1 · كل حدث
قبل الحدث في p_i: L_i := L_i + 1، ثم يختم الحدث.
LC2 · الرسائل
المرسل يرفق t=L_i. المستقبل يطبق L_j := max(L_j,t) ثم LC1؛ أي مباشرة max(L_j,t)+1.
حل مثال الشرائح خطوة بخطوة
- في
p1: يأخذa=1، ثمb=2ويرسلm1بالطابع 2. - يستقبل
p2الرسالة عندc:max(0,2)+1=3. - الحدث التالي
d=4ويرسلm2بالطابع 4. - في
p3يقع الحدث المستقلe=1. - عند استقبال
m2:f=max(1,4)+1=5.
تحويل الطابع إلى ترتيب كلي
لحدث في p_i نستخدم الزوج (T_i,i). نقارن الزمن أولًا، وعند التعادل نكسر التعادل برقم العملية:
الساعات المتجهة
طور Mattern وFidge الساعات المتجهة لتجاوز حقيقة أن L(e)<L(e′) لا تكفي لاستنتاج e→e′. تحتفظ كل عملية p_i بمتجه V_i طوله N.
| القاعدة | التنفيذ | المعنى |
|---|---|---|
| VC1 | V_i[j]=0 لكل i,j=1..N. | لا معرفة سابقة بأحداث أي عملية. |
| VC2 | قبل ختم حدث: V_i[i] := V_i[i]+1. | تسجل العملية حدثها المحلي. |
| VC3 | ترفق نسخة t=V_i بكل رسالة. | تنقل معرفتها السببية. |
| VC4 | عند الاستقبال: V_i[j] := max(V_i[j],t[j]) لكل مركبة، ثم تزيد مركبة المستقبل وفق VC2. | دمج المعرفتين ثم تسجيل حدث الاستقبال. |
مقارنة المتجهات
V=V′إذا تساوت كل المركبات.V≤V′إذاV[j]≤V′[j]لكلj.- إذا لم يكن
V≤V′ولاV′≤Vفهما غير قابلين للمقارنة، وكتبت الشرائح ذلكV<>V′.
V<V′ يعني V[j]<V′[j] في كل المركبات. التعريف القياسي اللازم لصحة العلاقة السببية هو: V≤V′ وV≠V′، أي لا تزيد أي مركبة وتكون واحدة على الأقل أصغر. فمثلًا V(b)=(2,0,0) وV(c)=(2,1,0) مع أن b→c؛ اشتراط الصغر في كل المركبات سيرفضهما خطأ.
مثال ثلاث عمليات
| الحدث | العملية | كيف حُسب؟ | الطابع |
|---|---|---|---|
| a | p1 | أول حدث محلي | (1,0,0) |
| b | p1 | حدث وإرسال m1 | (2,0,0) |
| c | p2 | دمج طابع m1 ثم زيادة المركبة الثانية | (2,1,0) |
| d | p2 | حدث وإرسال m2 | (2,2,0) |
| e | p3 | حدث مستقل | (0,0,1) |
| f | p3 | max((0,0,1),(2,2,0)) ثم زيادة الثالثة | (2,2,2) |
V(a)<V(f) يعكس a→f. أما V(c)=(2,1,0) وV(e)=(0,0,1) فلا أحدهما ≤ الآخر، ولذلك c||e.
المثال المركب بأربع عمليات
تبدأ A,B,C,D جميعًا بـ[0,0,0,0]. اتجاه الرسائل في الصورة: M1:A→B، M2:B→C، M3:D→A، M4:A→C، M5:C→B، M6:D→B.
| الحدث | الحساب | الطابع النهائي |
|---|---|---|
| A يرسل M1 | زيادة مركبة A | [1,0,0,0] |
| B يستقبل M1 | دمج الصفر مع طابع M1 ثم زيادة B | [1,1,0,0] |
| B يرسل M2 | زيادة B | [1,2,0,0] |
| C يرسل M5 | زيادة C من البداية | [0,0,1,0] |
| C يستقبل M2 | دمج [0,0,1,0] و[1,2,0,0] ثم زيادة C | [1,2,2,0] |
| B يستقبل M5 | دمج [1,2,0,0] و[0,0,1,0] ثم زيادة B | [1,3,1,0] |
| D يرسل M3 | زيادة D | [0,0,0,1] |
| A يستقبل M3 | دمج [1,0,0,0] و[0,0,0,1] ثم زيادة A | [2,0,0,1] |
| A يرسل M4 | زيادة A | [3,0,0,1] |
| C يستقبل M4 | دمج [1,2,2,0] و[3,0,0,1] ثم زيادة C | [3,2,3,1] |
| D يرسل M6 | زيادة D مرة ثانية | [0,0,0,2] |
| B يستقبل M6 | دمج [1,3,1,0] و[0,0,0,2] ثم زيادة B | [1,4,1,2] |
خريطة الشرائح 1–35
هذه الخريطة تثبت موضع كل معلومة، بما فيها الفواصل المتكررة والصورة الممسوحة في الشريحة الأخيرة.