Operating Systems Types and Startup (PDF)
Document Details
Uploaded by EntrancedStrait493
English Commerce Banha
Tags
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?