14 تغريدة 114 قراءة Sep 24, 2019
ثريد [][]
قد تساءلت يوم من الأيام عن كيفية اختيار المعالج للعمليات اللي ينفذها؟ وش المعايير ووش العملية اللي لها
أولوية عن غيرها؟
الـCPU Scheduling أو جدولة المهام، من المواضيع الجميلة الممتعة في نظم التشغيل/Operating Systems، اللي تتغير فيها الخوارزميات بناء على الاحتياج
<
عشان أبسط لك الصورة، المعالج عنده Ready queue، اللي هو طابور من العمليات/Processes الجاهزة اللي تنتظر دورها عند المعالج عشان يتم تنفيذها، العمليات هذي تختلف من حيث طولها وقصرها واحتياجها لموارد الجهاز، اللي هو الهاردوير.
<
اختلاف العمليات هذي يعني أنه لابد من طريقة أو خوارزمية للاختيار بينهم، وأن الاختيار مايتم بشكل عشوائي، الخوارزميات عموما تنقسم إلى قسمين، قسم قابل للمقاطعة(Preemptive)، وقسم غير قابل للمقاطعة(Non-preemptive).
<
غير قابل للمقاطعة معناها أن العملية إذا وصلت للمعالج، ماتتركه إلا إذا انتهت، أو إذا اضطرت توقف وتنتظر عملية أخرى تتم بالجهاز.
والقابل للمقاطعة، يعني أن العملية ممكن تتوقف بشكل إجباري، لأسباب كثيرة، منها وجود عملية أهم منها أو عملية أقصر منها أو بحسب اللي تحدده الخوارزمية.
<
وهذا ينقلني للنقطة الثانية، وهي خوارزميات جدولة المهام.
بشكل عام، جدولة المهام تاخذ عاملين بعين الاعتبار.
الأول هو الاستجابة/Responsiveness، والثاني هو الـTurnaround Time.
الاستجابة هي: كم تاخذ العملية وقت من وصولها للـReady queue إلى *بدء* تنفيذها (مو إتمام العملية)
<
وهذا الشي تقدر تختبره بنفسك، يعني إذا ضغطت على شي بالشاشة مثلا، كم ياخذ وقت ويستجيب ويبدأ ينفذ عمليتك؟
الـTurnaround time هو الوقت المستغرق من وصول العملية للـReady queue إلى إتمام تنفيذها.
العاملين هذي ما تقدر تجمعها مع بعض لأن
<
الـResponsiveness تحتاج مقاطعة(Preemptive)، وإذا تبي تضمن Turnaround مثالي بتحتاج أنك ماتقاطع العمليات، مثل خوارزمية SJF(Shortest job first)
وبما أننا وصلنا هنا، فيه نقطة مهمة، مقاطعة عملية ووضع عملية أخرى مكانها يتم عن طريق الـContext switch، اللي هو إيقاف عملية والاحتفاظ بـ
<
ببياناتها وعنوانها (PCB) لاستبدالها بعملية أخرى، الكونتكست سويتش هذا يسبب Overhead، يعني مجرد استبدالك بين عمليتين بيضيع عليك وقت، الوقت هذا يضر بشكل مباشر الـTurnaround time.
<
يعني المختصر المفيد، أنك بتختار أحد العاملين اللي فوق بحسب البيئة اللي يُستخدم فيها النظام، مثلا: نظام فيه تفاعل كبير بين المستخدم والنظام، مثل أنظمة الهواتف، بتحتاج Responsiveness عالي جدا لأن المستخدم معك طول الوقت، وكل شوي يعطيك أمر
<
حط في بالك أن إذا تبي المعالج يترك شغله ويستجيب لك، أنك بتوقف عمليات تشتغل بالخلفية مثل عملية أن الجهاز يحمل شي معين، لكن هذا مو بالضرورة يصير، لأن معالجات الوقت الحالي فيها نُوى وثريدز متعددة، بس بلا شك أنك بتقطع واحدة من هذي النوى عن شغلها عشان الاستجابة.
<
بينما في بيئة مثل الـSupercomputers: الأولوية عندك هي أقل Turnaround time، اللي هو أنك تنجز أكبر قدر من المهام وتضمن CPU Utilization عالي.
بالسوبركمبيوترز، عمليات ضخمة وتحتاج وقت طويل، اللي يتم أن اليوزر يدخل عمليته ويحط معها وقت متوقع للإنهاء، بناء ع قصر العملية يعطيها أولوية
<
وهذا اللي تسويه خوارزمية SJF، أنها تضمن لك أكثر كفاءة بالإنجاز من أي خوارزمية أخرى، وفي حال أن المستخدم دخل قيمة قليلة عشان النظام يخلي عمليته بالبداية، النظام بيوقف العملية ويطردها بعد إنتهاء الوقت المتوقع في أغلب الأحيان.
<
خوارزميات جدولة المهام بالوقت الحالي أعقد من كذا بكثير، والشرح اللي فوق ماهو إلا مجرد تبسيط للفكرة العامة، أغلب الخوارزميات حاليا تكون hybrid، يعني تجمع خوارزميتين أو ٣ أو ٤ أو أكثر من كذا، واسمها Multilevel queue.
<
وبس، حاولت أوضح الفكرة بشكل سهل يفهمه الكل، أتمنى لان أكون وُفقت فيه.
أتوقع أن أمتع تشابتر بمواد نظم التشغيل عموما هو هذا، Chapter 6 بمادة CSC 227 ?

جاري تحميل الاقتراحات...