مقدمة عن نظام التشغيل نظام التشغيل بصفة عامة هو عبارة عن وسيط بين مستخدم الحاسب الالي وبين المكونات المادية للحاسب الالي , ووظيفته هو تمكين المستخدم من استخدام كافة القدرات المتاحة في المكونات المادية بكفائة عالية ويسمى هذا بال resource manager , والوظيفة الاخرى هي جعل الحاسب الالي مريح وسهل الاستعمالvirtual machine. يمكن اعتبار انظمة التشغيل كأنها حكومة < مع الفرق طبعا> حيث انها توفر البيئة التي يمكن لجميع الشركات والهيئات ان تعمل فيها وفق قوانينها ويمكن اعتبار هذه الشركات هي البرامج والتطبيقات. بعض انواع انظمة التشغيل: batch operating system: وهو من اقدم انظمة التشغيل حيث كان يتعامل مع الاجهزة الضخمة mainframes وكانت وظيفة مستخدم هذا النظام لاتتعدى ان يدخل البيانات الى الحاسب ثم يقوم نظام التشغيل بعملية تنظيم ,حيث العمليات التي تحتاج الى اولوية عالية يتم تنفيذها مع بعض وذلك لزيادة سرعة الحسابات , ومن ثم تخرج النتائج ربما بعد يوم او شهر . multiprograamed O/S:وهذا النظام ظهر نتيجة الحاجة لاستخدام الحاسب من قبل اكثر برنامج واحد , وعند استخدام الشخص للحاسب الالي فأنه قد يعمل اشياء تحتاج الى مدخلات , فليس من المعقول ان يبقى الحاسب ينتظر في ان يدخل الشخص المدخل وخاصة اذا كان الشخص غير موجود فتبقى العمليات التالية في حالة انتظار وتسمى حالة المعالج عندما ينتظر في مدخل من المستخدم ب IDLE اي ينتظر. ولذلك فأذا كان البرنامج يحتاج الى مدخلات فأنه يتحول الى برنامج أخر ثم التالي ثم التالي الى ان تدخل المدخلات وبهذا يكون قد شغل اكثر من عملية في وقت واحد CONCURRENCY وتحفظ العمليات التي سيتم معالجتها في مكان يسمى ال JOB POOL وهي العمليات التي تنتظر ان تأخذ الى الذاكرة ليتم بعدها معالجتها time-sharing O/S: وهو نظام تشغيل يمكن ان يصنف مع الانظمة السابقة غير انه يخدم عدة مستخدمين في وقت واحد وذلك بأن يعطي لكل مستخدم زمن معين لتنفيذ برامجه وهذا الزمن صغير بحيث لايحس به المستخدمون . multi-processor O/S: وهي من اسمها انظمة تدعم وجود اكثر من معالج في نفس الوقت ويكون لهم نفس الذاكرة والناقلbus . يوجد ما يسمى بمصطلح SMP or symmetric multiprocessor وفيه ان كل معالج يمتلك نسخة من نظام التشغيل ويمكن التخاطب بين المعالجات بطريقة معينة وكذلك مصطلح asymmetric multiprocessor حيث يوجد معالج رئيسي يمتلك نسخة من نظام التشغيل والمعالجات الاخرى تنتظر في اوامر من المعالج الرئيسي لتنفيذها >كما في حالة الprocessor و ال co-processor < ومن ميزات هذا النظام السرعة حيث يوجد اكثر من معالج ولكن السرعة مثلا في حالة 3 معالجات لاتكون ثلاثة اضعاف بل اقل , الميزة الثانية هي في حالة توقف المعالج لسبب او لاخر فأنه يوجد من يعوظه من المعالجات الاخرى , والميزة الثالثة الاقتصاد حيث انهم يشتركون في الذاكرة وفي كل شيء تقريبا real time O/S: وهي انظمة تتعامل مع الاشياء التي تحتاج الى دقة كبيرة وسرعة عالية اي ان جميع المتغيرات المعرفة فيها ثابتة ولا يمكن تجاوزها بأي حال واذا تم تجاوزها فأن جميع النتائج ستكون خاطئة حيث تستخدم مثلا في صناعة الروبوتات وفي القياسات البيولوجية والفضائية , ويوجد لها نوعان اولهما HARD REAL-TIME وفيه يتم اخذ جميع الحسابات التي يمكن ان تفكر فيها حتى زمن وصول المعلومات الى الذاكرة وتأثير الحرارة مثلا على الزمن وغيرها من ادق التفاصيل كزمن جلب BIT مثلا النوع الثاني SOFT REAL-TIME وهي تهتم بالوقت الذي له علاقة بتجديد البيانات واخذ القراءات ولاتهتم بتفاصيل الزمن . وهناك انواع اخرى لانظمة التشغيل للذي يحب الاطلاع desktop o/s distributed o/s clustered systems handheld systems ما هي اهم الوظيفة التي يقوم بها نظام التشغيل كل وقت؟ ما يقوم به نظام التشغيل هو تنظيم تنفيذ العمليات التي يقوم بها المستخدم مع الاخرى الخاصة بنظام التشغيل وتسمى هذه العمليات بال process ونتيجة لل multi programming التي تحدثنا عنها حيث عدة عمليات تنفذ في وقت واحد فأنه اذا لم يقوم نظام التشغيل بترتيب وتنظيم تعامل هذه العمليات مع معطيات نظام التشغيل فأنه سيحدث تداخل ولخبطة وضياع للمعلومات Process: يمكنك تخيل ال process وكأنك اخذت صورة للحظة داخل المعالج فماذا سترى؟ سيكون في تلك اللحظة هناك برنامج تحت المعالجة وجميع ما يتبعه من العداد program counter , والملفات ومحتويات الذاكرة وغيرها من المحتويات , اي اننا نستطيع ان نعتبر ال process جزء من البرنامج program او انها البرنامج في حالة التنفيذ. فأذا تتبعنا هذه ال process في مراحلها اثناء التنفيذ بوضع مراقبين ورجال امن حولها فأننا سنراها في خمس حالات نستطيع التفكير فيها مع بعض اولا قبل كل شيء هل كانت هذه ال process موجودة, طبعا لا اذا اول المراحل هي تكوين هذه ال process ثانيا بعد ان تكونت هذه ال process ماذا يمكن ان تفعل هل ستنام وترقد , طبعا لا ولكنها ستبقى جاهزة وبأنتظار ان يسمح نظام التشغيل ببدء معالجتها عن طريق السماح لها بدخول المعالج وبدء حساباتها ثالثا لنفترض ان نظام التشغيل سمح لها ببدء المعالجة فستبدأ هذه ال process ببدء استخدام المعالج لتنفيذ عملياتها ولاحظ هنا ان المعالج ينفذ process واحدة في كل مرة , رابعا ربما هذه ال process تحتاج الى مدخلات فلذلك لا يمكن تركها في المعالج لتأخذ وقت الغير بل سيتم وضعها في قائمة الانتظار وبعد ان تدخل المدخلات اليها لايمكن لنظام التشغيل ان يعيدها مباشرة لتأخذ المعالج ولكن حيث انها اخذت مدخلاتها فيمكن ان تعتبرها انها جاهزة لاستخدام المعالج فترجع الى الحالة الثانية واحيانا قد يحدث امر طاريء يستدعي اخراج هذه ال process حالا من المعالج و كما في حالات المقاطعة interrupt التي تحدث للمعالج فيمكن اعتبار ال process في هذه الحالة ايضا انها مازالت مستعدة وتريد استخدام المعالج فتوضع في الحالة الثانية , خامسا بعد ان مرت ال process بكل هذه المراحل لم يبقى لها بعد ان انتهت من استخدام المعالج في تنفيذ عملياتها الا ان تقول اني انتهيت . يمكن تلخيص المراحل السابقة بالاتي: 1- الانشاء new : ال process قيد التكوين 2- جاهزة: ready : جاهزة لاستخدام المعالج 3- تشتغل: running : ال process تستخدم المعالج 4- تنتظر: waiting : تنتظر ادخال مدخلات 5- انتهت : terminated : ال process اكملت عمليتها وتخلت عن المعالج طواعية كيف يرى نظام التشغيل ال process بطريقة اكبر واشمل : يتم ذلك بما يسمى كتلة التحكم بال process او process control block [ PCB ] حيث ان لكل process , pcb خاص بها حيث يرى نظام التشغيل منها الفروقات بين كل process وأخرى وهي تحتوي بصفة عامة على مراحل ال process وقد تحدثنا عنها , محتويات program counter والتي سيحدد منها عنوان العملية التالية , محتويات المراكم ويمكن من خلالها ان يعرف نظام التشغيل اين توقفت العملية في حالة حدوث مقاطعة ويستطيع بعدها اكمال العملية , وكذلك يحتوي العديد من المعلومات حول الذاكرة واجهزة الدخل و الخرج التي تتعامل معها. مفهوم ال thread: يمكن ان تفهمه على انه يبين كم هناك عملية تنفذ في نفس الوقت فمثلا لو انك فتحت برنامج maya فتعتبر انك تنفذ thread واذا اضفت له vc++ فأنك تنفذ multithread حاول ان تعرف علاقة هذا بال process ما هو المقصود بال scheduling ؟ قبل ان نبدأ في التحدث عن هذا المعنى نتطرق الى شيء يشد الانتباه في الدرس الماضي. لو تخيلنا ان هناك process اخذت تتجه الى حالة ready ثم اتت بعدها process اخرى وثالثة ورابعة , افليس من المنطقي ان تكون هناك طريقة لظمهم في مكان واحد في ترتيب ونظام بحيث لا يبقى المكان وكأنه سوق , ولذلك تم تهيئة مكان لهذه ال processes تسمى ال queue ويسمى المكان الذي توجد فيه هذه ال processes التي هي جاهزة لاخذ المعالج بال ready queue . بمجرد فهمنا لهذا المعنى يتطرق معنى اخر وهو لو فرضنا ان هناك 20 process في ready queue فيا ترى اي منها سيتم اعطائها للمعالج؟ هذا هو ما يسمى ال scheduling اي هو طريقة لاختيار ال process من ال ready queue ولكن لو فرضنا ان هناك 1000 process تريد استخدام المعالج فهل تعتبر فكرة جيدة ان يتم وضعهم في الذاكرة الرئيسية كلهم؟ طبعا لا , اولا لانها تعتبر طريقة غبية وبعيدة عن حس التصميم الذي يعتمد على التقليل قدر المستطاع في كل شيء , وثانيا لانه قد لا تتوفر ذاكرة رئيسية يمكنها ان تتحمل هذا القدر الكبير من ال processes ولذلك لو بحثنا في الحاسب الالي عن ذاكرة اخرى يكون حجمها كبير ويمكن ان نحتفظ فيها بالبيانات فلا نجد الا الذاكرة الثانوية حيث ان حجمها كبير, وبذلك نضع فيها كل ال processes الموجودة في نظام التشغيل والتي تحتاج لاستخدام المعالج ويسمى هذا المكان الموجود في الذاكرة الثانوية بال job queue . حيث نظام التشغيل يختار منه مجموعة من ال processes ويضعها في ready queue والتي تتعامل مباشرة مع الذاكرة الرئيسية وبذلك نظمن السرعة في جلب المعلومات لانها موجودة في الذاكرة الرئيسية والتي هي اسرع بكثير من الذاكرة الثانوية هناك امر اخر يخص ال processes التي لها تعامل او تحتاج الى مدخلات فلو كانت هناك 20 process تحتاج ال ادخال فأنه يستحسن ان يتم تجميعهم مع بعض كما في حالة ال ready queue لان النظام هو اساس كل شيء , ويسمى المكان الذي توجد فيه ال processes التي تنتظر المدخلات بال device queue . والان هناك سؤال يتطرق الى الاذهان كيف يتم جلب ال process من job queue ووضعها في الذاكرة الرئيسية ؟ الجواب هو عن طريق ما يعرف ب long term scheduler ووظيفته جلب ال process من ال الذاكرة الثانوية ووضعها في الذاكرة الرئيسية . وهنا سؤال اخر ما علا قة هذا بال ready queue ؟ الجواب ان هذه ال process سيتم منحها المعالج لتقوم بعملياتها ولا يتم ذلك الا بواسطة ready queue والذي يقوم بنقل ال process من الذاكرة الرئيسية الى ال ready queue هو ما يعرف ب short term scheduler . ويمكن ان نلاحظ هنا ان ال short term scheduler يجب ان يكون سريع و الاخر ليس من الضروري ان يكون سريع لماذا؟ فكر فيها بمفردك . وهناك سؤال اخر ربما يتطرق الى الاذهان اذا كانت كل process تستخدم المعالج لفترة ثم ترجع الى حالة ready ثم تاتي ثانية على نفس شاكلتها والثالثة والرابعة فكيف سيعرف نظام التشغيل من اين سيبدأ وما هو الذي سيستخدمه ؟ الجواب عن هذا هو باستخدام مايعرف ب context switch وكذلك بالاستفادة من PCB الذي تعرفنا عليه في الدرس الماضي ويعرف المصطلح CONTEXT SWITCH على انه تخزين الحالة الحالية للprocess 0 في pcb0 ومن ثم تحميل الحالة التخزينية السابقة لل process 1 مثلا. هناك حالة اخيرة لم نتكلم عنها في هذا الموضوع وهو في حالة حدوث مقاطعة لل process ماذا سيحدث؟ طبعا سيتم اخذ المعالج منها لخدمة شيء ضروري جدا , تسمى هذه الحالة ب preemptive scheduling اي ان المعالج قد تم اخذه من ال process > ظلما وعدوانا < وليس برغبة من ال process , هل يمكنك اذا ان تعرف ما هو non-preemptive scheduling اتركك لترسل لنا الاجابة. كيف يمكن ان تعرف ان برنامجك الذي يقوم بال scheduling هو ممتاز: 1- قدرته على جعل المعالج مشغول بتنفيذ العمليات اطول فترة ممكنة 2- كم عدد ال processes التي يمكنه ان يخدمها في ال time unit وهو وحدة سنستخدمها في الدرس القادم 3- الوقت الذي تبقى فيه في ال ready queue والذي يجب ان يكون قليل 4- الوقت الذي تستغرقه من بقائها في ال ready queue الى عودتها اليه السلام عليكم