OS24__L06_-Rawan
السلام عليكم ورحمة الله وبركاته. يا رب تكونوا بخير جميعاً. النهارده إن شاء الله موضوع جديد كنا اتكلمنا الثلاث أسابيع اللي فاتوا عن الـ Memory والـ Managing بتاع الـ Memory. النهارده بنتكلم على موضوع جديد اللي هي الـ Task الثانية من الـ Operating Systems اللي هو إزاي بيـ Manage الـ Processor.
بنتكلم النهارده بالأخص على الـ Single Single Processor أو الـ Uni-Processor يعني. إزاي بيـ Schedule الـ Tasks على Single Processor. في بس Announcements سريعا كده في الأول إن شاء الله. الـ Midterm إن شاء الله الأسبوع اللي جاي لحد نهاية الـ Memory يعني لحد المحاضرة الخامسة رقم خمسة. محاضرة الأسبوع اللي فات
لـ Midterm 15 درجة، 10 منهم على المحاضرات، و 5 درجات على الـ Concepts اللي اتعلمناها في الـ Practices سواء الـ Lab أو Milestone 1. بس بنأكد إن هي Concepts أو الفهم يعني مش مش مطلوب إن أنت تكتب Code يعني. بس مطلوب الـ Concepts نفسها تبقى فاهمها على أساس بيبقى فيه سؤال عليها.
دي دي References كده لأمثلة والحلول بتاعتها مجمعة يعني في اللينكات دي. دي Sheets اللي كنا بنحل منها وبتنزل مع كل محاضرة. دي Problem Sessions اللي هي بنسجلها، سجلنا اتنين والنهارده التالتة إن شاء الله.
دي Materials بتاعت Revision قبل كده. هتلاقوا فيها Previous Exams لو عايزين تبصوا على أمثلة على امتحانات سابقة. ودي حلول لبعض الأمثلة برضه متسجلة من Videos متسجلة من قبل كده يعني. hope يعني الحاجات دي تبقى تفيدكم خلال المذاكرة سواء للـ Midterm أو للـ Final يعني إن شاء الله.
طيب. المحاضرة النهارده هتتكلم على تاني Task للـ Operating System: إزاي بيـ Solve the Competition على الـ Single Processor. عندنا الـ Agenda Intro على الموضوع بشكل عام، أنواع الـ Scheduling، المقاييس اللي بنقيس عليها الـ Scheduler كويس ولا وحش على أي أساس، وأنواع الـ Processes. دي زي مقدمة كده.
بعد كده هنخش بقى في أنواع الـ Scheduling. عندنا أربع أو خمس طرق: الـ Priority، الـ First Come First Served، Shortest Process Next، يعني في حوالي خمس أو أربع أو خمس طرق هناخدها مع بعض من خلال Running Example يعني. وفي الآخر فيه Questions، Sheet Questions بالحلول بتاعتها يعني. هنتعلم إيه؟ هو اللي قلناه من شوية: الفرق ما بين أنواع الـ Scheduling المختلفة، وإزاي نقيم الـ Performance بتاع كل طريقة من الـ Scheduling
الـ Policies اللي هنتكلم عنها إن شاء الله. كل حاجة زي ما هنشوف ليها ميزة وعيب، فهنعرف المزايا والعيوب وعلى أي أساس نختار كل واحدة منهم. دي الـ References. ودي الخريطة اللي بنتكلم عنها من أول الـ Term. احنا النهارده كنا اتكلمنا على الـ Address Space الثلاث محاضرات اللي فاتوا. والنهارده بنتكلم على الـ Threads مع الـ Processor. يعني إزاي بـ Schedule الـ Threads على الـ Processor Assuming إن إحنا عندنا
Single Processor. طيب. المفروض الـ Scheduler ده يحقق Objectives. Objectives عامة يعني المفروض يحقق. الأولاني أن هو لازم يـ Ensure the Fairness ما بين البرامج، يعني مفيش برنامج يستحوذ على الـ Processor طول الوقت وبالتالي برنامج تاني يحصل له نوع من الـ Starvation مجاعة أن هو ما يعرفش يشتغل خالص.
فالمفروض إن هو Ensure somehow نوع من الـ Fairness ما بين توزيع الـ Processor على البرامج. الجزء الثاني أن هو Manage the resources efficiently يعني هو دلوقتي عايز يـ Manage الـ Processor. المفروض يستغل الـ Processor بأحسن شكل.
يعني Utilize the Processor. طول ما في Request ناس عايزة تشتغل المفروض إن هي تشتغل وتاخد وقت الـ Processor. ما ينفعش يبقى الـ Processor قاعد فاضي وأنا عندي برامج عايزة تشتغل. وفي نفس الوقت يعمل ده بـ Less Overhead (يعني ضريبة قليلة).
عشان يعمل ده. وده لو تفتكروا الأربع أجزاء دول هم أحد أدوار الـ OS اللي هو كـ Governor (الحاكم) اللي اتكلمنا عنه في أول محاضرة، إن هو يعتبر Governor (حاكم) عنده موارد وعنده شعب، والمفروض يوزع الموارد دي على الشعب ده بحيث ينشور حاجتين: نوع من العدالة في التوزيع
والحاجة الثانية إن الموارد تبقى كلها مستغلة. ما ينفعش يبقى في Resource عليه ضغط وResource تاني قاعد فاضي وفي ناس عايزة تستغل. فهو الأربع نقط دول بيتكلموا على القصة دي. الحاجة الخامسة زي ما بينشور الـ Fairness لازم يدعم برضه فكرة الـ Priority
لأن مش كل البرامج زي بعض، سواء باختيار الـ User أو مش باختياره. يعني برامج الـ Kernel مش زي برامج الـ User. يعني ما ينفعش يبقى في مثلاً الـ Scheduler عايز يشتغل أو الـ Memory Manager عايز يشتغل
وتيجي تقول له لأ أنت ما تشتغلش دلوقتي علشان في برنامج شغال. يعني ففي لازم يدعم إن في Priorities أو إن أنت ساعات أنت كيوزر بتحتاج تـ Assign Priorities وده موجود في معظم الـ Operating Systems. أنت تقدر تغير الـ Priorities بتاعت البرامج بنفسك أنت كيوزر يعني. فدول خمس حاجات المفروض يحققهم. طيب. الـ Scheduling بقى هي يعني إيه كلمة Scheduling؟ Scheduling يعني أنت
عندك ناس مستنية وعايز تختار. ده معنى Scheduler. فبيحصل على أربع مستويات اللي هم الأربعة اللي قدامنا بنسميهم بنقسمهم على حسب معدل احتياجهم: Long و Medium و Short-term و I/O Scheduling. هنتكلم عنهم بالـ
الـ Long والـ Medium والـ Short هنتكلم عنهم حالاً من خلال رسمة أسهل. الـ I/O Scheduling اللي هو لو أنا عندي كذا برنامج مستنيين على Device، مين اللي ياخد الـ Device دلوقتي؟ فده مش مرتبط أوي بمحاضرة النهارده، ده يخص الـ I/O Devices. بس هو نوع من أنواع الـ Scheduling.
طيب. اللي يهمونا النهارده الـ Long والـ Medium والـ Short. لو تفتكروا دي خريطة الـ States الـ Seven States اللي بيمر بيها البرنامج عادةً يعني. فالـ Long-term هو بيحدد مين من الـ New اللي هي ناس عايزة تخش الـ System
مين منها اللي يخش الـ System؟ مين منها اللي يحصل له Loading في الـ Memory أو Loading على الـ Disk؟ ده Long-term Scheduling. لأنه ممكن يبقى عندي عدد كبير عايز يشتغل. إيه اللي يمنع إن احنا نشغلهم كلهم؟ يعني إيه اللي يمنع إن كل الـ New يخش ويبقى Ready؟
mainly أهم Resource Memory. يعني لو أنا دخلتهم كلهم على الـ Ready هيسحبوا الـ Memory كلها، ما حدش يعرف يشتغل. عشان كده في Limit هنا. طيب تختار مين بقى؟ هو ده اسمه Long-term Scheduling: مين من الـ New يخش Ready. الـ Medium-term مين من الـ Suspended اللي أنت كنت راكنهم قبل كده؟
يخشوا على الـ System تاني؟ مين اللي كانوا على الـ Disk اللي أنت كنت راكنهم على الـ Disk أياً كان السبب مين اللي يخش منهم للـ System مرة تانية. Short-term مين بقى من الـ Ready اللي يخش على الـ Processor؟ اللي يخش يبقى Running على الـ Processor. وده هو موضوعنا النهارده، يعني ده اللي هنكمل بيه محاضرة النهارده، اللي هو مين من الـ Ready يخش يبقى Running.
طيب، ده بالنسبة للـ States، نفس الفكرة بس على مستوى الـ Queues بقى، أنت عندك هنا الـ New، الـ New state. في كذا حد مستني في الطابور. مين من الـ New يخش يبقى Ready؟ هو ده اسمه إيه؟ Long-term. بتختار مين من الـ Queue اللي يخش؟ هو ده اسمه Long-term.
طيب. الـ Ready فيه طابور وأنت عندك One Processor. مين اللي يخش دلوقتي؟ ده موضوع النهاردة، بنسميه Short-term. طيب. مين من الـ Ready يركن يبقى Suspended أو مين من الـ Suspended يرجع تاني يبقى Ready؟ ده بنسميه Medium.
خلاص؟ ليه سموها كده؟ Long-term، لأن هو معدل احتياجه على فترات متباعدة. يعني أنت فين وفين أما توصل للـ Limit اللي أنت حاطه على الـ System. يعني أنت مثلاً بتكون حاطط Limit 1000 برنامج.
فأنت فين على ما توصل إن يبقى عندك أكتر من 1000 وعايز تختار منهم. صح؟ يعني ده الـ Decision ده مش بيتعمل كل شوية، ده بيتعمل على فترات متباعدة، عشان كده بيسموه Long-term، إنه بيـ Execute إيه؟ Infrequently. طيب.
على أي أساس أختار؟ في أفكار كتير. أنت دلوقتي عندك ناس مستنية في الـ New وعايز تختار منهم مين اللي يخش الـ Ready أو يبقى Suspended. ممكن تختار Simply خالص First Come First Served، Queue، طابور، اللي جه الأول يخش الأول. ممكن تختار بالـ Priority.
ممكن تختار على حسب أنت عايز Balance إيه، يعني أنت مثلاً لو أنت عندك في ضغط على الـ Processor وDevices فاضية. يبقى أما أجي أختار، ما دخلش حد عايز Processor. أدخل حد عايز Devices. I/O
على حسب الـ I/O requirements أو العكس. عندي ضغط على الـ Devices والـ Processor فاضي. ما دخلش حد طبيعته إنه عايز Devices. أدخل حد يكون عايز Execution Time. بحيث أقدر Balance ما بين الاتنين. طيب. فده وظيفته الأساسية إنه بيتحكم.
فحاجة بنسميها الـ Degree of Multi-programming. معدل الـ Multi-programming عندك، اللي هو كام برنامج allowed إن هم يبقوا في الـ Memory مستنيين الـ Processor ده؟ هو ده اللي بيتحكم فيها، هو اللي بيحدد الرقم، الـ Maximum كام؟ وهو اللي بيحدد مين اللي يخش.
فهو اللي مسؤول عن القصة دي. الـ Decision هنا مهم جدا، ليه بقى؟ لو انت عندك عدد البرامج اللي أنت قررت تدخلها كان قليل قوي، إيه اللي يحصل؟ يعني أنت سامح مثلاً بخمس برامج بس.
بالظبط. لأن أنت بعد شوية الخمس برامج دول بطبيعتهم هتلاقيهم ركنوا على الـ I/O. الـ I/O بطيء. بقى الـ processor قاعد فاضي. فـ أنت كده مش مستغل الـ processor. طب العكس لو كان العدد ده كبير قوي
مش هيعرفوا يشتغلوا. لأن لو العدد ده كبير قوي فـ أنت مفيش حد عارف ياخد الـ working set بتاعته. الجزء من الـ memory اللي يكفيه. فيحصل إيه المشكلة اللي بتحصل لما متعرفش تحقق الـ working set؟ thrashing. ممتاز. thrashing. يحصل thrashing. برضه محدش هيعرف يشتغل. يعني لا القليل قوي الـ processor شغال كويس.
ولا الكتير قوي الـ processor برضه شغال كويس لأنه هيضيع وقته كله في الـ thrashing. Medium-term من اسمه. هو ده طبعاً المسؤول مين من الـ suspended يخش يبقى ع الـ system. أو العكس مين اللي يخرج يعني. فـ ده فكرته.
ده اللي بيmanage بقى الـ degree بتاعة الـ concurrency. يعني ده الأولاني بيحدد العدد ومين اللي يخش. ده اللي بيعمل له management بقى. يعني افترض إن أنت أنت محدد 100، اشتغل. جيت عند 90 ولقيت محدش عارف يشتغل.
نت محدد 100 مثلاً، can we delay it here؟. لو أنت مش لاقي memory تشغل أي حد. suspend. suspend. ده بقى اللي بيتحكم في القصة. بعد شوية لقيت لأ ده بقى في ضغط على الـ I/O بس الـ processor قاعد فاضي وعندك ممكن تدخل ناس.
هو اللي يدخل. فـ ده بـ execute more frequently عن التاني. يعني معدل تنفيذه أو الـ decision ده بيتاخد more frequently عن عن اللي قبله يعني عشان كده سموه medium-term. الـ short-term وده بقى موضوعنا النهارده، ده اللي بيحدد مين اللي يخش على الـ processor.
اللي بنسميه dispatcher، ساعات بيسموه dispatcher يعني. مين اللي يخش على الـ processor؟ ده بقى بـ execute most frequently. ده بـ execute تقريباً بمعدل ساعات في بعض الـ decisions كل 100 millisecond.
يعني كل 100 milli محتاج تاخد decision. هتخرج حد عايز تاخد decision مين اللي يخش مكانه؟ فـ متخيلين الـ decision ده بـ execute more frequent أو most frequently عشان كده سموه short-term. طب إمتى بتضطر تاخد الـ decision ده؟.
في كذا scenario. يعني إمتى الـ dispatcher يشتغل؟. ممكن لو برنامج حصله time-out. وقته خلص. فـ بتخرجه وتدخل غيره. لو حصل interrupt. فـ بتضطر تخرجه وتدخل. لو حصل system call. كل دي أسباب بتخليك.
الـ dispatcher يشتغل ويضطر ياخد decision مين اللي يخش next. طيب فين ده ف الـ OS بقى؟. فين موضوع الـ scheduler ده ف الـ OS عندنا؟. الـ queues متعرفة على إنها lists. أهو هتلاقي كلهم متجمعين في struct اسمه process_queues ودا يمكن اللي استخدمته.
منه الـ spinlock لو تفتكروا في Milestone 1. إيه ده؟ ده struct شامل الـ queues كلها بتاعت الـ states المختلفة. الـ queue بتاع new. بتاع الـ exit. بتاع الـ ready. وممكن زي ما حنشوف next يبقى في أكتر من queue للـ ready عشان كده معمول كـ pointer.
أهه. وعليهم كلهم في إيه؟ Lock. ليه Lock؟ لأن الـ queues دي shared ما بين الكـ kernel threads المختلفة بتاعت البرامج. مش احنا قلنا إن كل thread عند اليوزر ليه kernel thread.
فإذن وارد إن اثنين يضيفوا يحاولوا يضيفوا في نفس الوقت أو يسحبوا next في نفس الوقت. أو لو أنت عندك multi-processors. فالحاجات دي shared فـ محتاجة lock يحميها. طب لو تاخدوا بالكم هنا مفيش I/O.
يعني مفيش blocked. في new و exit و ready. فين الـ blocked؟ الـ blocked ده بيبقى blocked على حاجة معينة. على I/O على device معينة. مثلاً الـ blocked ده على keyboard فدول محطوطين في queue. الـ blocked على
على lock معين زي مثلاً الـ sleep block يبقوا محطوطين في queue تاني. فدي عملناها بفكره الـ channel. الـ channel هي عبارة عن إيه؟ شوفتوها في Milestone 1. هي queue. Queue. بس ليه عاملها channel؟ لأن أنت ممكن يبقى عندك أكتر بقى من queue للـ blocked. أنا blocked على keyboard، في blocked على mouse، في blocked على.
على sleep block على different ممكن يبقى كل مجموعة blocked على حاجة. عشان كده محطوطين في شكل channel. كل ما تعوز اعمل channel جديدة. الـ channel عبارة عن إيه؟ Queue. Queue برضه. وبتتحمى نفس الـ lock ده. زي ما عملته في Milestone ما عملنالكم.
Milestone. في بقى functions بتتعامل مع الـ queues دي. الـ ready made functions. بتتعامل مع الـ queues دي. زي مثلاً insert في الـ ready. remove من الـ ready. insert في الـ new. remove من الـ new. دي functions جاهزة معمولة بحيث إن أنت إيه تديها الـ حاجة تروحي هي ضايفاها لك ومغيرة الـ state في نفس الوقت.
functions مساعدة يعني. و functions للـ scheduler نفسه. يعني دول بيستخدموا دول في الغالب. يعني أنت مثلاً عايز إيه؟ عايز تـ exit environment. فـ أنت عايز تدور عليها هي فين في أنهي queue.
أياً كان مكانها وتروح محولها لـ exit. عايز تشغل environment فـ بتدور عليها هي فين وتروح مشغلها مغير حالتها لـ ready. زي process kill كده؟ زي؟ process kill أه أه بالظبط. ما kill بتنادي دي
يعني Kill. لو أنت عايز تـ Kill environment معينة هي حتنادي حاجة زي كده. فـ معمولة على أساس تساعدك إن أنت إيه. بالظبط. بـ call حاجة شبه كده طبعاً. بس أنا بتكلم طبعاً أنا على الفُص يعني. بس آه يعني أنت لو عايز تعمل Kill command.
هينادي على حاجة زي كده. لأن (kill) معناها إنك بتدور على فين الـ (Process) اللي عندك وتروح (Exit). وهكذا. مثلاً (Print All)، يطبعلك كل الـ (Processes) اللي عندك أياً كان حالتهم. اللي موجودين في الـ (New) واللي في الـ (Ready) واللي في الـ (Running) واللي في الـ (Exit). يطبعهم لك كلهم وهكذا. طيب
ده بالنسبة للـ (Queues). طب الـ (Scheduler) بقى نفسه، اللي هو بنسميه الـ (Dispatcher). اللي أنتو لو تفتكروا ناديتوا على الـ (Function) بتاعته في (Milestone 1)، اللي هي (sked). إيه الـ (Scheduler) ده بيعمل إيه؟ متخيلين يعني إيه هو قبل ما نتكلم عنه؟ بيعمل إيه؟
بيدور مين اللي يخش على الـ (Processor) دلوقتي. هيجيبهم من فين؟ من الـ (Ready Queue). بس (Ready)، الناس اللي مستنية. خلاص؟ طب ولو مالقاش؟
معناه إن مفيش حد مستني على الـ (Processor). بس ممكن يبقى فيه حد فين؟ (Blocked) على (I/O)، صح؟ فلازم يتـ (Check) هل في حد (Blocked) ولا لأ؟ عشان لو في حد (Blocked) يفضل هو مستنيه على ما يجي
عشان كده الـ (Function) دي في أولها طبعاً بتـ (Check). لازم يكون الـ (Interrupt Flag) مقفول. لازم يكون الـ (Interrupt Disabled). ليه؟
ما ينفعش وأنا جاي لسه بطلع واحد وأدخل واحد يحصل لي (Interrupt) في النص. لأن أنا هنا أثناء ده أنا بغير (Registers). بعمل (Context Switch). يعتبر اه (Critical Section). ما ينفعش حد يعطلني في النص. لو حصل (Interrupt) قيم (Registers) هتتغير. وأنا أصلاً جوه بغير قيم (Registers).
طيب. جواه أهو (Inner Loop) بتدور مين اللي في الـ (Ready) عشان أسحبه وأدخله (Running). بتـ (Check) الـ (Ready Queues). إيه ده؟ (Critical Section) بيحمي مين؟
لـ (Queues)، ما الـ (Queues) دي اللي هي الـ (Queues) بتاعت الـ (Processes). بتتحمي بالـ (Queue Lock) اللي هو جوه الـ (Process Queues). طيب. افرض إن انت جوه ده ملقتش حد (Ready). ده مش معناه إن انت خلصت. في (Outer Loop) بتـ (Check).
طول ما في حد (Blocked) طول ما في حد (Blocked)، إفضل (Check). دوّر، استنى لحد. لأن الـ (Blocked) ده في الآخر هيرجع يحتاج الـ (Processor). فإنت طول ما في حد لسه (Blocked)
افضل تدور عليك خلي بالك انت جاي من هنا وانت قافل الانترابت اكدت فوق ان الانترابت معفول خلي بالك هو لو انترابت معفول
أنت هتعرف من فين إن الـ (Blocked) خلص؟ قبل الـ (Inner)، قبل ما أخش الـ (Inner Loop) أهو بفتح الـ (Interrupt) في الأول. بفتحه مؤقتاً في المسافة في الفترة دي. قبل ما أخش الـ (Inner Loop) بفتح الـ (Interrupt) علشان لو في حد (Blocked)
يعمل لي (Interrupt) فأعرف إن هو جهز. أروح أسحبه وأدخله (Ready) ويبقى عندي يبقى في الـ (Ready) دلوقتي وأخش أسحب. طب افرض بقى إن أنت ملقيتش، لا لقيت في الـ (Ready) ولا لقيت في الـ (Blocked). تعمل إيه؟ خلاص الـ (Scheduler) كده دوره خلص
خلاص. مفيش حاجة تـ (Schedule). فبترجع تاني للـ (Command Prompt). اللي هو الـ (Prompt) بتاع الـ (OS). يستقبل بقى (Commands) جديدة من الـ (Prompt). لكن طول ما أنت في ناس عايزة تشتغل، فأنت في الـ (Loop).
نيجي بقى للـ (Inner Loop) نفسها، الـ (Inner Loop) عبارة عن إيه؟ محطوطة ما بين (Acquire) و (Release)، وبتبقى بتعمل حاجات سريعاً كده. طبعاً بتـ (Schedule) الـ (Next)، بتنادي على الـ (Scheduler Method) أياً كانت بقى أنت شغال بأنهي طريقة من اللي هنتكلم عنهم النهارده. المفروض أي طريقة منهم دورها تجيب الـ (Next)، مين الـ (Next) اللي يخش على الـ (Processor)
لو في (Next) هكمل. مفيش، خلاص. برجع للـ (Outer Loop). طب لو لقيت (Next) المفروض تعمل إيه بقى؟ تغير الـ (State)، صح؟ يعني الـ (Next) ده المفروض إن أنت أولاً تـ (Switch) عليه، يعني
تخلي الـ (Virtual Memory) بتاعته هي اللي تشتغل دلوقتي. أنت هتـ (Switch) عليه يعني إيه؟ عايز تغير الـ (Registers) وعايز تغير الـ (Virtual Memory) اللي هو الـ (Directory)، الـ (Page Directory) بتاعه. فأنت بتـ (Switch) عليه أهو وبتـ (Set) الـ (Processor) إن هو الـ (Current) اللي شغال على الـ (Processor) هو البرنامج.
ده بقى كان سؤال سأله بعض منكم في (Milestone 1). ما تنساش إن أنت حتى الآن قافل الـ (Lock)، صح؟ طب ما (Acquire Lock). أما هتيجي تـ (Switch) على البرنامج ده
البرنامج هو اللي هيـ (Release) الـ (Lock). يعني مش الـ (Scheduler) اللي هيـ (Release) الـ (Lock). أنت رحت للـ (Scheduler) وأنت قافل الـ (Lock). الـ (Scheduler) راح للبرنامج وهو قافل الـ (Lock). البرنامج أول ما تروح له يروح ميـ (Release) الـ (Lock). وأما يجي يرجعلك تاني
للـ (Scheduler) لازم يكون قافل الـ (Lock). زي ما أنتوا عملتوا في الـ (Sleep Function) في (Milestone 1)، أنت قبل ما تروح للـ (Scheduler) كنت قافل الـ (Lock) قبل ما تروح للـ (Scheduler). خلاص؟ بغير الـ (State) بتبقى (Run) لأن البرنامج ده دخل على الـ (Processor).
وبعمل context switch كنا خدناه من قيمة محاضرتين أو تلاتة اللي هي switch registers. بشيل القديم أحتفظ بالقديم وload registers بتاعة الجديد.
الكاش بقى لو عايز flash the cache بقى ساعتها
لو أنا عايز أمسح الcache ساعتها بflash the cache. خاصة الcache بتاعة الTLB. بس دي أوتوماتيك بتتم أما بتload أنت الdirectory. يعني الfunction اللي بتload الdirectory هي أوتوماتيك بتمسح الTLB cache. by default.طيب.
هنا الcontext switch إيه اللي حصل فيها؟ رحت مشغل برنامج تاني.
خلاص أنا كده مش هكمل هنا. إيه اللي هيرجعني هنا تاني بقى؟
Process نفسها. الprocess اللي أنا رحتلها دي أما وقتها يخلص أو مثلاً تيجي تsleep أو تحتاج إن هي خلاص حصل لها interrupt أو أياً كان هتعمل هي context switch لمين
لscheduler فترجع تاني لscheduler. أما أرجع لscheduler لازم أتأكد إن زي ما رحت زي ما جيت. أنا كنت رايح وقافل lock.
فأما أرجع لازم أتأكد إن lock ماله مقفول. لو أنت راجع لي lock مفتوح
أرمي exception. ليه ليه أنا عايز هنا الlock مقفول؟ لأنا لسه هتعامل مع queues لسه. فأنا عايز راجع وأنت قافلي الlock زي ما كنت داخلي من فوق وأنت قافل الlock. بعد كده طبعاً بغير الstatus اللي جاي ده بشوف حالته لازم ما يكونش running
ازاي انت راجع لي runningلازم تكون حالتك يا اما blocked يا اما رجعت ready يا اما بقيت exit لكن مستحيل ترجع لي وانت running. لو انت ready أنا هرجع أحطك في ready. لو أنت blocked
لو اللي كنت أنا رحت له ده أما رجع لي كان هو اتعمل له block زي ما حصل معاك في Milestone 1 في الsleep.
مش الsleep أنت عملت block للfunction لبرنامج ورحت رايح للscheduler. يعمل إيه الscheduler ساعتها؟
هيكمل آه بس هيكمل على مين
على أنهي virtual memory.الساعة اللي كان شغال كانت الvirtual memory هي اللي شغالة بتاعته. اتعمل له block. فأنتدلوقتي محتاج تغير الvirtual memory تخليها بالkernel virtual memory. لأن ما فيش running program دلوقتي.
للي كان شغال اتعمل له block.فالdirectory بتاعه ما ينفعش أستخدمه. الvirtual memory بتاعته ما ينفعش أستخدمها.طب ما أستخدم مين؟دلوقتي أنت عملت context switch ورجعت.اللي رجع لي ده
البرنامج ده حصل له بلوكت يعني ايه بلوكت؟ يعني مش هيكمل عد بروسسه دلوقتي كان لي هو ديركتوري كان فيه ديركتوري وديركتوري ده مشاور على تابلز صح؟ وكان CR3 هو اللي مشاور على ديركتوري ده بتاع البرنامج Process X Direct
رصص X دي بقت بلوجت دلوقتي اي ان كان السبب هي بقت بلوجت يبقى ماينفعش يفضل بستخدم نفس الفيرتوال ميموريكتها لازم اشيلها طب هشيلها وحط مين
أنا لسه ما جيتش البرنامج اللي بعده أنا لسه المرة الجاية حجيبي البرنامج اللي بعده في الفترة دي اشتغل على أنهي ميموري على ميموري الكرمل اللي هو عندكم في اللاب كان اسمه Pointer Page Directory اللي شغالين عليه من أول ما اكتدينا المعامل
هذا هو الـ Direct Direct أتمنى أن تكونوا مباشرة في هذا الموضوع ولكن أتمنى أن تكونوا ربطنا قليلاً بين النظر والمعنى أو ما تستخدمونه في المشروع
Next Moving next
الـ Performance Criteria ستقوم بعمل طريقة Scheduler طريقة Scheduler معينة تريد أن تقيس كيفية أو أسوأ هناك نوعين من القياس User-Oriented و System-Oriented هناك مجال يهم وجهة نظر الـ User كم من الـ User مستريح للـ Scheduler
فده معتمد على حاجات بتخدم وجهة نظر المستخدم نفسه الـ user بنسميها user-related زي ايه؟ زي مثلا مشر اسمه response-time ايه response-time ده؟ انت مثلا البرنامج وصل هنا وخلص هنا
أثناء ما هو شغال طلب البرنامج ده طلب request مثلا دست على حرف عملت file open right click واخترت حاجة كل دي اسمها actions انت عملت request actions
المسافة ما بين الريكوست وما بين على ما يجيلك الريسبونس ده اسمه ريسبونس تايم اسمه ريسبونس تايم ده تايم يهم اليوزر ان يكون التايم بماله بزاوية
لا يوجد مكان لتقديم فايل أوبن في 10 ثواني بعد أن تظهر لي ديالوج أوبن هذا السيء من أين تنظر هذا؟ الـ user المجهر الثاني يتهم الـ system system oriented
تهم المستخدمين بمستخدمات المستخدمين بغض النظر من وجهة نظرك كمستخدم هذا يقيس مستخدم مستغل كيف مثل مستخدم ما هو مستخدم؟ مستخدم تعريفه أنت تخلص كم من المستخدمين؟
في كم برنامج تعرف تخلصه؟ مثلاً كل دقيقة، كل خمس دقيقة، ده من خميس روبوت. ده يهم مين؟ من خمس دقيقة، من خمس دقيقة، من خمس دقيقة.
ده يهم البروسسور بزبط ده يهم البروسسور طيب الفكرة ان دول ساعات بيتعرضوا
المجرز هذه لا تعرف أن تحققها كلها أحياناً تتعارض مع بعض مثل ما؟ مثل ما يوجد قدامنا الآن التحرك والتعاون إذا أردت أن تخلص برامج كثيرة في مجموعة الوقت
أحسن لك تشغل برامج عايزة I.O. ولا مش عايزة I.O.؟ مش عايزة I.O.؟ أغلبية البرامج اللي محتاجة response time دي برامج محتاجة ايه؟ I.O. محتاجة تدخل من ال user بيكليك بيطلب حاجة بيفتح حاجة
فده عكس ده لو انت حتدي عدوية لل response time يبقى هتفضل برامج الاي او هيعكس على throw bot لو حتدي عدوية لل throw bot يبقى عايزة برامج اللي مفيشها اي او يبقى مش هتفضل لل response time فاهمين؟ فهنا ال decisions اصلاً بتتعارض مع بعض طيب يبقى انت المفروض اللي ويستبقى يختار ايه؟ على اساس هو بيخدم مين؟
فإنك قوص على سيرفر يهمه مين؟ لا، اللي على سيرفر ما يخدمكش انت بس، هو ما بيبصش ان خدمك انت بس سيرفر زي جوجل ده بيخدم ملايين البشر
لن يستمر في تحقيق وقت الهدف من كل واحد منكم بل يهمه بشكل كبير أريد أن أنجز أحصل على الكثير من المطالبات أريد أن أخلص أكبر قدرة ممكن منها
ها هو الـ servers عادةً أنت ترسل requests تعمل على servers و ترجع لك ردود فهي عايزة تنجز كتير throwback الـ PCs أو الـ mobiles ها user أكيد أساسي الموبايل دا لازم لازم
تقسيم الهدف يجب أن يكون تقسيماً لا يمكن تقسيم الهدف لو أن تأخر الهدف ستقول أنه نهجة المستخدم ستغمي هذا المستخدم صح؟ حسناً تقسيمات آخرى للمجرس هل يوجد منها التي يمكن أن يتأسيها؟ تسمىها performance related
وفيه non-performance related أو quantitative وquantitative ينفع أيسو ما ينفعش أيسو زي ايه طبعا اللي ينفع أيسو ده سهل سهل ان انا اعرف أيسو العكس صعب اللي ما ينفعش يجأس برقم ده بيبقى صعب تحكم عليه زي ايه ينفع تقيسو
الروبوت الروبوت الروبوت، لسه عايدينه، الـ response طيب، صح؟ كل دي ينفع إسها حاجة ما ينفعش إسها، حاجة نسميها measure ما نسميه predictability ده جاي من prediction، إيه predictability؟ predictability معناها اللي نقوله SB، دايما عند توقع
بمعنى أنت متعود كلما تفتح لعبة معينة اللعبة دي بتفتح في 10 ثواني بتلوت في 10 ثواني الـ بالتكابليتي معناها إيه؟ أن كلما تفتح اللعبة دي
تأخذ العشرة صغيرة بغض النظر السيستم عليه ايه هيفي لوديد ولا لا انا دايما بميت الـpredictability بتاعتي الـprediction care مثلا انت متعود تكمبريس holder كلما تيجي تكمبريس متعود انه بياخد من دقيقة لدقيقتين
هو ده الـ Predictability بتاعك بغض النظر بقى الـ System Loaded؟ Heavy Loaded؟ ولا لا ده ينفع تقيسه برقم؟ لا معرفش ايشو ده رجع لانطباعك يعني ده دمت واس تحكم عليه انت كـ User تحكم ازاي؟ عارفين الـ 5 Stars اللي هي التقييم دي؟
هذا هو المفهوم لأن تقييمي غير تقييمك أنا ممكن هو مثلاً المتعود يأخذ دقيقة لو شغلته في دقيقة 10 ثواني بالنسبة لنا أكسبتت بالنسبة لك أنت لا هذا هو بطيء وحش فأراءنا تختلف مفهوم الفكرة؟ فهذه المسؤوليات نسميها Non-Performance Reaction
فبيطلع لنا من الأربعة دول أربع مربعات user و system يتأس أو لا user يتأس زي response وزي برضو major تاني اسمه turn around time turn around دلوقتي ما بين الـ arrival ما بين ما البرنامج وصل وما بين ما البرنامج خلص
هذا يسمى ترد توقف وقت يستطيع المستخدم أن يتأسى صحيح؟ من تستخدم البردكترابيلي؟ أنت، لكن كيف تتأسى؟ لا أعرف كيف تتأسى لكن أنت الذي تقول لي رأيك
هذا هو الـ System with S ثروبوت الـ Utilization وهو أن أستخدم الـ Processor أدق في الـ Unit of Time نستغله مثلاً بنسبة 80% 90% هذا يفعيسها System ومعرف شئيسه الـ Fairness
يعني ايه فرنس؟ عدالة، ايوة تتقاسي ازاي العدالة دي؟ نسبية الـ Priorities، انت بتقول عايزة Enforce Priorities يعني البرنامج لما غير الـ Priorities بتاعته وخليها عالية متوقع ان هو يشتغل أسرع
بس ايسولك ازاي ده؟ اه انا حديله ميموري اكتر حديله علوية على البروسيسور بس في الاخر يتأسى ازاي؟ ما عرفش ايسول؟ دي تجميع الديفنيشن دي فورمال ديفنيشن اذا حاملين ترجعوها في اي وقت لا نختم الجزاية دي بانواع البروسيسور
لدينا تفتيح لكم أننا قمنا بعمل المستخدمين في حياتهم لتقوم بعمل شيء بالأثنين هل تفكرون؟ نعم إما التقديم على الـ CMEU وبناء على هذا أستطيع تقسيم المستخدمين إلى 2 مقابلات
processor bound و ICO bound processor bound يعني أغلبية وقتها عايزة على ال processor معظم الوقت اللي عايزها تبقى على ال processor تحتاج لأي قوة فترات صغيرة قوي بس أغلبية شغلها عايزة مين؟
عايزة البروسيسور IOPounder عكس أغلبية وقتها عايزة IOPounder وعلى فترات صغيرة بتحتاج البروسيسور المثالين دول لو أنا بكوبي فولدر كبير
من من السيلة دي. ونفس الفولدر ده لو عملت له رايت كليك كومبريس في الحالتين بيطلع لي بروغرس بار. ده ايه وده ايه? لو بكوبي من فولدر لفوربك. البروجرس بار ده الخمس ولا عشر دقايق دول سببهم ايه?
هل دا او لا؟ تتكوين فولدر من حتة لحتة أغلبية الوقت ضايع بسبب مين؟ سيبيو؟ ايه العملية اللي تتنفذ؟
فيه processing بيتم؟ كل التعملية read then write in between فيه processing بيتم؟ يبقى الprogress bar مش سببه calculations الprogress bar مش سببه ان انت بتقرأ من disk وبتكتب على disk والdisk بطيئ
يعني بمعنى آخر لو أنت عايز تسرع ده تغير إيه؟ تغير إيه؟ أنا دلوقتي عايز أسرع العملية بتاعة نقل الملفات من حتة لحتة إيه اللي يتغير في الجهاز؟
الديسك نفسه دي لا مشكلة بروسيسور ولا كشاك ولا حتى ممكن تبقى رام مشكلتها الأساسية الديسك لأنها I.O. bound نفس الفولدر ده ما عملته right click و compress
طلعت نفس البروجرس بار ب10 دقايق ايه سبب العشر دقايق؟ CPU ليه؟ لان الكمبريشن ده Calculations الكمبريشن Calculations فالوقت معظمه ضايع بسبب ايه؟ الCPU بار
نيجي نيجي نحن طبعاً هنكمل زي ما تفعلنا بالـ Short Term اللي هو Dispatchery
ترجمة نانسي قنقر
عندما تقوم بعمل ضغط الكمبريشن، يتحرك الكمبريشن إلى بروجرس بار ويأخذ وقتاً ما يعتبر هذا الموضوع؟ تصريح البروجرس أو تصريح الـ I.O؟ لأن أغلبية الوقت ضائعة في التصريح لا شراب، لكن هذا يعني أنه إذا أردت أن تسرع
تغير الـ processor تغير الـ cache عايز حاجة تصل على الـ execution الطرق بتاعة الـ scheduler بتاعة الـ shorter بتتقسم 2 categories non-preemptive و preemptive يعني ايه preemption يعني ايه بعملك preemptive
الـ preemptive يعني انت ربط فـ non-preemptive methods معناها methods مجرد ما البرنامج بيشتغل بيشتغل لحد ما هو اللي قرر انه يخلص سواء يترمينت
أو يتحجز على أي قوة في الأخير القرار من عنده هو من عند البرنامج الـ OS ما عندهوش option أنه يخرجوا بالعافية ده non-preemptive method مجرد ما البرنامج بيخش يشتغل بيشتغل لحد ما هو اللي يخلص
الـ preemptive عكسه الـ OS يقدر ينترابت البرنامج ده و يخرجه قبل ما هو يخلص لو انا عايز interactive انغيره من الـ اشتغل بعيني واحدة من الـ
بريمتر لأن أنت متخيل لو أنت بتشغل برنامج لحد ما هو اللي يخلص لما أنت شغلت برنامج كبير شوية و جيت شغلت وراءه برنامج صغير برنامج صغير مش هيشتغل لحد ما الكبير يخلص
أول طريقة عندنا طريقة بسموها simple priority أنت بيبقى عندك multiple ready cues كل cue ليه priority
كل كيو لديه priority فالprocess على حسب الpriority بتاعتها بتخش في الكيو المناظر ليه الprocess ما بيجي يسحب يسحب من مين؟ من الاعلى طب ما فيه حد في الاعلى priority
يخد منه؟ ملاش يبص على وراءه ملاش يبص على وراءه وهكذا يبقى بيسكاين من الهوليري فيوريوريتي الى الووريوريتي وممكن عم يشغل برنامج ممكن يبقى بيشغلوه لحد بري انتر او لا يعني يشغلوه لحد اما هو يخلص اما ممكن يخرجوه في الموضوع
تنفع دي وتنفع دي بس في الاخر الفكرة الاساسية ان هو عامل ايه؟ الـCues كل واحد ليه Priority فكل برنامج بيتحط على حسب الـPriority اتا ايه المشكلة الرئيسية هنا؟ ممتاز اللي تحت خالص ممكن ما يوصلش ان انا شغل
نسمي هذه المشكلة مجاعاً يمكن أن يحدث لها مجاع مجاع يعني أنه يستمر في إنتاج المال نهائياً طولما كان هناك حاجات تحتوي على حقوق أعلى يمكن أن يستمر في إنتاج المال نهائياً
حل المشكلة
ممتاز أن الحاجة أضع قدرة على الوقت أنا أويس وعارف كل واحد ما قالوا عندي مستنى لو حد استنى كتير أكتر من أروح نعلي البريريتي بتاعته أعليه لبن أنا اللي أعليه كأويس فاهمين الفكرة؟
يعني هو هنا مثلاً اللي هنا ده قاعد مثلاً بقال له عشرة دقايق ما اشتغلش اروح معلي البلوتيتا فمعليه لبن وارد ان يجي عليه الدور ويشتغل قاعد مرضو سترة وما اشتغلش اروح معليه لبن بسميها promotion يعني بديله
تقرير برئي في مقاومتك نعم طبعاً الذي يتحكم في هذا هو هذا هو مقاومة من؟ ممتاز، هذا هو المقاومة الثانية أنه هو
أعسر الوقت على مئة؟ أعسر الوقت على مئة؟ أعسر الوقت على مئة؟ ده الوشن الثاني أن أعمل حاجة ما اسميها time slicing مثلا priority رقم واحد على priority تاخد 70% من الوقت البروسيسر
برؤية 2 تأخذ 20 برؤية 3 تأخذ 10 فانا كده ضامن ان كله بياخد بس بنسب متفاوت بس كله بيشتغل دي كانت اول طريقة الطرق اللي جاية كلها
سنأخذها من خلال مثال مثال مستمرة أعطينا خمسة عدد أعطينا وقت المستمرة أي متى دخلوا الـ Ready Queue هذا يسمى وقت المستمرة
متى دخلوا الـ Ready Queue ومدينة الـ Service Time اللي هم أما هيشتغلوا على الـ Processor هياخد وقت قد ايه؟ ده بعرفه؟ ببعرفه مسبقا؟ الـ Service Time هل أنت بتبقى عارف الـ Programic هياخد وقت قد ايه قبل ما يشتغل؟
صعب بس هو هنا عشان ده نفيد ونوضح به الطرق المختلفة فمدينا المعلومة لكن هي في الحقيقي صعب ان انت تقسمت ده محتاج استميشن او ان اليوزر هو اللي يحدد من الاول ولكن البرنامج ده ياخد مضغط او ياخد كذا
وانا متująخ للاستخدام امراضثك وعчеbur ابوه بنظم اعين من الارض هناك مفاجأة
لا لا أي كان بريمتف او لا ده في الاخر process A اما هتخش على الprocessor عايزة تاخد مدة 3 unit of time على حسب بقى لو انت non-breamtive هتديها 3 كلها لو انت breamtive ممكن توقفها في نص 3 دي
فيختلف يعني بس في الاخر هنطبق الأمثلة كلها على الطرق كلها على المثال ده يطبق ده بصفة محتاج prediction محتاج ان انت تpredict ده ففي طرق للprediction بس الطرق دي مكلفة في الاخر
ضريبتها عالية عالية يا إما ك storage يا إما ك calculations فهتدفع ضريبة مقابل أنت تعمل حاجة زي جديد زي ما نشوف إن شاء الله في الطرق طيب وبيقول لي كمان في المثال ده أن ال time now 0 time now 0 يعني إيه؟ يعني الوقت اللي ال processor متاح عنده
هو متاح من أول time0 فده معناه إيه؟ إن لو وصل لي عند time0 ده أعرف الشجرة غلطول ليه؟ لأن البروسيسور متاح مش مضطر يستنى لكن لو قال لي أن time ناو مثلاً 5
يبقى اللي وصل عنده صفر و اثنين و اربعة هيستنوا في حتى ما البرسيسور يبقى متاعة ماشي و بيسر بقى على شوية حسابات كده الحسابات دي دي معادلاتها كتبناها هنا عشان لو حبيت ترجع لها في اي وقت بس خلينا نطبقها مباشرة مع بعض على المثل
أول و أسهل طريقة عندنا First come, first serve FIFA First in, first out Q اللي جاي الأول يتخدم الأول الطريقة دي non-preemptive
أعني لو دخل يشتغل لحد ما يخلص ما ينفعش أو أقفه في النص خلينا نترس المثال ده assume إيه إحنا شغالين first fit sorry first come first serve
ها. ادي البروسيسور وادي الطايمينج بادي من صف. ليه من صف? عشان طايم ناو صف. طيب. ادي ريدي كيو. عندي طايم صف. عندي تي زيرو. الايه وصلت وعايزة كام?
ثلاثة. البروسيسور متاح؟ أيهو متاح؟ في حد ع البروسيسور؟ لا. في حد مستني في الكيو؟ لا. غو ما فيش غيره. خلاص. يبقى هي اللي هتخش تشتغل. تشتغل ع دي بقى؟ ليه؟
non-preemptive لأنها non-preemptive ستعمل من صف لثلاثة وكذا A خلصت عند ثلاثة أثناء أنها شغالة عند time 2 الـP وصلت صحيح؟ عند time 2
البي وصلت عايزة كام؟ عايزة 6 هتشتغل عند 2؟ لان ده ناندريا بتستاني وصلنا 2-3 في حد في الكيو غير البي؟ خلاص يبقى البي هي لا تشتغل في ديسيشنز هنا اضطريت تاخدها؟
نحن لا نتعرف على الطريقة التي نستخدمها في العمل إذاً سيعمل بي ماذا يفعل بي؟ ستة من تلاتة الكام من تلاتة الكام لتسعة تخلص هنا عند طايم تسعة أثناء هذه الفترة
عند طايم 4 ال C وصلت وعايزة 4 وعند طايم 6 ال D وصلت وعايزة 5 وعند طايم 8 ال E وصلت وعايزة 2
كلهم وصلوا و تركنا في الـCUE لأنه كانت الـB يالشة دلوقتي نحن عند 29 من يشتغل؟ ليه؟ بإذن الله عشان الـDECISION هنا FIRST COMP FIRST SALE فالـC هتشتغل
من 9 إلى 13 وتخلص عند 13 بعد كده التيعة تشتغل من 13 إلى 18 وتخلص بعد كده التيعة تشتغل من 18 إلى 20 وتخلص
جميل؟ نعود لحسابات الترن ايراوند الترن ايراوند هو ناقص القريبة انت خلصت امتى؟ يعني عادي تخصصت مقداري جيت امتى؟ وخلصت شغلك امتى؟
فالـ A خلصت عند كم؟ 3 وكانت وصلة عند كم؟ 0 يبقى ترنايرون بتاعها 3 الـ B خلصت عند 9 وكانت وصلة عند 2 يبقى قعدت في الـ System 7 وأكس 13 ناقص 3
ناقص 4 9 18 ناقص 6 12 20 ناقص 8 12 ده اسمه تيرن ايراوند كلما تيرن ايراوند ده بيزيد يبقى كويسة ولا ايش
ده مجر يهم مين؟ يوزر ولا سيستم؟ يوزر يهمك انت يهمك انت برنامجك قعد في السيستم قديه كلما يكون الوقت صغير كلما انت تبقى راضي اليوزر ال 12 دين
والـ 12 دي زي بعض لا مين الأسوأ بتاعة الـ E أسوأ ليه انت شاهد برضو
برافو الـ 12 في الـ E أسوأ لأن الـ E قعدت 12 من أصل كام؟ هي في اللي تعايزها وقتها دي 2 أنت قعدتها 12
يعني كم دقائق؟ 6 بينما D قاعدة 12 برضو بس من أصل كم؟ من أصل 5 ده بنسميه normalized turnaround بقسم ال turnaround time
على الـService Time فهيبقى دي 12 من كام؟ من أصل خمسة فيها 2 و 4 من 10 يعني عدت مرتين ونص تقريبا قد وقت دي 12 من أصل 2 يعني عدت كام؟
فهذا أسوأ من هذا فالـ normalized turnaround أقدر أحكم به أحسن من الـ turnaround لأنه ينسب الوقت بالنسبة للوقت التي تقديمه الـ wait time الـ wait الذي أقعدت أقديمه لم أعمل الـ wait أقدر أحكمه من الـ turnaround خلي بالك الـ turnaround time هو عبارة عن أي شيء؟
الوقت الذي قمت بالجمع فيه في البيانات يشمل الى اثنين السيرفس والمستقبل لكي تستطيع الوثيقة من البيانات يجب أن تجد الوثيقة يساوي أنت قمت بالجمع في البيانات ثلاثة وكنت تريد أن تكمل ثلاثة
إذاً لم تستنى، وقد حدث ذلك فعلاً، هل لم تستنى؟ لقد عملت بسرعة، وما بعد بي؟ سبعة ناقص ستة، كانت تحتاج إلى ستة، فقعدت في السبعة ستة، وماذا؟ نعود إلى إي، وقد قامت بإيقافها، وقعدت في السبعة 12،
عادت 12 من أصل كم؟ 2 فاستنت كم؟ 10 إذن إيه فعلاً استنت 10؟ أو ده اللي رفع عدد المستمرات؟ رفع نيجي بعد كده الميجر يهم السيستم نسميه
معدل استهلاك البروسيسور ده عبارة عن الـ Total Execution Time الـ Actual Execution Time على الـ Total Time
يعني انت هنا البروسيسور كان متاح عند وخلص كله عند كم ده اسمه خلال ده البروسيسور اشتغل قد اشريه. تضرب ده في مية يبقى يديك استهلاك مية في المية. يبقى انت البروسيسور مستهلك مية في المية. مستقل لمية في المية.
افترض مثال لو عدلنا على المثال ده process f arrived عند time 22 والservice time بتاعها كان 2 فال-f دي وصلت عند 22 يبقى تشتغل
من 22 الى 24 يبقى ال CPU Utilization 22 على 24 يطلع رقم في المئة فمن الشرط يطلع 100%
ترجمة نانسي قنقر
average مجموعة العدد تلاحظ هنا أن ال average عالي 2.5 والذي رفع ال average هو ربط ال 6 وهو normalized turnaround عن E وهو طالب 6
لماذا هذا يظهر بستة؟ لماذا يظهر كبيراً؟ ماذا يسبب هذا؟ ما هو سبب رقم هذا العالي؟ لأن هذا لا يستخدم، هذا سبب سبب الثاني
ان هو صغير ماشي ده سبب صح بس هو منطبق ده حتين الحياة ماشي يعني ده سبب صغير وجيه في الآخر جيه متأخر
فالطار عشان هي نام بريمتن وهو صغير الطار يستنيه كله خلاص؟ نور؟ نور اثنين فده سبب الطريقة نفسها ان هي
لا يوجد أي تدريب مستقيم أو مستقيم مباشر هل تعرفون مثل هذا؟ مثلاً، إذا كنت تقوم بمدرسة للنطاق المدرسي متوقعة أن تأخذ يومين فأنت تعملها الأول
بعدها فتحت الـ Calculator Calculator في هذه الطريقة ستظهر لك بعد كم؟ بعد يومين ستفتح بعد يومين لماذا؟ لأنه First stop for sale و non-return non-return لن أوقف
البرنامج اللي عياخد يومين ده حيشتغل لحد ما يخلص طبعا مشكلة مشكلة في الطريقة طب ايه ميزة الطريقة دي؟ مفيش استارفيشر ممتاز لان هو fair first come first serve
أول مرة تأتي و أول مرة تأتي المشكلة الثانية الميزة الثانية هو أسهل طريقة فيهم هذا قرار عادي لا يوجد أي تغيير في طريقة الاختيار المشكلة الأولى
يخرج لعبة كيو عاد مافيش استرابيج عيدو اللي قلناه بقى من شوية المشكلة لانه عاشناه من شوية ان ال response time سيء بالذات للبرامج الصغيرة خاصة لو المرامج الصغيرة دي جات فين
مثل ما حدث مع البرنامج الرقم E المشكلة الثانية أنه يفضل الطريقة هذه تدعي تفضيل للـ CPU bound عن الـ IO bound وذلك ينعكس أنه يؤدي إلى inefficient use للدفايس
تخيل أنك لديك مجموعتين من البرامج set of cpu bound التي هي أغلبية وقتها على البروسيسور تحتاج ال I.O. وقته قليل ومجموعة أخرى
من ال I O bound تحتاج ال processor وقت صغير واغلبية وقتها ال I O processor وقت صغير واغلبية ال وقت على ال I O ايه اللي يحصل لو انت عندك مجموعة من ده ومجموعة من ده وانت مشغل الطريقة دي هيحصل ال ايه؟
هذا هو الـ ReadyQ في الأول كانت المجموعات الداخلية الـ CPU Bound و الـ I.O Bound الاثنين داخلين على حسب ترتيبهم سيخصوا على البروسيسور البروسيسور سريع ينجز بسرعة هناك منهم ستذهب إلى I.O
صح؟ سواءً device أو 2 أيًا كان مش كده؟ وفي منهم اللي بيخلص أيوي ويرجع بعد فترة من الوقت مين اللي هتلاقيه متكدس هنا؟ متراكم هنا؟ الـ CPU ببعض؟ ولا أي وبعض؟
Most mostly CPU bound. Why? . . . . . . . . . . . . . . . . . . . . .
لأنه هو محتاج البروسيسور وقت كبير وحتى ما بيروح I.O ما بيعطلش هناك بيروح حتى صغير ويرجع تاني على الـ C.P.O صح؟ مش كده؟ بيرجع تاني على الـ C.P.O فهو قاعد على البروسيسور
حتى ما بيخرج I-O ما بيعودش كتير ويرجع كان على البروسيسور وما بيرجع على البروسيسور عايز وقت كبير العكس بقى اللي محتاج الـ I-O باوت هتلاقيهم متكدسين فين؟ طبيعي لأنهم محتاجين I-O وقت كبير والـ I-O بطيء فمتكدسين هنا هو
هذا هو المستقبل بعد فترة لماذا يكون متكدس تحت؟ لأن الـ I.O. بطيء بطيء، فهو بطبيعة سيتكدس تحت عندما يخرج فوق يأخذ البروسيسورات الصغيرة ويرجع ثاني
هو ده اللي بنقشه هنا إن الطريقة دي عشان هي first come first serve فدلوقتي ال I.O. bound ده لما يرجع يحتاج البروسيسور يعني هنا واحدة I.O. bound ورجع محتاجة البروسيسور مثلا
تقريباً 5 ميلي ساكت وقت الصيغ عايزة البروسيسور فيه هتضطر تستنى ايه؟ هتضطر تستنى كل الـ CPU برد
كل دول زائد ده فلو مثلا دول هياخدوا ساعات هتضطر تستنيهم المشكلة بقى فيه ان دي كانت يعني هي أصلا
هي عايزة الـ processor روعة صغيرة عشان ترجع تضيع وقتها الـ باقي في الـ device انت عتلطها هنا وبالتالي الـ device قاعد فاضي مش مستغل فانت عملت unbalance في resources دلوقتي مفهومة الفكرة؟
هذه كانت مشكلة الطريقة الدينية و هذه سألتها لكم في كل مزايا و عيوب كل طريقة الطريقة الثانية سريعاً هي أسهل من هذه طالماً خلاص يعني خدنا كل اللي محتاجين نعرفه في الطريقة دي
الطريقة الثانية عكس المشكلة الأولى كان الصغير جاء في الآخر فاضطرر يستمر دي اسمها shortest process mixed يعني الصغير يشتمل من ما تكون الصغير هو اللي يشتمل
هو اللي بيقع لويا ويشترك. تعالوا نطبقها على المفاهم بتاعنا ده. طبعا في الاول عند طيب صف. الايه وصلت? عايزة تلاتة. في غيرها? فهنا ما فيش اصل. هنا الايه تشترك. الطريقة دي برضو ما تنسوش. الطريقة دي برضو طريقة يعني
سيعمل حتى تخلص عند 2 اثنين ال B وصلت اذا اردت 6 ستعمل من 3 الى 9 و هنا ال B خلصت بعد ذلك هنا اثناء هذه الفترة C
والد والإ وصف بزاط السي عايزة 4 والد عايزة 5 والإ عايزة 2 هتفضل مين المرة دي؟ 2 بزاط دي اللي هاهو لوية الاختيار shortest process next يبقى الإعتشتغل من 9 الى 11 وتخلص بعد كده
ستعمل من 11 الى 15 وتخلص بعد كده D هتعمل من 15 الى 20 وتخلص وطبعا الحسابات D نعرف نحسبها بس هحسب واحدة منهم بس اللي هي تهمنا اللي هي E خلصت عند 11 كانت وصلة عند
8 تترنى راوند وبالتالي نورمالايز ترنى راوند بتاعها 11-8 اللي هي 3 3 على 2 يعني 1.5 بدل 6
فضل وكذا عملناها بـ عملناها بـ عن الأول اه؟ وكذا عملناها بـ وكذا عملناها بـ الـ ايه؟ بـ اه، بالضبط، ده ممتاز، ده بيعلي زي ما نشوف حالاً في مميزاته بيعلي
المترجم للقناة
بقى 1.8 لسبب ان دي عالية مضاقة لان هو بيفضل مين الصغير فمزده عكس التاني ان هو response time كويس للshort processes robot ممتاز عالي والresponse time كويس بالنسبة للمين للshort processes
هذا هو المشكلة؟ المشكلة ممتازة، لكن الـ Starvation Starvation لـ Long Process؟ قد يحدث لها Starvation، لماذا؟ أنا أفضل Short و Non-Prehemptive
فالـ LONG PROCESS ممكن تستنى لمالا نهاية فعلياً لو انت جايلك شورتا بروسيسيز كتير الـ LONG PROCESS حتستنى يعني الـ PROCESS يومين دي ممكن تشتغلش طول ما انت مش هتجعل على الـ System هي عايزة يومين مش تشتغل
فهي ممتازة هل هناك محاولة للتجميع؟ نعم حسناً المشكلة الثانية ذكرناها في بداية ونشرح لكم أمثال لأن الوقت ممتاز المشكلة الثانية أنه يحتاج إلى تجميع من الوقت المناسب هذا هو المفيد في هذه المدارس هل تعرف أن كل محاولة تأخذها مسبقاً؟
مدى انت مش عايز فلو عايز تشغل الطريقة دي لازم تقسمت الـService Time عشان تقسمت الـTime ده ايه؟ Overhead طريقة عادة ما بيحصل ازاي؟ انه بيكيب تراك الـHistory بتاع البرنامج قبل كده يعني قبل كده الحاجة دي اشتغلت قديم كل ما بجيتي انت شغلتها كنت تاخد وقت قديم
ويبقى مباشرة في تحقيق هذه الهيستورية وعلى أساسه يستمتع بالقادة وهو ما نسميه مدرسة الهيستورية لتعلم من الماضي لكن في النهاية ضريبة أنني أحتاج لتحقيق الهيستورية وكل مرة أحتاج لإستمتاع القادة في النهاية، التفكيرات سيئة
هل أنا هقدر كل مرة أتوقعك؟ على حسب والله لو أنت شغلت البروسيس الكبير دي وكانت لوحدها هتاخد وقت أنت متوقعه؟ بس لو شغلتها وكان قبلها برامج أصغر منها
هي هتترحل مش هتشتغل فالوقت اللي انت متوقع ان هي هتحضره مش كل مرة نفس الوقت صح؟ منطقية لان هو على حسب ظروف السيستم في اي صراع اشتراك
طبعا هي برضو inefficient use of the firewall بسبب اللي فات نفس المشكلة اللي فاتت بس فرقا عن اللي فاتت هي لو هي من المايكو رجعت اخد البروسيسور
وعايز الـ processor let's say 5 milliseconds هي تاخد advantage عن كل دول بس لازم تستنى mean must wait
مين؟ ده فلو ده بياخد 5 hours هتضطر تستنى فستين برضو نفس المشكلة طب هي ليه متطرية تستنى؟ عشان نان بريت
حاجات ايه؟ اه جميل طبعا احسن من اللي قابله لانه هو اصلا لما رجع
مضطراش يستنى كل اللي هنا هو عادة عشان هو IOU bound فهو بيحتاج البروسيسور وقت صغير فما بداية هياخد advantage على كل CPU bounds اللي هنا اه بس still برضو مضطر استنى اللي هنا فلو نصيبي ان اللي كان اللي هنا
وقته كبير هتطلع على عليه موقفتوش بس هو طبعا أفضل بدليل الأرقام حتى يعني الأرقام نتائج أفضل فهو أفضل أكيد من اللي فات بس استيل برضو inefficient use للنقو أحيانا عشان أنت بتضطر تستنى اللي على البروسيس
المترجم للقناة
طيب ده بريك. بريك اللي عايز يحل كويس. حسازينكم برضو دي مثل الفة بين حلال اول ورقة وقلم وبعدين. طيب.
هنا بيقول لي time now 0 time now 10 ل arrival time اخر وحدة وصلت عند 10 يعني معنا كده من كلهم كلهم وصلوا كلهم وصلوا مستميين شكل ال ready queue كالقادر لو ده ال ready queue
فعند طيب واحد بي اتنين وصلت. عند طيب اتنين بي واحد وصلت. وهكزا عند طيب ثلاثة بي اربعة وصلت. وعند طيب
4 P3 هي اللي وصلت finally عند time 10 P5 هي اللي وصلت فده ترتبهم وإحنا شغالين first come first serve يبقى يحبش بالترتيب وبناء عليه بعد ما تحل هتعرف تصلى بقى turn around
والوين تايم نفس الحسب يعني ما فيهاش جديد. بس التركيه هنا كانت فين? فان تايم ناو عشرة يعني. خلاص? يبقى كده الترتيب الصح اتنين واحد اربعة تلاتة خمسة. اتنين واحد اربعة تلاتة خمسة. نيجي للطريقة اللي بعد كده. احنا الطريقتين اللي فاتوا
كانوا non-preemptive non-preemptive طريقتين اللي جايين preemptive preemptive طريقة اسمها shortest remaining time طريقة اسمها shortest remaining time من اسمها
short-stream meaning يعني بختار اللي فضله وقت أقل وقت متبقي أقل طيب هي preemptive preemptive على أي أساس؟ على أساس الـ arrive
كلما تأتي بروسيس جديد تصل الى الـ System تدخل الى Ready Queue توقف الـ Execution وترى من الموجودين من الذين فضلوا وقف على اسمه Shortest Remaining Time
فتعالوا نطبقها هنا عند طين صف إيه وصل؟ عايزة ثلاثة تشتغل من صف لكام؟ ده بريامتر
من صف لتنين عشان عند طايم اتنين البي ارائفت فعند طايم اتنين دا وقف دا وقف execution عند طايم اتنين الاي كان فضلها كم؟ واحد ومين وصل؟
عايزة كم؟ 6 من اللي فضل وقتها؟ خلاص يبقى لإيه هتكمل؟ لازم حكاينة عايزة حصل ده؟ بتوقف وتشوف من اللي فضل وقتها؟ آه يبقى لإيه هتكمل؟ من 2 ل 3 وكده بقي خلصت عن 3
عند 2 3 في مين مستني البي حد تاني وصل؟ لا يبقى البي حتشتغل من 3 ضربة عشان عند 4 ال C وصلت يبقى عند 2 4
البي فضلها كم؟ هي كانت عايزة فتنة كدت واحد فضلها خمس وعند طايل أربعة السي ده فلت عايزة كم؟ أربعة إلعب رواية دولات المين للسي فبخرج البي ودخل السي
تشتغل من 4 إلى 6 لماذا؟ لأن عند 6 الـD وصلت يكون عند 2 6 الآن لا تنسى أن الـQ حالياً الـB
كان فاضل له خمسة والسي فاضل لها اتنين وعند طايم ستة الدي وصلت وعايزة كم خمسة يبقى كده اللي في الكيو خمسة وخمسة واتنين
فمين لقى اشتغل? السي. لان السي اللي فضل الله وقتها. يبقى شغل السي. اشتغل من ستة لتمانية. كده السي هنا خدت الاتنين بتروح. يبقى السي خلصت. وكان قبل كده الايه خلصت? يبقى السي خلصت عن تمانية.
من وصل دلوقتي؟ عند طاين 8 الإي وصلت عايزة 2 من اللي في الكيو حاليا؟ الإي ب2 والدي ب5 والبي ب5
من يشتغل؟ E short stream mean 8 الى 10 كده E خلصت عن 10 next الـ A
نعم، بزيارة الـ P و D فإنها تتبع نفس الطايلة يمكننا أن نفضل الـ P على أساس أن نقوم بوصلها من قبل يمكننا أن نقوم بوصلها من قبل فنقوم بعمل الـ P
من 10 الى 15 ويبقى ال B خلصت عند 15 وبعدين تشغل من ال D صح؟ من 15 الى 15
مفهوم الفكرة؟ طبعا الأرقام برضو نقدر نحسبها نفس الطريقة كتابية لو جينا ننصنا بقى على النورمالايزد تيرنايراون دي اللي هم هنبص عليه كل شوية ده هتلاقي 3 من الخمسة النورمالايزد تيرنايراون تحهم بواحد يعني واحد
وماذا عن الوقت المستخدم؟ لا يوجد وقت مستخدم يعني أن وقت الوقت هو 0 الوقت الذي يجب أن يكون فيه هو وقت مستخدمه لا يستنى وهذا ممتوقع لأن هذه الطريقة تحتوي على دمجين كثيرين تفضل الصغير
وكمان بريمتن يعني بتوقف اللي شغال مش بتستنى عشان كده هتلاقي ان الـ Average Normalization انا انا بتحق 1.6 من 10 قريبا احسن اقل من كل الطرق اللي فت يعني كل واحدة تقريبا استنت مرة ومص وقتها
نفس المشاكل هذه أخت مين؟ هذه أخت قبلها نفس المعايزات ونفس العيوب الميزة هنا استروبط عالي
راسبونس طايل حلو للـ Short Processes بس فيه ميزة زادت هنا كانت عيد وتنهارت ميزة دلوقتي ما بقوش عادة
بدل ما التانية كانت inefficient use للـ I.O. دي بقت efficient use لـ I.O. ليه؟ لو رجعنا لنفس السيناريو بتاعنا اللي بنقوله كل مرة ده most CPU bound وهنا mostly I.O.
ومن هنا يأتي I.O. ويراجع يأخذ البروسيسور I.O. bound كان يحتاج تقريباً 5 ميلي سيأخذ أدفنتش على مين؟ سيأخذ أدفنتش على كل هؤلاء؟
لان هو اقل منهم. وحياخد اضطرابتش كمان على ده. حتى عشان ده. كده كده حوقفه. فحوقفه. فحيقدر ده يشتغل على طول ويرجع هيكمل. كده الايوه معطلش.
يعني الـ I.O. ما عادش I.O. فترة كبيرة مفهومة؟ طبيعة اللي بيرجع من الـ I.O. عايز الـ processor وقت صغير بما انه عايزه وقت صغير وهي دي بتفضل أصلا للناس الصغيرة يبقى ياخد advantage على كلهم يخلص اللي هو عايزه يرجع تاني يستغل الـ I.O. يبقى الـ I.O. شغال efficient
على طولة لما تديروا supply مفيش انه قاعد idle عيبوا معا للسيرفيشن وعيبوا التاني نفس الايوة لازم اكسبكت السيرفيس تايل هو اصلا معتمد على السيرفيس تايل زي اللي قبله فاكوست عالي والpredictability طبعا برضو
سيارة متوقع عمري ماعرف اميتي بتاعتك لان انت على حسب ظروف السيستم اللي موجود ندي ادفنتش بس صغير فلو انت التاسك بتاعتك كبيرة شوية مش كل ما هتشغلها هتاخد نفس الوقت
فضلا سيدنا عبدالله هل هناك عيب على الكاش؟ عيب على الكاش مش قوي يعني لأن انت الـ preemption بيحصل فين؟ كل ما process بتوصل مش كل شوية
كلما تصل بروسيس جديدة فأنت كل شوية تصل بروسيس جديدة بس طبيعي طبعاً أنت ما بتغير بالذات الكاش بتاعة.. يعني مش كل الكاش خلي بالك الكاش بتاعة الكونتنت تستحملني وتستحملك وتستحمل كذا برنامج
لكن المشكلة في الكاش من أدرسيز هي تلبي هي دي اللي بيحصلها فلاشينج فعلاً بتتمسك لكن كاش الكونتنت مش هتتأثر قوي لأنها هي كبيرة شوية وتستحملنا كلنا أو تساهمل برامج كتير تشيكو الدت على برامج كتير
لكن ما الذي سيؤثر على الكشف هو الطريقة التالية التي سنفترضها فيما بعد لقد خذنا 3 طرق طريقة سيئة وهي first come first serve لكنها سهلة طريقتين كانوا أفضل قليلاً لكن مشكلتهم الأساسية
لابد أن تقوم بإستعمال الصفحة المستقبلية هذا يجعلك لا تكون مستقبلاً كل البرامج تستطيع إستعمال الصفحة المستقبلية حتى لو تعرفت، الموضوع مكلف فالطرق هذه إلى حد ما تكون ثيوريتيكية
فالتعليم البرامجي ليس موجوداً كثيراً الطريقة القادمة وهي تلك المرأة البرامجية الطريقة القادمة تسمى Round Robin Round Robin هي تلك المرأة البرامجية
بفكرة first-conference serve يعني هي first-conference serve و preemptive يبقى مباركاً مش محتاج الـ service time مش محتاج عرف الـ service time بس هي preemptive preemptive على أي أساس؟ على أساس الـ clock
كل طايم معين كلما تدخل بروسيس تبدلها مدة زمنية معينة تشتغلها ماكسيموم بنسميها الكوانتوم والله خلصت قبل الكوانتوم خلصت ومشيت وتمام
وصل الـ Quantum بتاعها و لسه ما خلصتش بكبرها ان هي تخرج مين اللي بيكبرها؟ الـ OS الـ OS يروح موقفها و مخرجها و مدخل واحدة بدانها اللي وراها في الـ Q اللي وراها في الترتيب ميزتها الاساسية ان هي طريقة عملية لان مش محتاجة اعرف لا الـ Service Time و لا Remaining Time مش محتاج اعرفها
لنقوم بمعرفة كونتوم بثنين يعني الذي يدخل هنا يعمل بثنين فا الـ A وصلت ستعمل من صف عند وصف هل هناك غيرها؟ لا ستعمل الـ A
من صفر الكام لتنين عند طايمة تنين كده كده كنت حوقفها لأن الكوانتوم بتاع حماله خلص فالإيه خلصت وبتلف وترجع في نفس الوقت البي عند طايمة تنين البي وصلت
وصلت، عند طيب اثنين، الـ P وصلت، ففي واحدة بتلف وترجع والتانية بتخش جديد في الـ Q، عادة اللي هيسبق الـ P، ليه بقى الـ A دي وهي بتلف وترجع
تقوم بإحساس المستخدمات هنا يحصل أنها تقوم بإحساس نسميها الـ context فتقوم بمشيء من الأشياء في المستخدمات هذا يأخذ وقتاً وقت لا يُعد لكن لو أنت تقارن أنها تحول وترجع وإنها مصباح جديد في نفس الوقت يكون الـ B هي التي ستحصل مسافة البرمجة من الوقت الذي تقوم بإحساسها من المستخدمات
انا متعرف اه ايه تسنين يبقى ال ب هي اللي هتسنى وعايزة ستة والا فضل الله كام واحد كلام دا كله عنده طيب اتنين فمين اللي هيشتغل دلوقتي ال ب تشتغل من اتنين لاربعة
عند 2 4 حصل حكتين عند 2 4 البي بتلف وترجع صدر لها 4 والسي وصل لجديد
مين اللي هيخش؟ نفس السنة. السي هتخش الأول، عايزة 4، ووراها البي. كانت بتلف وترجع وفضلها 4. الدور على مين دلوقتي؟ الـ A. الـ A، هتشتغل قد ايه؟ 1. 1.
انا بدلها اتنين كحد اقصى هي عايزة واحد بس خلاص؟ سيبقى الواحدة تخلص تخرج يبقى ايه خلصت عند خمسة فعند طايل خمسة في حد وصل جديد؟ لا مين اللي علي الضر؟
الC تشتغل من 5 إلى 7 طيب أثناء ده مين اللي وصل؟ الD عنده طيب 6 بقى الD وصلت صح؟ عايزة كم الD؟ 5
والـ C عند time 6، الـ C كانت لسه على ال processor. عند time 7، الـ C بتلف وترجع، فاضل لها كام؟ فاضل لها 2. مش الـ C كانت 4؟ خدت 2 اللي هم من 5 ل7، فبتلف وترجع فاضل لها 2.
يبقى الترتيب دلوقتي B D C، عايزة صح؟ ليه الـ D سبقت؟ لإنها وصلت بدري، وصلت عند ستة والـ D بتلف وترجع عند سبعة. طيب، ها next، مين اللي هيشتغل؟ Q، first come first serve، مين اللي عليه الدور؟
الـ B. من 7 ل9. الـ B. هتلف وترجع بس ده عند time 9 هي بتلف وترجع عايزة 2، فاضل لها 2. بس ما تنساش إن أنت عند time 8، الـ E وصلت عايزة 2.
فالـ A دخلت ووراها عند  time 9 الـ B لفت ورجعت عايزة كثير في حد حيوصل تاني في الـ System؟ لا، خلاص حتشغل الـباقيين Round Robin 2×2×2 واللي يخلص يخلص يبقى تشتغل مين اللي على الدور؟
الـ D. وتلف وترجع. عايزة 3. بعد كده، الـ C. هتخلص عند 13. بعد كده الـ E. هتخلص عند 15. بعد كده الـ B هتخلص عند...
17 بعد كده الـ D هتشتغل من 17 لـ19. كده كده الـ quantum بيعدي عليها. Time out. في غيرها؟ يبقى هتشتغل كمان 20.
ويبقى دي خلصت عند 20. مفهومة الفكرة؟ ده اسمه إيه؟ Round Robin. اتفضل. ممتاز، دي المشكلة بقى اللي هي context switch كتير وبالتالي بيـ affect الـ cache. هنا بقى يـ affect الـ cache أكتر.
لإن أنت هنا بتـ switch مش كل أما واحد جديد يوصل، ده كل time interval. فأنت الـ context، الـ cost عالي هنا، الـ context switch كتير بيأثر على الـ cache، ممتاز. أحمد، كمل dynamic.
طيب، ده نفس المقارنة بس عند quantum بواحد مش باثنين، يعني أنا حليناها من شوية بـ quantum باثنين. بصوا بقى لما كانت quantum واحد، تلاحظوا حاجة غريبة قوي، المتوسط بتاع الـ normalized turnaround.
2.7 من عشرة. أسوأ من كل الطرق اللي فاتت. اللي عارف ليه يرفع إيده ياخد bonus. ثاني معلش.
بسبب.
بالظبط، ممتاز. السبب هنا إن الـ quantum اللي أنت اخترته أقل من أقل واحدة. فأقل واحدة عندنا كانت بكام؟
ب2، فأنت مختاره ب1. يعني، يعني على الأقل احتاجت لفتين، عشان كده استنيت كتير، الـ wait كتير. وبالتالي هو مش شرط إنه يبقى كويس، هو على حسب اختيارك لإيه؟ للـ quantum.
طاهر، على حسب اختيارك للـ quantum. طب ميزته إيه الأول؟ السهولة، هو first come first serve، يعني سهل. نفس، والميزة الثانية إنه مش معتمد على الـ service time. والميزة الثالثة، ده يحصل فيه starvation؟ مستحيل.
أنت كده كده بيجي عليك الدور فما فيش starvation. الـ shorter processes، هو أنا مش كاتب بقى آه، no starvation معايا، no starvation. والـ response time كويس بالنسبة للـ short processes، بس ده based على إيه؟ لو اخترت good quantum.
لازم تختار quantum كويس، اللي هي تكون أكبر من الـ process الصغيرة بحيث تكفيها يعني. طيب، عيبه، هيفضل، نفس الـ first come first serve.
هيفضل الـ CPU bound عن، رجعنا لنفس مشكلة الـ first come first serve. دول CPU bound، بيخلصوا ال processor، عايزين ال processor وقت كبير فقاعدين مستنيين كتير.
اللي بيخرج منهم يروح I.O. الـ I.O. أما بيرجع من I.O. إلى CPU لازم هيستنى مين؟ كل دول زائد ده
لو لو سمينا دول n+1، يبقى لازم يستنى n+1. بس فرقه عن الـ first come first serve إيه بقى؟ n+1 quantum، مش n+1 service time. يعني لو الـ quantum بتاعي 100 millisecond، أنا هضطر أستنى n في 100.
في 100 milli، على حسب بقى الـ n، بس مش هضطر أستنى بالساعات، بالأيام لو في processes كبيرة لإن ده preemptive مش non-preemptive. بس المشكلة بقى إن الـ context switch ضريبة.
والـ caching هنا، هنا الـ caching كان ظريف. مش أنا قلت كان في مشكلة في الـ cache؟ اللي فات ما كانش فيه قوي، ده اللي فيه مشكلة أكتر لإن ده بيعمل إيه؟ بيـ switch كل، كل تقريبًا 100 millisecond. الـ quantum دي بتبقى تقريبًا في حدود الـ100 milli. فأنت متخيل أنت كل 100 milli.
بتـ flush الـ TLB. غير كده بقى، الـ cache بتاعة الـ content، كل شوية برامج جديدة بتخش، فعمالة مش ممكن هتيجي عليا في الآخر يعني، هتسحب مني لو في برامج كتير قاعدة.
طيب، نيجي لعملية اختيار الـ quantum، ودي اللي ذكرناها من شوية. لازم تختاره كويس، يعني إيه كويس؟ يعني آه، لا كبير قوي ولا صغير قوي. هو هو لو كبير قوي إيه المشكلة؟
ما انا مش سامع لأ لأ، هي بتاخد الثلاثة وخلاص. ما بستناهاش الاثنين الثانيين. آه. آخد حد جديد.
اللي هي إيه؟ ما هو كده كده كان في، بس أنا أقصد لو الـ quantum كبير.
ماشي، فده هيأثر على إيه بقى، ينعكس على إيه؟ الـ response time. ينعكس على الـ response time. بالظبط، ينعكس على الـ response time. يبقى الـ response time سيء. طيب، فلو الـ quantum كبير، الـ response time يتأثر، طب والعكس لو الـ quantum صغير أصغر من أصغر واحدة؟
Context switch كتير، محدش هيعرف يخلص. Throughput يتأثر، throughput يتأثر. فأحسن اختيار إن هو يبقى...
أكبر من أصغر حاجة عندك، يبقى أكبر منها شوية عشان تضمن إن هو إيه؟ الصغيرين دول أما يشتغلوا يخلصوا، أو اللي هم ليهم response time، متوسط بياخدوا response time قد إيه، اختار quantum أكبر منهم شوية. طيب، الحل. اللى وده
ده تقريبًا الـ timing، الـ practical يعني الـ timing بيبقى قد إيه؟ الـ quantum بتبقى ما بين 10 milli لـ100 milli على حسب وقت الـ context switch. لو الـ context switch بتاعك مش مكلف.
يعني 0.1 milli، فأنا باخد time 10 milli كـ quantum. فيبقى الخسارة اللي بخسرها 1% overhead. يعني الوقت اللي بخسره بسبب الـ context switch هو 1% من وقت الإيه؟
الـ process بتشتغل. لو الـ context switch ده عالي، 
1 milli، ساعتها بختار ما يناظره 100 milli علشان يبقى still النسبة برضه 1%. اللي بخسره، اللي الـ overhead بالنسبة لي اللي بدفعه 1% من الوقت اللي بشتغله.
مفهومة الفكرة؟ طيب، بس كده احنا ده خلصنا، بعتذر عن الإطالة. في أي سؤال؟ أشكركم شكرًا جزيلًا. الأسبوع الجاي midterm، توفيق إن شاء الله. اللي ليه bonus يجي يكمل بياناته هنا أهو. شكرًا جزيلًا يا شباب، بالتوفيق إن شاء الله. اللي ليه أسئلة ينتظرني بره معاه.