مادة عال 227 (CSC 227)، نظم التشغيل (Operating Systems)، من المواد اللي تكشف لك كيف الكمبيوتر يشتغل فعلا من الداخل. كل كود كتبته في عال 111 و عال 212 كان يشتغل فوق نظام التشغيل بدون ما تحس. هذي المادة تخليك تفهم وش يصير تحت الغطاء: كيف المعالج يوزع وقته بين البرامج، كيف الذاكرة تنقسم، وليش برنامجك احيانا يعلّق.
تخيل نظام التشغيل مثل مدير مطعم كبير: عنده طباخين (المعالجات)، طاولات (الذاكرة)، طلبات (العمليات)، ومخزن مواد (القرص الصلب). شغلته يوزع الموارد بذكاء عشان كل زبون ياخذ طلبه بدون ما المطعم ينهار. هذا بالضبط اللي يسويه نظام التشغيل.
📋 ملخص سريع
- رمز المادة: عال 227 (CSC 227): نظم التشغيل (Operating Systems)
- الساعات المعتمدة: 3 ساعات نظري
- المتطلب السابق: عال 212 تراكيب البيانات (Data Structures)
- الكتاب المرجعي: Operating System Concepts, Silberschatz و آخرون (الكتاب الديناصوري)
- المواضيع الرئيسية: بنية نظام التشغيل، العمليات، الخيوط، جدولة المعالج، التزامن، الجمود (Deadlock)، ادارة الذاكرة، الذاكرة الافتراضية، انظمة الملفات
- يقود الى: عال 329 شبكات الحاسب، عال 456 انظمة التشغيل المتقدمة، مواد امن المعلومات
ليش عال 227 مادة اساسية في مسارك؟
قبل ما نبدا في الشرح، خلنا نفهم ليش هذي المادة تستاهل تركيزك:
- فهم الاداء الحقيقي: تعرف ليش برنامجك بطيء او يستهلك ذاكرة زيادة عن اللازم. ما تقدر تحسّن شيء ما تفهمه
- المقابلات الوظيفية: شركات مثل Google و Microsoft تسال عن العمليات والخيوط والتزامن بشكل اساسي. لو تبي تشتغل في شركة تقنية كبيرة، لازم تفهم هالمواضيع
- بوابة لمجالات متقدمة: الحوسبة السحابية، امن المعلومات، الانظمة الموزعة، كلها مبنية على مبادئ نظم التشغيل
- تطوير برمجيات حقيقي: لما تبني تطبيق متعدد الخيوط او تتعامل مع قواعد بيانات ضخمة، انت تطبّق مبادئ هذي المادة مباشرة
- مادة تبني على عال 212: الطوابير تستخدم في جدولة العمليات، الاشجار في انظمة الملفات، وجداول الهاش في ادارة الذاكرة. كل اللي تعلمته في تراكيب البيانات يتطبق هنا
ℹ️ العلاقة مع عال 212
عال 227 تعتمد بشكل مباشر على عال 212 تراكيب البيانات. الطوابير (Queues) تستخدم في جدولة المعالج، القوائم المتصلة (Linked Lists) في ادارة الذاكرة الحرة، والاشجار (Trees) في بنية انظمة الملفات. لو اساسك في عال 212 قوي، نص المادة راح يكون واضح لك.
نظرة عامة على محتوى عال 227
| الاسابيع | الموضوع | المفاهيم الرئيسية |
|---|---|---|
| 1-2 | مقدمة في نظم التشغيل وبنيتها | تعريف OS، طبقات النظام، System Calls |
| 3-4 | العمليات (Processes) | PCB، حالات العملية، Context Switching |
| 5-6 | الخيوط (Threads) | User Threads vs Kernel Threads، نماذج الخيوط |
| 7-8 | جدولة المعالج (CPU Scheduling) | FCFS، SJF، Round Robin، Priority |
| 9-10 | تزامن العمليات (Process Synchronization) | Critical Section، Mutex، Semaphore، Monitors |
| 11-12 | الجمود (Deadlock) | الشروط الاربعة، المنع، التجنب، الكشف |
| 13-14 | ادارة الذاكرة (Memory Management) | Paging، Segmentation، Virtual Memory |
| 15 | انظمة الملفات ومراجعة | بنية الملفات، طرق التخصيص، مراجعة شاملة |
1. مقدمة في نظم التشغيل وبنيتها
نظام التشغيل هو الوسيط بين المستخدم والعتاد (Hardware). بدونه ما تقدر تسوي شيء على الكمبيوتر لان ما في طريقة تتواصل مع المعالج والذاكرة والقرص مباشرة.
وظائف نظام التشغيل الاساسية
- ادارة العمليات: يشغّل البرامج ويوزع وقت المعالج عليها
- ادارة الذاكرة: يحدد اي برنامج ياخذ كم مساحة من الذاكرة (RAM)
- ادارة الملفات: ينظّم تخزين الملفات على القرص الصلب
- ادارة الاجهزة: يتواصل مع لوحة المفاتيح والشاشة والطابعة وغيرها عبر drivers
- الحماية والامان: يمنع البرامج من التدخل في بعضها
بنية النظام
نظام التشغيل يتكون من طبقات. الطبقة الاساسية هي النواة (Kernel) واللي هي قلب النظام. فوقها تجي System Calls اللي تسمح لبرامج المستخدم تطلب خدمات من النواة.
System Calls هي الجسر بين برنامجك ونظام التشغيل. لما تكتب open() عشان تفتح ملف، او fork() عشان تنشئ عملية جديدة، انت تستدعي System Call.
انواع بنى نظم التشغيل
| البنية | الوصف | مثال |
|---|---|---|
| Monolithic | كل شيء في النواة كقطعة واحدة | Linux |
| Microkernel | النواة صغيرة والخدمات خارجها | Minix |
| Layered | طبقات فوق بعض، كل طبقة تستخدم اللي تحتها | THE OS |
| Hybrid | خليط من الانواع السابقة | Windows، macOS |
2. العمليات (Processes)
العملية (Process) هي برنامج قيد التشغيل. ملف Word على سطح المكتب هو مجرد ملف. لما تفتحه، يصير عملية حية في الذاكرة تاخذ موارد من النظام.
حالات العملية (Process States)
كل عملية تمر بحالات مختلفة خلال حياتها:
- New: العملية لسّاها تنشأ
- Ready: جاهزة وتنتظر دورها على المعالج. مثل زبون واقف في الطابور جاهز يطلب
- Running: تشتغل حاليا على المعالج
- Waiting (Blocked): تنتظر حدث خارجي مثل قراءة ملف من القرص
- Terminated: خلصت وتحرر مواردها
كتلة التحكم بالعملية (PCB)
كل عملية لها ملف شخصي في نظام التشغيل اسمه Process Control Block. مثل بطاقة الهوية للعملية. يحتوي على:
- Process ID (PID): رقم فريد يميّز العملية
- Process State: حالتها الحالية (Ready، Running، الخ)
- Program Counter: عنوان التعليمة التالية اللي راح تنفذ
- CPU Registers: قيم سجلات المعالج المحفوظة
- Memory Info: معلومات الذاكرة المخصصة لها
- I/O Status: قائمة الملفات والاجهزة اللي تستخدمها
تبديل السياق (Context Switching)
لما نظام التشغيل يبي يوقف عملية ويشغّل ثانية، لازم يحفظ حالة العملية الحالية في PCB تبعها ويحمّل حالة العملية الجديدة. هذي العملية اسمها Context Switch.
تخيلها مثل طباخ يشتغل على طبخة ويبي يتحول لطبخة ثانية: لازم يسجّل وين وصل في الاولى (كم ملح حط، درجة الحرارة) عشان لما يرجع لها يكمّل من نفس النقطة.
Context Switch تكلّف وقت. ما في شغل مفيد يصير اثناء التبديل. عشان كذا نظام التشغيل يحاول يقلل عدد التبديلات.
💡 نصيحة للاختبار: حالات العملية
في الاختبار غالبا يعطيك سيناريو ويسالك “ايش حالة العملية؟” تذكّر:
- عملية تنتظر قراءة من القرص = Waiting
- عملية خلّص وقتها على المعالج بس ما خلصت = Ready
- عملية تنفّذ حاليا = Running
ارسم مخطط الحالات وتدرّب على تتبع التحولات بينها.
3. الخيوط (Threads)
الخيط (Thread) هو وحدة تنفيذ خفيفة داخل العملية. العملية الواحدة ممكن تحتوي على خيط واحد (Single-threaded) او عدة خيوط (Multi-threaded).
الفرق بين العملية والخيط
| العنصر | العملية (Process) | الخيط (Thread) |
|---|---|---|
| الذاكرة | كل عملية لها مساحة ذاكرة مستقلة | الخيوط تشارك نفس مساحة الذاكرة |
| الانشاء | بطيء ومكلف | سريع وخفيف |
| التواصل | يحتاج IPC (معقد) | مباشر عبر الذاكرة المشتركة |
| Context Switch | بطيء | اسرع بكثير |
مثال من الواقع: تطبيق متصفح الانترنت. كل تبويب (Tab) ممكن يكون عملية مستقلة، لكن داخل التبويب الواحد في خيوط متعددة: خيط يحمّل الصفحة، خيط يشغّل JavaScript، وخيط يرسم الواجهة.
خيوط المستخدم مقابل خيوط النواة
- User Threads: تدار من مكتبة في برنامج المستخدم. النواة ما تعرف عنها شيء. سريعة الانشاء لكن لو خيط واحد عمل blocking، كل الخيوط توقف
- Kernel Threads: تدار مباشرة من النواة. ابطأ في الانشاء لكن لو خيط واحد توقف، الباقي يكملون
نماذج ربط الخيوط
| النموذج | الوصف | مثال |
|---|---|---|
| Many-to-One | كل خيوط المستخدم ترتبط بخيط نواة واحد | Green Threads |
| One-to-One | كل خيط مستخدم مرتبط بخيط نواة | Linux، Windows |
| Many-to-Many | عدة خيوط مستخدم مرتبطة بعدة خيوط نواة | Solaris قديما |
⚠️ خطا شائع: الخلط بين Process و Thread
كثير من الطلاب يخلطون بين العملية والخيط في الاختبار. تذكّر القاعدة: العملية = البرنامج كامل بموارده. الخيط = وحدة تنفيذ داخل العملية. خيوط العملية الواحدة تتشارك الكود والبيانات والملفات، لكن كل خيط عنده Stack و Program Counter خاص فيه.
4. جدولة المعالج (CPU Scheduling)
المعالج واحد بس البرامج كثيرة. كيف نظام التشغيل يقرر مين يشتغل اول؟ هنا يجي دور خوارزميات الجدولة.
ارجع لمثال المطعم: عندك طباخ واحد (المعالج) وعنده 5 طلبات (عمليات). كيف يرتّبها؟ يبدا بالاول اللي وصل؟ يبدا بالاسرع تحضير؟ يعطي كل طلب دقيقة ويتحول للثاني؟ كل واحدة من هذي استراتيجية جدولة مختلفة.
معايير الجدولة
- CPU Utilization: نسبة استغلال المعالج (نبيها عالية)
- Throughput: عدد العمليات المنجزة في وحدة الوقت (نبيها عالي)
- Turnaround Time: الوقت الكلي من وصول العملية الى انتهائها (نبيه قصير)
- Waiting Time: مجموع الوقت اللي قضته العملية في الطابور (نبيه قصير)
- Response Time: الوقت من وصول العملية الى اول تنفيذ لها
FCFS - اللي يوصل اول يتخدم اول
First-Come, First-Served: ابسط خوارزمية. اللي يوصل اول ياخذ المعالج.
مثال: 3 عمليات وصلت في الوقت 0:
| العملية | Burst Time |
|---|---|
| P1 | 24 |
| P2 | 3 |
| P3 | 3 |
Gantt Chart:
| P1 | P2 | P3 |
0 24 27 30
- Waiting Time: P1=0, P2=24, P3=27
- متوسط الانتظار = (0+24+27)/3 = 17
المشكلة: لو عملية طويلة وصلت اول (Convoy Effect)، كل العمليات القصيرة تنتظر ورائها.
SJF - الاقصر اولا
Shortest Job First: العملية اللي Burst Time تبعها اقصر تتنفذ اول.
نفس المثال بترتيب SJF:
| P2 | P3 | P1 |
0 3 6 30
- Waiting Time: P1=6, P2=0, P3=3
- متوسط الانتظار = (6+0+3)/3 = 3
فرق كبير عن FCFS. SJF تعطي اقل متوسط انتظار ممكن (مثبتة رياضيا). المشكلة: كيف تعرف طول العملية مسبقا؟ غالبا نقدّره بناء على التاريخ.
Round Robin - كل واحد ياخذ نصيبه
Round Robin (RR): كل عملية تاخذ فترة زمنية محددة (Time Quantum) ثم تروح آخر الطابور.
مثال: نفس العمليات مع Time Quantum = 4
| P1 | P2 | P3 | P1 | P1 | P1 | P1 | P1 |
0 4 7 10 14 18 22 26 30
- P2 خلصت بعد 3 وحدات (اقل من quantum فتخلي المعالج)
- P3 خلصت بعد 3 وحدات
- P1 تاخذ باقي وقتها على دفعات
ملاحظة مهمة: لو الـ Time Quantum كبير جدا، RR يصير مثل FCFS. ولو صغير جدا، Context Switching يزيد والاداء ينزل. القيمة المثالية غالبا بين 10-100 ملي ثانية.
Priority Scheduling - حسب الاولوية
كل عملية لها رقم اولوية. الاعلى اولوية يتنفذ اول. ممكن تكون Preemptive (تقاطع العملية الحالية) او Non-Preemptive.
المشكلة: Starvation (المجاعة). عملية باولوية منخفضة ممكن ما تتنفذ ابدا لان دائما في عمليات باولوية اعلى.
الحل: Aging. كل ما العملية تنتظر اكثر، اولويتها ترتفع تلقائيا.
💡 كيف تحل اسئلة الجدولة في الاختبار
- ارسم جدول بالعمليات و Arrival Time و Burst Time
- تتبّع الخوارزمية خطوة بخطوة وارسم Gantt Chart
- احسب Waiting Time لكل عملية = Turnaround Time - Burst Time
- احسب Turnaround Time = Completion Time - Arrival Time
- خذ المتوسط
اغلب اخطاء الطلاب تجي من التسرع. خذ وقتك في الرسم والحساب.
واجب جدولة المعالج يلخبطك؟
حسابات Gantt Chart و Waiting Time و Turnaround Time تحتاج دقة. ارسل لنا واجبك ونحله لك خطوة بخطوة مع شرح كل خوارزمية.
ارسل واجبك على واتساب5. تزامن العمليات (Process Synchronization)
لما عمليتين او اكثر يتشاركون نفس البيانات، ممكن تصير مشاكل. تخيل حسابك البنكي فيه 1000 ريال. زوجتك تسحب 500 ريال وانت تسحب 300 ريال في نفس اللحظة. لو ما في تنسيق، النظام يقرا الرصيد مرتين (1000)، يطرح من كل واحد، ويكتب الناتج. النتيجة: الرصيد يصير 500 او 700 بدل 200.
هذا اسمه Race Condition: النتيجة تعتمد على ترتيب التنفيذ.
مشكلة القسم الحرج (Critical Section Problem)
القسم الحرج هو الجزء من الكود اللي يتعامل مع بيانات مشتركة. الحل لازم يحقق 3 شروط:
- Mutual Exclusion: عملية واحدة بس تكون في القسم الحرج في اي لحظة
- Progress: لو ما في عملية في القسم الحرج وفي عمليات تبي تدخل، لازم واحدة تدخل
- Bounded Waiting: عملية ما تنتظر للابد. لازم يكون في حد اعلى لعدد مرات الانتظار
Mutex (القفل المتبادل)
ابسط حل: قفل. لما عملية تبي تدخل القسم الحرج، تقفل الباب. لما تخلص، تفتحه. لو عملية ثانية جت والباب مقفول، تنتظر.
acquire(lock);
// القسم الحرج - بيانات مشتركة
balance = balance - amount;
release(lock);
Semaphore (الاشارة)
Semaphore عبارة عن متغير عدد صحيح يتحكم فيه عمليتين: wait() و signal().
- Binary Semaphore (0 او 1): يشتغل مثل Mutex
- Counting Semaphore: يسمح لعدد محدد من العمليات تدخل. مثلا لو عندك 3 طابعات، Semaphore يبدا بـ 3
// wait (تنقص 1، لو صارت سالبة العملية تنتظر)
wait(S):
S = S - 1
if S < 0: block this process
// signal (تزيد 1، لو في عملية تنتظر تشغّلها)
signal(S):
S = S + 1
if S <= 0: wake up a waiting process
Monitors (المراقبات)
Monitor هو بنية برمجية عالية المستوى تضمن ان خيط واحد بس يقدر ينفذ دوال المراقب في اي لحظة. تعتبر حل اسهل واامن من Semaphores لان التزامن يكون تلقائي.
مقارنة ادوات التزامن:
| الاداة | المستوى | السهولة | الاخطاء المحتملة |
|---|---|---|---|
| Mutex | منخفض | بسيط لحالات بسيطة | نسيان فتح القفل |
| Semaphore | منخفض | مرن لكن معقد | استخدام wait/signal بالخطا |
| Monitor | عالي | اسهل وآمن | اقل اخطاء |
ℹ️ التزامن في حياتك البرمجية
لو سبق لك استخدمت synchronized في جافا او threading.Lock() في بايثون، انت استخدمت Mutex بدون ما تدري. هذي المادة تشرح لك وش يصير ورا الكواليس لما تكتب هالكود. لو تبي تراجع اساسيات جافا، راجع دليل نظم التشغيل الشامل.
6. الجمود (Deadlock)
الجمود من اخطر المشاكل في نظم التشغيل. يصير لما عمليتين او اكثر كل وحدة تنتظر الثانية تحرر مورد، وما في واحدة تقدر تتقدم.
مثال تقاطع الطرق: تخيل تقاطع مروري بدون اشارة. اربع سيارات وصلت من اربع جهات في نفس اللحظة. كل سيارة تنتظر اللي على يمينها تعدّي. ما في واحدة تتحرك. هذا هو الجمود.
الشروط الاربعة للجمود
الجمود يصير فقط لما كل هذي الشروط تتحقق مع بعض:
- Mutual Exclusion: المورد ما يتشارك. مورد واحد لعملية واحدة بس
- Hold and Wait: عملية تمسك مورد وتنتظر مورد ثاني
- No Preemption: ما تقدر تاخذ المورد من العملية بالقوة
- Circular Wait: سلسلة دائرية. P1 تنتظر P2 تنتظر P3 تنتظر P1
القاعدة: لو كسرت شرط واحد بس، الجمود ما يصير.
استراتيجيات التعامل مع الجمود
طرق التعامل مع الجمود
- المنع (Prevention): تصمم النظام بحيث شرط واحد على الاقل من الاربعة ما يتحقق ابدا. مثلا: تجبر العمليات تطلب كل الموارد مرة واحدة (تكسر Hold and Wait) او ترقّم الموارد وتطلبها بالترتيب (تكسر Circular Wait)
- التجنب (Avoidance): تسمح بطلب الموارد لكن تفحص كل طلب قبل ما توافق عليه. لو الموافقة ممكن تسبب جمود، ترفض الطلب. خوارزمية Banker هي الطريقة الاشهر هنا
- الكشف والتعافي (Detection & Recovery): تخلي النظام يشتغل عادي، وتفحص بشكل دوري لو صار جمود. لو لقيت جمود، تنهي عملية او تاخذ منها مورد بالقوة
- التجاهل (Ignore): تتجاهل المشكلة بالكامل وتعتبر ان الجمود نادر الحدوث. هذا اللي يسويه Linux و Windows فعلا (Ostrich Algorithm)
خوارزمية Banker للتجنب
خوارزمية Banker تفحص لو النظام في حالة آمنة (Safe State) قبل ما يعطي اي مورد.
المصطلحات:
- Available: الموارد المتاحة حاليا
- Max: اقصى حاجة لكل عملية
- Allocation: الموارد المخصصة حاليا لكل عملية
- Need = Max - Allocation: كم تحتاج كل عملية عشان تخلص
خطوات الحل:
- احسب Need لكل عملية
- ابحث عن عملية Need تبعها اصغر من او يساوي Available
- نفّذها وحرر مواردها (Available = Available + Allocation)
- كرر حتى كل العمليات تخلص (حالة آمنة) او ما تلاقي عملية تقدر تنفذها (حالة غير آمنة)
مثال مبسط: لو عندك 12 وحدة مورد واحد:
| العملية | Max | Allocation | Need |
|---|---|---|---|
| P0 | 10 | 5 | 5 |
| P1 | 4 | 2 | 2 |
| P2 | 9 | 2 | 7 |
Available = 12 - (5+2+2) = 3
الترتيب الآمن: P1 (تحتاج 2 وعندنا 3) ثم P0 (تحتاج 5 وعندنا 3+2=5) ثم P2 (تحتاج 7 وعندنا 5+5=10). النظام في حالة آمنة.
⚠️ خوارزمية Banker في الاختبار
Banker’s Algorithm من اكثر الاسئلة اللي تجي في الاختبار النهائي. لازم تعرف تحل مع موارد متعددة (مصفوفات بدل ارقام). المفتاح: رتّب الخطوات، لا تتسرع، واكتب كل خطوة. كثير من الطلاب يغلطون لانهم يحاولون يحلون في راسهم بدون ما يكتبون.
الجمود و Banker's Algorithm محيّرك؟
اسئلة الجمود وخوارزمية Banker من اصعب مواضيع عال 227. ارسل لنا واجبك ونشرح لك كل خطوة مع جداول تفصيلية ورسومات توضيحية.
تواصل معنا على واتساب7. ادارة الذاكرة (Memory Management)
المعالج ما يقدر يشغّل برنامج الا اذا كان في الذاكرة الرئيسية (RAM). بس RAM محدودة. كيف نظام التشغيل يدير هالمساحة المحدودة بين عشرات البرامج؟
الترحيل (Paging)
الترحيل يقسم الذاكرة الفعلية الى قطع ثابتة الحجم اسمها Frames ويقسم ذاكرة البرنامج الى قطع بنفس الحجم اسمها Pages. اي Page ممكن ينحط في اي Frame.
الميزة: ما في مشكلة External Fragmentation (تفتت خارجي). الذاكرة تنقسم بالتساوي.
جدول الصفحات (Page Table): يربط كل Page بالـ Frame اللي فيه. لما البرنامج يطلب عنوان، نظام التشغيل يترجمه من عنوان منطقي الى عنوان فعلي.
ترجمة العناوين:
عنوان منطقي = رقم الصفحة (Page Number) + الازاحة (Offset)
عنوان فعلي = رقم الاطار (Frame Number) + نفس الازاحة
مثال: لو حجم الصفحة 4KB والعنوان المنطقي 5000:
- رقم الصفحة = 5000 / 4096 = 1
- الازاحة = 5000 % 4096 = 904
- لو Page 1 موجودة في Frame 6: العنوان الفعلي = 6 * 4096 + 904 = 25480
التجزئة (Segmentation)
التجزئة تقسم الذاكرة بطريقة منطقية: الكود في Segment، البيانات في Segment، المكدس في Segment. كل Segment حجمه يختلف حسب المحتوى.
الفرق بين Paging و Segmentation:
| المعيار | Paging | Segmentation |
|---|---|---|
| حجم القطعة | ثابت | متغير |
| التقسيم | فيزيائي (ما يعرف المحتوى) | منطقي (كود، بيانات، مكدس) |
| External Fragmentation | ما يصير | ممكن يصير |
| Internal Fragmentation | ممكن في آخر صفحة | ما يصير |
الذاكرة الافتراضية (Virtual Memory)
الذاكرة الافتراضية تخلي البرنامج يشتغل حتى لو حجمه اكبر من الـ RAM. كيف؟ بس الصفحات اللي يحتاجها البرنامج حاليا تكون في RAM، والباقي على القرص الصلب.
لما البرنامج يطلب صفحة مو موجودة في RAM، يصير Page Fault. نظام التشغيل يجيب الصفحة من القرص ويحطها في RAM. لو RAM ممتلئة، لازم يشيل صفحة قديمة ويحط الجديدة مكانها. هنا تجي خوارزميات استبدال الصفحات.
خوارزميات استبدال الصفحات (Page Replacement)
مثال: عندك 3 Frames ومرجعية الصفحات: 7, 0, 1, 2, 0, 3, 0, 4, 2, 3
1. FIFO (الاول يخرج اول):
| الطلب | Frame 1 | Frame 2 | Frame 3 | Page Fault? |
|---|---|---|---|---|
| 7 | 7 | - | - | نعم |
| 0 | 7 | 0 | - | نعم |
| 1 | 7 | 0 | 1 | نعم |
| 2 | 2 | 0 | 1 | نعم |
| 0 | 2 | 0 | 1 | لا |
| 3 | 2 | 3 | 1 | نعم |
| 0 | 2 | 3 | 0 | نعم |
| 4 | 4 | 3 | 0 | نعم |
| 2 | 4 | 2 | 0 | نعم |
| 3 | 4 | 2 | 3 | نعم |
اجمالي Page Faults = 9
FIFO بسيطة لكن ممكن تعاني من Belady’s Anomaly: زيادة عدد الـ Frames ممكن يزيد Page Faults بدل ما يقللها.
2. LRU (الاقل استخداما مؤخرا):
تشيل الصفحة اللي اطول فترة ما تم استخدامها. منطقها: الصفحة اللي ما استخدمتها من زمان غالبا ما تحتاجها.
3. Optimal (المثالية):
تشيل الصفحة اللي ما راح تستخدمها لاطول فترة في المستقبل. تعطي اقل عدد Page Faults ممكن، لكنها نظرية فقط لانك ما تقدر تعرف المستقبل. تستخدم كمعيار مقارنة.
| الخوارزمية | Page Faults (في المثال) | قابلة للتطبيق؟ | Belady’s Anomaly؟ |
|---|---|---|---|
| FIFO | 9 | نعم | نعم |
| LRU | 7 | نعم | لا |
| Optimal | 6 | لا (نظرية) | لا |
💡 كيف تحل اسئلة Page Replacement
ارسم الجدول بنفس الطريقة اللي عرضناها. كل خوارزمية اتبع قاعدتها بالضبط:
- FIFO: شيّل الصفحة اللي دخلت اول
- LRU: شيّل الصفحة اللي ما تم الوصول لها من اطول فترة
- Optimal: شيّل الصفحة اللي ما راح تستخدمها لاطول فترة (شوف باقي السلسلة)
لا تنسى تعد Page Faults في النهاية. الاختبار دائما يطلب العدد.
8. انظمة الملفات (File Systems)
نظام الملفات ينظّم تخزين البيانات على القرص الصلب. بدونه كل البيانات تكون بتات عشوائية على القرص بدون معنى.
مفاهيم اساسية
- الملف (File): وحدة تخزين منطقية. يحتوي على بيانات ومعلومات وصفية (اسم، حجم، صلاحيات، تاريخ)
- المجلد (Directory): ملف خاص يحتوي على قائمة بملفات ومجلدات ثانية
- المسار (Path): عنوان الملف في شجرة المجلدات، مثل
/home/user/file.txt
طرق تخصيص المساحة على القرص
| الطريقة | الفكرة | الميزة | العيب |
|---|---|---|---|
| Contiguous | الملف في كتل متتالية | وصول سريع | External Fragmentation |
| Linked | كل كتلة فيها مؤشر للكتلة التالية | مرنة، لا تفتت | وصول عشوائي بطيء |
| Indexed | كتلة فهرس تحتوي مؤشرات لكل كتل الملف | وصول عشوائي سريع | مساحة اضافية للفهرس |
FAT vs NTFS vs ext4: انظمة ملفات حقيقية تستخدم مزيج من هالطرق. FAT تستخدم Linked، NTFS و ext4 تستخدمان Indexed مع تحسينات.
بنية المجلدات
المجلدات تكون على شكل شجرة (Tree). هنا تشوف كيف تراكيب البيانات (عال 212) تتطبق في الواقع: كل مجلد عقدة في الشجرة، والملفات والمجلدات الفرعية هي الاولاد.
خطة مذاكرة فعالة لـ عال 227
- افهم القصة ورا كل موضوع: نظم التشغيل مبنية على مشاكل حقيقية (مورد محدود، عمليات كثيرة). لما تفهم المشكلة، الحل يصير منطقي
- ارسم المخططات: حالات العملية، Gantt Charts، جداول Banker، جداول Page Replacement. الرسم يثبّت الفهم
- حل بالارقام: خوارزميات الجدولة واستبدال الصفحات تحتاج تمرين حسابي كثير. حل 10 امثلة على الاقل لكل خوارزمية
- راجع عال 212: لو حاسس ان Queues او Trees ضعيفة عندك، ارجع وراجعها لان عال 227 تعتمد عليها
- اقرا اسئلة اختبارات سابقة: اسئلة عال 227 في جامعة الملك سعود غالبا تتكرر بانماط متشابهة
- اربط المواضيع ببعض: الجدولة تستخدم Queues، الذاكرة تستخدم Page Tables (مثل Hash)، الملفات تستخدم Trees. كل شيء مرتبط
اخطاء شائعة في عال 227
- الخلط بين Preemptive و Non-Preemptive: في الاختبار لازم تعرف الفرق. Preemptive يقاطع العملية الحالية، Non-Preemptive يخليها تخلص
- نسيان Arrival Time في الجدولة: لما العمليات ما توصل كلها في الوقت 0، لازم تنتبه متى كل عملية تكون متاحة
- الخلط بين Page و Frame: Page في الذاكرة المنطقية، Frame في الذاكرة الفعلية. الحجم واحد لكن التسمية مختلفة
- نسيان شرط من شروط الجمود: الاربعة لازم تتحقق كلها. لو طلبوا منك تمنع الجمود، اكسر شرط واحد بس يكفي
- الخلط بين Mutex و Semaphore: Mutex مثل مفتاح (واحد بس يقدر يستخدمه). Counting Semaphore مثل عداد (يسمح لعدد محدد)
- تجاهل Belady’s Anomaly: FIFO هي الوحيدة اللي تعاني من هالمشكلة. LRU و Optimal لا
- حل Banker بدون ترتيب: لازم تلتزم بالخطوات: احسب Need، قارن مع Available، نفّذ وحرر
ربط عال 227 بمسارك الاكاديمي
عال 227 بوابة لمواد كثيرة في خطتك بجامعة الملك سعود:
- عال 329، شبكات الحاسب: مفاهيم التزامن والبروتوكولات تعتمد على فهمك لادارة العمليات والموارد
- عال 456، انظمة تشغيل متقدمة: تتعمق في الانظمة الموزعة والحوسبة السحابية
- امن المعلومات: مفاهيم الحماية والصلاحيات اللي درستها هنا هي اساس امن الانظمة
- مشروع التخرج: لو مشروعك يتعامل مع Multi-threading او ادارة موارد، عال 227 هي اساسك
لو تبي نظرة اوسع على مجال نظم التشغيل ككل، راجع دليل نظم التشغيل الشامل. ولو تحتاج مساعدة شخصية في البرمجة والمواد التخصصية، تقدر تتعرف على خدمة الدروس الخصوصية.
خلاصة
عال 227 مادة تجمع بين النظرية والتطبيق. ما تكفي انك تقرا الشرائح وتحفظ. لازم تحل بالقلم والورقة: ارسم Gantt Charts، حل جداول Banker، تتبع Page Replacement خطوة بخطوة. كل موضوع درسته فيها ترا تستخدمه فعلا في حياتك كمبرمج، سواء كنت تبني تطبيق ويب متعدد الخيوط او تتعامل مع قواعد بيانات ضخمة او تصمم نظام سحابي. ركّز على الفهم وحل الاسئلة السابقة، وان شاء الله تعدّي المادة بتقدير ممتاز.
تحتاج مساعدة في واجبات عال 227؟
سواء كان الواجب عن CPU Scheduling او Deadlock او Memory Management، فريقنا متخصص في مواد علوم الحاسب بجامعة الملك سعود. ارسل لنا الواجب ونرد عليك بعرض سعر خلال ساعة.
ارسل واجبك على واتساب