You are on page 1of 13

‫السعر‬

‫‪1560‬‬ ‫كلية الهندسة المعلوماتية‬


‫عملي‬
‫نظري‬
‫السنة الرابعة‬
‫‪9‬‬

‫‪Process Management‬‬
‫‪3‬‬
‫د‪ .‬المثنى خضر‬
‫‪24/10/2023‬‬ ‫‪13‬‬

‫نظم تشغيل (‪)1‬‬

‫مفهوم اإلجرائيّة‬
‫• ال ‪ : Process‬هي البرنامج بعد تحميله إلى ال ‪ RAM‬و أثناء التنفيذ ‪.‬‬
‫• يتم تنفيذ العديد من البرامج ضمن أنظمة التشغيل كـ ‪ Process‬يتم تخصيص قسم من الذاكرة لكل ‪Process‬‬
‫حيث تدعى هذه المساحة بـ ‪. Process address space‬‬

‫الفرق بين البرنامج و العمل ّية ‪:‬‬

‫‪ : Program‬هو ‪ passive entity‬مخزن على ‪ hard disk‬و هو ملف تنفيذي ‪. executable file‬‬

‫‪ : Process‬هو البرنامج عندما يتم تحميل الملف التنفيذي ‪ executable file‬الخاص به إلى ال ‪ RAM‬فيصبح‬
‫‪. active entity‬‬

‫• تتضمن ال ‪ Process Address space‬األقسام التالية ‪:‬‬


‫‪ : Text section‬يضم الكود البرمجي الخاص بالبرنامج ‪.‬‬ ‫▪‬
‫‪ : Current activity‬النشاط الحالي يتضمن (‪ )program counter‬و محتويات السجالت في المعالج‬ ‫▪‬
‫‪ : Stack‬يحوي ال ‪ data‬المؤقتة مثل براميتر التابع ‪. return value , local variables ,‬‬ ‫▪‬
‫‪ : Data section‬يضم ‪. static local variables , global variable‬‬ ‫▪‬
‫‪ : Heap‬تحوي المتحوالت التي يتم حجزها بشكل ديناميكي أثناء ال ‪( run time‬مثل تعليمة ‪malloc‬‬ ‫▪‬
‫التي تقوم بحجز حجم ديناميكي لمتحول ما)‪.‬‬

‫مالحظة ‪:‬‬
‫عادة ما يتم وضع برنامج معين للتنفيذ من خالل ‪ :‬النقر على الماوس ضمن ال ‪ ، GUI‬أو من خالل‬
‫‪ command line‬باسم البرنامج المراد تنفيذه ‪ ،‬عندما يدخل البرنامج قيد التنفيذ يتحول عندها إلى‬
‫عملية أو عدة عمليات ‪.‬‬

‫‪1‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫اإلجرائية في الذاكرة‬

‫مالحظات على الرسم السابق ‪:‬‬


‫))‪))Data Section‬‬ ‫• ; ‪( int x‬غير معرّف)‬
‫ألنها ‪global variables‬‬ ‫• ; ‪( int y = 15‬معرّف)‬

‫))‪))Satck‬‬
‫ألنها ‪reborn value‬‬ ‫• ) ][‪int main (int argc , char *argv‬‬

‫))‪))Satck‬‬
‫ألنها ‪parameters‬‬
‫))‪))Satck‬‬
‫• ; ‪int *values‬‬
‫ألنها ‪local variables‬‬
‫• ; ‪int I‬‬

‫• ; )‪values = (int *)malloc(sizeof(int)*5‬‬

‫))‪))Heap‬‬
‫ألنها تحوي متحوالت ديناميكية‬

‫نالحظ أن المؤشر ‪ values‬يتم تخزينه ضمن ال ‪ Stack‬ألنه متحول محلي ضمن التابع ‪ ، main‬لكن ما‬ ‫▪‬
‫يقوم بالتأشير عليه يتم تخزينه ضمن ال ‪. heap‬‬

