AhmedSalah
عيبه إيه؟ افرض مثال زي كده، أنت عندك أربعة processors. في برنامج عايز أربعة threads والتاني هو مش شغال غير على one thread. أنت بتعمل إيه بقى هنا؟
الأربعة processors اديتهم للأولاني، استغلهم كلهم مدة زمنية معينة، خرجته واديت الأربعة للتاني، استغل منهم إيه؟ واحد، فأنت مضيع كام؟ من أصل. total بقى هنا لو أنت حسبت دول تمانية وبيتكرروا، تمانية slots يعني.
وبيتكرروا، من التمانية استغليت خمسة وضيعت تلاتة، يعني بضيع ما نسبته حوالي فوق الـ 35% من وقت الـ processors. التاني لأ، قال لك خد بالك من اختلاف احتياجات البرامج.
فقال لك أعملها weighted، يعني إيه weighted؟ بالظبط، أنت عندك كام thread تاخد عدد slots على قد عدد الـ threads. يعني اللي محتاج أربعة، اللي عنده أربعة threads ياخد كام slot؟ ياخد أربعة slots.
الـ processors كلها بس لمدة أربعة slots لإن هو محتاج عنده أربعة threads. التاني اللي محتاج thread واحد برضه هديله الأربعة processors بس إيه؟ one slot. ده اللي بنسميها weighted. هنا أنت مضيع كام من أصل كام بقى؟ لأ عد كام slot processor ضايعة.
تلاتة من أصل بقى كام؟ 20. أصل 25؟ 20. تلاتة من أصل 20. يعني 15% ضايعين من وقت الـ processors بينما هنا 37.5%.
مفهومة الفكرة؟ بس طبعا برضه ده ممكن يبقى في نوع من الـ unfair. أو ممكن نوع من هو مش هيحصل starvation بس هو في نوع من الممكن الخداع. هو البرنامج عايز يحصل على الـ processors وقت كتير، يـ generate threads كتير.
threads ما بتعملش حاجة. يعني كتر عدد الـ threads على الفاضي يعني. فهو برضه still مش كل يعني ما فيش حاجة اللي هي perfect يعني، خلاص؟ طيب خلينا نختم، يعني دول هنختم بالمثالين دول، مثال على كل واحدة منهم.
assuming أربعة processors شغالين uniform، time now خمسة، والـ time slice اللي بديها لكل مجموعة اتنين، يعني كل مجموعة أما بتخش بتاخد.
two time slots أو quantum باتنين يعني. وقايل لي هنا، بص المعلومة هنا بيقول لي إيه؟ schedule كل الـ threads بتاعت الـ process. يعني هو بيـ assume إن الـ threads بتاعت كل process gang مع بعض، آه لازم يشتغلوا مع بعض.
بس عايز يحسب الـ finish time والـ CPU waste اللي هو ضيعت كام CPU slot من الـ total. ها. ما تنسوش إن time now خمسة والـ time slice اتنين.
مين اللي وصل حتى الآن؟ عند time زيرو، B كلهم وصلوا، صح؟ أنا time now خمسة يعني كله وصل. كلهم وصلوا. دي thread 1 و thread 2. بعد كده عند time تلاتة B2 وصلت.
وعايزة تلاتة threads. وبعدين عند time خمسة التلاتة الاتنين التانيين وصلوا B3 عايزة أربعة threads. و B4 وصلت.
وعايزة two threads. طيب ما تنسوش إن كل مجموعة هي gang مع نفسها، يعني لازم يخشوا مع بعض، يعني دول لازم مع بعض. دول لازم مع بعض. الأربعة دول مع بعض.
لازم مع بعض، والاتنين دول لازم مع بعض. وأنا دلوقتي time now خمسة. الطريقة إيه؟ بدي الـ processors كلها two time slots للي موجود في أول الـ queue. مين اللي موجود في أول الـ queue؟
B1 يبقى هتاخد B1 هتاخد two time slots. تشتغل من خمسة لسبعة، هتشغل فيها thread 1 و thread 2. من خمسة لسبعة. طب وهنا؟
فاضي وهنا فاضي، يبقى دول empty slots يتحسبوا مع الـ waste. تيجي تحسب الـ waste. طيب next هل دول خلصوا؟ ما هما دول كانوا عايزين كام بالمناسبة؟ خمسة وتلاتة. دول لسه ما خلصوش، من الخمسة.
خدوا اتنين ودي خدوا اتنين، هيلفوا ويرجع، يعني B1 لفت ورجعت فاضل لها كام؟ تلاتة وواحد. الـ thread الأولاني تلاتة والتاني واحد. مين اللي هيشتغل next؟ كده B1.
لفت خلصت خدت دورها، B2 عايزة اتنين واحد اتنين. هتشتغل إزاي؟ هتاخد الأربعة processors من سبعة لتسعة ده الـ thread الأولاني بتاعها. بعدين من سبعة.
ل8، ده الـ thread التاني بتاعها. وبعدين من سبعة لتسعة الـ thread التالت بتاعها. كده هي إيه؟ خلصت، يبقى B2 خلصت.
هل ده بيعتبر waste؟ لأ. ده not waste. الـ waste المقصود هنا slot كاملة الـ processor كان قاعد فاضي فيها، خلاص؟ آه رابع آه فيه، خلاص.
وهكذا بقى، next الدور على مين؟ B3 بالدور طبعا، واحد اتنين اتنين تلاتة. هتاخد الـ processors كلها. هتستفيد هي من الأربعة. الأولاني من تسعة لـ 10. B3 thread 1.
والتاني من تسعة لـ 11، معلش الـ timing بقى يعني مش مظبوط أوي، تسعة. B3 thread 2. بعدين من تسعة لـ 11 B3 thread 3.
وبعدين من 9 لكام؟ برضه لـ 11. B3 thread 4. ودلوقتي كله خلص ما عدا يبقى هتلف وترجع وفاضل لها مين؟ thread 4 فاضل له إيه؟ واحد.
برضه أما هيجي عليها الدور هتاخد إيه؟ هتاخد ال4، بس هتشغل منهم واحد. أحسن لها تشغله على أنهي processor؟ ليه؟ cache.يا ولد ماشي يا يوسف، شكرا. معلش هنكمل بقى بنفس الطريقة خلاص.
يعني عشان بس الوقت يعني. طبعا ده uniform يعني إيه؟ كله بياخد 2، يخرج ويلف ويرجع ياخد اللي بعده، اللي بعده، واللي بعده، وهكذا. طبعا ده عشان بس ده ليه تكملة يعني، كملوا بقى أنتوا ده. نختم نفس المثال مع تغيير بسيط بس في الأرقام.
time slice واحد، time now تلاتة، وعايزين نشتغل المرة دي weighted. آه weighted يعني بياخدوا slots على قد الايه؟ على قد الـ threads. فـ time now تلاتة، مين اللي واصل حاليًا؟ B1 واصلة.
بالـ two threads بتوعها اللي هما 5 و3، وB2 واصلة عند time تلاتة بالتلاتة threads بتوعها. اتنين واحد اتنين. حد تاني وصل حتى الآن؟ لأ.
مين اللي هيشتغل؟ B1 هتاخد خلي بالكم time slice كام؟ واحد. هتاخد كام time slice هي؟ هي عندها كام thread؟ اتنين. هتاخد two time slices، يعني هتاخد.
time slice و time slice. دي B1 thread 1. وهتاخد برضه هنا slice و slice. B1 thread 2. اشتغلت من تلاتة لخمسة، خلصت.
لأ ما خلصتش، بتلف وترجع، صح؟ بتلف وترجع عند time كام؟ خمسة. مين واصل عند time خمسة؟ الاتنين التانيين، 3 و 4. مين اللي هيخش الأول؟ 3 و 4 عشان قلنا إن دي بتروح تسيف الـ states بتاعتها، خلاص؟
يبقى B B3 هتخش الأول بالأربعة threads بتوعها. وB4 وراها بالـ two threads بتوعها.
وكل ده عند time 5، ودي عند 5، وبرضه عند 5 
B1 بتلف وترجع وفاضل لها 3 و1. ده الوضع دلوقتي، next مين اللي عليه الدور؟
B2 هتاخد كام time slice؟ 3 لإن ليها كام thread؟ هي معاها تلاتة threads، هتاخد تلاتة time slices. يبقى هتاخد كل الـ processors من خمسة لستة.
وعلى حسب ما تحتاج بقى، ومن 6 ل7 ده الـ thread الأولاني، B2 thread 1، دي خلصت عند 7. وده كده خلص. هتاخد من 5 ل6  B2 thread 1 ده برضه هي واخداه بس ما عملتش بيه حاجة لإن الـ thread ده ماله.
خلص هنا. وهتاخد B2 هتاخد من 5 ل6 ومن 6 ل7. ده thread 3 و thread 3 خلص هنا.
أنا كنت المفروض أدي لها كام slot؟ أدي لها التالت؟ لأ. ما هو هو مش تنشيف دماغ يعني هي هي هتاخد 3 عشان لو هتخلص في 3، خلصت في 2، خلصت. يبقى خدت الـ processors كلها بعد two time slots.
ما احتاجتش، خلاص؟ شكرًا وهي إيه؟ خلصت. next الدور على مين؟ على الأربعة بتوع B3. فمن حقها تاخد 4 
slots. هي عايزة بقى كام الـ timing؟ واحد اتنين اتنين تلاتة. فهيكفيها كام slots؟
بعد 3 هتخلص، يبقى هيكفيها بس إيه؟ 3. هتاخدهم من فين؟ 7 ولا 8؟ 7. مش هـ consume slot على الفاضي محدش واخدها. هي جاهزة تاخد من 7، 7 ل8. طبعا الأولاني اكتفى اكتفى بده.
التاني هياخد من 7 ل 8 ومن 8 ل 9 B3 Thread 2 وده برضو من 7 ل 8 ومن 8 ل 9 
 B3 Thread 3 والأخير هياخد من 7 ل 8 ومن 8 ل 9 ومن 9
لـ 10. طبعا ما تنسوش إن دول كده برضه مالهم؟ دول مالهم كل دول؟ مالهم اللي متظللين دول؟ wasted.
wasted طبعا. لأ، ده ده slot كاملة، هو خد، ما تنساش إن الـ time slice هنا واحد، هو خد الأربعة processors في الوقت ده، استغل منهم إيه؟ واحد. التاني كانت الـ time slice اتنين، في thread اشتغل واحدة واتبقى واحدة، ده ما تعتبرش empty slot.
خلاص؟ واصلة؟ مفهوم يا شباب؟ خلاص أنا اكتفيت بده، طبعا الـ dedicated هو version تانية منه بس خلاص كده يعني. أشكركم شكرًا جزيلًا على حسن الاهتمام الاستماع وعلى اهتمام طول الـ term. أتمنى يكون الـ course فاد حضراتكم إلى حد ما، أتمنى نكون وفقنا نقدم حاجة مفيدة لحضراتكم، بنعتذر عن أي تقصير.
أشكركم شكرًا جزيلًا وبالتوفيق إن شاء الله يا شباب. السلام عليكم ورحمة الله.