إدارة العمليات (الحوسبة)
العملية هي برنامج قيد التنفيذ، وجزء لا يتجزأ من أي نظام تشغيل حديث . يجب على نظام التشغيل تخصيص الموارد للعمليات ، وتمكينها من مشاركة المعلومات وتبادلها، وحماية موارد كل عملية من العمليات الأخرى، وتمكين التزامن بينها. ولتحقيق هذه المتطلبات، يجب على نظام التشغيل الاحتفاظ ببنية بيانات لكل عملية، تصف حالتها وملكية مواردها، مما يُمكّن نظام التشغيل من التحكم في كل عملية.
البرمجة المتعددة
في أي نظام تشغيل حديث، يمكن تحميل أكثر من نسخة من البرنامج في الذاكرة في الوقت نفسه. على سبيل المثال، يمكن لأكثر من مستخدم تشغيل البرنامج نفسه، حيث يمتلك كل مستخدم نسخة منفصلة من البرنامج مُحمّلة في الذاكرة. في بعض البرامج، يمكن تحميل نسخة واحدة في الذاكرة، بينما يتشارك عدة مستخدمين الوصول إليها، بحيث يمكن لكل منهم تشغيل نفس شيفرة البرنامج. يُسمى هذا النوع من البرامج "برنامجًا قابلًا لإعادة الدخول" . في لحظة معينة، لا يمكن للمعالج تنفيذ سوى تعليمة واحدة من برنامج واحد، ولكن يمكن الحفاظ على عدة عمليات قيد التشغيل لفترة زمنية من خلال تخصيص كل عملية للمعالج على فترات زمنية، بينما تصبح العمليات المتبقية غير نشطة مؤقتًا. يُعرف تنفيذ عمليات متعددة على مدى فترة زمنية، بدلًا من تنفيذها في وقت واحد، بالتنفيذ المتزامن.
نظام التشغيل متعدد البرامج أو متعدد المهام هو نظام تشغيل قادر على تنفيذ العديد من العمليات في وقت واحد. تتطلب البرمجة المتعددة تخصيص المعالج لكل عملية لفترة زمنية محددة، ثم تحريره أو إتاحته في الوقت المناسب. إذا تم تحرير المعالج أثناء تنفيذ عملية ما، فيجب أن يتم ذلك بطريقة تُمكّن العملية من إعادة التشغيل لاحقًا بأكبر قدر ممكن من الكفاءة.
هناك طريقتان لنظام التشغيل لاستعادة السيطرة على المعالج أثناء تنفيذ البرنامج حتى يتمكن نظام التشغيل من إجراء عملية إلغاء التخصيص أو التخصيص:
- تقوم العملية بإصدار استدعاء نظام (يسمى أحيانًا مقاطعة برمجية )؛ على سبيل المثال، يحدث طلب إدخال/إخراج يطلب الوصول إلى ملف على القرص الصلب.
- يحدث انقطاع في الأجهزة ؛ على سبيل المثال، تم الضغط على مفتاح في لوحة المفاتيح، أو انتهى المؤقت (يستخدم في تعدد المهام الاستباقي ).
يُطلق على إيقاف عملية ما وبدء (أو إعادة تشغيل) عملية أخرى اسم تبديل السياق أو تغيير السياق. في العديد من أنظمة التشغيل الحديثة، يمكن أن تتكون العمليات من عدة عمليات فرعية. وهذا يُعرّف مفهوم الخيط . يُمكن اعتبار الخيط عملية فرعية ؛ أي تسلسل تنفيذ منفصل ومستقل ضمن شيفرة عملية واحدة. تزداد أهمية الخيوط في تصميم الأنظمة الموزعة وأنظمة العميل والخادم ، وفي البرامج التي تعمل على أنظمة متعددة المعالجات .
كيف تزيد البرمجة المتعددة من الكفاءة
من السمات الشائعة في معظم برامج الحاسوب التناوب بين دورات وحدة المعالجة المركزية (CPU) ودورات الإدخال /الإخراج (I/ O). خلال دورة وحدة المعالجة المركزية، تُنفَّذ العملية وتشغل وحدة المعالجة المركزية. أما خلال دورة الإدخال/الإخراج، فلا تستخدم العملية المعالج، بل تنتظر تنفيذ عمليات الإدخال/الإخراج، أو تُنفِّذها فعليًا. ومن أمثلة ذلك قراءة أو كتابة ملف على القرص. قبل ظهور البرمجة المتعددة ، كانت الحواسيب تعمل كأنظمة أحادية المستخدم. وسرعان ما أدرك مستخدمو هذه الأنظمة أن المعالج يكون خاملاً في معظم الأوقات التي يُخصَّص فيها الحاسوب لمستخدم واحد - على سبيل المثال، عند إدخال معلومات أو تصحيح أخطاء البرامج . لاحظ علماء الحاسوب إمكانية تحسين الأداء العام للجهاز بتخصيص المعالج لعملية أخرى عندما تنتظر عملية أخرى الإدخال/الإخراج. في نظام برمجة أحادي ، إذا قام N مستخدم بتنفيذ برامج بأوقات تنفيذ فردية t 1 ، t 2 ، ...، t N ، فإن إجمالي الوقت، t uni ، لخدمة العمليات N (على التوالي) لجميع المستخدمين N سيكون:
- t uni = t 1 + t 2 + ... + t N .
مع ذلك، ولأن كل عملية تستهلك دورات وحدة المعالجة المركزية ودورات الإدخال/الإخراج، فإن الوقت الذي تستخدمه كل عملية فعليًا لوحدة المعالجة المركزية يمثل جزءًا صغيرًا جدًا من إجمالي وقت تنفيذ العملية. لذا، بالنسبة للعملية i :
- t i (المعالج) ≪ t i (التنفيذ)
أين
t i (المعالج) هو الوقت الذي يقضيه المعالج i في استخدام وحدة المعالجة المركزية، و t i (التنفيذ) هو إجمالي وقت التنفيذ للمعالج؛ أي الوقت اللازم لدورات وحدة المعالجة المركزية بالإضافة إلى دورات الإدخال/الإخراج التي يجب تنفيذها حتى اكتمال العملية.
في الواقع، عادةً، نادراً ما يتجاوز مجموع وقت المعالج بأكمله، الذي تستخدمه N عملية، جزءًا صغيرًا من الوقت اللازم لتنفيذ أي من العمليات؛
لذا، في أنظمة البرمجة الأحادية، يبقى المعالج خاملاً لفترة طويلة. وللتغلب على هذا القصور، تُطبَّق البرمجة المتعددة في أنظمة التشغيل الحديثة مثل لينكس ، ويونكس، ومايكروسوفت ويندوز . يُمكِّن هذا المعالج من الانتقال من عملية (س) إلى أخرى (ص) كلما شاركت (س) في مرحلة الإدخال/الإخراج من تنفيذها. وبما أن زمن المعالجة أقل بكثير من زمن تشغيل مهمة واحدة، يُمكن تقليل إجمالي الوقت اللازم لخدمة جميع المستخدمين (ن) باستخدام نظام برمجة متعددة إلى ما يقارب:
- t multi = max( t 1 , t 2 , ..., t N )
إنشاء العملية
تحتاج أنظمة التشغيل إلى بعض الوسائل لإنشاء العمليات. في نظام بسيط للغاية مصمم لتشغيل تطبيق واحد فقط (مثل وحدة التحكم في فرن الميكروويف)، قد يكون من الممكن توفير جميع العمليات اللازمة عند بدء تشغيل النظام. أما في الأنظمة متعددة الأغراض، فيلزم وجود آلية لإنشاء العمليات وإنهائها حسب الحاجة أثناء التشغيل. هناك أربعة أحداث رئيسية تؤدي إلى إنشاء عملية:
- تهيئة النظام.
- تنفيذ استدعاء نظام إنشاء العمليات بواسطة عملية قيد التشغيل.
- طلب من المستخدم لإنشاء عملية جديدة.
- بدء تشغيل مهمة دفعية.
عند تشغيل نظام التشغيل، تُفعَّل عادةً عدة عمليات أساسية لتجهيز النظام للعمل. بعض هذه العمليات هي عمليات أمامية تتفاعل مع المستخدم وتؤدي مهامًا نيابةً عنه. بينما توجد عمليات خلفية أخرى لا ترتبط بمستخدمين محددين، بل تؤدي وظائف معينة. على سبيل المثال، قد تُصمَّم إحدى العمليات الخلفية لاستقبال رسائل البريد الإلكتروني الواردة، حيث تبقى في وضع السكون معظم اليوم، ثم تنشط فجأة عند وصول رسالة جديدة. ويمكن تصميم عملية خلفية أخرى لاستقبال طلبات صفحات الويب المُستضافة على الجهاز، ولا تنشط إلا عند وصول طلب لتلبيته.
يتم إنشاء العمليات في أنظمة يونكس ولينكس باستخدام استدعاءات النظام fork() أو clone(). تتضمن عملية إنشاء العمليات عدة خطوات. الخطوة الأولى هي التحقق من امتلاك العملية الأصلية الصلاحيات الكافية لإنشاء عملية جديدة. عند نجاح التحقق، تُنسخ العملية الأصلية بالكامل تقريبًا، مع تغييرات طفيفة في مُعرّف العملية الفريد، والعملية الأصلية نفسها، ومساحة المستخدم. تحصل كل عملية جديدة على مساحة مستخدم خاصة بها. [ 1 ]
يتم إنشاء العمليات في نظام ويندوز من خلال استدعاء النظام CreateProcessA(). تعمل العملية الجديدة ضمن سياق الأمان الخاص بالعملية المُستدعِية، ولكنها تعمل بشكل مستقل عنها. توجد طرق لتغيير سياق الأمان الذي تعمل فيه العملية الجديدة. تُخصَّص للعمليات الجديدة مُعرِّفات تُتيح الوصول إليها. كما تُوفَّر دوال لمزامنة سلاسل العمليات المُستدعِية مع العمليات المُنشأة حديثًا. [ 2 ] [ 3 ]
إنهاء العملية
هناك العديد من الأسباب لإنهاء العملية:
- توقف تنفيذ تعليمات معالجة الدفعات
- يقوم المستخدم بتسجيل الخروج
- تقوم العملية بتنفيذ طلب خدمة لإنهاء العملية
- حالات الخطأ والعطل
- إتمام عادي
- تجاوزت المدة الزمنية المحددة
- الذاكرة غير متوفرة
- انتهاك حدود المصفوفة؛ على سبيل المثال: محاولة الوصول إلى العنصر الحادي عشر (غير الموجود) من مصفوفة مكونة من 10 عناصر
- خطأ في الحماية؛ على سبيل المثال: محاولة الكتابة إلى ملف للقراءة فقط
- خطأ حسابي ؛ على سبيل المثال: محاولة القسمة على صفر
- تجاوز الوقت المحدد؛ على سبيل المثال: انتظرت العملية مدة أطول من الحد الأقصى المحدد لحدث ما
- فشل الإدخال/الإخراج
- تعليمات غير صالحة؛ على سبيل المثال: عندما تحاول عملية ما تنفيذ بيانات (نص)
- التعليم المتميز
- إساءة استخدام البيانات
- التدخل في نظام التشغيل ؛ على سبيل المثال: لحل حالة التعطل التام
- تنتهي العملية الأصلية، فتنتهي العمليات الفرعية (الإنهاء المتتالي)
- طلب ولي الأمر
نموذج إدارة العمليات ثنائي الحالة
تتمثل المسؤولية الرئيسية لنظام التشغيل في التحكم بتنفيذ العمليات . ويشمل ذلك تحديد نمط التداخل في التنفيذ وتخصيص الموارد للعمليات. أحد جوانب تصميم نظام التشغيل هو وصف السلوك المطلوب لكل عملية. يعتمد أبسط نموذج على حقيقة أن العملية إما قيد التنفيذ بواسطة المعالج أو غير قيد التنفيذ. وبالتالي، يمكن اعتبار العملية في إحدى حالتين: قيد التشغيل أو غير قيد التشغيل . عندما يُنشئ نظام التشغيل عملية جديدة، تُصنف هذه العملية مبدئيًا على أنها غير قيد التشغيل ، وتُوضع في قائمة انتظار في النظام في حالة غير قيد التشغيل . ثم توجد العملية (أو جزء منها) في الذاكرة الرئيسية ، وتنتظر في قائمة الانتظار فرصة للتنفيذ. بعد فترة زمنية معينة، ستُقاطع العملية قيد التشغيل حاليًا، وتُنقل من حالة التشغيل إلى حالة غير قيد التشغيل ، مما يجعل المعالج متاحًا لعملية أخرى. يقوم جزء الإرسال في نظام التشغيل باختيار إحدى العمليات المنتظرة من قائمة العمليات غير الجارية لنقلها إلى المعالج. ثم تُعاد تسمية العملية المختارة من حالة "غير جارية" إلى حالة "جارية" ، ويبدأ تنفيذها إما إذا كانت عملية جديدة، أو يُستأنف إذا كانت عملية توقفت سابقًا.
من خلال هذا النموذج، يمكننا تحديد بعض عناصر تصميم نظام التشغيل:
- الحاجة إلى تمثيل كل عملية وتتبعها
- حالة العملية
- ترتيب العمليات غير الجارية في قائمة الانتظار
نموذج إدارة العمليات ثلاثي المراحل
على الرغم من أن نموذج إدارة العمليات ثنائي الحالة يُعد تصميمًا صالحًا تمامًا لنظام التشغيل، إلا أن غياب حالة "الحظر" يعني أن المعالج يبقى في وضع الخمول عندما تنتقل العملية النشطة من دورات وحدة المعالجة المركزية إلى دورات الإدخال/الإخراج . هذا التصميم لا يُحقق الاستخدام الأمثل للمعالج. وللتغلب على هذه المشكلة، صُمم نموذج إدارة العمليات ثلاثي الحالات من خلال إضافة حالة جديدة تُسمى حالة "الحظر" . تصف هذه الحالة أي عملية تنتظر حدوث حدث إدخال/إخراج. في هذه الحالة، قد يعني حدث الإدخال/الإخراج استخدام جهاز ما أو إشارة من عملية أخرى. الحالات الثلاث في هذا النموذج هي:
- قيد التشغيل: العملية التي يتم تنفيذها حاليًا.
- جاهز: عملية في قائمة الانتظار ومستعدة للتنفيذ عند إتاحة الفرصة.
- محظور: عملية لا يمكن تنفيذها حتى يحدث حدث ما، مثل اكتمال عملية الإدخال/الإخراج.
في أي لحظة، تكون العملية في حالة واحدة فقط من الحالات الثلاث. بالنسبة لجهاز كمبيوتر بمعالج واحد، لا يمكن أن تكون سوى عملية واحدة في حالة التشغيل في أي لحظة. يمكن أن يكون هناك العديد من العمليات في حالتي الاستعداد والحظر ، ولكل حالة من هذه الحالات قائمة انتظار خاصة بها.
يجب أن تدخل العمليات إلى النظام مبدئيًا في حالة "جاهز" ، ولا يمكنها الانتقال إلى حالة "قيد التشغيل" إلا عبر حالة "جاهز" . عادةً ما تغادر العمليات النظام من حالة "قيد التشغيل" . في كل حالة من الحالات الثلاث، تشغل العملية مساحة في الذاكرة الرئيسية. في حين أن سبب معظم الانتقالات من حالة إلى أخرى قد يكون واضحًا، إلا أن بعضها قد لا يكون كذلك.
- من قيد التشغيل إلى جاهز: السبب الأكثر شيوعًا لهذا الانتقال هو وصول العملية الجارية إلى الحد الأقصى المسموح به من الوقت للتنفيذ المتواصل، أي حدوث مهلة زمنية. وتشمل الأسباب الأخرى فرض مستويات أولوية وفقًا لسياسة الجدولة المستخدمة في مُجدوِل المستوى الأدنى، ووصول عملية ذات أولوية أعلى إلى حالة جاهز.
- قيد التشغيل ← متوقف: تُوضع العملية في حالة التوقف إذا طلبت شيئًا يتطلب منها الانتظار. عادةً ما يكون الطلب المُرسل إلى نظام التشغيل على شكل استدعاء نظام (أي استدعاء من العملية قيد التشغيل إلى دالة ضمن كود نظام التشغيل). على سبيل المثال، قد تتوقف العملية إذا كانت تطلب ملفًا من القرص أو تحفظ جزءًا من الكود أو البيانات من الذاكرة إلى ملف على القرص.
وصف العملية والتحكم بها
يتم تمثيل كل عملية في النظام بواسطة بنية بيانات تسمى كتلة التحكم في العملية (PCB)، أو واصف العملية في نظام لينكس .
تحديد العملية : يتم تحديد كل عملية بشكل فريد من خلال تعريف المستخدم ومؤشر يربطها بوصفها.
حالة العملية : يشير هذا إلى الحالة الحالية للعملية؛ جاهز ، قيد التشغيل ، محظور ، جاهز معلق ، محظور معلق .
حالة العملية : تحتوي هذه على جميع المعلومات اللازمة للإشارة إلى الحالة الحالية للوظيفة.
المحاسبة : تتضمن هذه المعلومات بيانات تُستخدم بشكل أساسي لأغراض الفوترة وقياس الأداء. وهي توضح نوع الموارد التي استخدمتها العملية ومدة استخدامها.
أوضاع المعالج
تتضمن المعالجات الحديثة بتًا خاصًا بالوضع لتحديد إمكانية تنفيذ البرنامج داخل المعالج. يمكن ضبط هذا البت على وضع النواة أو وضع المستخدم . يُشار إلى وضع النواة أيضًا باسم وضع المشرف أو وضع المراقبة أو الحلقة 0 .
في وضع النواة، يستطيع المعالج تنفيذ جميع التعليمات الموجودة في مجموعته البرمجية، بينما في وضع المستخدم، لا يستطيع تنفيذ سوى مجموعة فرعية منها. تُسمى التعليمات التي لا يمكن تنفيذها إلا في وضع النواة بتعليمات النواة أو التعليمات المميزة أو التعليمات المحمية، وذلك لتمييزها عن تعليمات وضع المستخدم. على سبيل المثال، تُعد تعليمات الإدخال/الإخراج تعليمات مميزة. ولذلك، إذا تم تشغيل برنامج تطبيقي في وضع المستخدم، فلن يتمكن من تنفيذ عمليات الإدخال/الإخراج بنفسه ، بل يجب عليه أن يطلب من نظام التشغيل تنفيذ هذه العمليات نيابةً عنه.
مفهوم نظام النواة
تعمل الأجزاء الحيوية لنظام التشغيل في وضع النواة ، بينما تعمل البرامج الأخرى (مثل أدوات النظام وبرامج التطبيقات) في وضع المستخدم . وهذا هو الفرق الأساسي بين نظام التشغيل وبرامج النظام الأخرى . يُطلق على الجزء من النظام الذي يعمل في وضع النواة اسم النواة ، أو جوهر نظام التشغيل. صُممت النواة كبرنامج موثوق، أي أنها تُنفذ آليات حماية لا يمكن تعديلها سرًا بواسطة برامج غير موثوقة تعمل في وضع المستخدم. تعمل إضافات نظام التشغيل في وضع المستخدم ، لذا فإن الوظائف الأساسية لنظام التشغيل لا تعتمد على هذه الإضافات لضمان عمله بشكل صحيح.
يُعدّ تحديد ما إذا كان ينبغي تنفيذ أي وظيفة في نظام التشغيل ضمن النواة قرارًا تصميميًا أساسيًا. فإذا نُفّذت ضمن النواة، فإنها تعمل في وضع النواة، ما يمنحها صلاحية الوصول إلى أجزاء أخرى من النواة ويكسبها ثقة تلك الأجزاء. في المقابل، إذا نُفّذت الوظيفة في وضع المستخدم ، فإنها تفتقر إلى صلاحية الوصول إلى هياكل بيانات النواة، ولكن استدعاءها يتطلب جهدًا ضئيلًا. مع أن الوظائف المُنفّذة ضمن النواة قد تكون بسيطة، إلا أن آلية اعتراض الاستدعاء وعملية المصادقة المطلوبة أثناء الاستدعاء قد تستهلك موارد النظام بشكل كبير. وبينما يعمل كود النواة نفسه بكفاءة، فإن العبء الإضافي المرتبط بالاستدعاء قد يكون كبيرًا. هذا فرق دقيق ولكنه جوهري.
طلب خدمات النظام
هناك طريقتان يمكن من خلالهما لبرنامج يعمل في وضع المستخدم أن يطلب خدمات النواة :
تُصمَّم أنظمة التشغيل بإحدى هاتين الميزتين، وليس كلتيهما. لنفترض أولًا أن عملية مستخدم ترغب في استدعاء دالة نظام مُحدَّدة. في أسلوب استدعاء النظام ، تستخدم عملية المستخدم تعليمة المقاطعة. الفكرة هي أن استدعاء النظام يجب أن يبدو كاستدعاء إجراء عادي لبرنامج التطبيق؛ إذ يُوفِّر نظام التشغيل مكتبة من دوال المستخدم بأسماء تُطابق كل استدعاء نظام فعلي. تحتوي كل دالة من هذه الدوال البديلة على مقاطعة لدالة نظام التشغيل. عندما يستدعي برنامج التطبيق الدالة البديلة، فإنه يُنفِّذ تعليمة المقاطعة، التي تُحوِّل وحدة المعالجة المركزية إلى وضع النواة ، ثم تنتقل (بشكل غير مباشر عبر جدول نظام التشغيل ) إلى نقطة دخول الدالة المراد استدعاؤها. عند اكتمال الدالة، تُحوِّل المعالج إلى وضع المستخدم ، ثم تُعيد التحكم إلى عملية المستخدم، مُحاكيةً بذلك عودة إجراء عادية.
في أسلوب تمرير الرسائل ، يقوم برنامج المستخدم بإنشاء رسالة تصف الخدمة المطلوبة. ثم يستخدم دالة إرسال موثوقة لتمرير الرسالة إلى برنامج نظام تشغيل موثوق . تؤدي دالة الإرسال نفس وظيفة دالة الاعتراض؛ أي أنها تتحقق من الرسالة بدقة، ثم تحول المعالج إلى وضع النواة، وبعد ذلك تسلم الرسالة إلى برنامج ينفذ الوظائف المستهدفة. في هذه الأثناء، ينتظر برنامج المستخدم نتيجة طلب الخدمة من خلال عملية استقبال الرسائل. عندما يكمل برنامج نظام التشغيل العملية، يرسل رسالة إلى برنامج المستخدم.
يُحدث التمييز بين النهجين آثارًا هامة على استقلالية سلوك نظام التشغيل عن سلوك عمليات التطبيق، وبالتالي على الأداء الناتج. وكقاعدة عامة، يمكن جعل أنظمة التشغيل القائمة على واجهة استدعاء النظام أكثر كفاءة من تلك التي تتطلب تبادل الرسائل بين عمليات منفصلة. وينطبق هذا حتى مع ضرورة تنفيذ استدعاء النظام باستخدام تعليمة اعتراض؛ أي أنه على الرغم من أن تنفيذ الاعتراض مكلف نسبيًا، إلا أنه أكثر كفاءة من نهج تمرير الرسائل، حيث تكون التكاليف المرتبطة بتعدد إرسال العمليات وتكوين الرسائل ونسخها أعلى عمومًا. يتميز نهج استدعاء النظام بخاصية مثيرة للاهتمام، وهي أنه لا توجد بالضرورة عملية نظام تشغيل. فبدلاً من ذلك، تنتقل العملية التي تعمل في وضع المستخدم إلى وضع النواة عند تنفيذ رمز النواة، ثم تعود إلى وضع المستخدم عند انتهاء استدعاء نظام التشغيل. أما إذا صُمم نظام التشغيل كمجموعة من العمليات المنفصلة، فعادةً ما يكون من الأسهل تصميمه بحيث يتحكم في الجهاز في حالات خاصة، مقارنةً بما إذا كانت النواة مجرد مجموعة من الدوال التي تُنفذها عمليات المستخدم في وضع النواة. تتضمن أنظمة التشغيل القائمة على الإجراءات عادةً عددًا قليلاً على الأقل من عمليات النظام (تسمى البرامج الخفية في نظام UNIX ) للتعامل مع المواقف التي يكون فيها الجهاز خاملاً، مثل جدولة الشبكة والتعامل معها.
انظر أيضاً
مراجع
- ↑ "نظرة خاطفة على نواة لينكس - الفصل الثاني: إنشاء العمليات"
- ↑ "دالة CreateProcessA (Processthreadsapi.h) – تطبيقات Win32" . 9 فبراير 2023.
- ↑ "إنشاء العمليات - تطبيقات Win32" . 9 فبراير 2023. مؤرشف من الأصل في 29 مارس 2023.
مصادر
- نظام تشغيل يضم ويندوز ويونكس، كولين ريتشي. رقم الكتاب المعياري الدولي (ISBN) 0-8264-6416-5
- أنظمة التشغيل، ويليام ستالينجز، برنتيس هول، (الطبعة الرابعة، 2000)
- البرمجة المتعددة، وصف العمليات والتحكم بها
- أنظمة التشغيل - منظور حديث، غاري نوت، أديسون ويسلي، (الطبعة الثانية، 2001).
- نماذج إدارة العمليات، الجدولة، نظام يونكس الإصدار الخامس الإصدار 4:
- أنظمة التشغيل الحديثة، أندرو تانينباوم، برنتيس هول، (الطبعة الثانية، 2001).
- مفاهيم نظام التشغيل، سيلبرشاتز وغالفين وغاني ( https://codex.cs.yale.edu/avi/os-book/OS9/slide-dir/ )، جون وايلي وأولاده، (الطبعة السادسة، 2003)
- عملية (حوسبة)
- تقنية نظام التشغيل
