ما هي تقنية الحاويات؟

لفهم الحاويات، تحتاج أولاً إلى معرفة بعض الخلفية حول كيفية عمل نظام التشغيل على جهاز الكمبيوتر الخاص بك.

هذه لمحة سريعة عن نظام التشغيل على الكمبيوتر، كما هو موضح في الشكل 1.

Figure 1

معظم أنظمة التشغيل تحتوي على ما يُسمى بالنواة. هذه النواة هي عملية برمجية تعمل على إدارة الوصول بين جميع البرامج التي تعمل على جهاز الكمبيوتر الخاص بك وكل الأجهزة المادية المتصلة بجهازك.

إذا كنت قد استخدمت Node.js وقمت بكتابة ملف على القرص، تقنيًا، فإن Node.js لا يتحدث مباشرةً إلى الجهاز المادي، بل يطلب من النواة: أريد كتابة ملف على القرص، ثم تقوم النواة بأخذ هذه المعلومات ومعالجتها في النهاية على القرص. لذلك، تُعد النواة دائمًا طبقة وسيطة تدير الوصول بين هذه البرامج والقرص الفعلي.

تتفاعل هذه البرامج مع النواة من خلال ما يُسمى بنداءات النظام (system calls). وهي في الأساس مثل استدعاءات الدوال (لتنفيذ كود دالة).

توفر النواة نقاط نهاية متعددة لتقول: إذا كنت تريد كتابة ملف على القرص، استدعِ هذه النقطة من هذه الدالة هنا، فهي تحتاج إلى معلومات معينة، ويتم في النهاية كتابة هذه المعلومات على القرص أو في الذاكرة، وهكذا.

لنأخذ مثالًا افتراضيًا كما هو موضح في الشكل (2). لنفترض أن متصفح Chrome يحتاج إلى Python الإصدار 2 للتشغيل، وNode.js يحتاج إلى Python الإصدار 3، بينما لدينا Python الإصدار 2 مثبتًا على قرصنا، ومن غير المسموح وجود تثبيتين متطابقين من Python في نفس الوقت.

كيف يمكننا حل هذه المشكلة؟ إحدى الطرق هي استخدام ميزة في نظام التشغيل تُعرف باسم **تجزئة الأسماء (Name Spacing)**. باستخدام تجزئة الأسماء، يمكننا النظر إلى جميع الموارد المادية المتصلة بجهاز الكمبيوتر، وتقسيم أجزاء من هذه الموارد بحيث نتمكن من إنشاء قسم على القرص الصلب خصيصًا لاستضافة Python الإصدار 2 وآخر لاستضافة Python الإصدار 3، بحيث يتمكن Chrome من الوصول إلى القسم الذي يحتوي على Python الإصدار 2، ويتمكن Node.js من الوصول إلى القسم الذي يحتوي على Python الإصدار 3. في كل مرة يقوم أحدهما بنداء نظام لقراءة المعلومات من القرص، تنظر النواة في نداء النظام الوارد وتحاول تحديد العملية المرسلة وتوجهها إلى قسمها الخاص، كما هو موضح في الشكل 3.

باستخدام هذا النوع من ميزة **تجزئة الأسماء (Namespace)** أو التقسيم، يمكننا التأكد من أن كل من Chrome وNode.js يمكنهما العمل على نفس الجهاز.

تقول تجزئة الأسماء أن هذا الجزء من القرص مخصص لهذه العملية، ويمكن استخدام مجموعات التحكم (Control Groups) لتحديد كمية الذاكرة التي يمكن للعملية استخدامها، وكمية وحدة المعالجة المركزية (CPU)، والذاكرة، والقرص.

لذلك، يمكن استخدام هاتين الوظيفتين معًا لعزل عملية واحدة وتحديد عدد الموارد التي يمكنها التواصل معها.

الحاوية، إذن، هي عملية أو مجموعة من العمليات التي تم تخصيص مجموعة من الموارد لها بشكل محدد، كما هو موضح في الشكلين 4 و5.

لكن ميزة **تجزئة الأسماء (Name Spacing)** ومجموعات التحكم (**C-groups**) ليست معيارية في جميع أنظمة التشغيل، فهي خاصة بنظام **لينكس** فقط، وليست موجودة في **ويندوز** أو **ماك أو إس**. لذا، سيتم مناقشة كيفية إنشاء الحاويات على **ويندوز وماك أو إس** في المقالة القادمة.