بسم الله الرحمن الرحيم
اخواني الكرام هذا موضوع بسيط قمت بعمله وقد اختصرته لضيق الوقت وارجو ان تعذروني لو كان فيه اي تقصير واتمنى ان تجدو فيه مايفيدكم .
هذا الموضوع من اساسيات نظام التشغيل عامة دون تحديد نظام تشغيل بعينه وان كنت راغب في تعلم ماهية نظام التشغيل فعليك بالاساس اولا ومن ثم الانتقال الى المرحله الاعلى ثم الاعلى .
الموضوع هو عن جدولة المعالج اي كيف يقوم المعالج بتنفيذ المهام القادمه اليه وعلى اي اساس .
توجد مصطلحات كثيره يجب ان تعرفها حتى تستتطيع ان تفهم ماهو المقصود .
processes هي ناتج البرنامج بعد تنفيذه وتسمى احيانا Jobs .
CPU utilization : وهو جعل المعالج مشغول قدر الامكان (سوف تفهم ماذا اعني لاحقا)
Throughput : عدد الـ processes التي يكتمل تنفيذها لكل وحده الزمنيه
Turnaround time : كمية الوقت اللازم لتنفيذ a particular process
Waiting time : كمية الوقت التي تظل الـ processes منتظره في ready queue الى ان يأتيها الدور (سوف تفهم ماذا اعني لاحقا).
Response time : هو الوقت المستغرق من طلب الـ processe الى ان يستجيب (ليس المقصود بالاستجابه بالمخرجات) .
والان لنرى ماذا يحصل بين المعالج والـ processes القادمه اليه وسوف يكون بالصوره حتى توضح الفكره .
الطريقه الاولي التي من الممكن ان تستخدم وتسمى :
First-Come, First-Served (FCFS) Scheduling
هذا الاسم مألوف لدى المبرمجين فهي تسمى FCFO وهو مايعرف بـ QUEUE
الفكره كالتالي عندما ياتي Processes الى المعالج فانه ياخذ او Processe قادمه اليه ويتم معالجتها وعندما ينتهي منها ياخذ الـ Processe التاليه وهكذا .

من الرسمه السابقه :
Burst Time هو الوقت الذي يستغرقه المعالج للأنتهاء من الـ Processe
P1 P2 P3 هي عباره عن Processes قادمه للمعالج .
اذن :
Waiting time for P1 = 0; P2 = 24; P3 = 27
Average waiting time: (0 + 24 + 27)/3 = 17
لكن ماذا لو قلنا ان P2 وصلت اولا ثم وصلت بعدها P3 ثم اخيرا وصلت P1

انظر هل يوجد فرق بينها وبين السابق
Waiting time for P1 = 6; P2 = 0; P3 = 3
Average waiting time: (6 + 0 + 3)/3 = 3
لقد قل وقت الانتظار كثيرا عن السابق بمعنى انه اذا كانت هناك Processe تحتاج مثلا الى وقت طويل ثم مباشرة جاءت Processe بعدها لاتحتاج الا لوقت قصير فانها تظطر الى الانتظار الى ان ينتهي المعالج من العمليه التي معه قد تتسائل وتقول اين تنتظر !! تنتظر في ready queue واذا كنت مبرمج سوف تعرف كيف تدخل العمليات في ready queue وكيف تخرج .
والان بما ان الطريقه الاخيره جيده جدا قامو بعمل تلك الطريقه واسموها :
Shortest-Job-First (SJR) Scheduling
والتي تعني ان الـ Processe التى لاتستغرق وقت طويل في المعالج تدخل اولا وتنقسم هذه الطريقه الى نوعان :
النوع الاول : nonpreemptive عند قدوم عدد من الـ Processe الى المعالج ياخذ الـ Processe التي لاتاخذ وقت طويل ولكن عند قدوم Processe الوقت اللازم لها اقل من التي مع المعالج فانه يتم تجاهلها ويكمل المعالج عمله الى ان ينتهي .
النوع الثاني : preemptive نفس الطريقه السابقه ولكن الفرق هو عند قدوم Processe الوقت اللازم لها اقل من التي مع المعالج فان المعالج يوقف العمليه ويضع الProcesse التي معها في الكيو وياخذ Processe القادمه وهكذا . انظر الرسمه :

عفوا اخواني استميحكم عذرا (لضروف خارجه عن ارادتي)سوف اعود لاكمل الشرح ان شاءالله