‫‪2‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫يوجد في كال من الذاكرة الرئيسية و القرص الصلب جدول يحدد فيما إذا كان بايت معين ضمنه محجوز‬ ‫▪‬
‫أم فارغ ‪ ،‬لذلك من الضروري استخدام التعليمة ‪ free‬بعد الحجز الديناميكي في اللغة ‪ C‬و ذلك لتحرير‬
‫المساحة من الذاكرة التي تم حجزها في الذاكرة ‪ ، RAM‬في حال عدم تحريرها سيبقى الجدول الموجود‬
‫في ال ‪ RAM‬يعتقد أن المساحة التي تم حجزها ما زالت محجوزة و بالتالي سيتواجد مساحات في‬
‫الذاكرة من المفترض أن تكون فارغة و لكن الذاكرة تعتقد بأنها مملوءة و بالتالي لن يتم تخصيصها ألي‬
‫شيء مستقبالً ‪ ،‬تدعى هذه الظاهرة ب ‪( memory leak‬في اللغة ‪ java‬يتكفل ال ‪garbage‬‬
‫‪ collector‬بمهمة تفريغ المساحات المحجوزة في نهاية التنفيذ تلقائياً )‪.‬‬

‫حاالت اإلجرائية ‪Process state‬‬

‫• ‪ : New‬مرحلة إنشاء العملية و تحميلها على ال ‪. RAM‬‬


‫• ‪ : Ready‬العملية في حالة انتظار ضمن ‪ ready queue‬ريثما يتم نقلها للمعالج لينفذها ‪ ،‬حيث أن ال ‪ready‬‬
‫‪ queue‬يحتوي على عمليات يقوم المجدول ‪ scheduler‬بانتقاء عملية منها وفق خوارزمية معينة ليتم نقلها‬
‫للتنفيذ إلى المعالج ‪.‬‬
‫• ‪ : Running‬مرحلة تنفيذ التعليمات الخاصة للعملية ‪.‬‬
‫• ‪ : Waiting‬المرحلة التي تكون فيها العملية في حالة انتظار حصول حدث ما ‪ ،‬مثل عندما تنتظر ‪ I/O‬فيتم نقلها‬
‫إلى الـ ‪ waiting queue‬إلى أن تنتهي عمليات ال ‪ I/O‬التي ال يتدخل بها المعالج و بعد االنتهاء ترجع العملية‬
‫إلى ال ‪. ready queue‬‬
‫• ‪ : Terminated‬انتهى تنفيذ العملية ‪.‬‬

‫‪3‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫• أثناء تنفيذ ال ‪ Process‬إما أن يحصل عليها ‪ interrupt‬أو تصبح في حالة انتظار ل ‪ I/O events‬أو تنتهي ‪.‬‬

‫يحصل نوعين من ال ‪ interrupts‬التي تنقل العملية إلى حالة ال ‪: ready queue‬‬


‫‪ : Software interrupts‬أو ما يسمى ‪ events‬أو ‪( trap‬مثل ال ‪. )exceptions‬‬ ‫▪‬
‫▪ ‪ : Hardware interrupt‬نبضة كهربائية تدل على انتهاء العملية أو وجود مشكلة ما ‪.‬‬

