مادة نظم التشغيل (Operating Systems) من المواد الأساسية في تخصص علوم الحاسب وتقنية المعلومات، وتُعتبر من المواد التي يشتكي منها كثير من الطلاب بسبب كثرة المفاهيم النظرية والخوارزميات. لكن الحقيقة أن المادة ممتعة جدًا لما تفهم الصورة الكبيرة، لأنك حرفيًا تتعلم كيف يشتغل الجهاز اللي قدامك من الداخل.
في هذا الدليل، راح نشرح لك أهم المواضيع اللي تغطيها المادة بأسلوب مبسّط وأمثلة من الحياة الواقعية، عشان تقدر تفهم المفاهيم وتدخل الاختبار وأنت واثق.
📋 ملخص سريع
- ما هو نظام التشغيل ووظائفه الأساسية
- إدارة العمليات (Processes) والفرق بين الـ Process والـ Thread
- خوارزميات جدولة المعالج (CPU Scheduling): FCFS، SJF، Round Robin
- إدارة الذاكرة (Memory Management): الـ Paging والـ Segmentation
- أنظمة الملفات (File Systems) وطرق التخصيص
- الجمود (Deadlock): أسبابه وطرق التعامل معه
- التزامن (Synchronization): الـ Mutex والـ Semaphore
- نصائح عملية للمذاكرة واجتياز الاختبار
ما هو نظام التشغيل (Operating System)؟
ببساطة، نظام التشغيل هو البرنامج الوسيط بين المستخدم والعتاد (Hardware). هو اللي يدير موارد الجهاز (المعالج، الذاكرة، القرص الصلب، أجهزة الإدخال والإخراج) ويوزعها بين البرامج المختلفة بشكل عادل وفعّال.
تخيّل نظام التشغيل مثل مدير فندق كبير: الغرف هي الذاكرة، الموظفون هم المعالجات، والنزلاء هم البرامج. المدير لازم يوزع الغرف، يحدد أولويات الخدمة، ويتأكد إن ما أحد يتضارب مع أحد. بدون هذا المدير، الفندق يصير فوضى.
وظائف نظام التشغيل الأساسية
- إدارة العمليات (Process Management): إنشاء وإنهاء وتنظيم العمليات
- إدارة الذاكرة (Memory Management): تخصيص وتحرير مساحات الذاكرة
- إدارة الملفات (File System Management): تنظيم وتخزين واسترجاع الملفات
- إدارة أجهزة الإدخال والإخراج (I/O Management): التعامل مع الطابعات والأقراص ولوحة المفاتيح وغيرها، بما في ذلك التواصل مع الشبكات
- الحماية والأمان (Protection & Security): منع البرامج من التداخل مع بعضها ومع بيانات المستخدمين
ℹ️ أمثلة على أنظمة التشغيل
أشهر أنظمة التشغيل: Windows، Linux، macOS، Android، iOS. كل واحد منها يطبّق نفس المفاهيم الأساسية اللي بنشرحها في هذا المقال، لكن بطرق تنفيذ مختلفة. في المادة الجامعية، التركيز يكون على المفاهيم والخوارزميات وليس على نظام تشغيل بعينه.
وضعية النواة ووضعية المستخدم (Kernel Mode vs User Mode)
نظام التشغيل يشتغل في وضعيتين:
- وضعية النواة (Kernel Mode): النظام عنده صلاحيات كاملة للوصول للعتاد وتنفيذ أي تعليمة. هنا تشتغل النواة (Kernel) وبرامج التشغيل (Drivers).
- وضعية المستخدم (User Mode): البرامج العادية تشتغل هنا بصلاحيات محدودة. إذا برنامج يحتاج يوصل للعتاد، لازم يطلب من النظام عبر ما نسميه استدعاء النظام (System Call).
هذا الفصل بين الوضعيتين مهم جدًا للحماية لأنه يمنع أي برنامج عادي من إنه يعبث بالذاكرة أو يوقف جهازك.
إدارة العمليات (Process Management)
ما هي العملية (Process)؟
العملية هي برنامج قيد التنفيذ. لما تفتح متصفح الإنترنت، نظام التشغيل ينشئ عملية جديدة لهذا البرنامج. العملية تحتوي على:
- الكود (Code/Text): التعليمات البرمجية
- البيانات (Data): المتغيرات العامة
- المكدس (Stack): المتغيرات المحلية واستدعاءات الدوال
- الكومة (Heap): الذاكرة المخصصة ديناميكيًا
- سجل حالة العملية (PCB - Process Control Block): يحتوي على معلومات مثل رقم العملية وحالتها وأولويتها
حالات العملية (Process States)
كل عملية تمر بعدة حالات خلال دورة حياتها:
- جديدة (New): العملية تم إنشاؤها لكن لم تبدأ بعد
- جاهزة (Ready): العملية جاهزة للتنفيذ وتنتظر دورها على المعالج
- قيد التنفيذ (Running): العملية تُنفَّذ حاليًا على المعالج
- منتظرة (Waiting/Blocked): العملية تنتظر حدثًا معينًا (مثل قراءة من القرص)
- منتهية (Terminated): العملية أنهت عملها
تخيّل الموضوع مثل مطعم: أنت (العملية) تدخل المطعم (New)، تجلس في الانتظار (Ready)، النادل يخدمك (Running)، تنتظر الطعام يجهز (Waiting)، تنتهي من الأكل وتطلع (Terminated).
الفرق بين الـ Process والـ Thread
الـ Thread (الخيط) هو وحدة تنفيذ داخل العملية. العملية الواحدة ممكن تحتوي على عدة Threads تتشارك نفس الذاكرة والموارد لكن كل واحد يُنفَّذ بشكل مستقل.
| الخاصية | Process | Thread |
|---|---|---|
| الذاكرة | مساحة ذاكرة مستقلة | يتشارك الذاكرة مع الـ Threads الأخرى |
| الإنشاء | بطيء نسبيًا | أسرع بكثير |
| التواصل | يحتاج IPC (Inter-Process Communication) | مباشر عبر الذاكرة المشتركة |
| التأثر بالأخطاء | عملية تتعطل لا تأثر على غيرها | Thread يتعطل ممكن يسقط كل العملية |
مثال عملي: متصفح Chrome يستخدم عدة Processes (كل تبويب في Process منفصل)، وداخل كل Process فيه عدة Threads (واحد للعرض، واحد لتحميل الصور، واحد لتشغيل JavaScript).
💡 نصيحة للاختبار
سؤال الفرق بين الـ Process والـ Thread من أكثر الأسئلة تكرارًا في الاختبارات. احفظ الجدول اللي فوق وافهم كل نقطة فيه. غالبًا يجي السؤال على شكل “اذكر 3 فروقات” أو “متى نستخدم Threads بدل Processes”.
جدولة المعالج (CPU Scheduling)
ليش نحتاج جدولة؟
المعالج واحد (أو عدد محدود من الأنوية)، والعمليات كثيرة. لازم نظام التشغيل يقرر: مين يشتغل الحين؟ ومين ينتظر؟ وكم وقت يأخذ كل واحد؟ هذا بالضبط دور المجدوِل (Scheduler).
تخيّل المعالج مثل كاشير في سوبرماركت: فيه طابور طويل من الزبائن (العمليات)، والكاشير لازم يخدمهم بطريقة عادلة وفعّالة. خوارزميات الجدولة هي القواعد اللي تحدد كيف يشتغل الكاشير.
المصطلحات الأساسية
قبل ما ندخل في الخوارزميات، لازم تفهم هذه المصطلحات (وإذا كنت تبحث عن مرجع شامل للمصطلحات التقنية، اطلع على قاموس مصطلحات علوم الحاسب):
- Burst Time: الوقت اللي تحتاجه العملية للتنفيذ على المعالج
- Arrival Time: وقت وصول العملية لطابور الجاهزية
- Waiting Time: الوقت اللي تنتظره العملية في الطابور قبل ما تبدأ
- Turnaround Time: الوقت الكلي من وصول العملية إلى انتهائها (Waiting + Burst)
- Throughput: عدد العمليات المنجزة في وحدة الزمن
خوارزمية FCFS (First Come, First Served)
أبسط خوارزمية جدولة: اللي يوصل أول، يتخدم أول. مثل طابور المطعم بالضبط.
مثال:
| العملية | Arrival Time | Burst Time |
|---|---|---|
| P1 | 0 | 6 |
| P2 | 1 | 4 |
| P3 | 2 | 2 |
ترتيب التنفيذ: P1 ثم P2 ثم P3
- P1: Waiting = 0, Turnaround = 6
- P2: Waiting = 5 (انتظرت من 1 إلى 6), Turnaround = 9
- P3: Waiting = 8 (انتظرت من 2 إلى 10), Turnaround = 10
متوسط Waiting Time = (0 + 5 + 8) / 3 = 4.33
مميزاتها: بسيطة جدًا. عيوبها: تعاني من مشكلة Convoy Effect، يعني إذا عملية طويلة وصلت أول، كل اللي وراها ينتظرون.
خوارزمية SJF (Shortest Job First)
العملية الأقصر (أقل Burst Time) تتنفذ أولًا. فكرتها: خلّ اللي طلبه بسيط يخلص بسرعة عشان ما يعطّل الطابور.
بنفس المثال السابق (بفرض وصلوا كلهم في نفس الوقت):
ترتيب التنفيذ: P3 (Burst=2) ثم P2 (Burst=4) ثم P1 (Burst=6)
متوسط Waiting Time = (0 + 2 + 6) / 3 = 2.67 (أفضل من FCFS)
مميزاتها: تعطي أقل متوسط وقت انتظار نظريًا. عيوبها: مشكلة المجاعة (Starvation)، فالعمليات الطويلة ممكن ما تتنفذ أبدًا إذا استمرت عمليات قصيرة بالوصول.
🔴 SJF Preemptive vs Non-Preemptive
في SJF النسخة Non-Preemptive: لما عملية تبدأ على المعالج، ما أحد يقدر يقاطعها. في النسخة Preemptive (تسمى أيضًا SRTF، Shortest Remaining Time First): إذا وصلت عملية جديدة بوقت أقصر من المتبقي للعملية الحالية، تقاطعها وتبدأ مكانها. في الاختبار، انتبه للصيغة، هل يقولون Preemptive أو Non-Preemptive لأن الحل يختلف تمامًا.
خوارزمية Round Robin (RR)
الأشهر والأكثر استخدامًا في أنظمة التشغيل الحديثة. الفكرة: كل عملية تأخذ شريحة زمنية محددة (Time Quantum) على المعالج، وبعدها تروح آخر الطابور وتجي اللي بعدها.
مثال (Time Quantum = 3):
| العملية | Burst Time |
|---|---|
| P1 | 6 |
| P2 | 4 |
| P3 | 2 |
ترتيب التنفيذ:
- P1 يشتغل 3 وحدات (باقي 3)
- P2 يشتغل 3 وحدات (باقي 1)
- P3 يشتغل 2 وحدات (خلصت)
- P1 يشتغل 3 وحدات (خلصت)
- P2 يشتغل 1 وحدة (خلصت)
مميزاتها: عادلة، كل عملية تأخذ نصيبها، وما فيه مجاعة. عيوبها: اختيار الـ Time Quantum مهم جدًا. إذا كان صغير جدًا، يصير فيه overhead كبير بسبب كثرة التبديل بين العمليات (Context Switching). وإذا كان كبير جدًا، تصير مثل FCFS.
💡 كيف تحل أسئلة الجدولة
في أسئلة الاختبار، ارسم مخطط جانت (Gantt Chart) دائمًا. ارسم خط زمني وحدد متى تبدأ وتنتهي كل عملية. بعدها احسب الـ Waiting Time والـ Turnaround Time لكل عملية ثم المتوسط. هذه الطريقة تقلل الأخطاء الحسابية بشكل كبير.
إدارة الذاكرة (Memory Management)
لماذا نحتاج إدارة الذاكرة؟
ذاكرة الوصول العشوائي (RAM) محدودة الحجم، وكل عملية تحتاج مساحة فيها. نظام التشغيل لازم يوزع الذاكرة بين العمليات بشكل فعّال ويمنع أي عملية من إنها توصل لذاكرة عملية ثانية.
العنونة المنطقية والفيزيائية
- العنوان المنطقي (Logical Address): العنوان اللي يشوفه البرنامج، ويبدأ من 0 لكل عملية
- العنوان الفيزيائي (Physical Address): العنوان الحقيقي في الذاكرة الفيزيائية
وحدة إدارة الذاكرة (MMU، Memory Management Unit) هي اللي تحوّل العناوين المنطقية إلى فيزيائية. هذا الفصل يعطي كل عملية إحساس إنها تملك الذاكرة كاملة لنفسها، بينما في الحقيقة هي تتشارك مع عمليات أخرى.
التقسيم الصفحي (Paging)
في الـ Paging، الذاكرة المنطقية تُقسم إلى وحدات بحجم ثابت اسمها صفحات (Pages)، والذاكرة الفيزيائية تُقسم إلى وحدات بنفس الحجم اسمها إطارات (Frames).
كل عملية عندها جدول صفحات (Page Table) يربط كل صفحة بالإطار الموجودة فيه.
مثال: إذا حجم الصفحة 4 KB وعملية حجمها 16 KB:
- العملية تحتاج 4 صفحات (16 / 4)
- كل صفحة ممكن توضع في أي إطار فاضي في الذاكرة
- لا يُشترط أن الإطارات تكون متجاورة
أهم ميزة: يحل مشكلة التجزئة الخارجية (External Fragmentation) لأنك ما تحتاج مساحة متصلة في الذاكرة.
عيبها: ممكن يحصل تجزئة داخلية (Internal Fragmentation) إذا العملية ما تستخدم الصفحة الأخيرة بالكامل.
حساب العنوان الفيزيائي في Paging
هذا من أكثر الأسئلة الحسابية في الاختبار:
العنوان المنطقي = رقم الصفحة + الإزاحة (Offset) العنوان الفيزيائي = رقم الإطار (من جدول الصفحات) + نفس الإزاحة
مثال: حجم الصفحة = 1024 بايت، العنوان المنطقي = 3500
- رقم الصفحة = 3500 / 1024 = 3 (القسمة الصحيحة)
- الإزاحة = 3500 % 1024 = 428
- نفرض جدول الصفحات يقول الصفحة 3 في الإطار 7
- العنوان الفيزيائي = (7 × 1024) + 428 = 7596
التقسيم القطعي (Segmentation)
في الـ Segmentation، الذاكرة تُقسم إلى أجزاء (Segments) بأحجام مختلفة حسب المحتوى المنطقي: قطعة للكود، قطعة للبيانات، قطعة للمكدس، وهكذا.
كل قطعة لها Base (عنوان البداية في الذاكرة الفيزيائية) وLimit (حجم القطعة).
العنوان الفيزيائي = Base + Offset (بشرط أن Offset أصغر من Limit، وإلا يحصل خطأ)
الفرق عن Paging: الأقسام بأحجام مختلفة وتعكس البنية المنطقية للبرنامج، بينما الصفحات بحجم ثابت.
ℹ️ الذاكرة الافتراضية (Virtual Memory)
الذاكرة الافتراضية تسمح للعمليات باستخدام ذاكرة أكبر من الـ RAM الفعلية. الفكرة: نخزّن الصفحات اللي ما نحتاجها حاليًا في القرص الصلب (في منطقة اسمها Swap Space)، ونحمّلها للذاكرة لما نحتاجها. إذا العملية طلبت صفحة مو موجودة في الـ RAM، يحصل Page Fault ونظام التشغيل يحمّلها من القرص. خوارزميات استبدال الصفحات مثل FIFO وLRU وOptimal تحدد أي صفحة نشيلها عشان نحط الجديدة.
أنظمة الملفات (File Systems)
ما هو نظام الملفات؟
نظام الملفات هو الطريقة اللي يُنظّم بها نظام التشغيل تخزين البيانات على القرص الصلب. هو اللي يخلّيك تحفظ ملف باسم معين في مجلد معين وترجع تفتحه بعدين.
المفاهيم الأساسية
- الملف (File): وحدة تخزين بيانات لها اسم ونوع وحجم
- المجلد (Directory): هيكل تنظيمي يحتوي على ملفات ومجلدات فرعية
- المسار (Path): العنوان الكامل للملف مثل
/home/user/documents/report.pdf - البيانات الوصفية (Metadata): معلومات عن الملف (الحجم، تاريخ الإنشاء، الصلاحيات)
طرق تخصيص المساحة على القرص
كيف يخزّن نظام التشغيل بيانات الملف على القرص؟ فيه ثلاث طرق رئيسية:
1. التخصيص المتصل (Contiguous Allocation): كل ملف يُخزَّن في كتل متجاورة على القرص. سريع في القراءة لكن يعاني من التجزئة الخارجية ومشكلة في تكبير حجم الملف.
2. التخصيص المتسلسل (Linked Allocation): كل كتلة فيها مؤشر (Pointer) للكتلة اللي بعدها. يحل مشكلة التجزئة لكن الوصول العشوائي بطيء (لازم تمر على كل الكتل من البداية).
3. التخصيص المُفهرس (Indexed Allocation): فيه كتلة فهرس (Index Block) تحتوي على عناوين كل كتل الملف. يجمع مميزات الطريقتين السابقتين، وصول عشوائي سريع وبدون تجزئة خارجية.
💡 أنظمة الملفات المشهورة
في الواقع العملي: NTFS يُستخدم في Windows، ext4 في Linux، وAPFS في macOS. في الاختبار غالبًا يركّزون على المفاهيم العامة (طرق التخصيص، هيكل المجلدات) أكثر من التفاصيل الخاصة بنظام ملفات معين.
تحتاج مساعدة في واجبات نظم التشغيل؟
فريق زدني يساعدك تفهم المفاهيم وتحل الواجبات بنفسك، نشرح لك الخوارزميات خطوة بخطوة ونراجع حلولك
اطلب المساعدة الآنتحتاج شرح خصوصي لمادة نظم التشغيل؟
نشرح لك خوارزميات الجدولة وإدارة الذاكرة والـ Deadlock بأسلوب عملي مع حل أمثلة من اختبارات سابقة
احجز جلسة شرحالجمود (Deadlock)
ما هو الـ Deadlock؟
الـ Deadlock هو حالة تصير لما مجموعة من العمليات كل واحدة تنتظر مورد ماسكته عملية ثانية، والنتيجة: الكل ينتظر الكل وما أحد يقدر يتقدم.
المثال الكلاسيكي: تخيّل طريقين ضيقين يتقاطعون. سيارة من الشرق ماسكة نصف التقاطع وتنتظر السيارة من الشمال تتحرك. والسيارة من الشمال ماسكة النصف الثاني وتنتظر الأولى. ما أحد يقدر يتحرك. هذا Deadlock.
الشروط الأربعة للـ Deadlock (شروط Coffman)
الـ Deadlock يحصل فقط إذا تحققت الشروط الأربعة التالية معًا:
الشروط الأربعة للـ Deadlock
🔴 مهم جدًا للاختبار
إذا حتى شرط واحد من الأربعة ما تحقق، الـ Deadlock مستحيل يحصل. هذي النقطة أساسية ودائمًا تجي في الاختبار. احفظ الشروط الأربعة وافهم كل واحد منها مع مثال.
طرق التعامل مع الـ Deadlock
1. المنع (Prevention): نمنع حصول واحد أو أكثر من الشروط الأربعة. مثلًا: نفرض ترتيبًا معينًا لطلب الموارد عشان نمنع الانتظار الدائري.
2. التجنب (Avoidance): النظام يتحقق قبل ما يعطي أي مورد: “هل إعطاء هذا المورد ممكن يسبب Deadlock؟” الخوارزمية الشهيرة هنا هي خوارزمية المصرفي (Banker’s Algorithm)، تتأكد إن النظام يظل في “حالة آمنة” بعد تخصيص الموارد.
3. الكشف والإصلاح (Detection & Recovery): نخلي الـ Deadlock يحصل، لكن ندير نظام كشف يكتشفه ويحله. مثلًا بإنهاء إحدى العمليات أو سحب مواردها.
4. التجاهل (Ignore): بعض الأنظمة (مثل Linux و Windows) تتعامل بمبدأ: الـ Deadlock نادر الحدوث فنتجاهله ونخلي المستخدم يعيد تشغيل الجهاز إذا صار. هذا يُسمى Ostrich Algorithm.
التزامن (Synchronization)
مشكلة التزامن
لما عدة عمليات أو Threads تشتغل في نفس الوقت وتوصل لنفس البيانات المشتركة، ممكن تحصل نتائج غير متوقعة. هذا اسمه مشكلة القسم الحرج (Critical Section Problem).
مثال: تخيّل حسابك البنكي فيه 1000 ريال. عمليتين تشتغلان في نفس الوقت:
- العملية A: تسحب 500 ريال
- العملية B: تودع 300 ريال
إذا الاثنتين قرأوا الرصيد (1000) في نفس الوقت:
- A تحسب: 1000 - 500 = 500 وتحفظ 500
- B تحسب: 1000 + 300 = 1300 وتحفظ 1300
النتيجة النهائية: 1300 (خطأ) بدل 800 (صح). هذا اسمه Race Condition، والنتيجة تعتمد على ترتيب التنفيذ.
القسم الحرج (Critical Section)
القسم الحرج هو الجزء من الكود اللي يوصل لبيانات مشتركة. عشان نحل المشكلة، لازم نضمن ثلاثة شروط:
- الاستبعاد المتبادل (Mutual Exclusion): عملية واحدة فقط تدخل القسم الحرج في نفس الوقت
- التقدم (Progress): إذا ما أحد في القسم الحرج، أي عملية تطلب الدخول تقدر تدخل
- الانتظار المحدود (Bounded Waiting): فيه حد أقصى لعدد المرات اللي عملية تنتظر فيها قبل ما تدخل
الـ Mutex (القفل)
الـ Mutex (اختصار Mutual Exclusion) هو آلية بسيطة: مثل مفتاح غرفة واحد فقط. اللي يمسك المفتاح يدخل الغرفة (القسم الحرج)، والباقي ينتظرون. لما يخلص، يرجع المفتاح عشان غيره يقدر يدخل.
lock(mutex) // اقفل - لا أحد يدخل
// القسم الحرج
// (التعامل مع البيانات المشتركة)
unlock(mutex) // فك القفل - الباقي يقدرون يدخلون
الـ Semaphore (الإشارة)
الـ Semaphore أعم من الـ Mutex. هو متغير عدد صحيح يُستخدم عمليتين رئيسيتين عليه:
- wait(S) (تسمى أيضًا P أو down): إذا S أكبر من 0 ننقصها بواحد ونكمل، وإلا ننتظر
- signal(S) (تسمى أيضًا V أو up): نزيد S بواحد ونوقظ عملية منتظرة إن وجدت
أنواع الـ Semaphore:
- Binary Semaphore (قيمتها 0 أو 1): يشتغل مثل الـ Mutex تمامًا
- Counting Semaphore (قيمتها أي عدد صحيح): يسمح لعدد محدد من العمليات بالدخول. مثال: موقف سيارات فيه 5 أماكن. الـ Semaphore يبدأ بـ 5، كل سيارة تدخل ينقص بواحد، وكل سيارة تطلع يزيد بواحد
// Semaphore بقيمة ابتدائية 3 (يسمح لـ 3 عمليات بالدخول)
semaphore S = 3;
wait(S) // S تنقص: 3 -> 2
// القسم الحرج
signal(S) // S تزيد: 2 -> 3
⚠️ أخطاء شائعة في التزامن
الاستخدام الخاطئ للـ Mutex والـ Semaphore يسبب مشاكل خطيرة:
- نسيت تعمل unlock: العمليات الأخرى تنتظر للأبد (Deadlock)
- عملت signal قبل wait: عملية ثانية تدخل القسم الحرج وأنت لسه فيه (Race Condition)
- استخدمت نفس الـ Mutex في مكانين متداخلين: ممكن تسبب Deadlock مع نفسك
في الاختبار، لما يعطونك كود تزامن ويسألونك “ما المشكلة؟”، ابحث عن هذه الأخطاء الثلاثة.
مشاكل التزامن الكلاسيكية
هذه المشاكل تجي في كل كتاب Operating Systems ودائمًا تُسأل في الاختبارات:
1. مشكلة المنتج والمستهلك (Producer-Consumer): المنتج ينتج بيانات ويحطها في Buffer، والمستهلك يأخذها. لازم نضمن إن المنتج ما يحط بيانات لما الـ Buffer مليان، والمستهلك ما يأخذ لما يكون فاضي.
2. مشكلة القرّاء والكتّاب (Readers-Writers): عدة قرّاء يقدرون يقرأون في نفس الوقت (لأن القراءة ما تغيّر البيانات)، لكن الكاتب لازم يكون لوحده. ما أحد يقرأ ولا يكتب وقت ما هو يكتب.
3. مشكلة الفلاسفة المتعشّين (Dining Philosophers): 5 فلاسفة جالسين حول طاولة دائرية، بين كل اثنين شوكة واحدة. كل فيلسوف يحتاج شوكتين عشان يأكل. المشكلة: كيف نمنع الـ Deadlock (كلهم يمسكون الشوكة اليمنى وينتظرون اليسرى).
كيف تذاكر مادة نظم التشغيل بفعالية
بعد ما غطينا أهم المواضيع، هذي نصائح عملية تساعدك تذاكر المادة صح:
خطوات المذاكرة الفعّالة
مصادر مساعدة
- كتاب Operating System Concepts (Silberschatz): المرجع الأساسي لأغلب الجامعات، ويُعرف بكتاب “الديناصور” بسبب غلافه
- قناة Neso Academy على YouTube: شروحات ممتازة بالإنجليزي لكل مواضيع المادة
- GeeksforGeeks، Operating Systems: شرح مختصر مع أمثلة وأسئلة محلولة
- ملخصات زملائك السابقين: اسأل في قروبات الدفعة، غالبًا فيه ملخصات ذهبية
الخلاصة
مادة نظم التشغيل ممكن تبدو ثقيلة من كثرة المفاهيم والخوارزميات، لكنها في النهاية مادة منطقية جدًا. كل مفهوم فيها يحل مشكلة حقيقية: الجدولة تحل مشكلة توزيع المعالج، إدارة الذاكرة تحل مشكلة المساحة المحدودة، والتزامن يحل مشكلة تضارب البيانات.
المفتاح هو إنك ما تحاول تحفظ كل شيء، بل تفهم ليش هذا الحل موجود وكيف يشتغل. لما تفهم السبب، التفاصيل تثبت في ذهنك بشكل طبيعي.
خذ المادة خطوة بخطوة، حل أمثلة كثيرة بيدك، ولا تتردد تسأل إذا فيه شيء ما فهمته. بالتوفيق في الاختبار.
تبي مساعدة في مشروعك أو واجبات أنظمة التشغيل؟
فريق زدني يساعدك تفهم المادة وتنجز مهامك الأكاديمية بثقة، من شرح المفاهيم إلى مراجعة الحلول
تواصل معنا الآن