الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

CPU Scheduler

مغلق
بدأه ابوعبدالاله في 2 أبريل 2003 · 15 رد · 18,634 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

اخواني الكرام هذا موضوع بسيط قمت بعمله وقد اختصرته لضيق الوقت وارجو ان تعذروني لو كان فيه اي تقصير واتمنى ان تجدو فيه مايفيدكم .

هذا الموضوع من اساسيات نظام التشغيل عامة دون تحديد نظام تشغيل بعينه وان كنت راغب في تعلم ماهية نظام التشغيل فعليك بالاساس اولا ومن ثم الانتقال الى المرحله الاعلى ثم الاعلى .

الموضوع هو عن جدولة المعالج اي كيف يقوم المعالج بتنفيذ المهام القادمه اليه وعلى اي اساس .

توجد مصطلحات كثيره يجب ان تعرفها حتى تستتطيع ان تفهم ماهو المقصود .

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 التاليه وهكذا .

FCFS.gif

من الرسمه السابقه :

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

FCFS-2.gif

انظر هل يوجد فرق بينها وبين السابق

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 القادمه وهكذا . انظر الرسمه :

SJF.gif

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

#2

بارك الله فيك ولكن لو تزيد من شرحك يكون افضل

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#3

الرسمه السابقه تابعه للنوع - SJF -non-preemptive

ومن الرسمه نجد ان :

Average waiting time = (0 + 6 + 3 + 7)/4 = 4

سوف احاول ان اشرح اكثر حتى تتضح الصوره .

من الرسمه السابقه المقصود بـ Arrival Time هو وقت وصول الـ Process الى المعالج ونقصد بـ Burst Time هو الوقت الذي يستغرقه Process داخل المعالج لاتمامه .

الان من الرسمه نرى ان اول Process وصلت الى المعالج كانت P1 فعند وصولها دخلت المعالج مباشرة ولم تنتظر فكان وقت انتظارها = صفر وعند وصول P2 وجدت ان المعالج مشغول بعمليه فانتظرت وفي هذا الانتظار وصلت P3 ثم وصلت P4 والمعالج مازال مشغول بـ P1 وعندما انتهى المعالج منها وجد امامه P2 P3 P4 وهنا اخذ الـ Process التى تاخذ وقت اقل لتنفيذها . وتم ترتيبها كما هو موضح في الرسمه . ------ ارجو ان اكون وفقت في الشرح-------

الان سوف نشاهد نفس العمليات السابقه ولكن بالنوع الثاني :

انظر الرسمه لترى الاختلاف بينها وبين النوع الاول :

SJF2.gif

من الرسمه نشاهد ان الوضع اختلف كثيرا عن السابق وللتوضيح سوف اشرح ماحدث :

ماحدث هو انه عند وصول P1 ودخولها على المعالج وكانت تحتاج الى 7 من الوقت وبعد مرور 2 من الزمن وصلت P2 وتحتاج الى 4 من الزمن فقط بينما P1 بقي لها 5 من الزمن حتى تنتهي هنا توقف المعالج عن العمل واخرج P1 وادخل P2 مكانها وبينما يتم العمل مع P2 وبعد مرور 2 من الزمن وصلت P3 التي لاتحتاج الا لواحد من الزمن فتوقف المعالج عن العمل وادخل P3 .......وهكذا والباقي ان شاء الله يكون واضح في الرسمه .

Average waiting time = (9 + 1 + 0 +2)/4 = 3

ولكن هذه الطريقه تتسبب في مشكله :

المشكله انها سوف تسبب مايسمى بـ Starvation اي ان الـ Process التي تحتاج وقت طويل في المعالج قد لاياتيها الدور ابدا بسبب تدفق Process تحتاج الى وقت اقل في المعالج وبذلك تظل في حالة انتظار قد يطول ويطول .

الحل :

Priority Scheduling

A priority number : وهو عباره عن رقم من نوع integer ياتي مع الـ Process يمثل الاولويه اي ان الـ Process التي معها عدد صغير له اولويه اكبر عن الـ Process التي معها رقم كبير . smallest integer = highest priority

ولاحظ هنا ايضا ان low priority processes قد لاتنفذ ابدا لذلك .الحل هو انه تقليل الرقم الذي يمثل الـ Process من فتره الى اخرى الى ان يصبح ذو اولويه عليا فينفذ (هذا بالنسبه للـ Process التي ليست لها اولويه عليا وذلك حتى لاتظل بدون تنفيذ) . لاتنسى ان مكان الانتظار ready queue .

طريقة اخرى تسمى

