الفصل الثاني: العمليات (Processes) في أنظمة التشغيل
تُعد العمليات (Processes) من المفاهيم الأساسية والمحورية في نظم التشغيل، إذ تمثل الركيزة التي تقوم عليها آلية تنفيذ البرامج وتوفير الخدمات للمستخدمين والتطبيقات. العمليات ليست مجرد تنفيذ للبرامج، بل هي كيانات ديناميكية تجمع بين التعليمات البرمجية والبيانات والحالة التشغيلية التي تسمح للنظام بإدارة تعدد المهام، وتنظيم الموارد، وتحقيق الاستقرار والكفاءة.
تعريف العملية (Process)
العملية في نظام التشغيل هي وحدة العمل الأساسية التي يقوم النظام بإدارتها وتنفيذها. يمكن تعريف العملية بأنها برنامج قيد التنفيذ، مع جميع الموارد المرتبطة به مثل الذاكرة، سجلات وحدة المعالجة المركزية (CPU registers)، وحالة العملية. العملية تختلف عن البرنامج الثابت الذي يتم تخزينه على القرص، فبينما البرنامج هو مجموعة من التعليمات الثابتة، العملية هي تنفيذ حي لتلك التعليمات.
عندما يتم تشغيل برنامج ما، يقوم نظام التشغيل بإنشاء عملية جديدة تمثل ذلك التنفيذ. لكل عملية معرف فريد (Process ID) وحالة (State) تعكس المرحلة التي تمر بها في دورة حياتها.
دورة حياة العملية (Process Lifecycle)
تمر العملية بمراحل متعددة منذ لحظة إنشائها وحتى انتهائها. يمكن تلخيص هذه المراحل في:
-
إنشاء العملية (Process Creation): تبدأ العملية عند إطلاق برنامج أو عندما تنشئ عملية أخرى عملية جديدة، مثل عملية الأب التي تخلق عملية الابن. يقوم النظام بتخصيص الموارد اللازمة، وإنشاء مدخل خاص للعملية في جدول العمليات.
-
حالة التشغيل (Running): عندما يتم تخصيص وحدة المعالجة المركزية للعملية، فإنها تدخل حالة التشغيل حيث تبدأ التعليمات في التنفيذ.
-
حالة الانتظار (Waiting/Blocked): عندما تنتظر العملية حدوث حدث معين مثل إتمام إدخال/إخراج أو انتظار مورد معين، تنتقل إلى حالة الانتظار. لا تستخدم في هذه الحالة وحدة المعالجة المركزية.
-
حالة الجاهزية (Ready): تكون العملية جاهزة للتنفيذ، لكن لم يتم تخصيص وحدة المعالجة لها بعد، فتنتظر في قائمة العمليات الجاهزة.
-
انتهاء العملية (Terminated): تنتهي العملية عند اكتمال تنفيذ التعليمات أو حدوث خطأ يؤدي إلى إيقافها.
يُظهر الشكل التالي دورة حياة العملية بطريقة مبسطة:
| المرحلة | الوصف |
|---|---|
| إنشاء (New) | تخصيص الموارد وإنشاء مدخل للعملية في النظام |
| جاهزة (Ready) | العملية جاهزة للتنفيذ وتنتظر تخصيص CPU |
| تشغيل (Running) | وحدة المعالجة تنفذ تعليمات العملية |
| انتظار (Waiting) | العملية تنتظر حدثًا معينًا أو موردًا |
| انتهاء (Terminated) | العملية انتهت وتم تحرير الموارد |
مكونات العملية
تتكون العملية من عدة مكونات رئيسية، تجمع بين البيانات والتعليمات والحالة:
-
برنامج التنفيذ (Program Code): مجموعة التعليمات التي يجب تنفيذها.
-
عداد البرنامج (Program Counter): مؤشر يُظهر العنوان التالي الذي سيتم تنفيذه في البرنامج.
-
سجلات وحدة المعالجة المركزية (CPU Registers): تحتوي على البيانات المؤقتة والوسيطات التي تحتاجها التعليمات.
-
مساحة العنوان (Address Space): الذاكرة المخصصة للعملية، تشمل الكود، البيانات، والكومة (Stack).
-
حالة العملية (Process State): الحالة الحالية للعملية كما شرحنا سابقًا.
-
معلومات الجدولة (Scheduling Information): تشمل الأولويات، مؤشرات القوائم، وأوقات التشغيل.
-
معلومات التحكم (Control Information): مثل معرف العملية (PID)، ومعلومات الحماية.
إدارة العمليات في نظام التشغيل
تعتبر إدارة العمليات واحدة من الوظائف الأساسية لنظام التشغيل، إذ يوفر النظام آليات لإنشاء العمليات، الجدولة، التزامن، والمزامنة بينها. وتتضمن إدارة العمليات عدة مهام أساسية:
1. إنشاء العملية (Process Creation)
تتم عملية إنشاء العملية بواسطة أوامر النظام أو بواسطة عملية موجودة. عند إنشاء عملية جديدة، يقوم النظام بتخصيص:
-
معرف العملية (PID)
-
مساحة عنوان خاصة للعملية
-
نسخ من سجل المعالج، عداد البرنامج، وحالة الذاكرة
-
إدخال في جدول العمليات لتتبع العملية
2. الجدولة (Scheduling)
نظرًا لأن عدد العمليات يمكن أن يزيد على عدد الأنوية المتاحة، يحتاج نظام التشغيل إلى جدولة العمليات بحيث يتم تخصيص وحدة المعالجة بشكل عادل وفعال. تقوم وحدة الجدولة (Scheduler) باختيار العملية التالية التي ستستخدم وحدة المعالجة.
تنقسم سياسات الجدولة إلى نوعين رئيسيين:
-
جدولة العمليات التفاعلية (Preemptive Scheduling): حيث يمكن إيقاف العملية مؤقتًا لإعطاء فرصة لعملية أخرى.
-
جدولة العمليات غير التفاعلية (Non-preemptive Scheduling): تستمر العملية في التنفيذ حتى تنهي أو تنتقل إلى حالة انتظار.
تستخدم نظم التشغيل الحديثة سياسات معقدة مثل Round Robin، Shortest Job First (SJF)، Priority Scheduling لضمان تحسين الأداء والعدالة.
3. التزامن والمزامنة (Synchronization)
قد تتشارك العمليات في الوصول إلى موارد مشتركة مثل الملفات أو الأجهزة، مما يؤدي إلى مشاكل مثل التعارض أو التداخل (Race Conditions). يوفر نظام التشغيل آليات مثل الأقفال (Locks)، الإشارات (Semaphores)، والمناطق الحرجة (Critical Sections) لضمان تزامن آمن وفعال بين العمليات.
4. إنهاء العملية (Termination)
تنتهي العملية إما بصورة طبيعية بعد اكتمال تنفيذ البرنامج أو بسبب خطأ أو تدخل من النظام. عند إنهاء العملية، يقوم النظام بتحرير الموارد المخصصة لها، حذف مدخلاتها في جدول العمليات، وتحديث حالة النظام.
الأنواع المختلفة للعمليات
تنقسم العمليات في نظم التشغيل إلى أنواع متعددة وفقًا لطبيعتها ووظيفتها:
1. العمليات التفاعلية (Interactive Processes)
تتفاعل مع المستخدم بشكل مباشر، وتتطلب استجابة سريعة. مثال على ذلك: محررات النصوص، المتصفحات.
2. العمليات الدفعة (Batch Processes)
تعمل دون تدخل المستخدم، وغالبًا ما تكون مهام حسابية أو معالجة بيانات ضخمة، مثل تحليل البيانات أو نسخ الملفات.
3. العمليات الخلفية (Background Processes)
تعمل في الخلفية ولا تحتاج إلى تفاعل مباشر، مثل خدمات النظام أو البرامج التي تراقب النظام.
4. العمليات متعددة الخيوط (Multithreaded Processes)
تحتوي على أكثر من مسار تنفيذ (Thread) داخل نفس العملية، تسمح بتنفيذ أجزاء متعددة من البرنامج بشكل متزامن داخل نفس مساحة العنوان.
العمليات مقابل الخيوط (Processes vs Threads)
يجب التفريق بين العمليات والخيوط، إذ الخيوط (Threads) هي وحدات أصغر داخل العملية، تشترك في نفس مساحة العنوان لكنها تمتلك عداد برنامج وسجلات خاصة بها. استخدام الخيوط يعزز الأداء ويساعد في تقسيم العمل داخل نفس البرنامج.
في المقابل، كل عملية لها مساحة عنوان منفصلة، مما يوفر عزلًا أفضل لكنه يتطلب إدارة أكثر تعقيدًا عند التواصل بين العمليات.
إدارة الذاكرة للعمليات
لكل عملية مساحة عنوان خاصة في الذاكرة، تشمل:
-
الذاكرة النصية (Text segment): تحتوي على كود البرنامج.
-
الذاكرة البيانات (Data segment): تخزن المتغيرات الثابتة والمتغيرة.
-
الكومة (Stack): تخزن بيانات استدعاء الوظائف، مثل المتغيرات المحلية.
نظام التشغيل يدير تخصيص هذه المساحات بعناية، خصوصًا في أنظمة الذاكرة الافتراضية التي تسمح لكل عملية بالعمل كما لو كانت تملك مساحة ذاكرة كبيرة ومستقلة.
الانتقال بين العمليات
العملية التي تشغل وحدة المعالجة المركزية يمكن أن تُستبدل بعملية أخرى عن طريق عملية تسمى تبديل السياق (Context Switching). عند تبديل السياق، يقوم النظام بحفظ حالة العملية الحالية (سجلات، عداد البرنامج، …) واستعادة حالة العملية الجديدة.
تبديل السياق هو جزء أساسي من التعدد في المهام (Multitasking)، لكن له تكلفة زمنية على الأداء.
حالات متقدمة لإدارة العمليات
العمليات المتعددة المستويات (Multiprogramming)
يتيح نظام التشغيل وجود عدة عمليات في الذاكرة في نفس الوقت، لتقليل زمن الانتظار لوحدة المعالجة.
التزامن بين العمليات (Interprocess Communication – IPC)
عندما تحتاج العمليات إلى تبادل البيانات، يستخدم نظام التشغيل آليات مثل:
-
أنابيب (Pipes)
-
الرسائل (Message Queues)
-
الذاكرة المشتركة (Shared Memory)
-
المقابس (Sockets)
هذه الآليات تسمح بتنسيق وتبادل البيانات بين العمليات بصورة آمنة وسلسة.
الحماية والعزل بين العمليات
كل عملية تعمل في بيئة معزولة لمنع تأثير الأخطاء أو الهجمات من عملية على أخرى. نظام التشغيل يوفر آليات حماية، مثل جدران الحماية الداخلية، وحدود صلاحيات الوصول إلى الموارد.
تطبيقات عملية لمفهوم العمليات
-
إدارة الخوادم: في خوادم الويب أو قواعد البيانات، كل طلب يتم معالجته عبر عملية منفصلة أو خيط لتنظيم الأداء.
-
البرمجيات متعددة المهام: تمكن المستخدم من تشغيل عدة تطبيقات في نفس الوقت دون تعارض.
-
نظم التشغيل الحديثة: مثل لينكس وويندوز تعتمد بشكل مكثف على مفهوم العمليات والخيوط لضمان استقرار وأمان النظام.
تُعتبر العمليات العمود الفقري لأنظمة التشغيل الحديثة، إذ بدونها لا يمكن تنفيذ البرامج أو تنظيم الموارد بشكل فعال. مع التقدم في تقنيات الحوسبة، ازداد تعقيد إدارة العمليات، لتشمل تعدد الخيوط، التزامن المتقدم، والتفاعل بين العمليات، مما يجعل فهم هذا المفهوم جوهريًا لكل من يعمل في مجال علوم الحاسوب ونظم التشغيل.
المصادر والمراجع
-
Silberschatz, Abraham, Peter B. Galvin, and Greg Gagne. Operating System Concepts. 10th Edition, Wiley, 2018.
-
Tanenbaum, Andrew S., and Herbert Bos. Modern Operating Systems. 4th Edition, Pearson, 2014.

