Operating Systems Types and Startup (PDF)

Summary

This document details the different types of operating systems, and how computer systems startup. It introduces concepts such as batch processing, multi-programming, multi-tasking, multi-processing, and real-time operating systems.

Full Transcript

‫‪Types of operating systems:‬‬ ‫‪1) batch processing operating system‬‬ ‫ده كان زمان ايام ال ‪ mainframes‬اللي هو الكومبيوتر اللي قد الدوالب‬ ‫‪.1‬ال ‪ user‬كان بيحط البرنامج بتاعه على حاجة اسمه...

‫‪Types of operating systems:‬‬ ‫‪1) batch processing operating system‬‬ ‫ده كان زمان ايام ال ‪ mainframes‬اللي هو الكومبيوتر اللي قد الدوالب‬ ‫‪.1‬ال ‪ user‬كان بيحط البرنامج بتاعه على حاجة اسمها ‪punch cards‬‬ ‫‪.2‬بيوديها ل شخص مسئول (انسان حقيقي) اسمه ال ‪ , operator‬اللي بيجمع ال ‪ programs‬من كذا ‪ user‬مختلفين بعدين‬ ‫يشوف ال ‪ programs‬اللي شبه بعض مثال ويحطهم مع بعض ف دفعة واحدة أو ‪ , batch‬بعدين بيدخل الدفعة دي مرة واحدة‬ ‫لل ‪ mainframe‬اللي بعدين ب ‪ execute‬كل ‪ job‬ف الدفعة دي واحد واحد‬ ‫‪2) multi-programming‬‬ ‫من اسمه يعني كذا ‪ program‬مع بعض ‪ ,‬ده بكل بساطة بي ‪ utilize‬ال ‪ processor‬أفضل ‪ ,‬ازاي ؟؟؟؟‬ ‫ده كان ‪ single CPU‬عادي ‪ ,‬لما ‪ process‬تعطل على ‪ i/o‬مثال بدل ال ‪ CPU‬م يقعد جنبها فاضي ال ‪ OS‬بيطلعها تستنى برة و‬ ‫يدخل ‪ process‬تانية‬ ‫‪3) multi-tasking‬‬ ‫ده شبه ال ‪ multi-programming‬شوية‪ ,‬وكان ‪ single CPU‬برضه بس مكنش بيسيب ال ‪ process‬براحتها على م توقف هي‬ ‫‪,‬أل كان بيحدد ‪ time-slot‬معينة وليكن افتراضيا ‪ seconds 2‬اول م ‪ process‬تخلصهم يدخل التانية علطول وهكذا كل واحدة‬ ‫ثانيتين لحد م يخلصوا هم االتنين‬ ‫بيقولوا عليه ‪ time-interactive‬الن انت ك ‪ user‬غلبان فاكر انهم بيحصلوا مع بعض ف نفس الوقت ( لكن هو ‪ processor‬واحد‬ ‫زي م قولنا ) اللي بيحصل فعال انه بيبدل بينهم بسرعة جدا فانت تحس ان االتنين شغالين معاك ف نفس الوقت لكن هم ‪sequential‬‬ ‫عادي ‪,‬واحدة تطلع التانية تدخل‬ ‫‪4) multi-processing‬‬ ‫من اسمها برضه يعني هنا عندنا اكتر من ‪ CPU‬ف ممكن فعال ‪ processes 2‬يشتغلوا مع بعض عادي ‪parallel‬‬ ‫‪5) real-time OS‬‬ ‫شايف ف اللي فاتوا كلهم كان ممكن ‪ process‬تتأخر شوية على ما ت ‪ run‬لكن هنا الكالم على ‪, strictly timing constraint‬‬ ‫يعني لو طلبت ال ‪ process‬دلوقتي الزم ال ‪ response‬دلوقتي واال تخيل مثال جهاز ‪ medical‬زي الليزر بتدوس عليه عشان‬ ‫توقف راح هنج معاك ‪ ,‬ده كالم برضو !!!‬ ‫فيه ‪ hard‬دي اللي مفيهاش هزار ‪ ,‬دلوقتي يعني دلوقتي زي ال ‪ medical‬كدة‬ ‫و فيه ‪ soft‬يعني هو مهم بس ممكن نستحمل التأخير حبة زي ال ‪ online games‬مثال ال ‪ timing‬مهم اه بس لو حصل ‪delay‬‬ ‫مفيش أضرار كبيرة يعني‬ ‫‪computer system startup‬‬ ‫لما بتعمل ‪ power on‬للجهاز ايه اللي بيحصل بالظبط؟؟‬ ‫اول حاجة ال ‪ CPU‬بيشتغل ألنه هو اللي بينفذ كل حاجة بعدين بيدور على برنامج اسمه ‪ bootstrap‬موجود على ال‬ ‫‪ motherboard‬في (‪ ROM (read only memory‬معمولة عشان اقرا منها ال بس لكن مش بنكتب فيها حاجة‬ ‫ال ده بقا بي ‪ check‬على ال ‪ hardware‬ولو كله تمام بعدين يبدأ يشغله‬ ‫‪1. initialize CPU registers , device controllers, memory‬‬ ‫كدة ال ‪ hardware‬جاهز و ال ‪ ram‬اشتغلت ‪ ,‬يبدأ ال ‪ bootloader‬بقا ي ‪ load‬ال ‪ kernel‬ف ال ‪ ram‬عشان نبدأ شغل‬ ‫‪2) load kernel‬‬ ‫ال ‪ kernel‬هتبدأ شغل و هتعمل ‪ load‬ألول ‪ process‬خالص اللي اسمها ‪ init‬اختصارا ل ‪ initialization‬واللي بت ‪ create‬بقية‬ ‫ال ‪ processes‬اللي ال ‪ system‬محتاجها عشان يقوم‬ ‫‪3. kernel starts the first process and waits for an event to occur‬‬ ‫دلوقتي ال ‪ computer‬بقا جاهز لل ‪.user processes‬‬ ‫‪interrupts‬‬ ‫ال ‪ interrupt in general‬يعني يبقى البروسيسور ب ‪ execute some process‬اروح اقاطعه و اخلي يسيب اللي بيعمله ايا‬ ‫كان و يعمل حاجة تانية‬ ‫‪1. hardware interrupt‬‬ ‫ده ال ‪ hardware‬بيبعتها لل ‪ CPU‬عشان يطلب منه حاجة معينة ‪ ,‬مثال ‪hardware timer :‬‬ ‫فاكر لما قولنا ان ال ‪ CPU‬بيدخل ‪ process‬ت ‪ execute‬ثانيتين مثال بعدين يبدلها بالتانية ‪ ,‬اللي بيحسبله الثانيتين بقا هو ال‬ ‫‪ timer‬ده ‪ ,‬اول ما الثانيتين يخلصوا يبعتلوا ‪ interrupt‬يقولوا بدل‪.‬‬ ‫‪2. software interrupt‬‬ ‫دي ال ‪ software‬هو اللي بيبعتها لل ‪. CPU‬مثال ‪ program‬بي ‪ execute‬عادي بعدين احتاج انه ي ‪allocate‬‬ ‫‪ memory‬فبيبعت لل ‪ CPU‬عشان ينبهه انه محتاج ال ‪ OS‬يحجزله ‪memory‬‬ ‫ال ‪ CPU‬اول ما بيجيله ال ‪ interrupt‬سواء ‪ hw‬أو ‪ sw‬دي بيسيب ال ‪ process‬اللي كان بيعملها ويروح يشوف ال ‪interrupt‬‬ ‫ده مين اللي باعته ‪,‬عرف خالص ‪ ,‬بيروح ل حاجة اسمها ‪vector table‬‬ ‫ايه ال ‪ vector table‬؟؟‬ ‫‪Interrupt‬‬ ‫‪Interrupt Type‬‬ ‫‪Description‬‬ ‫‪Handler‬‬ ‫‪Vector‬‬ ‫‪Address‬‬ ‫‪0x0E‬‬ ‫‪Floating-Point‬‬ ‫‪Triggered by an error in floating-point‬‬ ‫‪0x1200‬‬ ‫‪Exception‬‬ ‫‪operations, such as divide-by-zero.‬‬ ‫‪0x14‬‬ ‫‪External‬‬ ‫‪Raised by external events like a mouse‬‬ ‫‪0x1400‬‬ ‫‪Interrupt‬‬ ‫‪click, keyboard input, or hardware signals.‬‬ ‫ال ‪ CPU‬عرف ان اللي عمل ال ‪ interrupt‬هو ال ‪ mouse‬مثال ف يروح لل ‪ vector table‬يدور على ‪ interrupt‬ال‬ ‫‪ mouse‬لقاه ف ال ‪ row‬رقم اتنين يقوم رايح لل ‪ address 0x1400‬هيالقي هناك كود ثابت مبيتغيرش اسمه ال ‪interrupt‬‬ ‫‪ service routine‬يروح ينفذه ‪ ,‬بعدين يرجع تاني يكمل البروسيس اللي كان بيعملها‬ ‫ملحوظة أخيرة ال ‪ software interrupts‬نوعين بس‪:‬‬ ‫‪1. trap‬‬ ‫من اسمها كدة فخ أو حفرة ️🕳 ال ‪ processor‬بيقع فيها غصب عنه تالقي مثال بي ‪ execute‬عادي خالص ‪ ,‬يالقي نفسه ب‬ ‫ي يقسم على ‪ 0‬او بي ‪ access wrong address‬او اللي احنا عارفينها )‪(segmentation fault‬‬ ‫هنتكلم عنها ‪2. system call‬‬ ‫‪interrupt handling‬‬ ‫محتاجين األول نتكلم عن حاجة اسمها ‪context switching‬‬ ‫تخيل معايا انت كنت شغال على الالب بتاعك ‪ ,‬وجه اخوك يقومك بسرعة وبيقولك انا محتاج الالب ضروري حاال ‪ ,‬قبل م تقوم وتسيبله‬ ‫الالب الزم ت ‪ save‬اللي كنت بتعمله صح؟؟؟؟ هو ده بقا ال ‪context switching‬‬ ‫لما ال ‪ process‬تبقى شغالة و ييجي ‪ interrupt‬عايز ينفذ ‪ interrupt service routine‬تانية الزم األول اعمل ‪ save‬لكل‬ ‫حاجة عن ال ‪ process‬الحالية قبل م اروح انفذ ال التانية ‪ ,‬عشان لما ارجعلها تاني ابدأ من مكان ما كنت واقف مش من األول خالص‬ ‫‪system calls‬‬ ‫احنا عارفين انه من أهداف ال ‪ OS‬انه ي ‪ manage‬ال ‪ resources‬و يحميها ‪ ,‬تخيل مثال لو الموضوع مفتوح عادي كدة اي‬ ‫‪ process‬تعمل اللي هي عايزاه ‪ ,‬كان ممكن بكل بساطة ‪ process‬تاخد ال ‪ CPU‬ليها لوحدها متسيبهوش أو مثال ‪process‬‬ ‫عملتها بالغلط تمسحلك ملفات من ال ‪ OS‬توقع الدنيا كلها مهي ليها ‪ direct access on hardware‬بقا‬ ‫ال ‪ OS‬بيتحكم ف ال ‪ CPU‬عن طريق ‪ modes 2‬لل ‪ CPU‬وهو اللي بيقرر انهي ‪ mode‬يشتغل دلوقتي‬ ‫‪1. user mode‬‬ ‫هنا بيسيب لل ‪ CPU‬مساحة صغيرة يلعب فيها براحته ‪ ,‬يعمل الحاجات البسيطة شوية ‪ ,arithmetic operations‬ي ‪push‬‬ ‫حاجة ف ال ‪ stack‬كدة يعني طالما مش ‪ direct access‬على ال ‪hardware‬‬ ‫‪2. kernel mode‬‬ ‫هنا بيتقال عليه ال ‪ privileged instructions‬أو ‪ , unrestricted mode‬عايز ا ‪ , create process‬اعمل‬ ‫‪ access‬على ‪ hardware‬زي اني اخد ‪ input‬من ال ‪ keyboard‬مثال‬ ‫طب افرض ال ‪ CPU‬ماشي ب ‪ execute‬الحاجات اللي في البسيط منه اللي هو ال ‪ user mode‬يعني و احتاج حاجة مش ف‬ ‫صالحياته و ف صالحيات ال ‪ kernel mode‬؟؟؟‬ ‫محتاجين ننقل لل ‪ kernel mode‬صح ؟؟؟ طب نعمل ايه ؟ نستأذن ال ‪ OS‬عشان ينقلنا هناك ‪ ,‬طب ازاي كنا بنطلب حاجة ؟؟؟؟ ايوة‬ ‫انت صح ‪interrupt‬‬ ‫بس ثانية ؟؟ هعمل ال ‪ interrupt‬ده ازاي ك ‪ developer‬غلبان‬ ‫هنا بقا ييجي دور ال ‪system call‬‬ ‫ال ‪ system call‬عبارة عن ‪ function‬او ‪ API‬بتعملها ‪ call‬ف ال ‪ program‬بتاعك‬ ‫ال ‪ function‬دي ال ‪ implementation‬بتاعها فيه شوية ‪ assembly‬كدة اول ما ال ‪ CPU‬بيشوفه بيتعمله ‪software‬‬ ‫‪ interrupt‬علطول‬ ‫ف يقوم ال ‪ OS‬ينقله لل ‪ kernel mode‬و هنا بقا كل حاجة مسموحة طبعا ف يروح لل ‪ vector table‬ويهندل اللي ال ‪sys call‬‬ ‫كانت محتاجاه زي مثال انه ي ‪allocate memory‬‬ ‫زي ‪ scanf‬مثال‬ ‫‪CPU scheduling‬‬ ‫قبل ما نشرح ال ‪ CPU scheduling‬الزم نتعلم األول ازاي نشتغل ف سايبر‬ ‫نرجع بالزمن شوية تحديدا ‪ 2005‬مكنش فيه كومبيوترات ف كل بيت زي دلوقتي و كان فيه‬ ‫سايبر فيه‬ ‫‪.1‬كومبيوتر واحد‬ ‫‪.2‬واحد ماسك الشيفت‬ ‫عندنا طابور واقف على باب السيبر ده مكون من‬ ‫‪ ).1‬محاسب عايز يشتغل على شيت اكسيل مهم جدا (ساعتين)‬ ‫‪.2‬ولد صغير (شقي) جي يلعب ‪( >----------- spiderman‬ساعة)‬ ‫‪.3‬رجل اعمال (ف بداية حياته) محتاج يشوف ايميل ضروري ‪ 5( >----‬دقايق)‬ ‫‪.4‬طالب جاي يحمل بحث ‪ 10‬ورقات (‪ 3‬دقايق)‬ ‫واقفين بالترتيب ده‬ ‫عندنا ‪ 4‬بيوقفوا ف السايبر ده‬ ‫️♂‍👱اللي ماسك الشيفت أي حد بييجي يقف ف الطابور بيطلب منه‬ ‫اسمه أو ال ‪ID‬‬ ‫محتاج يعمل ايه‬ ‫هيقعد اد ايه ‪ estimated‬يعني‬ ‫وبيسجلهم عشان يعرف يحاسبه (وينظم الدنيا برضو) ‪ ,‬الورقة اللي بيسجل فيها‪ ,‬اسمها ‪process control block‬‬ ‫عندنا ‪ 4‬بيبدلوا الشيفتات تعالى نتعرف عليهم‬ ‫‪1) first come first serve‬‬ ‫‪rule‬‬ ‫الراجل ده مش بيقول غير جملة واحدة "بالدور يجماعة"‬ ‫يعني اللي جه األول هو اللي هيقعد على الكمبيوتر األول‬ ‫ف هيدخل الطابور بترتيبه عادي‬ ‫المحاسب ثم الولد ثم المدرس ثم رجل األعمال ثم الطالب‬ ‫‪disadvantages‬‬ ‫ده جدول اليوم‬ ‫السيبر فتح الساعة ‪ , 00:00‬كانوا كلهم واقفين‬ ‫‪waiting time‬‬ ‫‪end‬‬ ‫‪start‬‬ ‫‪0‬‬ ‫‪02:00‬‬ ‫‪0:00‬‬ ‫المحاسب (‪)2h‬‬ ‫‪2 hour‬‬ ‫‪03:00‬‬ ‫‪02:00‬‬ ‫الولد الصغير (‪)1h‬‬ ‫‪3 hours 5 min‬‬ ‫‪03:05‬‬ ‫‪03:00‬‬ ‫رجل أعمال (‪)5m‬‬ ‫‪3 hours 8 min‬‬ ‫‪03:38‬‬ ‫‪03:35‬‬ ‫الطالب (‪)3m‬‬ ‫‪total waiting time = (0 + 2 + 3.xx + 3.xx) / 5 = 2. hour‬‬ ‫من غير كالم معادالت‬ ‫‪.1‬الناس مش بتحب الراجل اللي ماسك الشيفت ده عشان انت لو عايز مصلحة ‪ ,‬قدامك حولي ساعتين هتقف تستنى‬ ‫الناس بيحبوا اللي بيمسك الشيفت بعده أكتر ‪ ,‬تعالى اعرفك عليه‬ ‫‪shortest job first‬‬ ‫‪rule‬‬ ‫الراجل ده بيبص عنده يشوف مين اللي هيستخدم الجهاز أقل وقت و يدخله‬ ‫‪waiting time‬‬ ‫‪end‬‬ ‫‪start‬‬ ‫‪0‬‬ ‫‪00:03‬‬ ‫‪0:00‬‬ ‫الطالب (‪)3m‬‬ ‫‪3 min‬‬ ‫‪00:08‬‬ ‫‪00:03‬‬ ‫رجل أعمال (‪)5m‬‬ ‫‪8 min‬‬ ‫‪01:08‬‬ ‫‪00:08‬‬ ‫ولد صغير (‪)1h‬‬ ‫‪1 hour 8 min‬‬ ‫‪03:08‬‬ ‫‪01:08‬‬ ‫المحاسب (‪)2h‬‬ ‫‪average waiting time = 0 + 3 min + 8 min + 68 min / 4 = 20 min‬‬ ‫‪adv‬‬ ‫احسن ال ‪ algorithm‬تاخد منه أقل ‪average waiting time‬‬ ‫‪priority scheduling‬‬ ‫‪rule‬‬ ‫فاكر لما قولتلك ان أي حد بيقف ف الطابور بيطلب منه شوية بيانات (‪)PCB‬‬ ‫الراجل ده بيقيم الطلب بتاع كل واحد ‪ ,‬و يدي كل واحد (ترتيب من عنده حسب تقييمه لطلباتهم)‬ ‫وهيشوف ان رجل األعمال ده حاجته ‪ urgent‬و مفروض تتعمل قبل الطالب اللي جي يعمل البحث ‪ ,‬مع ان الطالب هيخلص ف وقت‬ ‫أقل‬ ‫❌ ‪shortest job‬‬ ‫ف هيشوف مثال ان المحاسب ده راجل محترم بيعمل شغل مهم 😧فهيدخله قبل الولد الصغير اللي داخل يلعب️♂‍🤾 مع ان ممكن يكون‬ ‫الولد الصغير جه األول‬ ‫❌ ‪first come‬‬ ‫‪priority‬‬ ‫‪2‬‬ ‫الطالب‬ ‫‪1‬‬ ‫رجل األعمال‬ ‫‪3‬‬ ‫المحاسب‬ ‫‪4‬‬ ‫الولد الصغير‬ ‫‪waiting time‬‬ ‫‪end‬‬ ‫‪start‬‬ ‫‪0‬‬ ‫‪00:05‬‬ ‫‪0:00‬‬ ‫رجل األعمال (‪)5m‬‬ ‫‪5 min‬‬ ‫‪00:08‬‬ ‫‪00:05‬‬ ‫الطالب ‪3m‬‬ ‫‪8 min‬‬ ‫‪02:08‬‬ ‫‪00:08‬‬ ‫المحاسب ‪2h‬‬ ‫‪2 hour 8 min‬‬ ‫‪03:08‬‬ ‫‪02:08‬‬ ‫الولد الصغير ‪1h‬‬ ‫لحد هنا الدنيا لذيذة ‪ ,‬فيه ملحوظة صغيرة‬ ‫‪.1‬أول واحد اللي هو (‪ )first come‬الناس مش بتحبه اه عشان بيخليهم يستنوا كتير لكن فيه ميزة ان علطول رايق ولو قعدت على‬ ‫الجهاز مش بيقومك لحد م تخلص‬ ‫مود الروقان ده اسمه ‪ non preemption‬يعني (مش متضايق باالنجلش) (ف المعجم االيرلندي كدة وكدة)‬ ‫‪.2‬االتنين اللي بعد كدة اللي هم (‪ shortest‬و ‪)priority‬‬ ‫ممكن يبقوا‬ ‫)متضايقين( ‪preemptive‬‬ ‫هنا لألسف الراجل ده بيتلكك عشان يقومك‬ ‫عينه علطول عالطابور ‪ ,‬لو لمح حد جديد (أحسن أو أقصر) منك وصل الطابور هيقومك علطول‬ ‫)مش متضايقين( ‪non preemptive‬‬ ‫هنا بيسيبوك على راحتك لحد م تخلص حتى لو مين جه ف الطابور‬ )preemptive( ‫ لما بيبقى متضايق بيعمل ايه‬shortest ‫تعالى نشوف واحد فيهم اللي هو‬ arrival time (‫)وصل امتى‬ cpu time 0 7 p1 2 4 p2 4 1 p3 5 4 p4 arrival time ‫ ف الزم نركز ف ال‬, ‫لو فاكر قولنا ان عينه على الطابور علطول‬ solution: time ready cpu shortest in updated ready next finish queue (cpu, queue) queue arrival time time 0 p1 (7) p1 (7) empty 2 7 2 p2 (4) p1 p2 (4) p1 (5) 4 6 (5) 4 p1 (5), p3(1) p2 p3 (1) p1(5), p2 (2) 5 5 (2) 5 p1(5), p2 p2 (2) p1(5) , p4(4) X 7 (2), p4 (4) 7 p1(5), p4(4) p4(4) p1(5) X 11 11 p1(5) idle p1(5) empty X 16 preemption‫تعالى بقى نشرح ازاي حلينا مسئلة ال‬ time ready cpu shortest in updated next assumed queue (cpu , queue) ready queue arrival finish time time 0 p1 (7) p1 (7) empty 2 7 arrival time ‫ اللي هي أول‬0 ‫ هنبدأه ب‬time ‫ ال‬.1 ‫) اللي‬process arrived ‫ (لو فيه‬+ )‫ ف الصف اللي فات‬updated ready queue ‫ عبارة عن (ال‬ready queue ‫ ال‬.2 )p1( + )empty( ‫هم‬ empty ‫ من الصف اللي فات) يبقى‬shortest ‫ (ال‬cpu ‫ ال‬.3 )ready queue cell ‫ و ال‬cpu cell ‫ عندي ف السيستم كله (بقارن بين ال‬process ‫ أقصر‬.4 ‫> فاضي‬--- cpu ‫ال‬ p1(7) ‫ فيه‬ready queue ‫ال‬ )‫ بس‬p1 ‫ فيه اللي خسروا المقارنة (محدش خسر عشان كان عندي‬updated ready queue ‫ ال‬.5 2 >---- ‫ بجيبها من الجدول اللي فوق‬next arrival time ‫ ال‬.6 7 + 0 >------ ‫ مفروض تخلص امتى لو محدش جه‬cpu‫ اللي عندي ف ال‬process ‫ ال‬.7 ‫ الجديد‬row ‫ فيهم و ابدأ بيه ال‬time ‫ شوف أصغر‬7 ‫ ورقم‬6 ‫شايف رقم‬ time ready cpu shortest updated ready next arrival assumed finish queue queue time time 2 p2 (4) p1 p2 (4) p1 (5) 4 6 (5) 2 ‫ ف هناخد ال‬finish ‫ أصغر من ال‬arrival ‫ اللي قبله ال‬row ‫ من ال‬.1 ‫) اللي‬process arrived ‫ (لو فيه‬+ )‫ ف الصف اللي فات‬updated ready queue ‫ عبارة عن (ال‬ready queue ‫ ال‬.2 )p2( + )empty( ‫هم‬ p1(5) ‫ اللي هي‬p1 (7-2) ‫ ف الصف اللي فات) بس هي بقالها ثانيتين شغالة فهتبقى‬shortest ‫ ( ال‬cpu ‫ ال‬.3 )ready queue cell ‫ و ال‬cpu cell ‫ عندي ف السيستم كله (بقارن بين ال ال‬process ‫ أقصر‬.4 p1 (5) ‫> فيه‬--- cpu ‫ال‬ p2(4) ‫ فيه‬ready queue ‫ال‬ p1 ‫ فيه اللي خسروا المقارنة اللي هي‬updated ready queue ‫ ال‬.5 4 ‫ من الجدول تبقى‬next arrival time ‫ ال‬.6 6 ‫ يبقى‬4 + 2 ‫ لو محدش جه‬finish time ‫ ال‬.7 ‫ ف تروح تجيبه من الجدول‬, ‫ يبقى أصغر ده معناه ان فيه حد هييجي قبل م اخلص‬arrival time ‫لما ال‬ , ‫ هي الخطوة الوحيدة اللي بنطرح فيها‬3 ‫ف أي مسألة الخطوة‬ time , shortest ‫ بعد م تخلص الجدول يهمك منه العمودين بتوع ال‬, ‫هنكمل بنفس التسلسل مفيش جديد‬ slides ‫ده اللي بتالقيه مرسوم ف ال‬ priority ‫واحدة كمان على ال‬ process arrival time burst time priority p1 0 7 3 p2 2 4 2 p3 4 1 4 p4 5 4 1 time ready cpu highest updated next assumed queue priority (cpu, ready queue arrival finish time queue) time 0 p1 p1(7) empty 2 7 2 p2 p1(5) p2(4) p1(5) 4 6 4 p1, p3 p2(2) p2(2) p1(5), p3 5 6 5 p4, p2(1) p4(4) p1(5), p3, X 9 p1(5),p3 p2(1) 9 p1(5), p3, empty p2(1) p3, p1(5) X 10 p2(1) 10 p3, p1(5) empty p1(5) p3 X 15 15 p3 empty p3(1) empty X 16 16 empty empty empty empty X X ‫تعالى نشوف حليناها ازاي‬ ‫بعد ما ملينا أول ‪ row‬تعالى نشوف االتنين اللي تحته‪:‬‬ ‫‪time‬‬ ‫‪ready‬‬ ‫‪cpu‬‬ ‫‪highest priority‬‬ ‫‪updated‬‬ ‫‪next‬‬ ‫‪assumed‬‬ ‫‪queue‬‬ ‫)‪(cpu, queue‬‬ ‫‪ready queue‬‬ ‫‪arrival‬‬ ‫‪finish time‬‬ ‫‪time‬‬ ‫‪2‬‬ ‫‪p2‬‬ ‫)‪p1(5‬‬ ‫)‪p2(4‬‬ ‫)‪p1(5‬‬ ‫‪4‬‬ ‫‪8‬‬ ‫‪.1‬ال ‪ time‬ب ‪ , 2‬عشان دي أصغر قيمة بين (ال ‪ arrival‬و ال ‪ )finish‬ف الصف اللي قبلي‬ ‫‪.2‬ال ‪ ready queue‬قولنا ال (‪ updated‬من الصف اللي فات) ‪ )arrived process( +‬يبقى ‪p2‬‬ ‫‪.3‬ال ‪ cpu‬قولنا ال ‪ highest‬من الصف اللي فات و متنساش تطرح اشتغل اد ايه‬ ‫‪.4‬ال ‪ highest priority‬هنقارن بين االتنين اللي قبليا اللي لسا كاتبهم يبقى ‪ p2‬تكسب (الرقم األقل هو اللي بيكسب)‬ ‫)‪cpu ----> p1 (3‬‬ ‫)‪ready queue -----> p2 (2‬‬ ‫‪.5‬ال ‪( updated ready queue‬هيبقى فيه اللي خسروا المقارنة) اللي هم ‪p1‬‬ ‫‪.6‬ال ‪ next arrival‬من الجدول ‪4‬‬ ‫‪.7‬ال ‪ assumed finish‬اللي ماسك ال ‪ cpu‬هيخلص امتى لو محدش قطعه ‪6 = 2+4‬‬ ‫و األصغر ما بينهم اللي هي ال ‪ 4‬هنبدأ بيها الجدول الجديد (لو هي قيمة ال ‪ arrival‬يبقى ابص ف الجدول واجيبها)‬ ‫‪round robin‬‬ ‫ده بيخلي كل واحد يقعد عالجهاز ربع ساعة بعدين يقومه والتاني يقعد وهكذا‬ ‫ف المثال اللي فات‬ ‫الكومبيوتر بيمثل طبعا ال ‪cpu‬‬ ‫ال محاسب و الولد الصغير والباقي بيمثلوا ال ‪ready processes‬‬ ‫اللي ماسكين الشيفت بيمثلوا ال ‪dispatcher‬‬ ‫شخصياتهم المختلفة بيمثلوا ال ‪scheduling algorithms‬‬ ‫ال ‪ short time scheduler‬ده بيختار ناس من ال ‪ ready queue‬يديهم ال ‪ control‬ع الكمبيوتر‬ ‫ال‪ long time scheduling‬ده بيختار ناس من بقية ال‪ queues‬يحطهم ف ال ‪ready queue‬‬ ‫?‪what is a thread‬‬ ‫‪single threaded vs multithreaded program‬‬ ‫تخيل معايا مطعم برجر 🍔 فيه‪:‬‬ ‫‪.1‬موظف واحد شغال ‪ ,‬بياخد ال ‪ orders‬وبيعمل البرجر‬ ‫لو عندنا طابور فيه عشرين واحد عايزين برجر‪:‬‬ ‫‪):‬الكود الطبيعي اللي احنا بنكتبه(‪single thread process‬‬ ‫ال ‪ process‬بتاعتنا كتلة واحدة‬ ‫خد االوردر ‪ ,‬اعمل البرجر بعدين سلمه للعميل‬ ‫الكاشير بياخد االوردر ‪ ,‬بيعمل البرجر يستنى ‪ 10‬دقايق لما يخلص ‪ ,‬يسلم البرجر للعميل ‪ ,‬بعدين يبدأ ياخد اوردر من العميل التاني‬ ‫وهكذا ‪ ,‬بالوضع ده فيها ‪ 10 * 20‬دقايق يعني ‪ 200‬دقيقة (‪ )low performance‬عشان يخلص كل اللي ف الطابور‪.‬‬ ‫الكود استرشادي متركزش اوي يعني‬ ‫‪1‬‬ ‫{ )‪public static void main(String[] args‬‬ ‫‪2‬‬ ‫;)(‪SingleThreadRestaurant restaurant = new SingleThreadRestaurant‬‬ ‫‪3‬‬ ‫)‪while(true‬‬ ‫‪4‬‬ ‫{‬ ‫‪5‬‬ ‫;)(‪restaurant.takeOrder‬‬ ‫‪6‬‬ ‫;)(‪restaurant.cook‬‬ ‫‪7‬‬ ‫‪// 10 minutes‬‬ ‫‪8‬‬ ‫}‬ ‫الوضع صعب صح ؟؟؟‬ ‫جبنا موظف ف المطبخ يشتغل معاه 😃‬ ‫فبقى الكاشير ياخد االوردر يعمل البرجر يستنى ‪ 10‬دقايق جنبه لحد م يخلص ‪ ,‬بعدين يسلم البرجر للعميل ويبدأ ياخد اوردر من عميل‬ ‫تاني ‪ ,‬و موظف المطبخ واقف بيشرب شاي‬ ‫ايه العبط ده 😠؟ طب واحنا استفادنا ايه كدة فين الموظف الجديد ؟؟؟ بالظبط مستفدناش حاجة عشان حضرتك كاتب الكود ككتلة واحدة‬ ‫من غير ‪threads‬‬ ‫‪single-thread process waste resources‬‬ ‫‪multi thread process‬‬ ‫ال ‪ process‬بتاعتنا هنكسرها ل جزئين منفصلين ممكن يشتغلوا سوا‬ ‫‪.1‬جزء هيبقى مسئول انه ياخد االوردر‬ ‫‪)2‬جزء هيبقى مسئول انه يعمل البرجر‬ ‫الكاشير بياخد االوردر ‪ ,‬بيكتبه ف ورقة و يسيبه لموظف المطبخ ‪ ,‬بعدين يرجع ياخد اوردر من العميل التاني فهنا الموظفين شغالين‬ ‫كلهم (‪ )full use of resource‬وبالتالي الطابور هيخلص ف وقت أقل (‪)higher performance‬‬ ‫‪1‬‬ ‫;)};)(‪Thread orderThread = new Thread(() -> { restaurant.takeOrders‬‬ ‫‪2‬‬ ‫;)};)(‪Thread cookThread = new Thread(() -> { restaurant.cook‬‬ ‫ايه اللي فرق يعني 😆‬ ‫ف ال ‪ single thread‬كان عندك عيب ف ال ‪ design‬انك بتستنى ‪ cook function‬تخلص ال ‪ 10‬دقايق بتوعها عشان تقدر‬ ‫ترجع ف اللوب و تشغل ‪ take order function‬من تاني (عشان الكود بيمشي من فوق لتحت ‪)sequentially‬‬ ‫طب هو انا الزم اعمل البرجر واسلمه عشان اخد اوردر جديد ؟؟؟؟؟ طيب ‪ take order‬تستنى ال ‪ 10‬دقايق دول ليه وهي مش‬ ‫بتعتمد على ال ‪ cook‬أصال‬ ‫و هنا اكتشفنا ان ال ‪ process‬ممكن تتقسم ل اجزاء أصغر يشتغلوا مع بعض ف نفس الوقت ‪ ,‬مش محتاج اخلص عمل البرجر عشان‬ ‫اخد االوردر ‪ ,‬ممكن اعمل االتنين سوا‬ ‫لما ال ‪ process‬بتاعتك اتقسمت لجزئين أصغر (‪)two threads‬‬ ‫ال ‪ OS‬شايف حاجتين منفصلتين محتاجين يتعملوا ف هيعملهم ‪ scheduling‬كأي اتنين ‪ process‬منفصلين ي ‪ execute‬دي‬ ‫شوية ودي شوية ‪,‬و يا سالم بقا لو عندك أكتر من ‪ processor core‬كل واحدة هتشتغل على ‪ core‬ف نفس الوقت‬ ‫🚧شوفت ازاي لما بتقسم ال ‪ process‬بتاعتك ل أجزاء أصغر منفصلة الموضوع بيفرق؟؟‬ ‫اهو كل جزء من األجزاء الصغيرة دي اسمه ‪thread‬‬ ‫‪Concurrency‬‬ ‫ال ‪ concurrency‬ان يبقى عندي أكتر من ‪ process‬بيحصلهم ‪ execution‬مع بعض ف نفس الوقت‬ ‫وده بيحصل بطريقتين‬ ‫‪interleaved‬‬ ‫‪overlapping‬‬ ‫)‪multitasking with single CPU (interleaved‬‬ ‫متلخبط صح ؟ ازاي ف نفس الوقت ‪ ,‬واحنا اصال معندناش غير هو ‪ CPU‬واحد‬ ‫انت صح على فكرة طب ليه بيقولوا عليه ‪ multitasking‬؟؟؟؟‬ ‫الن ال ‪ CPU‬بيبدل ما بينهم بسرعة جدا ف انت مش هتالحظ طبعا السرعة دي وهتفتكرهم بيحصلوا ف نفس الوقت‬ ‫)‪multitasking with multiple CPUs (overlapping‬‬ ‫ده بقا ال ‪ multitasking‬ال💯 الن احنا هنا نقدر نعمل كذا حاجة ف نفس الوقت عشان عندنا كذا ‪CPU‬‬ ‫عايز اقولك انك لما بتكتب الكود ك كتلة واحدة من غير ال ‪ threads‬وانت مثال عندك ‪ processor‬فيه ‪ , cores 2‬ف انت معندكش‬ ‫غير ‪ task‬او ‪ process‬واحدة بس تتعمل ف نظر ال ‪ CPU‬ف هيقعد مستني ال ‪ cook‬تخلص عشان يقدر ي ‪ execute‬ال‬ ‫‪ order‬زي م قولنا ف السيناريو األول‬ ‫‪without threading , waste resources, no multitasking------>low performance‬‬ ‫لكن لو بتكتب الكود بتاعك ‪ multithreaded‬ف ال ‪ OS‬هيعملهم ‪ scheduling‬بشكل منفصل ف انت لو عندك‬ ‫‪.1‬ال )‪CPU (one core‬‬ ‫ف انت هنا هيحصل ‪ timeshare‬و الوضع هيبقى أفضل على األقل من اللي فوق‪ ,‬النه شوية هيشغل ‪ take order‬وشوية‬ ‫‪ cook‬وهيبدل بينهم بسرعة‬ ‫كأن الكاشير ياخد اوردر ويروح يقلب البرجر شوية عالنار بعدين يرجع ياخد اوردر بعدين يرجع يحط صوص‬ ‫‪.2‬ال )‪CPU (multiple cores‬‬ ‫هنا بقى عم ال ‪ multitasking‬بجد ألن فيه ‪ core‬هت ‪ execute‬ال ‪ take order‬و ف نفس الوقت ال ‪ core‬التانية هت‬ ‫‪ execute‬ال ‪cook‬‬ ‫الكاشير واقف ياخد اوردرز بس و موظف المطبخ واقف يعمل برجر بس‬ ‫‪with threading , full use of resources, concurrency(multitasking) ------>high performance‬‬ ‫اظن كدة فهمنا ليه بيتقال عليها )‪ >------ light weight process (LWT‬عشان هي جزء صغير من ال ‪ process‬ويكأنها‬ ‫‪ process‬مصغرة‬ ‫هو فيه ‪ process‬من غير ‪ threads‬؟‬ ‫أل ي سيدي مفيش ‪ ,‬ال ‪ process‬العادية بتاعتنا دي اسمها ‪.single thread‬‬ ‫بيقولك بقا ان ال ‪ threads‬بتاعت ال ‪ process‬الواحدة بيتشاركوا ف حاجات كدة ‪:‬‬ ‫‪1. code segment :‬‬ ‫يعني ‪ thread 1‬بتاعت ‪ take order‬شايفة الكود بتاع ‪ thread 2‬اللي هي ‪ cook‬والعكس‬ ‫ايوة متفق معاك مش ميزة جامدة اوي يعني‬ ‫‪2. data segment:‬‬ ‫يعني ال ‪ global variables‬بينهم اقدر اعمل عليها ‪ access‬من أي واحد فيهم‬ ‫عشان كدة بيقولك انهم أجمد من ال ‪ processes‬ف ال ‪communication‬‬ ‫‪3. files and resources‬‬ ‫طالما ال ‪ resource‬بقى بتاع ال ‪ process‬يبقى بتاعنا كلنا 👦‍👩‍👨‬ ‫يقولك بقا ان ال ‪ threads‬بتاعت ال ‪ process‬الواحدة بيختلفوا ف حاجات كدة أصل فين الخصوصية برضو ‪:‬‬ ‫‪1. stack‬‬ ‫مش هي ال ‪ thread‬عبارة عن ‪ functions‬زي ‪ take order‬كدة يبقى الزملنا ‪ stack‬لكل واحد‬ ‫‪2. CPU registers‬‬ ‫)‪3. TCB (thread control block‬‬ ‫شبه بتاع ال ‪ process‬كدة‬ dispatching multi-threaded processes ‫ فيها اللي هيبقى شغال ؟‬thread ‫ انهي‬running ‫ لما تبقى‬process ‫يا تري ال‬ ‫منعرفش لألسف 😢 الموضوع خارج تحكمنا‬ 😱 ‫ بتاعنا غلط‬design ‫ف احنا كدة ال‬ ‫ بتعتمد على اني الزم اخد اوردر األول‬cook ‫ لكن نسينا ان ال‬, cook ‫ مش بتعتمد على ال‬take order ‫الننا اعتمدنا ان ال‬ ‫ طب ده كالم برضو‬, ‫ تحصل قبل م اخد االوردر أصال‬cook ‫ بتاعت ال‬thread ‫متخيل ي مان ان ممكن ال‬ 1 Thread orderThread = new Thread(() -> { restaurant.takeOrders();}); 2 Thread cookThread = new Thread(() -> { restaurant.cook();}); solution 1 private static boolean orderTaken = false; 2 3 public static synchronized void takeOrder() { 4 //take order processing........... 5 orderTaken = true; 6 } 7 8 public static synchronized void cook() { 9 while (!orderTaken) { wait(); } 10 // cook processing.................. 11 } ‫ والحاجات الحلوة دي‬thread communication ‫ و ال‬global variables ‫خدت بالك من ال‬ ‫مخدتش بالك 😱 طب بص‬ ‫ ف هيستنى لحد م االوردر يتاخد‬false ‫ ب‬global variable ‫ هيالقي ان ال‬order ‫ قبل ما ناخد‬execute ‫ جت ت‬cook ‫لو ال‬ thread communication ‫ اللي سهلتلنا ال‬shared memory ‫و بكدة اتأكدنا ان الدنيا ف السليم منه 💯 بفضل ال‬ Benefits of threads 1. responsiveness ‫ زي م شرحنا فوق كدة‬, ‫سرعة االستجابة‬ 2. resource sharing 3. economy(full use of resources) 4. utilization of multiprocessor architecture ‫‪user level threads vs kernel level threads‬‬ ‫‪user level threads‬‬ ‫دي ال ‪ threads‬اللي احنا بنكتبها ف الكود بتاعنا ‪ ,‬فعشان كدة بنقول ‪created by user apps‬‬ ‫ال ‪ OS‬ميعرفش عنها حاجة حرفيا بياخدك على قد عقلك ‪ ,‬هو شايف بس ال ‪ process‬من برة واحدة بس‬ ‫طب بالعقل كدة طالما مش شايفهم اومال مين اللي بيختار ال ‪ thread‬اللي عليها الدور عشان ت ‪ execute‬؟؟؟‬ ‫لما ال ‪ kernel‬بيختار ال ‪, process‬ال ‪ library‬اللي انت عاملها ‪ include‬ف الكود بتاعك فيها كود ال ‪ management‬لل‬ ‫‪ threads‬دي كلها‬ ‫‪disadvantages‬‬ ‫لو انا ك ‪ kernel‬شايفك ‪ process‬واحدة يبقى‬ ‫‪.1‬مهما كان جواك ‪ threads‬مش هتاخد مني غير ‪ CPU‬واحد الني شايفك ‪ process‬واحدة و ال ‪ kernel‬مش عبيط عشان ي‬ ‫‪ allocate‬اكتر من ‪ core‬لنفس ال ‪ , process‬ف مفيش ‪multiprocessing‬‬ ‫‪.2‬لو ‪ thread‬عازت ‪ i/o‬اللي هيحصل هتقول لل ‪ kernel‬صح ؟ ال ‪ kernel‬مش شايفاها هي شايفة ال ‪ process‬هي اللي‬ ‫طلبت ال ‪ i/o‬ف هترمي ال ‪ process‬كلها على ال ‪ blocking‬مع ان كان فيه ‪ threads‬تانية كان ممكن تشتغل‬ ‫‪kernel level threads‬‬ ‫دي بقا ال ‪ kernel‬هي اللي بت ‪ create‬ها‬ ‫طبعا ال ‪ kernel‬شايفها ثرداية ثرداية ف ال ‪ scheduling‬هنا على المكشوف عادي ‪ ,‬ف فيه ‪ multiprocessing‬عادي و لو‬ ‫‪ thread‬احتاجت ‪ i/o‬هعملها هي بس ‪ blocking‬مش ال ‪ process‬كلها‬ ‫متخيل ي مان ال ‪ user level‬ضعيفة ازاي عشان كدة محتاجين نعمل حاجة اسمها ‪mapping‬‬ mapping M:1 ‫ واحدة ف‬kernel thread ‫ ل‬map ‫ بت‬many user threads ‫زي ما شرحنا فوق كدة ال‬ ‫ بقية ال‬blocking ‫ حصلها‬thread ‫ و لو‬multi processing ‫ واحدة بس ف مفيش‬kernel thread ‫ شايف‬kernel ‫ ال‬.1 ‫ هتحصلها‬threads library ‫ ف هتتهندل ب ال‬kernel ‫ مش متشافة من ال‬user threads ‫ ال‬.2 one : one ‫ ف‬kernel thread ‫ ل‬map ‫ بت‬user thread ‫هنا كل‬ scheduling ‫ شايفهم كلهم عادي وهو اللي هيهندل ال‬kernel ‫ ال‬.1 thread ‫ ل‬blocking ‫ و مفيش مشكلة لو حصل‬multiprocessing ‫ فيه‬.2 kernel 12 ‫ يعني‬user threads 12 ‫ هيبقى توتال‬threads 3 ‫ كل واحدة فيها‬process 4 ‫ متخيل ان لو عندنا‬.3 ‫ بشكل منفصل فالموضوع مكلف‬scheduling ‫ بيحصلهم‬, threads M : M (smaller) ‫ ف‬two kernel thread‫ ل‬map ‫ بت‬five user threads ‫هنا كل مثال لو عندنا‬ ‫ االولى هتاخد‬processes 2 ‫ عادي ألني شايف‬multiprocessing ‫ فهيحصل‬, ‫ بس‬2 ‫ عبارة عن‬5 ‫ شايف ال‬kernel ‫ ال‬.1 ‫ يقدر ينقل على التانية مش هيعمل‬thread 1 ‫ ل‬blocking ‫ ولو حصل‬, processor ‫ والتانية هتاخد‬processor ‫ كلها‬user process ‫ لل‬blocking ‫ سوا‬scheduling ‫ بيهندلوا ال‬library ‫ و ال‬kernel ‫ ال‬.2 ‫‪mutual exclusion‬‬ ‫عشان نشرح ال ‪ mutual exclusion‬محتاجين ننزل الجيم‬ ‫نزلنا الجيم خالص ‪ ,‬حطينا الشنطة ف ‪ , locker‬يال نروح نتمرن بقى ‪,‬استنى مكانك ️☹ تعالى نتكلم على ال ‪ locker‬شوية بعدين‬ ‫نروح نتمرن‬ ‫ال ‪ locker‬ده اسمه ‪ shared resource‬النه مش معمول لحضرتك مخصوص يعني ‪ ,‬ممكن انت تستخدمه ‪ ,‬ممكن حد تاني‪ ,‬ممكن‬ ‫حد تالت ألنه ‪ public‬صح؟؟‬ ‫مشكلة ال ‪ shared resource‬زي ال ‪ locker‬كدة ‪ ,‬ممكن حد معندوش ضمير 👺 يجي يرمي شنطتك ف األرض ويحط شنطته‬ ‫أو يحط حاجته جنبك (لو طيب يعني)‬ ‫طب نعمل ايه ؟؟؟ محتاجين نتصرف ؟؟ هنا بقا ييجي ال ‪mutual exclusion‬‬ ‫ال ‪ mutual exclusion‬معناه ان محدش يستخدم ال ‪ resource‬قبل م التاني يخلص استخدامه‬ ‫طب وهنعمل كدة ازاي ؟‬ ‫💡ادارة الجيم هتدي حضرتك مفتاح 🔑 وانت داخل ‪ ,‬هتقفل ال ‪ , locker‬تخلص تمرينك ‪ ,‬تاخد حاجتك وتسلمهم المفتاح‬ ‫ال ‪ lock‬ده طريقة من الطرق اللي حققتلي ال ‪mutual exclusion‬‬ ‫بنحتاج نطبق ال ‪ mutual exclusion‬لما يبقى عندنا‬ ‫‪1. shared resource‬‬ ‫مش ليك مخصوص ‪ ,‬لكنه معمول لالستخدام العام ‪ locker‬ال‬ ‫‪2. concurrency‬‬ ‫ده ممكن حد يحاول يستخدمه معاك ‪ locker‬ال‬ ‫‪1‬‬ ‫;‪int x = 20‬‬ ‫‪2‬‬ ‫)(‪int main‬‬ ‫‪3‬‬ ‫{‬ ‫‪4‬‬ ‫;)(‪func1‬‬ ‫‪5‬‬ ‫;)(‪func2‬‬ ‫‪6‬‬ ‫}‬ ‫الكود ده ‪ sequentially‬من تحت لفوق كأننا بنقول ‪ func1‬هتحط شنطتها ف ال‪ locker‬وتخرج ‪ ,‬بعدين ‪ func2‬هتيجي بعدها‬ ‫تستعمل ال ‪locker‬‬ ‫ف عندنا ‪ process‬واحدة بس مفيش غيرها بيحصل فيها كل حاجة‬ ‫)‪shared resource ✅ (global variable x‬‬ ‫❌ ‪concurrency‬‬ ‫بالتالي مش محتاجين نحقق ال ‪mutual exclusion‬‬ 1 int x = 20; 2 Thread f1 = new Thread(() -> { func1();}); 3 Thread f2 = new Thread(() -> { func2();}); ‫ كوبي بيست من بعض‬processes 2 ‫ او‬threads ‫لكن لو عندنا‬ ‫ ك أي اتنين منفصلين ف ممكن يبدل بينهم بسرعة او ينفذهم‬scheduling ‫ شايفهم اتنين منفصلين و هيعملهم‬processor ‫ ال‬.1 ‫ منفصل‬core ‫ كل واحدة على‬in parallel shared resource (global variable) ✅ concurrency ✅ mutual exclusion ‫بالتالي محتاجين نحقق ال‬ what can happen if didn't achieve mutual exclusion? ‫ على موقع البنك من‬log in ‫ هعمل‬, ‫ جنيه ف البنك‬100 ‫ عصام قال الياد انا معايا‬, ‫عندنا اتنين أخالقهم مش أحسن حاجة عصام و اياد‬ ‫ بتاعتي‬100‫ و هات ال‬100 ‫ جنيه يمعلم خد‬200 ‫ ف نفس الوقت وبكدة يبقى وصلك‬transfer ‫جهازين مختلفين و ادوس‬ process 1 1 int essam_balance = 100; 2 int eyad_balance = 0; 3 4 void transfer(int amount,// from essam , to eyad) 5 { 6 if(amount >= balance) 7 { 8 eyad_balnce += amount; 9 essam_balance -= amount; 10 } 11 } process 2 1 int essam_balance = 100; 2 int eyad_balance = 0; 3 4 void transfer(int amount,// from essam , to eyad) 5 { 6 if(amount >= balance) 7 { 8 eyad_balnce += amount; 9 essam_balance -= amount; 10 } 11 } ) ‫ ف نفس الوقت‬transfer ‫ دول ف نفس الوقت (عشان عصام ضغط على‬processes 2 ‫ جالك ال‬server ‫انت ك‬ timeslot ‫ بعد ال‬processor ‫ األولى وشال منها ال‬process‫ بدأ ب ال‬scheduler ‫جه ال‬ ‫ و لسا مخصمتش المبلغ من حساب عصام‬100 ‫زودت اياد‬ 1 eyad_balance += amount; (done) 2 //..to be continue in next timeslot 3 //essam_balance -= amount; ‫ بتاعتها خلصت‬timeslot ‫ كمان و‬100 ‫ تمام راحت دخلت هي التانية و زودت اياد‬condition ‫ بدأت شغل لقت ال‬process 2 ‫ال‬ 1 eyad_balance += amount;(done) 2 //.. to be continue in next timeslot 3 //essam_balance -= amount; essam_balance = 0 ‫ خصمت المبلغ بقى ال‬execution ‫ تكمل‬process 1 ‫رجعت ال‬ essam_balance = -100 ‫ خصمت المبلغ بقى ال‬execution ‫ تكمل‬process 2 ‫رجعت‬ ‫ و‬concurrency ‫ و ممكن يحصل عليه‬shared resource ‫وبكدة عصام واياد ضحكوا عليك عشان حضرتك عارف ان عندك‬ mutual exclusion ‫محققتش ال‬ how can we achieve mutual exclusion ‫ اللي مينفعش حد يدخله قبل م التاني يخلصه كله ؟؟؟‬code block ‫بص على الكود كدة و قولي انهي‬ ‫دي صح‬ 1 if(amount >= balance) 2 { 3 eyad_balnce += amount; 4 essam_balance -= amount; 5 } ‫ كدة‬locker ‫ دي شبة ال‬critical section ‫حتة الكود دي بقا ي سيدي اسمها ال‬ ‫هنعمل ايه بقا ؟؟؟‬ ‫بسيطة هنقفلها بالمفتاح وبعد م نخلص هنفتحها تاني‬ 1 void transfer(int amount,// from essam , to eyad) 2 { 3 take_key_and_lock(); 4 if(amount >= balance) 5 { 6 eyad_balnce += amount; 7 essam_balance -= amount; 8 } 9 unlock_and_release_key(); 10 } ‫ دي‬functions ‫ واحد وده بيحصل فعال مش بضحك عليك ولكن ال‬concept ‫ دي مش حقيقية ولكن ال‬functions ‫طبعا ال‬ ‫ بطرق مختلفة‬implementations ‫بيحصلها‬ ‫ايه الفرق بقا ؟؟؟‬ processes ‫ ل اتنين‬creation ‫ مرتين ف نفس الوقت زي ما هو وعمل‬transfer ‫عصام ضغط‬ processes 1 1 void transfer(int amount,// from essam , to eyad) 2 { 3 take_key_and_lock(); 4 if(amount >= balance) 5 { 6 eyad_balnce += amount; 7 essam_balance -= amount; 8 } 9 unlock_and_release_key(); 10 } ‫ خلصت‬timeslot ‫ و لسا مخصمتش المبلغ من حساب عصام كالعادة كانت ال‬100 ‫ زودت اياد‬process 1 ‫بدأت‬ 1 eyad_balance += amount;(done) process 2 ‫ اتاخد منها وراح ينفذ‬CPU ‫بعدين ال‬ ‫‪1‬‬ ‫)‪void transfer(int amount,// from essam , to eyad‬‬ ‫‪2‬‬ ‫{‬ ‫‪3‬‬ ‫;)(‪take_key_and_lock‬‬ ‫‪4‬‬ ‫)‪if(amount >= balance‬‬ ‫‪5‬‬ ‫{‬ ‫‪6‬‬ ‫‪eyad_balnce‬‬ ‫;‪+= amount‬‬ ‫‪7‬‬ ‫;‪essam_balance -= amount‬‬ ‫‪8‬‬ ‫}‬ ‫‪9‬‬ ‫;)(‪unlock_and_release_key‬‬ ‫‪10‬‬ ‫}‬ ‫هنا الصدمة‬ ‫)(‪`take_key_and_lock‬‬ ‫ال ‪ key‬مع ‪ process 1‬ي معلم ‪ ,‬قصدي ال ‪ locker‬مقفول و المفتاح مع حد غيرك ‪ ,‬استنى بقى ف طابور ال ‪ waiting‬على ما‬ ‫‪ process 1‬تخلص ‪,‬وتسيب ال ‪key‬‬ ‫شوفت ال ‪ mutual exclusion‬حلو ازاي‬ ‫‪2. printer‬‬ ‫ناخد مثال تاني عشان نثبت الفكرة‬ ‫من الحاجات اللي محتاجين نعملها ‪( mutual exclusion‬يعني محدش يستخدم ال ‪ resource‬قبل م التاني يخلص استخدامه) هي ال‬ ‫‪printer‬‬ ‫يا ترى ليه؟؟؟؟ عشان ‪ shared resource‬و ‪ concurrency‬ممكن تحصل‬ ‫تخيل مثال ‪ process‬عايزة تطبع ‪ file Y‬و ‪ process‬تانية عايزة تطبع ‪ , file X‬االتنين محتاجين ال ‪ printer‬حاال باال فاال‬ ‫ينفع ‪ process‬تطبع سطرين من ‪ file X‬بعدين ال ‪ CPU‬يطلعها تستنى و ينزل التانية تطبع سطرين من ‪ file Y‬؟؟‬ ‫أكيد أل‬ ‫ال ‪ OS‬هنا بيقولك مش بتاعتك انت دي ده ‪ hardware‬من اختصاصي انا ههندل أنا ال ‪mutual exclusion‬‬ ‫وبيعمل نفس اللي كنا بنعمله فوق اللي هتاخد ال ‪ printer‬األول هتقفل عليها لحد ما تخلص شغلها‪.‬‬ ‫طب لو ال ‪ timeslot‬بتاعتها خلصت وهي لسا مخلصتش؟؟؟‬ ‫وال أي مشكلة هتاخد المفتاح معاها وهي طالعة‪ ,‬مش هتسيبه لحد ما ترجع تاني وتخلص استخدامها لل ‪printer‬‬ ‫كأن ال الكود كده‬ ‫‪1‬‬ ‫;)(‪acquire_printer‬‬ ‫‪2‬‬ ‫;)(‪printing‬‬ ‫‪3‬‬ ‫;)(‪releasing_printer‬‬ ‫تيجي أي ‪ process‬تانية تالقي ال ‪ printer‬مع حد تاني والزم تستنى‬ ‫عرفت ليه بقى ي سيدي ال ‪ mutual exclusion‬أحد أسباب ال ‪ deadlock‬؟؟‬ ‫عشان ال ‪ process‬حتى لو مش ‪ running‬ممكن يبقى معاها ‪ resource‬مش هتسيبه لحد م تخلص هتعمل ‪ lock‬عليه يعني‬ ‫‪if there is no lock, there is no deadlock‬‬ ‫مش عارف يعني ايه ‪ deadlock‬أصال طب تعالى‬ ‫‪DEADLOCK‬‬ ‫ف أحد االمتحانات ‪ ,‬عصام و اياد قاعدين جنب بعض ‪ ,‬عصام نسى القلم بتاعه ‪ ,‬طلب من اياد قلم لكن اياد مش معاه‬ ‫وهم بيوزعوا االمتحان قالوا كل اتنين جنب بعض ياخدوا ورقة اسئلة واحدة‪ ,‬وكل واحد يكتب االجابات بتاعته ف ورقة خارجية‬ ‫عصام قام نتش ورقة األسئلة بسرعة وقال ل اياد هات القلم و اال مفيش ورق‬ ‫اياد قاله هات انت الورقة واال مفيش قلم‬ ‫عصام‬ ‫معاه ورقة األسئلة ✅‬ ‫معهوش قلم ❌‬ ‫ف مش هيعرف يعمل حاجة‬ ‫اياد‬ ‫معاه قلم ✅‬ ‫معهوش ورقة اسئلة ❌‬ ‫ف مش هيعرف يعمل حاجة برضو‬ ‫💢 لألسف االتنين مستحيل حد فيهم يتنازل عن اللي معاه ألن أخالقهم مش أحسن حاجة زي ما شوفنا قبل كدة‪.‬‬ ‫الوقت خلص و محدش حل حاجة ف االخر‬ ‫‪deadlock conditions‬‬ ‫‪1) mutual exclusion‬‬ ‫‪💢 problem discerption:‬‬ ‫‪ :‬فاكر لما قولتلك ان ال ‪ mutual exclusion‬يعني (مينفعش حد يستخدم ‪ resource‬قبل م التاني يخلص) و ال ‪ process‬لو‬ ‫عملت ‪ acquire‬ل ‪ resource‬مش هتسيبه اال لما تخلص‬ ‫الحتة دي شبه أخالق عصام واياد كدة اللي مش أحسن حاجة ‪ ,‬يعني ممكن اي واحدة فيهم تسيب ال ‪ resource‬للتانية لكن ال‬ ‫‪( mutual exclusion‬األخالق اللي مش أحسن حاجة) بتحتم عليهم ميسيبوش ال ‪ resource‬غير لما كل واحد يخلص مصلحته‬ ‫‪🍎 solution:‬‬ ‫مفيش حل لل ‪ , mutual exclusion‬أصل هتعمل ايه عندك ‪ printer‬واحدة مفيش غيرها ومش هينفع حد يستخدمها قبل م‬ ‫التاني يخلص‪.‬‬ ‫‪2) hold and wait‬‬ ‫‪💢 problem discerption:‬‬ ‫من اسمها يعني كل ‪ process‬بيبقى معاها ‪ resource‬و مستنية ‪resource‬‬ ‫زي عصام كدة معاه القلم و مستنى الورقة و اياد مستني القلم ومعاه الورقة‬ ‫‪🍏 solution:‬‬ ‫عارف المراقب لو كان قاله طالما مش معاك قلم ‪ ,‬هتاخد ورقة األسئلة تعمل بيها ايه ‪ ,‬مش هتاخدها كان‬ ‫زمانها اتحلت‬ ‫🧠ال ‪ OS‬بيشوف ال ‪ process‬محتاجة ايه ‪ ,‬لو محتاجة ‪ two resources‬واحد بس متاح والتاني أل ‪ ,‬مش هيديها اللي معاه‬ ‫ألنها مش هتعرف تعمل بيه حاجة لوحده‬ ‫‪3) no pre-emption‬‬ ‫‪💢 problem discerption:‬‬ ‫االتنين محدش يقدر يجبرهم انهم يسيبوا حاجة‬ ‫‪🍏 solution:‬‬ ‫عارف لو المراقب قال ل عصام هات الورقة و اطلع استنى برة ‪ ,‬لما حد يخلص ابقى خد قلمه كانت اتحلت‬ ‫🧠ال ‪ OS‬بياخد ال ‪ resources‬من ال ‪ process‬وبيقولها استني ف ال ‪blocking‬‬ ‫💡خلي بالك ال ‪ preemption‬هنا غير ال ‪ preemption‬بتاع ال ‪, scheduling algorithms‬ازاي؟؟‬ ‫ال ‪ preemption‬بتاع ال ‪ scheduling‬ده بيحصل على مستوى ال ‪, CPU‬يعني باخد ال ‪ CPU‬بس من ال ‪process‬‬ ‫انما لو معاها أي ‪ resource‬بيفضل معاها‬ ‫ال ‪ preemption‬بتاع ال ‪ deadlock solution‬ده بياخد ال ‪ resources‬من ال ‪ process‬كمان‬ ‫‪4) circular wait‬‬ ‫‪💢 problem discerption:‬‬ ‫من اسمها كدة تحس فيه ‪ circle‬او ‪ loop‬الن كل واحد مستنى التاني‬ ‫عصام ‪ :‬هات يبني القلم‬ ‫اياد ‪ :‬هات انت الورقة‬ ‫عصام ‪ :‬هات يبني القلم‬ ‫اياد‪ :‬هات انت الورقة‬ ‫عصام‪ :‬هات يبني القلم‬ ‫اياد ‪ :‬هات انت الورقة‬ ‫‪🍏 solution:‬‬ ‫✅بنعمل ‪ linear order‬لل ‪ resources‬الزم ال ‪ process‬تمتلكهم بالترتيب يعني لو ممتلكتش رقم ‪ , 1‬مش هتمتلك رقم ‪2‬‬ ‫‪.1‬قلم (عدد ‪ 1‬قلم)‬ ‫‪.2‬ورقة (عدد ‪ 1‬ورقة)‬ ‫المشكلة مش هتحصل ليه ؟ ألن اللي امتلك القلم األول هو اللي هيكسب السباق ويمتلك الورقة‬ ‫مبقاش فيه حاجة اسمها حد يمتلك القلم و حد يمتلك الورقة واالتنين ي ‪ circular wait‬على بعض‬ ‫‪deadlock recovery‬‬ ‫لو ال ‪ deadlock‬حصل خالص نعمل ايه ؟؟؟؟؟؟‬ ‫بنختار ‪ , process‬ال ‪ process‬الغلبانة دي اسمها ‪ victim‬الضحية يعني‬ ‫بنعملها‬ ‫‪.1‬اما ‪ abort‬عشان تسيب ال ‪ resources‬اللي معاها‬ ‫‪.2‬أو ‪ rollback‬زي بتاع ال ‪ database‬كدة‪ ,‬يعني لو عملنا ‪ progress‬ف ال ‪ process‬بنرجع فيه للحتة قبل ما تاخد ال‬ ‫‪resource‬‬ ‫مش بنختار ال ‪ victim process‬اعتباطيا بيبقى فيه شوية معايير زي مثال‬ ‫‪.1‬هي بقالها نص ساعة شغالة وفاضلها دقيقة ينفع تقوم عاملها ‪ abort‬وبادئ من األول فعشان كدة الزم يبقى ‪cost effective‬‬ ‫‪.2‬ممكن نختارها على حسب ال ‪ priority‬برضو و ف الحالة دي لو كل مرة الحظ وقع على نفس ال ‪ process‬انها تطلع بسبب‬ ‫ان عندها ‪ low priority‬بيحصل حاجة اسمها ‪ starvation‬يعني بتموت من جوعها لل ‪resources‬‬ ‫‪logical address vs physical address‬‬ ‫‪1‬‬ ‫)‪int sum(int x, int y‬‬ ‫‪2‬‬ ‫{‬ ‫‪3‬‬ ‫;‪return x + y‬‬ ‫‪4‬‬ ‫}‬ ‫شايف الكود ده ؟؟؟ تعالى ناخد معاه رحلته من األول خالص من أيام كود مكتوب بال ‪c‬‬ ‫كلنا عارفين ال ‪ compiler‬صح ‪ ,‬ال ‪ compiler‬بيحول ال كود اللذيذ ده ل ‪ binary code‬شوية ‪ 0‬و ‪1‬‬ ‫حلو لحد هنا‬ ‫محتاجين نقول لل ‪ CPU‬اللي هيعمل ‪execution‬‬ ‫يا ‪CPU‬‬ ‫ال ‪ instructions‬بتاعتي هتالقيه بتبدأ من ال ‪ address‬ده ‪xxxxxxx‬‬ ‫ال ‪ address‬اللي بيبدأ منه ال ‪ program‬اسمه ‪ base address‬وركز عشان مهم‬ ‫بس فيه مشكلة هنا 💢‬ ‫مينفعش ال ‪ compiler‬يقول لل ‪ CPU‬ال ‪ instructions‬بتاعتي هتبدأ من العنوان ‪ 0x5555‬مثال الن ال ‪ compiler‬ملوش حكم‬ ‫على ال ‪ , memory‬و ميعرفش اذا كان ال ‪ address‬ده فاضي أصال و ال أل‬ ‫طب هنحلها ازاي ؟؟؟؟‬ ‫ولنفرض اني عندي‬ ‫‪Symbol‬‬ ‫‪Size‬‬ ‫)‪Address (Logical‬‬ ‫‪base address‬‬ ‫‪sum‬‬ ‫)‪50 bytes (approx.‬‬ ‫‪0‬‬ ‫‪xxxx xxxx‬‬ ‫‪x‬‬ ‫)‪4 bytes (int‬‬ ‫‪50‬‬ ‫‪xxxx xxxx‬‬ ‫‪y‬‬ ‫)‪4 bytes (int‬‬ ‫‪54‬‬ ‫‪xxxx xxxx‬‬ ‫هقول لل ‪ OS‬لما تيجي تعملي ‪ memory allocation‬ايا كان ال ‪ base address‬اللي هتدهولي‬ ‫عايز ال ‪ sum‬تبقى بعد ال ‪ address‬ده ب ‪( 0‬يعني نفس ال ‪ address‬النها أول ‪ function‬اخزنها)‬ ‫عايز ال ‪ x‬تبقى بعد ال ‪ address‬ده ب‪( 50‬عشان اول ‪ 50‬خزنت فيهم ال ‪)sum‬‬ ‫عايز ال ‪ y‬تبقى بعد ال ‪ address‬ده ب ‪( 54‬علشان ‪ sum‬خدت ‪ 50‬و ‪ x‬خدت ‪)4‬‬ ‫مش ده اللي بيحصل بالظبط ولكن نفس ال ‪concept‬‬ ‫)‪physical address = base address + logical address (offset address‬‬ ‫ال ‪ physical address‬اللي هستخدمه فعليا عند ال ‪ execution‬يساوي‬ ‫ال ‪ base address‬اللي هتدهوني يا ‪ + OS‬ال ‪ logical address‬اللي هتدهوني ي ‪( compiler‬ممكن تالقي ‪ CPU‬بدل‬ ‫‪ compiler‬على اعتبار ان ال ‪ CPU‬بي ‪ fetch‬من الكود اللي كاتبه ال ‪)compiler‬‬ ‫اللي بيعمل عمليه الجمع دي ‪ hardware‬اسمه ‪ MMU‬أو ‪memory manage unit‬‬ ‫فاكر ال ‪ CPU scheduling‬ال ‪ OS‬كان عنده ‪ algorithms‬كتير عشان يعرف يدي ال ‪ processes‬المختلفة لل ‪CPU‬‬ ‫هنا بقا ال‪ memory allocation‬ال ‪ OS‬محتاج ‪ algorithms‬برضو عشان يعرف يدي ال ‪ processes‬المختلفة ‪memory‬‬ ‫يستخدموها‬ ‫‪1) contiguous Allocation‬‬ ‫‪1.1) single partition reallocation‬‬ ‫هنا ال ‪ memory‬كلها على بعضها قسمناها ل اتنين ‪partition‬‬ ‫جزء أو ‪ partition‬لل ‪OS‬‬ ‫جزء لل ‪user process‬‬ ‫طبعا ده قمة الهبل ألن الجزء بتاع ال ‪ user processes‬مينفعش تحط فيه غير ‪ process‬واحدة بس‬ ‫اومال عملوه ليه ؟؟؟‬ ‫ايام زمان بقا قبل التقدم كانوا عايزين يفصلوا ال ‪ OS‬عن ال ‪ user process‬بدل م هم سايحين على بعض ف ال ‪ memory‬فعملوا‬ ‫ال ‪ model‬ده‬ ‫بيشتغل ازاي؟؟؟‬ ‫بقى عندنا ‪limit register‬‬ ‫ده بنخزن فيه ال ‪ limit‬بتاع ال ‪ process‬دي لو ال ‪ process‬حاولت تستظرف و ت ‪ access memory‬أكبر من ال ‪limit‬‬ ‫بتاعتها ال ‪ limit register‬بيقفشها و يبعت ‪ interrupt‬لل ‪ processor‬ويبهدل الدنيا‬ ‫‪1.2)multiple partition reallocation‬‬ ‫‪1.2.1) fixed partitioning‬‬ ‫هنا ابتدينا نقسم ال ‪ memory‬ل أكتر من ‪partition‬‬ ‫طبعا ال ‪ partition‬الواحدة مينفعش تحتوى على أكتر من ‪ process‬عشان ال ‪protection‬‬ ‫‪equal sized partitions‬‬ ‫‪disadvantages:‬‬ ‫‪.1‬ممكن ال ‪ process‬بتاعتنا تبقى أكبر من ‪8M‬‬ ‫‪.2‬لو ‪ process‬ال ‪ size‬بتاعها ‪ , 1M‬هيبقى ضاع علينا ‪ 7M‬بحالهم (عشان زي م قولنا ال ‪ partition‬بياخد ‪ process‬واحدة‬ ‫بس ايا كان حجمها)‬ ‫ال ‪ 7M‬دول بنسميهم ‪internal fragmentation‬‬ ‫طب ليه ‪ internal‬عشان الفراغ ده جوه المساحة اللي انت حاجزها اللي هي ال ‪ partition‬يعني‬ unequal sized partition advantages ‫ بتاعت اللي فاتت‬disadvantages ‫صلحنا ال‬ ‫ الكبيرة‬processes ‫ اكبر لل‬size ‫ بقى عندي‬.1 internal fragmentation ‫ صغير فهقلل ال‬partition ‫ صغيرة هحطها ف‬process ‫ لو‬.2 disadvantages ‫ محدد‬partitions ‫ ما زلت مقيد بعدد‬.1 ‫ تمام بس هيفضل موجود برضو‬internal fragmentation ‫ الصغيرة هتقلل ال‬process ‫ ال‬.2 ‫‪1.2.2) dynamic partitioning‬‬ ‫هنا ال ‪ OS‬بيشوف ال ‪process‬‬ ‫محتاجة ‪ 20M‬هيحجزلها ال ‪ 20M‬بالظبط‬ ‫محتاجة ‪ 14M‬هيحجزلها ال ‪ 14M‬بالظبط‬ ‫ف عشان كدة بيقولك ‪partitions with variable length and number‬‬ ‫طب م اهو كويس اهو معقولة ليه ‪ disadvantages‬؟؟؟؟‬ ‫ايوة لٍأل سف‬ ‫ركزلي على ال ‪ processes‬لما بتخلص وتخرج من ال ‪memory‬‬ ‫بتسيب ‪( external fragmentations‬هنا ‪ external‬عشان برة ال ‪ partition‬مش جواه)‬ ‫طب وايه يعني؟‬ ‫لو عندنا ‪ process‬ال ‪ size‬بتاعها ‪ 16M‬بالرغم من اننا عندنا ‪ 16M‬فاضيين ‪ ,‬اال اننا مش هنعرف نديها لل ‪ process‬عشان ال‬ ‫‪ process‬محتاجاهم جنب بعض (‪ contiguous‬يعني) وهم متفرقين زي م انت شايف‬ ‫طب والحل ؟؟؟‬ ‫نعمل حاجة اسمها ‪ , compacting‬نضغطهم بحيث المساحات اللي بينهم دي تتجمع على بعض وتبقى ‪ block‬كبير على بعضه‬ ‫بس لألسف ال ‪ processor‬هو اللي هيعمل ده‪ ,‬وهيأثر على ال ‪ performance‬بالتبعية‬ ‫‪placement algorithms‬‬ ‫احنا قولنا هو بيعمل ايه بس م قولناش بيشتغل ازاي‬ ‫‪1. first fit‬‬ ‫من اسمه‬ ‫بيعمل ‪ scan‬او ‪ liner search‬يعني من اول ‪ block‬ف ال ‪ , memory‬لحد م يقابل أول ‪ block‬مناسب قدامه‬ ‫‪2. best fit‬‬ ‫ده بيدور على أحسن ‪ block‬بمعنى‬ ‫لو عايز اعمل ‪ allocation‬ل ‪ 5M‬ومتاح (‪ )6M 12M 20M‬هيختار ال ‪6M‬‬ ‫مشكلته انه بيعمل ‪ scan‬من اول ‪ block‬ف ال ‪ memory‬الخر ‪ block‬ف ال ‪ memory‬عشان يالقيلك أحسن حاجة‬ ‫‪3. worst fit‬‬ ‫ده عكس ال ‪best‬‬ ‫بيعمل ‪ scan‬من اول ‪ block‬ف ال ‪ memory‬الخر ‪ block‬ف ال ‪ memory‬عشان يالقيلك أسوأ حاجة (أكبر ‪block‬‬ ‫متاح يعني) يعني لو محتاج ‪ 2M‬وعندك (‪ )6M 12M 20M‬هيختار ال ‪20M‬‬ ‫طبعا هو عنده حسن نية انه يجمعلك كذا ‪ process‬صغيرة ف ال ‪ block‬الكبير ده بس ده مش علطول بينفع‬ ‫‪2) non-contiguous allocation‬‬ ‫‪2.1) paging‬‬ ‫ف النوع اللي فات كان الزم عشان احجز ‪ memory‬الزم تتحجز ورا بعضها ‪ contiguous‬يعني‪ ,‬حتى لو فاكر لما كان عندنا‬ ‫مساحة كافية بس عشان كانت متفرقة على كذا ‪ block‬معرفناش نستفاد منها (وقولنا نعمل ‪)compacting‬‬ ‫طب ليه منفكرش اننا ن ‪ allocate memory‬ال ‪ process‬ف بتاعتنا ‪ non contiguous blocks‬؟؟؟‬ ‫بدل م نقسم ال ‪ memory‬بتاعتنا ل ‪partitions‬‬ ‫هنقسم ال ‪ memory‬ل أجزاء اسمها ‪frames‬‬ ‫ال ‪ frames‬دي ال ‪ size‬بتاعها ثابت‬ ‫وهنقسم ال ‪ process‬بتاعتنا ل أجزاء اسمها ‪pages‬‬ ‫ال ‪ pages‬دي ال ‪ size‬بتاعها ثابت برضو‬ ‫ال ‪ size‬بتاع ال ‪ = page‬ال ‪ size‬بتاع ال ‪frame‬‬ ‫ف كدة ال‪ process‬اللي ال ‪ size‬بتاعها ‪four pages‬‬ ‫محتاجة ‪ four frames‬فاضيين ف ال‪memory‬‬ ‫هتقابلنا مشكلة هنا‪ ,‬محتاج اسجل كل ‪ page‬انا اديتها انهي ‪ frame‬بالظبط ؟؟؟ واال مش هعرف أوصلهم‬ ‫‪page table‬‬ ‫ده جدول ببساطة بيوريك كل ‪ page‬من ال ‪ process‬بتاعتك محطوطة ف انهي ‪ frame‬ف ال ‪memory‬‬ ‫‪Page Number‬‬ ‫‪Frame Number‬‬ ‫‪0‬‬ ‫‪3‬‬ ‫‪1‬‬ ‫‪5‬‬ ‫‪2‬‬ ‫‪8‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫ازاي نحول ال ‪ logical‬ل ‪:physical‬‬ ‫ف األول هسألك سؤال لو عندنا كتاب ‪ 500‬صفحة ‪ ,‬وانت برا البيت اخوك كان بيرتب األوضة و نقلهولك على رف تاني ؟ هتقوله‬ ‫انهي رف وال هتقوله انت وديت صفحة ‪ 50‬فين و صفحة ‪ 60‬فين‬ ‫مش فاهم؟؟؟‬ ‫ال ‪ page‬عندنا زي الكتاب بالظبط نقلناها من رف ال (‪ )virtual‬ل رف ف ال ‪physical‬‬ ‫ف عشان اعرف اي ‪ byte‬ف ال ‪ page‬دي فين بالظبط مش محتاج غير معلومة واحدة اللي هي رقم الرف الجديد أو ال ‪base‬‬ ‫‪address‬‬ ‫عندي ‪ logical address‬قيمته ‪ 15‬فيه حرف ال ‪p‬‬ ‫وانا عارف ان ال ‪ page‬بتاعتي ال ‪ size‬بتاعها ‪( 4B‬من الرسمة اللي فوق)‬ ‫يبقى لو عايز اعرف هو ف انهي ‪, page‬وبعد ال ‪ base address‬بتاعها ب قد ايه‬ ‫‪a) 15 / 4 = 3‬‬ ‫‪b) 15 % 4 = 3‬‬ ‫يبقى ال ‪ address‬ده ف ال ‪page‬اللي االندكس بتاعها ‪( 3‬عشان بيبدأ من ‪ 0‬اندكس) و بعد ال ‪ base address‬بتاع ال ‪page‬‬ ‫ب ‪ offset‬يساوي ‪3‬‬ ‫ف كدة واقفة معايا اني اعرف ال ‪ base address‬بتاع ال ‪ , page‬هروح لل ‪ page table‬اعرف رقم ال ‪ frame‬ومنها اجيب‬ ‫ال ‪ base address‬بتاع ال ‪ page‬النه بساوي ال ‪ base address‬بتاع ال ‪frame‬‬ ‫ازاي ؟؟؟‬ ‫هضرب اندكس ال ‪ frame‬ف ال ‪ size‬بتاعه يعني‬ ‫لو ‪ frame‬رقم ‪ 0‬و حجمه ‪4B‬‬ ‫‪ , 0 = 4 0‬يبقى ال ‪ base address‬بتاع ال ‪ frame 0‬يساوي ‪0‬‬ ‫لو ‪ frame‬رقم ‪2‬‬ ‫‪ 8 = 4 2‬يبقى ال ‪ base address‬بتاع ال ‪ frame 2‬يساوي ‪8‬‬ ‫‪physical address = base address of page + offset = 8 + 3 = 11‬‬ ‫هتالقي فعال ال ‪ p‬ف ‪ logical‬يساوي ‪ 15‬بقت ف ‪ physical‬يساوي ‪11‬‬ ‫‪shared pages‬‬ ‫لو فتحت االلة الحاسبة ف ‪ 3‬ويندوز جنب بعض ‪ ,‬كلهم ليهم نفس ال ‪ code‬صح؟؟؟‬ ‫بدل م اعمله ‪ allocate‬تالت مرات ف ال ‪ memory‬كفاية مرة‪ ,‬احطه ف ‪ frame‬واحدة واخلي ال ‪ page‬بتاعت الكود فيهم كلهم‬ ‫بتشاور على ال ‪ frame‬دي‬ ‫‪2.2) segmentation‬‬ ‫فالحقيقة‬ ‫عندنا الكود بتاعنا ده عشان نحطه ف ال ‪ ram‬و نعمله ‪ execute‬مش بيتحط ف حتة واحدة على بعضها ‪ ,‬ولكن بيتقسم كذا حتة او‬ ‫‪segment‬‬ ‫فيه ‪ segment‬بنحط فيها ال ‪ instructions‬أو ال ‪ functions‬بتاعت الكود اسمها ‪code segment >------‬‬ ‫فيه ‪ segment‬بنحط فيها ال ‪ global variables‬بتاعت الكود اسمها ‪data segment >-----------------‬‬ ‫فيه ‪ segment‬بنحط فيها ال ‪ local variables‬بتاعت الكود اسمها ‪stack segment >-------------------‬‬ ‫هنقسم ال ‪ process‬بتاعتنا ل ‪ segments‬مش متساوية ف الحجم عكس ال ‪.pages‬‬ ‫و مش هنقسم ال ‪ memory‬ل ‪ frame‬هنسيبها (مش بيفكرك ب ال ‪ dynamic‬فهيبقى فيه ‪)external frags‬‬ ‫محتاج اسجل لكل ‪segment‬‬ ‫‪1. base address‬‬ ‫فيها يعني متخزن فين ‪ address‬اول‬ ‫)‪2. limit(size‬‬ ‫ده ‪ address‬هي حاجزة قد ايه من أول ال‬ ‫مكناش بنسجل ال ‪ size‬ف ال ‪ page table‬الن ال ‪ frames‬كان ال ‪ size‬بتاعها ثابت‬ ‫لكن هنا ال ‪ segments‬ال ‪ size‬بتاعها متغير‬ ‫‪Segment No‬‬ ‫‪Base Address‬‬ ‫‪Limit‬?

Use Quizgecko on...
Browser
Browser