(Round Robin (RR

هذه الطريقه جميله جدا انا اسميها (لا للواسطه) يعني سواء كنت مهم او غير مهم غني او فقير رئيس او مرؤوس الكل متساوون .

الطريقه هاذي لاتنظر لأهمية الـ Process جميعهم متساوون .

الشرح :

يحدد وقت للمعالج ولنقل 20 عادة يكون 10-100 milliseconds

ومعنى ذلك ان كل الـ Process سواء كانت مهمه او غير مهمه تاخذ 20 من الزمن وتخرج من المعالج حتى ولو لم تنتهي . اذا انتهت فخلاص اما اذا لم تنتهي فانها تخرج وتوضع في اخر الطابور .

انظر للرسمه :

RR.gif

الوقت المحدد في الرسمه هو 20

اعتقد انه بمجرد مشاهدتك للرسمه سوف تفهم مباشرة .

اتمنى ان اكون وفقت في الشرح وان يكون فيها الفايده للجميع .

والسلام عليكم ورحمة الله

#4

اخي الكريم

شكرا على هذا الموضوع المهم لكن الصور لاتظهر فهل من الممكن اصلاح ذلك

مع الشكر

(f)(f)

#5

السلام عليكم ورحمة الله

أخي ابا عبد الله

جزاك الله خيرا على هذه المعلومات

كنت أود انك قد بدأت بشرح المراحل التي يمر بها الprocess ثم معنى الأولويات ثم الcpu scheduler. كيف نسمي process بالعربية:o

أخي ExplorerXP

كي تظهر الصور اتبع الخطوات التالية:

اضغط على مكانالصورة بزر الفأرة الأيمن واختر خصائص

احفظ عنوان الصورة في الحافظة ثم لصقها على شريط العناوين في المتصفح

وستظهر لك الصورة بإذن الله.

#6

يعطيك العافية

#7

الاخ ابوعبدالاله ... جزيل الشكر لمجهوداتكم المقدرة و اتمنى لك التوفيق

اخي الكريم ....

لدي استفسار بخصوص ال Round Robbin كيف يمكن ادخال ال Proccess داخل ال Queu و ماهي الطريقة و الدوال المستخدمة للتوقيت و أنهاء ال Process

ارجوا افادتي باية مواقع تحتوي على معلومات او مشاريع مماثلة للمساعدة

#8

يمكنك استخدام Class اسمها Queue وفيها تجد Append (لإدخال العمليات - Process - إلى الصف أو الـ Queue (عادة يسمى بـ Ready Queue أو Job Queue ) ..

كما يمكمنك افتراض أن العمليات ( Process ) تصل بشكل عشوائي -> استخدم Class اسمها Randomize أعتقد ..

جميع هذه الـ Classes جاهزة في الـ #C والجافا .. وأكيد في غيرها.

C#4Ever

الأخ : ألو عبدالإله .. كمل مع الشباب :)

#9

\/

||

||

#10

سلام عليكم

الموضوع رائع و قديم :)

للرفع

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#11

هنا موقع عربى رائع يتنبنى بناء نظام تشغيل

وبه شرح رائع عن ما تم ذكره

http://alrebat.tadwen.com/index.php?title=...%B3%D9%8A%D8%A9

022.gif

***********************************************

043.gif

#12

:lol: -waf بارك الله فيك والله جبت المفيد اللي ماكنت فاهموا تسلم بس الصور مش ظاهرة

#13

مكشور على الشرح

#14

السلام عليكم ورحمة الله و بركاتة

ارجو منكم مساعدتي في اعطائي رابط موجود فية

Scheduling Algorithms (fcfs,srtf,rr,sjf,priority)

مبرمح اما بلغة

VB.net or

c#

او باي لغة ان وجدت

واتمنى ان يكون موجودات في كود واحد

واكون شاكرا جداا جداا

لاني عندما قرات الموضوع الذي وضعتموه قلتم انه مبرمج بلغات عدة وانا بحثت عنه طوبلا فلم اجده فارجوكم مساعدتي

وشكرا لكم و جزاكم الله كل خير

#15

السلام عليكم و رحمة الله و بركاته

www.pscode.com

ابحث فيها عن اي من هذه الكلمات

scheduler - round robin

احب ان اوضح امرا لم يحتاج الحاسوب لتعدد المهام الا يستطيع المعالج الجبار ان يتولي عمل برنامجين في نفس الوقت والاجابة هي لا !!

المعالج يحتوي علي مسجل واحد من هذه الانواع eax,abx..الخ

و مسجل واحد eip والذي يشير لموقع التعلمية القادمة و مسجل واحد يشير الي الكومة الحالية esp لذا يحتاج المعالج كل فترة زمنية معينه ان يقف العملية الحالية ويحفظ قيم كل المسجلات ثم ينتقل الي عملية اخري و هكذا !

وهذه العملية لها ميكنة خاصة بها تختلف عن الميكنة التي تقبض handling الانقطاعات التي ترسلها كل من الكي بورد و الماوس و بقية الاجهزة

http://lkdp.blogspot.com/

سلام

تم تعديل هذه المشاركة بواسطة محمد جبر في 13 ديسمبر 2007 في 20:26

لا اله إلا الله

#16

اخي الكريم مشكور على الموضوع الذي يعتبر اساسي في نظم التشغيل مهما كان عمره قديم او حديث فالاساس واحد ويتم تطويره....

يجب ان نتذكر لازم نصل لأكبر قدر ممكن من الفائدة للنظام ، ويجب ان نحصل على هذه العلاقات با لنسبة للمصطلحات في اول الموضوع او ماتعرف كارتيريا على النحو التالي:

1. Max. CPU Utilization.

2. Max. Throughput.

3. Min. Turnarounf time & Waiting Time & Responces Time.

التي تم شرحها سابقا وهي غير داعية للتوضيح..

هذا الموضوع مغلق.

مواضيع مشابهة