OS Architecture (معمارية النواة)
Monolithic Kernel (المتكتلة)
كل الخدمات (الجدولة، الذاكرة، التعريفات) محشورة في نواة واحدة ضخمة.
- ✔ سرعة تنفيذ عالية جداً (تواصل مباشر).
- ✘ صعبة الصيانة، وأي خطأ قد يسقط النظام كاملاً.
Microkernel (المصغرة)
النواة تحتوي الحد الأدنى فقط. باقي الخدمات تعمل كبرامج خارجية.
- ✔ أمان أعلى، سهولة في الصيانة والنقل (Portability).
- ✘ أبطأ قليلاً بسبب كثرة التواصل بين الأجزاء.
CPU Scheduling (جدولة المعالج)
Scheduling Types:
FCFS
First Come, First Served
من يصل أولاً يخدم أولاً (عادلة لكن قد تكون بطيئة).
SJF
Shortest Job First
الأقصر أولاً (الأفضل للأداء، لكن صعب التنبؤ به).
Round Robin
Preemptive Time Slicing
كل عملية تأخذ وقتاً محدداً (Time Slice) بالدور. (الأكثر شيوعاً).
Priority
Highest Priority First
الأهمية أولاً (قد تسبب مجاعة Starvation للعمليات الصغيرة).
Protected Environments
| النوع | الوصف | الاستخدام |
|---|---|---|
| Virtual Machines (VM) | جهاز وهمي كامل يعمل فوق الجهاز الحقيقي. | تشغيل أنظمة تشغيل متعددة (Servers). |
| Subsystems | بيئة منطقية مخصصة لوظيفة معينة (مثل I/O subsystem). | إدارة الموارد وعزل الوظائف. |
| LPARs (Partitions) | تقسيم الهاردوير بقوة (عزل تام). الأقوى عزلاً. | الأنظمة الضخمة (Mainframes). |
Compiler Phases (مراحل المترجم)
استخراج الرموز (Tokens) مثل الكلمات المحجوزة والمتغيرات.
التحقق من القواعد (Parsing) وبناء الشجرة.
التحقق من المعنى (أنواع البيانات).
توليد كود وسيط مستقل عن الآلة.
تحسين الكود ليكون أسرع وأصغر.
توليد كود الآلة النهائي (Binary).
Java: The Hybrid Approach
Write Once, Run Anywhere
جافا ليست مترجمة بالكامل وليست مفسرة بالكامل، هي هجين (Hybrid).
Preemptive vs Non-preemptive
Non-preemptive: العملية تمسك المعالج ولا تتركه إلا برضاها (حتى تنتهي).
Preemptive: النظام يقاطع العملية "غصباً عنها" (مثل Round Robin).
في الاختبار، إذا قيل لك "Time Slice expires"، فهذا يعني حتماً Preemptive.
Binding Time (وقت ربط العناوين)
Compile Time: يعطي عناوين ثابتة (Absolute Code). لا يمكن نقل البرنامج.
Load Time: يحدد العناوين عند التحميل.
Run Time: الأكثر مرونة، يمكن نقل البرنامج في الذاكرة أثناء التشغيل (Relocatable).