الخلاصة
- تمثل وصلة Click مساراً محتملاً لتسليم الحزمة إلى الأمام؛ ولا تثبت أن حزمة سلكته فعلاً، ولا تحدد وحدها أي طرف بدأ النقل.
- في push يبدأ المصدر ويمضي التحكم إلى الأمام. وفي pull يبدأ المقصد طلباً إلى الخلف، ثم تعود الحزمة إلى الأمام. ويمكن لعنصر
Queueصريح أن يصل بين الإيقاعين. - يجعل الرسم المسؤوليات قابلة للقراءة، لكنه لا يغني عن أدلة نوع المنافذ والتهيئة وحالة الطابور واختيار المجدول وإتمام الجهاز والاستلام البعيد.
الطريق المرسوم ليس تسجيلاً لما حدث
يبني Click الموجّه من عناصر صغيرة. قد يقرأ عنصر واجهة، ويفحص آخر ترويسة، ويبحث ثالث عن مسار، ثم تأتي عناصر للتصنيف والعد والتخزين والإرسال. توصل بينها حواف في رسم موجه.
تصف ورقة عام 2000، التي وقعها Eddie Kohler وRobert Morris وBenjie Chen وJohn Jannotti وM. Frans Kaashoek، تلك الحواف بأنها مسارات محتملة لتسليم الحزم. كلمة «محتملة» تمنع نقل الرسم إلى مرتبة السجل التنفيذي. وجود الحافة لا يثبت مرور حزمة بعينها. واتجاهها من A إلى B لا يثبت أن A هو الذي استدعى B في كل مرة.
يكمل نوع المنفذ المعنى الناقص. يبين الرسم أين يمكن للحزمة أن تذهب، ويبين push أو pull أين تبدأ المبادرة. إذا جرى دمجهما في واقعة واحدة، قد يُنسب انتظار فرضه جهاز الخروج إلى نقص في المصدر، أو تُعرض شعبة مسموحة كأن المصنف اختارها فعلاً.
push يبدأ من واقعة الوصول
تستقبل واجهة الإدخال حزمة من دون أن يطلبها الرسم في الأسفل. لذلك يبدأ عنصر الاستقبال استدعاء push التالي. يتحرك التحكم مع الحزمة عبر العناصر حتى تُستهلك أو تُسقط أو تُخزن.
يمتلك المصدر لحظة البدء، لا كل النتائج. يستطيع المصنف تغيير المخرج، ويمكن للفحص رفض الحزمة، وقد يسقط طابور محدود ما لا يتسع له. ارتفاع عداد الاستقبال دليل على واقعة محلية، لا إيصال عند الطرف الآخر.
تحتاج إعادة البناء إلى حدث الجهاز، وهوية التهيئة العاملة، والعنصر الذي بدأ، والفرع الفعلي، ونتيجة كل حد مهم. لا يستطيع تقارب عدادين إجماليين أن يعيد هوية لم تُحفظ أصلاً.
pull يبدأ من القدرة على الإرسال
في المخرج يظهر الطلب حين يصبح الجهاز مستعداً. يبدأ عنصر المقصد pull، ويسير الطلب عكس اتجاه الحزمة حتى يعيد عنصر في الأعلى حزمة أو يعلن عدم توفرها.
تعرض أطروحة Kohler الفارق بوضوح: في push يبدأ تدفق التحكم من جهاز الاستقبال ويتقدم؛ وفي pull يبدأ من جهاز الإرسال ويرجع؛ أما الحزمة فتمضي إلى الأمام دائماً. يحمل السهم نفسه تاريخين مختلفين للنداء.
يسمح ذلك بتكوين مجدول من عنصر عادي. يستقبل طلباً عبر مخرج pull، ويختار واحداً من عدة مداخل pull، ثم يسأل المصدر المختار. يحدد موقع العنصر سطح القرار، لكن الخطوط لا تكشف مَن اختير في واقعة معينة، ولا سبب الاختيار أو مدة انتظار الآخرين.
Queue تعترف بأن للجانبين ساعتين
يضع المثال البسيط Queue بين منطقة الاستقبال التي تعمل بـpush ومنطقة الإرسال التي تعمل بـpull. تُدفع الحزم إلى مدخلها وتنتظر بترتيب FIFO. وعندما يجهز جهاز الإرسال، يسحب من مخرجها أول حزمة.
إفراد الطابور كعنصر إقرار بأن الوصول والخدمة لا يعملان على الساعة نفسها. لا بد أن يملك مكون ما الفترة بينهما. يمنحه Click اسماً ومنافذ وسعة وحالة قابلة للرصد بدلاً من إخفائه داخل إجراء كبير.
لكن نجاح الإدخال إلى الطابور إيصال محدود. يثبت قبولاً في ذاكرة ذلك الطابور ضمن تهيئة محددة، ولا يضمن البقاء بعد عطل، أو حداً أعلى للتأخير، أو اختياراً لاحقاً، أو إرسالاً مادياً، أو استلاماً بعيداً. والخروج يثبت مغادرة هذا الطابور فقط.
كما لا يثبت FIFO عدالة النظام. قد تغذي طوابير عدة مجدولاً واحداً، وقد يقع الإسقاط قبل الطابور، وتؤثر الإشعارات والدُفعات وجهوزية الجهاز في توقيت pull. إظهار المسؤولية يجعل السؤال أدق ولا يجعل الجواب شاملاً.
قاعدة صغيرة ترفض وعداً متناقضاً
يكون منفذ Click العامل push أو pull أو agnostic قابلاً للتكيف. تتصل منافذ push ببعضها لتكوين وصلة push، وكذلك pull. أما وصل push مباشرة بـpull فغير قانوني. ويتخذ المنفذ agnostic النوع المتوافق مع جاره.
هذه مواصفة مشتركة دنيا. يستطيع مطورون مستقلون كتابة عناصر وتركيبها من دون هيئة دائمة تجيز كل رسم، لكن عليهم الاتفاق على صاحب النداء التالي. إذا اختلف الوعدان، ترفض التهيئة الوصلة وفق شرط يمكن التحقق منه محلياً.
ولا يجعل نشر الملف التهيئة واقعاً. تشرح ورقة SMP Click أن النظام يحلل الملف، وينشئ الموجّه، ويحاول تهيئته، ثم يثبته ويبدأ تمرير الحزم فقط عند النجاح. وجود ملف في المستودع أو صورة للرسم أو نجاح التحليل ليست إيصالاً لمسار البيانات العامل.
التحسين يحتاج إلى سلسلة نسب
تسهل العناصر الدقيقة التركيب لكنها تضيف حدود استدعاء. طبق Kohler وMorris وChen تقنيات شبيهة بالمصرّفات على تهيئات كاملة. وتخصص أدوات Click المصنفات، وتحذف الشيفرة الميتة، وتزيل بعض الاستدعاءات الافتراضية، وتفحص المحاذاة، وتجمع تعريفات متعددة.
لذلك لا يلزم أن تقابل كل حافة منطقية استدعاء مستقلاً في البرنامج النهائي. يحتاج التدقيق إلى ملف المصدر، وتسلسل التحويلات، والمخرجات المولدة، وهوية البناء، والنسخة المثبتة. يشرح الرسم توزيع المسؤولية، وتثبت السلسلة ما تبنته الآلة.
من دونها يتحول الرسم إلى أثر تنفيذ زائف، أو يتحول البرنامج المحسن إلى صندوق لا تفسير له رغم أصله التصريحي. أولوية الشيفرة العاملة لا تلغي المواصفة؛ بل تطلب إثبات الطريق من المواصفة إلى التنفيذ والتحقق والتشغيل.
العمل المشترك لا يختصر في اسم واحد
تدرج صفحة Harvard الرسمية Click ضمن مشاريع Kohler، ويتصدر الاسم ورقة المجلة، وتفصل أطروحة MIT البنية وأدوات اللغة. لكن المصادر نفسها تحفظ الفريق: Morris وChen وJannotti وKaashoek في الورقة الأساسية، وMassimiliano Poletto في تقرير اللغة، ثم مساهمون كثيرون في تاريخ البرمجية.
اختزال هذا العمل في بطل منفرد يكرر خطأ السهم على المستوى البشري. الأدق أن مساهمة Kohler ساعدت على بناء منهج: مسؤوليات صغيرة قابلة للتركيب، ومالك معلن للمبادرة، ودليل أخير يأتي من النسخة التي عملت فعلاً.
المصادر
- Eddie Kohler — الصفحة الرسمية في Harvard
- قائمة منشورات Eddie Kohler الرسمية
- The Click Modular Router — نسخة المؤلفين في TOCS
- The Click Modular Router — أطروحة MIT
- Programming Language Techniques for Modular Router Configurations
- Programming Language Optimizations for Modular Router Configurations
- Flexible Control of Parallelism in a Multiprocessor PC Router
- Click for Measurement
- مستودع Click الرسمي
- Heng Lu — Running-Code Primacy
- Heng Lu — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
إحاطة الأعضاء
سياق أعمق للملف الشخصي
سجّل الدخول بمستوى العضوية المناسب لفتح الإحاطة الكاملة وملاحظات المصادر.
للدائرة الاستراتيجية فقط
الدائرة الاستراتيجية
مفتوح لجميع القراء. افتح إحاطات الملف الشخصي بعد الانضمام وتسجيل الدخول.
انضم إلى الدائرة الاستراتيجيةلأعضاء تحالف القيادات فقط
تحالف القيادات
لأصحاب الأصول الفكرية المؤهلين وللإدارة؛ سجّل الدخول للوصول إلى إحاطات التحالف.
انضم إلى تحالف القيادات