‫جدول التحكم باإلجرائية )‪Process Control Block (PCB‬‬


‫كل عملية في نظام التشغيل تمثل بكتلة أو جدول يدعى ‪Process Control Block‬‬
‫(‪ )PCB‬و يطلق عليها أيضاً ‪ ، Task Control Block‬حيث ضمن كل كتلة يتم‬
‫االحتفاظ بالمعلومات التالية عن العمليّة ‪:‬‬
‫• حالة العمل ّية ‪ :‬الحالة التي تكون فيها العملية … ‪running , waiting‬‬
‫• مع ّرف العمل ّية ‪ :‬رقم فريد بكل عمليّة (مثل الرقم الجامعي)‬
‫• مع ّرف المستخدم ‪ :‬المسؤول عن العمل الذي تقوم به العمليّة ‪.‬‬
‫(حساب المستخدم المسجل دخوله)‪.‬‬
‫• مع ّرف العمليّة األب ‪ :‬التي أنشأت هذه العمليّة (االبن) ‪.‬‬
‫• ع ّداد البرنامج ‪ :‬موضع التعليمة التالية ليتم تنفيذها ‪.‬‬
‫جالت ‪ : CPU‬محتوات المسجالت المحدّدة للعملية ليتم تنفيذها‬
‫• مس ّ‬
‫ضمن ‪. CPU‬‬
‫• معلومات الجدولة ‪ :‬تحدّد أولويّة تنفيذ هذه التعليمة ضمن ‪. CPU‬‬
‫• معلومات إدارة الذاكرة ‪ :‬تحدّد الذاكرة المخصّصة لهذه العمليّة ‪( .‬جداول الصفحة ‪)...‬‬
‫• معلومات ‪ CPU : accounting‬المستخدمة ‪ ،‬الوقت المنقضِ من البدء و حتى االنتهاء ‪.‬‬
‫• معلومات حالة ‪ : I/O‬قائمة األجهزة المخصصّة للعملية ‪ ،‬قائمة الملفات المفتوحة ‪...‬‬

‫جدولة اإلجرائيّة ‪ :‬أنواع األرتال‬


‫• الهدف ‪ :‬زيادة استخدام وحدة المعالجة المركزيّة ‪ ،‬و تحويل العمليّات بسرعة إلى ‪ CPU‬بهدف مشاركة الوقت ‪.‬‬
‫• من بين العمليات المتاحة ‪ ،‬يختار المجدول العمليّة التالية ليتم تنفيذها على ‪. CPU‬‬
‫• رتل المهام (‪ : )job‬مجموعة العمليات في النظام ‪.‬‬
‫• رتل الجاهزيّة (‪ : )ready‬مجموعة العمليّات الموجودة ضمن الذاكرة الرئيسيّة ‪ ،‬جاهزة و تنتظر التنفيذ ‪.‬‬
‫(يمثّل هذا الرتل المنفذ الوحيد لوصول العمليّة إلى وحدة المعالجة) ‪.‬‬
‫• رتل الجهاز (‪ : )device‬مجموعة العمليّات التي تنتظر النفاذ إلى جهاز دخل‪/‬خرج ‪.‬‬

‫‪4‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫مالحظة ‪:‬‬
‫‪ -‬الحالة اإلجرائيّة ألي تعليمة‪:‬‬
‫جلبها من ال ‪ <---- fetch <----- hard‬إلى الذاكرة ‪ <----‬إنشاء ( أي نقوم بوضعها في ال ‪- ) RAM‬‬
‫‪ <----‬تنفيذ ‪ <----‬إنهاء ‪.‬‬
‫‪ -‬أبسط إجرائية (إنشاء ثم تنفيذ ثم إنهاء)‪.‬‬

‫‪ ‬متى يتوقف التنفيذ ؟؟‬


‫عند الخطأ أو المقاطعة العتاديّة ( تنتقل من رتل الجاهزيّة ريثما تنتهي المقاطعة ليكمل )‬
‫‪ ‬متى تدخل اإلجرائية إلى حالة الجاهز ّية ؟؟‬
‫▪ عند إنهائها العمليات (الدخل و الخرج)‬
‫▪ عند حدوث مقاطعة (تعود من التنفيذ إلى رتل الجاهزيّة)‪.‬‬
‫▪ بعد حالة اإلنشاء ‪.‬‬
‫‪ ‬متى تخرج اإلجرائ ّية من حالة التنفيذ ؟؟‬
‫▪ عند إنهائها التنفيذ ‪.‬‬
‫▪ حدوث مقاطعة ‪.‬‬
‫▪ انتظار دخل أو خرج ‪.‬‬
‫‪ ‬متى تدخل اإلجرائية على التنفيذ ؟؟‬
‫▪ ال ب ّد أن يكون منهي لرتل الجاهزيّة ‪.‬‬
‫▪ عند المقاطعة ‪.‬‬

‫مالحظة ‪:‬‬
‫عند المقاطعة ال يدخل برتل االنتظار ألنه ليس بحاجة لقراءة أو كتابة لذلك يعود لرتل الجاهزيّة ‪.‬‬

‫‪5‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫المجدول ‪Scheduler‬‬
‫المجدول مسؤول عن اختيار ال ‪ process‬التي سيتم نقلها إلى التنفيذ على المعالج وفق خوارزمية معينة و ذلك لتحقيق‬
‫االستخدام األعظمي للمعالج ‪ ،‬في حال كان المعالج ‪ multi-core‬يكون لكل نواة مجدول خاص بها ‪.‬‬

‫المجدول قصير األمد (مجدول ‪: )CPU‬‬


‫يختار العمليّة التالية التي ينبغي أن تنفّذ ‪ ،‬و يخصّص لها ‪. CPU‬‬ ‫▪‬
‫يُستدعى بشكل متكرر (من رتبة ميلي ثانية ‪ 100ms ،‬مثالً) ‪ ،‬و بالتالي يجب أن يكون سريعاً ‪.‬‬ ‫▪‬
‫المجدول طويل األمد (مجدول المهام) ‪:‬‬
‫يختار العمليّات التي ينبغي جلبها إلى رتل الجاهزيّة ‪.‬‬ ‫▪‬
‫يُستدعى بشكل غير متكرر (ثواني ‪ ،‬دقائق) ‪ ،‬و بالتالي يمكن أن يكون بطيئاً ‪.‬‬ ‫▪‬
‫يتحكم بدرجة تعدّد البرمجة ‪.‬‬ ‫▪‬
‫المجدول طويل األمد (مجدول المهام) ‪:‬‬
‫يحذف عمليّة من الذاكرة (‪ ، )swap out‬يخزّنها على القرص لبضع ثواني ‪ ،‬يجلبها ثانية من القرص لتتابع‬ ‫▪‬
‫تنفيذها ‪ ،‬يمكن أن يضاف عندما يُراد تخفيض درجة تعدّد البرمجة ‪.‬‬

‫تبديل السياق ‪Context Switch‬‬


‫• هي التقنيّة التي سمحت بال ‪ multi-programming‬على ‪ CPU‬وحيد بنواة وحيدة ‪.‬‬
‫• يقوم المعالج بالتبديل بين عمليّة و أخرى بشكل سريع ليبدو للمستخدم تنفيذ عدّة عمليات في الوقت ذاته ‪.‬‬
‫• عملية التبديل بين العمليات تستلزم حفظ الحالة و السياق التي وصلت إليها عمليّة معيّنة ‪ ،‬لذلك يتم حفظ حالة‬
‫العمليّة و سياقها الحالي ضمن البنية ‪. PCB‬‬
‫• إن الوقت الذي يتم فيه التبديل بين العمليات هو وقت مهدور ‪ overhead‬ألن المعالج ال يقوم بتحقيق أي وظيفة‪.‬‬

‫‪6‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫• كلما كانت العملية أكبر ‪ complex process‬و نظام التشغيل معقد أكثر ‪ ،‬كلما زاد الوقت الالزم لعملية ال‬
‫‪ context-switch‬و زاد الوقت المهدور من ال ‪. CPU time‬‬
‫• في بعض المعالجات يوجد أكثر من مجموعة من السجالت ضمن المعالج و بالتالي يمكن االحتفاظ بعدة‬
‫‪ process contexts‬ضمن المعالج ذاته ‪.‬‬

‫هذا المخطط يوضّح طريقة ال‬ ‫▪‬


‫‪ : Context Switching‬بداية كان‬
‫المعالج في مرحلة تنفيذ العمليّة ‪ P0‬و‬
‫بعد حدوث مقاطعة ( ‪ )interrupt‬أو‬
‫(‪ )System-call‬توقف تنفيذ العمليّة‬
‫‪ P0‬و تم حفظ حالتها ضمن ال ‪، PCB0‬‬
‫و من ثمّ تم تحميل الحالة الخاصة‬
‫بالعملية ‪ P1‬من ‪ PCB1‬و بدأت بالتنفيذ ‪،‬‬
‫ثمّ بالمثل يتم توقف العمليّة ‪ P1‬بعد‬
‫حدوث مقاطعة (‪ )interrupt‬أو‬
‫(‪ )System-call‬فيتم حفظ حالتها‬
‫ضمن ال ‪ PCB1‬و يستأنف بعدها تنفيذ‬
‫العملية السابقة ‪. P0‬‬
‫نالحظ أن زمن التنفيذ قليل مقارنة‬ ‫▪‬
‫بالزمن الالزم لتوقف عملية و حفظ‬
‫حالتها و استرجاع حالة عمليّة سابقة و‬
‫من ثمّ استئناف تنفيذها ‪ ،‬لذلك يوجد‬
‫هدر في الوقت ‪.‬‬

‫إنشاء إجرائيّة ‪Process Creation‬‬


‫• عملية إنشاء العمليات ‪ processes‬تكون من خالل هرميّة معيّنة ‪ :‬حيث تقوم عمليّة ما (تدعى العملية األب) بخلق‬
‫عمليات جديدة (تدعى بالعمليات األبناء) و التي بدورها يمكنها أن تخلق عمليات جديدة ‪.‬‬
‫• فيتشكل لدينا بما يدعى بشجرة العمليات حيث يكون ال ‪ root‬الخاص بهذه الشجرة هو ال ‪ process‬الخاص بال‬
‫‪. Kernel‬‬
‫• بشكل عام يتم تحديد العملية و إدارتها من خالل ما يسمى معرّف العملية (‪)process ID pid‬‬
‫‪ ‬يوجد ع ّدة أنواع من مشاركة الموارد بين العمليات اآلباء و األبناء و منها ‪:‬‬
‫العمليات اآلباء و األبناء تتشارك نفس الموارد ‪.‬‬ ‫▪‬
‫العمليات األبناء تشارك جزء من موارد عمليات اآلباء ‪.‬‬ ‫▪‬

‫‪7‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫العمليات اآلباء و األبناء ال تتشارك في الموارد أبداً ‪.‬‬ ‫▪‬


‫‪ ‬كما يوجد خيارات للتنفيذ بين العمليات اآلباء و األبناء ‪:‬‬
‫تنفذ عمليات اآلباء و األبناء في وقت واحد (‪)concurrent execution‬‬ ‫▪‬
‫تنتظر عمليات اآلباء حتى تنتهي عمليات األبناء من التنفيذ عن طريق تعليمة (‪. )wait‬‬ ‫▪‬
‫كيف يتم إنشاء عمل ّية جديدة من خالل عمل ّية أب ؟‬
‫يتم نسخ ال ‪ address space‬الخاص بالعملية األب و يتم تخصيصها للعملية الجديدة ‪ ،‬و من ثم يتم تحميل البرنامج‬
‫الخاص بالعملية الجديدة إلى هذا ال ‪. address space‬‬

‫مثال عن عمل ّية إنشاء عملية جديدة في نظام التشغيل (‪: )UNIX‬‬
‫تعليمة )(‪ fork‬هي ‪ System Call‬إلنشاء ‪ , new process‬تنسخ ال ‪ address space‬الخاصة بالعمليّة األب‬ ‫▪‬
‫لالبن ‪ ،‬و بعد تطبيق هذه العمليّة يتفرع عنها عمليتين ‪ :‬العمليّة األب و العمليّة الجديدة االبن ‪.‬‬
‫تعليمة )(‪ exec‬هي ‪ System Call‬يتم استدعاءها بعد تعليمة )(‪ ، fork‬مهمتها تبديل ال ‪address space‬‬ ‫▪‬
‫الذي تم نسخه من العملية األب ليصبح خاصاً بالبرنامج الجديد الخاص بالعمليّة الجديدة (مما يضمن تبديل‬
‫الكود "الخاص باألب في ال ‪ address space‬المنسوخ" بالكود الخاص بالعملية االبن)‪.‬‬
‫تعليمة )(‪ wait‬تقوم بتنظيم بين عمل العمليات ال ‪ child‬و ال ‪ ، parent‬حيث يتم استدعاؤها في العملية‬ ‫▪‬
‫األب و ذلك النتظار تنفيذ العملية االبن ‪.‬‬

‫مالحظات ‪:‬‬
‫▪ )(‪ : fork‬تقوم بخلق عملية جديدة من العملية األب و بعدها تكمل العمليتان تنفيذ البرنامج بشكل‬
‫متوازي و منفصل ‪ ،‬حيث تقوم العملية )(‪ fork‬بإرجاع ‪:‬‬
‫‪ : 0‬إذا كان التنفيذ غي إطار ال ‪.Child process‬‬
‫‪( Child pid‬عدد موجب) ‪ :‬إذا كان التنفيذ في إطار ال ‪. Parent process‬‬
‫عدد سالب ‪ :‬في حال فشل عملية ال )(‪. fork‬‬
‫▪ المقابل للتعليمة )(‪ fork‬بالنظام ‪ windows‬هي )(‪ CreateProcess‬حيث تنسخ ال ‪address‬‬
‫‪ space‬من ال ‪ process‬المعرفة فيها لنسخة أخرى ‪.‬‬

‫‪8‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫إنشاء إجرائية بلغة ال ‪C‬‬

‫‪ ‬مثال على إنشاء إجرائية بلغة ال ‪: C‬‬

‫• ال ‪ pid_t‬هي ‪ data type‬في لغة ال ‪ C‬و تعني ال ‪ Process ID‬عرفنا من هذا النمط متحول ‪ pid‬و أسندنا له‬
‫)(‪ fork‬و هي ‪ System call‬لخلق ‪ process‬جديدة (‪. )child process‬‬
‫• كل التعليمات بعد )(‪ fork‬ستنفذ مرتين ‪ ،‬مرة مع ال ‪ parent process‬و مرة مع ال ‪. child process‬‬
‫• ال ‪ pid‬اآلن إما تحتوي على ال ‪ process id‬الخاص بال (‪ )child‬إذا نحن في تنفيذ العملية األب ‪ ،‬أو تحتوي‬
‫القيمة ‪ 0‬إذا نحن اآلن بتنفيذ العملية االبن ‪.‬‬
‫• حالة تنفيذ العملية االبن (حالة ‪ : )pid = 0‬ستنفذ التعليمة ‪ execlp‬و هي من عائلة التعليمة )(‪ exec‬و‬
‫ستقوم باستبدال الكود المتبقي بالكود الخاص بالتعليمة ‪ ، ls‬لذلك لن يتم طباعة السطر (‪ )LINE J‬و ذلك ألن‬
‫الكود الخاص بطباعة هذا السطر تم استبداله بالكود الخاص ب ‪ ls‬لذلك ستنفذ التعليمة ‪ ls‬و التي تقوم بعرض‬
‫محتويات المجلد الحالي ‪.‬‬

‫‪9‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫• حالة تنفيذ التعليمة األب (حالة ‪ )pid = child pid>0‬ستقوم هذه العملية بانتظار العملية االبن حتى تنتهي‬
‫ثم ستقوم بطباعة ‪. parent code‬‬
‫• إذا الخرج الكلي للبرنامج هو خرج التعليمة ‪ ls‬أوالً تتم طباعة الجملة ‪. parent code‬‬

‫إنهاء اإلجرائية ‪Process Termination‬‬


‫عند نهاية تنفيذ ‪ process‬معينة تقوم بطلب حذفها (إنهائها) من نظام التشغيل باستخدام ال ‪exit() : System call‬‬
‫فيحدث ما يلي ‪:‬‬
‫سيتم إرجاع ال ‪ status‬الخاصة بال ‪ process‬ال ‪ Child‬إلى العملية ال ‪( Parent‬من خالل )(‪ ، wait‬و ال‬ ‫▪‬
‫‪ ) wait() ( System call‬تعني أن ينتظر ال ‪ parent‬انتهاء تنفيذ ال ‪. ) Child‬‬
‫يقوم نظام التشغيل بعملية ‪( resources deallocation‬تحرير الموارد) الخاصة بال ‪. process‬‬ ‫▪‬
‫يمكن لل ‪ Parent‬إنهاء تنفيذ العمليات ال ‪ Children‬الخاصة به باستخدام ال ‪ ، abort() : System call‬و ال ‪Parent‬هو‬
‫الوحيد الذي يملك هذه الصالحية ‪ ،‬من الممكن أن يقوم بهذه العملية لعد أسباب منها‪:‬‬
‫العملية ال ‪ Child‬تجاوزت الموارد المخصصة لها ‪.‬‬ ‫▪‬
‫المهمة التي ينفذها ال ‪ Child‬لم يعد لها حاجة ‪.‬‬ ‫▪‬
‫في حال انتهاء العملية ال ‪ Parent‬و كان نظام التشغيل ال يسمح لل ‪ Child‬بإكمال تنفيذه في انتهاء تنفيذ األب‬ ‫▪‬

‫بعض أنظمة التشغيل ال تسمح بوجود ال ‪ Child‬في حال أن ال ‪ Parent‬أنهى عمله ‪ ،‬أي إذا أنهى ال ‪ Parent‬مهمته‬
‫فعلى كل ال ‪ Children‬أن تنتهي أيضاً و من هنا يأتي مصطلح ال ‪ : cascading termination‬و يعني أنه عندما يتم‬
‫إنهاء عملية أب ما يتم إنهاء كل العمليات ال ‪ Child‬و ال ‪ Grandchildren‬حتى آخر ابن ‪ ،‬حيث أن نظام التشغيل هو من‬
‫يبدأ بعملية اإلنهاء ‪.‬‬

‫مثال على ‪Multi process‬‬


‫• قديماً كانت المتصفحات ‪ web browser‬قادرة على تشغيل ‪ process‬واحد فقط (‪ ، )one tab‬و نستطيع أن‬
‫نفتح من نفس ال ‪ web browser‬أكثر من نسخة ‪ ،‬فإذا تسبب أحد مواقع الويب (أحد نسخ ال ‪)web browser‬‬
‫بمشكلة فالمتصفح قد يتوقف عمله بشكل كامل ‪.‬‬
‫• متصفح ‪ Google Chrome‬له تصميم ‪ multi process‬حيث أنه بتشغيله يتم تنفيذ ثالثة أنواع مختلفة من ال‬
‫‪: process‬‬
‫‪ : Browser process‬تقوم بإدارة واجهة المستخدم و إدارة القرص و عمليات الدخل و الخرج على الشبكة‪.‬‬ ‫▪‬
‫‪ : Renderer process‬تقوم بعرض صفحات ال ‪ web‬و معالجة ال ‪ HTML‬و ‪ JavaScript‬يتم إنشاء‬ ‫▪‬
‫عارض جديد ‪ renderer‬لكل صفحة ‪. web‬‬
‫‪ : Plug-in process‬تم خلق هذا النوع من العمليات من أجل كل ‪ Plug-in‬في المتصفح ‪.‬‬ ‫▪‬

‫‪10‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫االتصال بين اإلجرائيات ‪Inter-process Communication‬‬


‫العمليات في النظام تصنف إلى نوعين ‪:‬‬
‫‪ : Independent process‬العمليات المستقلة ال تتأثر و ال تؤثر بتنفيذ العمليات األخرى ‪.‬‬
‫‪ : Cooperating process‬العمليات المترابطة يمكن أن تتأثر أو تؤثر بتنفيذ غيرها من العمليات ‪ ،‬أي يتم تبادل‬
‫المعلومات بين بعضها البعض ‪.‬‬

‫• العمليات المترابطة تتطلب وجود تواصل ما بين هذه العمليات )‪. inter-process communication (IPC‬‬
‫• من الممكن أن تكون ال ‪ Cooperating processes‬على ‪ two systems‬مثالً المتصفح و ال ‪ server‬الذي‬
‫يتعامل معه كل منهما يخلق ‪ process‬تتواصل مع األخرى ‪.‬‬
‫• و قد تكون ال ‪ Cooperating processes‬على ‪. one system‬‬

‫‪ ‬مزايا ال ‪: process cooperation‬‬


‫▪ ‪ : Information sharing‬نظراً ألن العديد من المستخدمين قد يكونون مهتمين بالمعلومات نفسها‬
‫(على سبيل المثال ملف مشترك)‪ ،‬يجب أن نوفر بيئة تسمح بالوصول المتزامن إلى هذه المعلومات ‪.‬‬
‫‪ : Computation speed-up‬إذا كنا نريد أن تنفذ مهمة معينة بشكل أسرع‪ ،‬يجب علينا تقسيمها إلى‬ ‫▪‬
‫مهام فرعية ‪ ,‬و تنفذ كل مهمة بالتوازي مع باقي المهام الفرعية (هذه العملية ال يمكن أن تنفذ إال‬
‫على حاسوب له معالج متعدد النوى ‪. )multiple processing cores‬‬
‫‪ : Modularity‬تعني بناء النظام بطريقة نمطية ‪ ، modular‬و هذا يعني تقسيم عمليات النظام إلى‬ ‫▪‬
‫مها م منفصلة ‪.‬‬
‫‪ : Convenience‬السماح للمستخدم الواحد بتنفيذ عدة عمليات في وقت واحد ‪ ,‬مثالً يمكن للمستخدم‬ ‫▪‬
‫تعديل ملف ما واالستماع إلى الموسيقى و ‪ ..‬في نفس الوقت ‪.‬‬

‫‪11‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫• هناك نوعين من ال ‪: IPC‬‬


‫‪ : Shared memory‬الذاكرة المشتركة ‪.‬‬ ‫▪‬
‫‪ : Message passing‬تبادل الرسائل ‪.‬‬ ‫▪‬

‫في ال ‪ Message passing‬يكون تبادل الرسائل عن طريق ال ‪ ، Kernel‬أما في ال ‪shared‬‬


‫‪ memory‬فليس هناك حاجة لل ‪ OS‬بشكل كبير فهناك مساحة مخصصة من ال ‪ RAM‬تستخدم‬
‫للتواصل بين ال ‪. processes‬‬

‫تبادل الرسائل‬ ‫الذاكرة المشتركة‬


‫جيد للتطبيقات التي ال تحتاج إلى اتصال‬
‫جيد و فعّال‬ ‫األداء‬
‫كثيف بين المعالجات‬
‫سهلة التطبيق و منخفضة التكلفة‬ ‫سهلة التطبيق و لكنها مكلفة ماد ّياً‬ ‫التطبيق‬
‫وسيلة‬
‫عبر خطوط االتصال في الشبكة‬ ‫ذاكرة موحدة لجميع العمليات‬
‫االتصال‬
‫تكلفة تمرير الرسائل عالية جداً ألنها‬ ‫يجب توفير أساليب حماية الذاكرة‬
‫السلبيات‬
‫تتطلب عمليات دخل خرج كثيرة‬ ‫المشتركة و تنظيم الوصول إليها‬

‫‪12‬‬
‫‪/ITE.RBCs‬‬
‫نظم تشغيل ‪ | 1‬عملي مشترك‬

‫االتصال بين اإلجرائيات في ال ‪Windows‬‬


‫• يتمحور ال ‪ Message-Passing‬حول خاصية ‪. )LPC( advanced local procedure call‬‬
‫• تعمل فقط بين العمليات على نفس النظام ‪.‬‬
‫• تستخدم ال ‪( ports‬مثل ‪ )mailboxes‬إلنشاء و صيانة قنوات االتصال ‪.‬‬

‫‪ ‬يعمل االتصال النحو اآلتي ‪:‬‬


‫‪ .1‬يفتح العميل مقبض اتصال بالنظام الفرعي ‪.‬‬

‫‪ .2‬يرسل العميل طلب اتصال ‪.‬‬

‫‪ .3‬ينشئ الخادم منفذي اتصال خاصين و يعيد المؤشر إلى أحدهما إلى العميل ‪.‬‬

‫‪ .4‬يستخدم العميل و الخادم مقبض المنفذ الثاني إلرسال الرسائل أو لعمليات االستماع إلى الردود ‪.‬‬

‫انتهت املحاضرة ‪...‬‬

‫‪13‬‬
‫‪/ITE.RBCs‬‬

You might also like