الخلاصة

  • في 9P2000 لا يربط Twalk قيمة newfid غير المستخدمة بالنتيجة إلا إذا نجح المرور على كل عناصر الاسم. وقد يعيد Rwalk جزئياً قيم qid للبادئة التي حُلّت، لكنه لا يغيّر أياً من fid.
  • Topen طلب مستقل: يحدد نمط الوصول، ويدفع الخادم إلى فحص الصلاحيات، ويهيئ fid لقراءة أو كتابة لاحقة. أما Ropen فلا يثبت حدوث نقل بيانات.
  • يجب وضع دور روب بايك ضمن تاريخ جماعي: بدأ كين تومبسون البروتوكول، ودمج بايك نظام التسمية، وبنى ديف بريزوتو جانب الشبكات، وللمقالات واللهجات اللاحقة مؤلفوها.

يظهر في سجل بوابة تخزين أن «المسار حُلّ»، ثم يظهر رفض للفتح. يبدو الأمر تناقضاً إذا اعتُبر السطران حالة واحدة اسمها «الملف متاح». لكنه في 9P جوابان لسؤالين مختلفين وفي لحظتين مختلفتين.

يبدأ Twalk من fid صالح، ويقدم newfid، ويحمل سلسلة مرتبة من عناصر الاسم. يجب أن تكون القيمة الجديدة غير مستخدمة، إلا إذا اختار العميل عمداً أن تساوي fid البداية. يتحرك الخادم عنصراً بعد عنصر، ويشترط صلاحية البحث في كل دليل يعبره. إذا نجحت السلسلة كلها أعاد Rwalk قيمة qid لكل عنصر، وأصبح newfid يمثل النتيجة.

هذه إفادة دقيقة: على هذا الخادم، وداخل هذا الاتصال، ومن نقطة البداية هذه، حُلّت الأسماء بالترتيب المحدد. لكنها لا تتضمن فتحاً ضمنياً. تصف مقدمة 9P قيم fid بأنها معرفات من 32 بت يختارها العميل للملفات الحالية سواء كانت مفتوحة أم لا، وتشترك أطراف الاتصال في فضائها. إعادة تفاوض version تعيد تهيئة الجلسة وتلغي عمليات الإدخال والإخراج القائمة. لذلك fid مرجع محلي للجلسة، لا هوية دائمة عبر الاتصالات.

تكشف النتيجة الجزئية حدوداً أخرى. إذا فشل العنصر الأول عاد خطأ. وإذا وقع الفشل لاحقاً فقد يحمل Rwalk قيم qid للبادئة الناجحة. ومع ذلك لا يتغير fid الأصلي ولا newfid في 9P2000 ما لم تنجح كل العناصر. أي نظام يسجل «نجح ستة من ثمانية» على أنه مقبض جديد قابل للاستخدام يكون قد أنشأ حالة لم ينشئها الخادم.

أما Twalk بلا عناصر فيستنسخ fid إلى newfid من دون عبور اسم. وحد MAXWELEM البالغ ستة عشر عنصراً يخص الرسالة الواحدة، لا طول المسار المنطقي؛ يمكن للعميل متابعة المسير بطلب آخر. ولهذا يجب أن يميز التحليل بين حل الاسم والاستنساخ وتقسيم الرسائل.

يأتي Topen بعد ذلك ليجيب عن سؤال الوصول. يطلب فتح الملف الذي يمثله fid للقراءة أو الكتابة أو كليهما أو التنفيذ، مع الرايات التي يحددها 9P2000. يفحص الخادم الإذن ويهيئ fid للعمليات اللاحقة. يعيد Ropen قيمة qid ووحدة iounit، لكنه لا يحمل دليلاً على القراءة أو الكتابة. تلك الإفادة تخص Tread أو Twrite اللاحقين وردودهما.

للصلاحيات توقيت أيضاً. يقول دليل open إن الفحص يحدث وقت الفتح، وإن تغيير الصلاحيات بعده لا يلغي قدرة الوصول إلى ملف مفتوح بالفعل. صلاحية البحث أثناء walk لا تضمن نمط open المطلوب لاحقاً. لذلك يمكن أن ينجح walk كاملاً ثم يُرفض open من دون تعارض؛ ربما اختلف النمط أو تغير الملف أو السياسة. والعكس ممكن أيضاً: قد يحتفظ fid المفتوح قبل سحب الصلاحية بقدرته. لا تكفي خانة واحدة اسمها «مسموح».

qid بدوره ليس هوية عالمية. إنه يميز الملف داخل تسلسل هرمي واحد للخادم، وينبغي أن يتغير جزء path منه عند حذف الملف وإعادة إنشائه. هو أقوى من اسم معروض، لكنه ليس بصمة للمحتوى ولا دليلاً على أن خادمين أو نقطتي تركيب يعرضان الكائن نفسه.

هذه المحلية مقصودة في Plan 9. شارك روب بايك وديف بريزوتو وكين تومبسون وهوارد تريكي وفيل وينتربوتوم في كتابة The Use of Name Spaces in Plan 9 عن فضاءات أسماء لكل عملية. وكتب Plan 9 from Bell Labs بايك وبريزوتو وشون دوروارد وبوب فلاندرينا وتومبسون وتريكي ووينتربوتوم، موضحين أن تركيب فضاء الاسم يبقى لدى العميل. لا يحاول النظام إثبات شجرة عالمية واحدة؛ بل يتيح تركيب رؤية محلية.

ينبغي أن تظل نسبة الفضل محددة أيضاً. تذكر مقدمة الطبعة الثانية أن تومبسون بدأ البروتوكول، وبايك دمج نظام الأسماء، وبريزوتو بنى الشبكة، مع الإقرار بعمل وينتربوتوم وكثيرين غيره. وصف 9P بأنه اختراع منفرد لبايك يمحو التعاون ولا يصف إنجازه الحقيقي بدقة.

ولا يصح جمع اللهجات في عقد حقول واحد. تربط مقدمة الطبعة الرابعة إصدار 9P الأحدث أساساً بالتخلص من حد 27 بايت القديم لعنصر الاسم، إضافة إلى تحسين الكفاءة والمرونة والتغليف. يدعم Linux v9fs نسخ 9p2000 و9p2000.u و9p2000.L. للامتداد الشبيه بـUNIX ولهجة Linux وثائقهما؛ تحتفظ 9P2000.L بشكل walk لكنها تستخدم Tlopen/Rlopen ورايات Linux. يبقى الفصل بين الحل والفتح قابلاً للمقارنة، لا تفاصيل كل رسالة.

تضيف أوضاع التخزين المؤقت في v9fs حداً بين ما يراه العميل وحالة الخادم الآنية. لذلك تحفظ الحزمة الدفاعية اللهجة والجلسة والخادم والتصدير وسياق attach وfid/qid الابتدائيين والأسماء وكل قيم qid والنتيجة الكاملة أو الجزئية وnewfid ونمط open وراياته وqid/iounit من Ropen والعمليات اللاحقة ووضع الذاكرة المؤقتة ونهاية الجلسة.

عندئذ تبقى عبارة «نجح walk» قوية. فهي تقول بدقة أين ومتى حُلّ الاسم، ولا تحتاج إلى الادعاء بأن شيئاً فُتح.

Sources