CS351 · مراجعة شاملة

مراجعة الاختبار النهائي - أنظمة التشغيل

يغطي منهج الاختبار من الوحدة 7 إلى 13

7 الذاكرة الرئيسية

إدارة الذاكرة المادية وتخصيصها للعمليات باستخدام تقنيات مثل التجزئة (Paging) لحل مشاكل التجزئة الخارجية.

7.1 ربط العناوين (Address Binding)

عملية تعيين التعليمات والبيانات إلى عناوين ذاكرة فعلية، تماماً مثل تخصيص رقم غرفة فندق محدد لحجز ضيف.

يمكن أن يحدث ربط العناوين في ثلاث مراحل:

  1. وقت الترجمة (Compile time): إذا كان موقع الذاكرة معروفاً مسبقاً، يتم إنشاء كود مطلق (Absolute code).
  2. وقت التحميل (Load time): يتم إنشاء كود قابل لإعادة التوطين (Relocatable code) إذا لم يكن الموقع معروفاً وقت الترجمة.
  3. وقت التنفيذ (Execution time): يتأخر الربط حتى وقت التشغيل إذا كان من الممكن نقل العملية بين أجزاء الذاكرة أثناء تنفيذها، ويتطلب ذلك دعماً من الأجهزة (مثل سجلات الأساس والحد).

7.2 العنوان المنطقي مقابل العنوان المادي

العنوان المنطقي هو ما يراه البرنامج، بينما العنوان المادي هو الموقع الحقيقي في الذاكرة، مثل الفرق بين اسم موقع ويب وعنوان IP الخاص به.

مفهوم مساحة العنوان المنطقي المرتبطة بمساحة عنوان مادي منفصلة هو أمر مركزي لإدارة الذاكرة السليمة.

  • العنوان المنطقي (الافتراضي): يتم إنشاؤه بواسطة وحدة المعالجة المركزية.
  • العنوان المادي: العنوان الفعلي في الذاكرة.

في أنظمة الربط وقت الترجمة ووقت التحميل، يكون العنوانان متطابقين. أما في الربط وقت التنفيذ، فإنهما يختلفان.

7.3 وحدة إدارة الذاكرة (MMU) وحماية الذاكرة

جهاز صلب يترجم العناوين ويحمي الذاكرة، يعمل كحارس أمن يتحقق من هويات الزوار ويوجههم للغرف الصحيحة.

وحدة إدارة الذاكرة (MMU): جهاز يقوم بتعيين العناوين الافتراضية إلى مادية في وقت التشغيل. تستخدم سجل إعادة التوطين (Relocation register) (سجل الأساس سابقاً) حيث تُضاف قيمته إلى كل عنوان يطلبه المستخدم.

حماية الذاكرة: يجب على وحدة المعالجة المركزية التحقق من كل وصول للذاكرة للتأكد من أنه يقع بين سجل الأساس (Base) وسجل الحد (Limit). إذا كان العنوان المنطقي أكبر من أو يساوي الحد، يتم إطلاق خطأ (Trap).

حساب العنوان المادي باستخدام سجل إعادة التوطين. \[Physical\ Address = Logical\ Address + Relocation\ Register\]

7.4 التخصيص الديناميكي للتخزين

خوارزميات لاختيار الفجوة المناسبة في الذاكرة، مثل محاولة إيقاف سيارتك في أول موقف متاح (First-fit) أو أضيق موقف يناسبها (Best-fit).

عندما تصل عملية، يتم تخصيص ذاكرة لها من فجوة (Hole) كبيرة بما يكفي. الخوارزميات هي:

  1. First-fit (التوافق الأول): تخصيص أول فجوة كبيرة بما يكفي.
  2. Best-fit (التوافق الأفضل): تخصيص أصغر فجوة كبيرة بما يكفي (ينتج أصغر فجوة متبقية).
  3. Worst-fit (التوافق الأسوأ): تخصيص أكبر فجوة (ينتج أكبر فجوة متبقية).

7.5 تجزئة الذاكرة (Fragmentation)

ضياع مساحات الذاكرة، إما مبعثرة بالخارج (خارجية) أو محجوزة وغير مستخدمة بالداخل (داخلية)، مثل الصناديق نصف الفارغة في مستودع.

التجزئة الخارجية (External Fragmentation): توجد مساحة ذاكرة إجمالية كافية لتلبية الطلب، لكنها غير متجاورة (مبعثرة).

التجزئة الداخلية (Internal Fragmentation): الذاكرة المخصصة أكبر قليلاً من الذاكرة المطلوبة؛ هذا الفارق هو ذاكرة داخل القسم ولكن لا يتم استخدامها.

قاعدة الـ 50 بالمائة: تحليل First-fit يكشف أنه مقابل كل N كتلة مخصصة، تضيع 0.5 N كتلة بسبب التجزئة (أي ثلث الذاكرة قد يكون غير قابل للاستخدام).

7.6 تجزئة الذاكرة (Paging)

تقسيم الذاكرة إلى إطارات ثابتة والبرامج إلى صفحات، مثل تقسيم كتاب إلى صفحات متساوية لتسهيل تخزينها في أي مكان.

تسمح التجزئة بأن تكون مساحة العنوان المادي للعملية غير متجاورة. يتم تقسيم الذاكرة المادية إلى كتل ثابتة الحجم تسمى إطارات (Frames)، والذاكرة المنطقية إلى كتل بنفس الحجم تسمى صفحات (Pages).

يتم استخدام جدول الصفحات (Page Table) لترجمة العناوين المنطقية إلى مادية.

العنوان المنطقي ينقسم إلى: رقم الصفحة (p) كفهرس في جدول الصفحات، و إزاحة الصفحة (d) التي تُدمج مع عنوان الأساس لتحديد العنوان المادي.

p هو رقم الصفحة، و d هو الإزاحة داخل الصفحة. \[Logical\ Address = (p, d)\]

7.7 ذاكرة التخزين المؤقت للترجمة (TLB) ووقت الوصول الفعال

ذاكرة تخزين مؤقت سريعة جداً تحل مشكلة الوصول المزدوج للذاكرة، مثل الاحتفاظ بأرقام الهواتف المهمة في جيبك بدلاً من البحث في الدليل.

بما أن جدول الصفحات يُحفظ في الذاكرة الرئيسية، فإن كل وصول للبيانات يتطلب وصولين للذاكرة (واحد للجدول وواحد للبيانات). لحل هذا، نستخدم TLB (ذاكرة ترابطية سريعة).

إذا كان رقم الصفحة موجوداً في TLB (TLB hit)، نحصل على الإطار فوراً. إذا لم يكن (TLB miss)، نصل إلى جدول الصفحات في الذاكرة ثم نُحمّل القيمة في TLB.

وقت الوصول الفعال (EAT): يُحسب بناءً على نسبة الإصابة (Hit ratio).

حساب وقت الوصول الفعال بافتراض أن وقت الوصول إلى TLB مدمج أو مهمل كما في مثال الشرائح. \[EAT = Hit\ Ratio \times (Memory\ Access) + Miss\ Ratio \times (2 \times Memory\ Access)\]

7.8 حماية الذاكرة وجدول الصفحات المعكوس

استخدام بتات الصلاحية للحماية، وجدول معكوس يتتبع الإطارات المادية بدلاً من الصفحات المنطقية لتقليل استهلاك الذاكرة.

حماية الذاكرة: يتم تنفيذها بربط بت حماية بكل إطار (للقراءة فقط أو القراءة/الكتابة). يُضاف بت صالح-غير صالح (Valid-invalid bit) لكل إدخال في جدول الصفحات؛ "صالح" يعني أن الصفحة قانونية وتقع في مساحة العملية.

جدول الصفحات المعكوس (Inverted Page Table): بدلاً من جدول لكل عملية، يوجد إدخال واحد لكل إطار مادي حقيقي في الذاكرة. يقلل هذا من الذاكرة المطلوبة لتخزين الجداول، لكنه يزيد من وقت البحث (يُستخدم جدول تجزئة Hash table لتسريع البحث).

7.9 التبديل (Swapping)

نقل العمليات مؤقتاً من الذاكرة إلى القرص ثم إعادتها، مثل إخراج لاعب من الملعب للراحة ثم إعادته لاحقاً.

يسمح التبديل بأن يتجاوز إجمالي مساحة الذاكرة المادية للعمليات حجم الذاكرة المادية الفعلية المتاحة.

Backing store: قرص سريع وكبير بما يكفي لاستيعاب نسخ من جميع صور الذاكرة.

Roll out, roll in: متغير من التبديل يُستخدم في خوارزميات الجدولة القائمة على الأولوية؛ تُنقل العملية ذات الأولوية المنخفضة للخارج لتحميل عملية ذات أولوية أعلى.

الجزء الأكبر من وقت التبديل هو وقت النقل (Transfer time)، والذي يتناسب طردياً مع كمية الذاكرة المبدلة.

8 الذاكرة الافتراضية

السماح بتشغيل برامج أكبر من الذاكرة المادية المتاحة عن طريق جلب الصفحات عند الطلب وإدارة استبدالها.

8.1 أساسيات الذاكرة الافتراضية

الذاكرة الافتراضية تفصل بين الذاكرة المنطقية والمادية، مما يسمح بتشغيل برامج ضخمة على ذاكرة صغيرة، كقراءة موسوعة بوضع مجلد واحد فقط على مكتبك.

الذاكرة الافتراضية تسمح بتنفيذ البرامج المحملة جزئياً في الذاكرة. هذا يعني أن البرنامج لم يعد مقيداً بحدود الذاكرة المادية.

من فوائدها: تستهلك كل عملية ذاكرة أقل أثناء التشغيل (مما يسمح بتشغيل المزيد من البرامج في نفس الوقت)، زيادة استخدام وحدة المعالجة المركزية (CPU)، وتقليل عمليات الإدخال/الإخراج (I/O) اللازمة لتحميل أو تبديل البرامج.

8.2 جلب الصفحات عند الطلب

إحضار الصفحة إلى الذاكرة فقط عندما يحتاجها البرنامج فعلياً، مثل فتح كتاب فقط على الصفحة التي تقرأها.

بدلاً من جلب العملية بأكملها إلى الذاكرة وقت التحميل، يقوم نظام الجلب عند الطلب بإحضار الصفحات المطلوبة فقط.

هذا يقلل من عمليات الإدخال/الإخراج غير الضرورية ويقلل من الذاكرة المطلوبة، مما يؤدي إلى استجابة أسرع ودعم عدد أكبر من المستخدمين.

يتم استخدام بت (Valid-Invalid Bit) في جدول الصفحات لتحديد ما إذا كانت الصفحة موجودة في الذاكرة (v) أو غير موجودة (i).

8.3 استبدال الصفحات

عندما تمتلئ الذاكرة، يجب إخراج صفحة (ضحية) لإفساح المجال لصفحة جديدة، مثل إخراج ملابس قديمة من خزانة ممتلئة لوضع ملابس جديدة.

يمنع استبدال الصفحات التخصيص المفرط للذاكرة.

إذا لم يكن هناك إطار فارغ عند حدوث خطأ صفحة، تستخدم خوارزمية استبدال الصفحات لاختيار 'إطار ضحية' (Victim Frame) لإخراجه إلى القرص.

لتقليل العبء، يتم استخدام 'بت التعديل' (Dirty Bit) بحيث يتم كتابة الصفحات التي تم تعديلها فقط إلى القرص، بينما الصفحات غير المعدلة يتم التخلص منها ببساطة.

8.4 خوارزميات استبدال الصفحات

تحدد الخوارزميات أي صفحة يجب إزالتها: FIFO تزيل الأقدم، OPT تزيل الأبعد استخداماً في المستقبل، و LRU تزيل الأقل استخداماً مؤخراً.

  1. FIFO (First-In-First-Out): تستبدل الصفحة التي دخلت الذاكرة أولاً. قد تعاني من مفارقة بيلادي (Belady's Anomaly) حيث تزيد أخطاء الصفحة بزيادة الإطارات.
  2. Optimal (OPT): تستبدل الصفحة التي لن يتم استخدامها لأطول فترة في المستقبل. هي الأفضل ولكن يستحيل تنفيذها عملياً لأنها تتطلب معرفة المستقبل. تُستخدم كمعيار للمقارنة.
  3. LRU (Least Recently Used): تستخدم المعرفة السابقة بدلاً من المستقبلية، وتستبدل الصفحة التي لم تُستخدم لأطول فترة زمنية. أداؤها جيد وشائعة الاستخدام.

8.5 تخصيص الإطارات

تحديد كم إطاراً من الذاكرة تحصل عليه كل عملية، إما بالتساوي للجميع أو بنسبة تتناسب مع حجم العملية.

تحتاج كل عملية إلى حد أدنى من الإطارات لتنفيذ تعليماتها. هناك مخططات رئيسية للتخصيص الثابت (Fixed Allocation):

  1. التخصيص المتساوي (Equal Allocation): إذا كان هناك 100 إطار و 5 عمليات، تحصل كل عملية على 20 إطاراً.
  2. التخصيص النسبي (Proportional Allocation): يتم تخصيص الإطارات بناءً على حجم العملية. العمليات الأكبر تحصل على إطارات أكثر.
حيث a_i هو التخصيص للعملية، s_i هو حجم العملية، S هو الحجم الكلي للعمليات، و m هو العدد الكلي للإطارات المتاحة. \[a_i = \frac{s_i}{S} \times m\]

8.6 التعثر ونموذج المحلية

التعثر يحدث عندما تقضي العملية وقتاً في تبديل الصفحات أكثر من التنفيذ، مما يؤدي إلى انهيار أداء النظام.

إذا لم يكن لدى العملية عدد 'كافٍ' من الصفحات، سيكون معدل أخطاء الصفحة مرتفعاً جداً.

ستقوم العملية باستبدال إطار، ولكنها ستحتاجه مرة أخرى بسرعة.

هذا يؤدي إلى انخفاض شديد في استخدام المعالج (CPU utilization).

نظام التشغيل يلاحظ هذا الانخفاض فيعتقد أنه بحاجة لزيادة درجة تعدد البرمجة (إضافة عمليات جديدة)، مما يزيد المشكلة سوءاً ويؤدي إلى التعثر (Thrashing).

9 أنظمة التخزين الشامل

فهم الهيكل المادي للأقراص (HDD و SSD)، خوارزميات الجدولة لتحسين الأداء، وتقنيات RAID لحماية البيانات.

9.1 أداء محركات الأقراص الصلبة (HDD)

يعتمد أداء القرص الصلب على وقت تحرك الذراع (وقت البحث) ووقت دوران القرص (التأخير الدوراني)، مثل البحث عن أغنية محددة على أسطوانة فينيل.

تتكون محركات الأقراص الصلبة من أقراص تدور بسرعات تتراوح بين 60 إلى 250 مرة في الثانية.

يتم قياس الأداء من خلال وقت البحث (Seek Time) وهو الوقت اللازم لتحريك ذراع القرص إلى الأسطوانة المطلوبة، والتأخير الدوراني (Rotational Latency) وهو الوقت اللازم ليدور القطاع المطلوب تحت رأس القراءة/الكتابة.

زمن الوصول (Access Latency) هو مجموع هذين الوقتين.

معادلة حساب متوسط وقت الإدخال والإخراج للقرص الصلب. \[Average\ I/O\ time = average\ access\ time + \left(\frac{amount\ to\ transfer}{transfer\ rate}\right) + controller\ overhead\]

9.2 أجهزة الذاكرة غير المتطايرة (NVM)

أقراص سريعة بدون أجزاء متحركة، تُقرأ وتُكتب في صفحات، وتُمسح في كتل، مثل الكتابة بقلم حبر يتطلب استخدام مزيل (Correction fluid) لمسح صفحة كاملة قبل إعادة الكتابة.

أجهزة NVM (مثل SSDs) أسرع وأكثر موثوقية من HDDs لعدم وجود أجزاء متحركة، مما يلغي وقت البحث والتأخير الدوراني.

ومع ذلك، لها تحديات: تُقرأ وتُكتب البيانات بزيادات تسمى 'صفحات' (Pages)، ولكن لا يمكن الكتابة فوقها مباشرة؛ يجب مسحها أولاً بزيادات أكبر تسمى 'كتل' (Blocks).

9.3 جدولة الأقراص (Disk Scheduling)

ترتيب طلبات الإدخال/الإخراج لتقليل حركة ذراع القرص، مثل ساعي البريد الذي يخطط لمساره لتجنب الذهاب والعودة في نفس الشارع.

نظام التشغيل مسؤول عن استخدام الأجهزة بكفاءة، مما يعني تقليل وقت البحث.

الخوارزميات الشائعة تشمل:

  • FCFS (من يأتي أولاً يُخدم أولاً)،
  • SCAN (خوارزمية المصعد: يتحرك الذراع من طرف لآخر ويخدم الطلبات في طريقه)،
  • و C-SCAN (مثل SCAN ولكن يعود للبداية فوراً دون خدمة طلبات في طريق العودة لتوفير وقت انتظار أكثر تجانساً).

9.4 طرق توصيل التخزين

كيفية توصيل الأقراص بالحواسيب: محلياً (DAS)، عبر الشبكة كملفات (NAS)، أو عبر الشبكة ككتل (SAN).

يمكن الوصول إلى التخزين بثلاث طرق رئيسية:

  • التخزين المرفق بالمضيف (Host-attached) عبر منافذ محلية مثل SATA أو NVMe.
  • التخزين المرفق بالشبكة (NAS) حيث يتم توفير التخزين عبر شبكة (مثل LAN) باستخدام بروتوكولات مثل NFS و CIFS للوصول إلى الملفات.
  • شبكة منطقة التخزين (SAN) وهي شبكة مخصصة تربط خوادم متعددة بمصفوفات تخزين متعددة، وتوفر وصولاً على مستوى الكتل (Block-level) باستخدام بروتوكولات مثل Fibre Channel أو iSCSI.

9.5 هيكل مصفوفة الأقراص المستقلة المتكررة (RAID)

استخدام أقراص متعددة معاً لزيادة السرعة (Striping) أو الموثوقية (Mirroring/Parity)، مثل فريق عمل يتقاسم المهام للسرعة أو يراجع عمل بعضه للدقة.

تقنية RAID (مصفوفة متكررة من الأقراص غير المكلفة) تحسن الأداء والموثوقية.

  • RAID 0 (التقسيم الشريطي - Striping) يوزع البيانات عبر الأقراص لزيادة السرعة لكن بدون تكرار.
  • RAID 1 (النسخ المتطابق - Mirroring) ينسخ البيانات تماماً على قرص آخر للموثوقية.
  • RAID 4, 5, 6 تستخدم التكافؤ (Parity) لتوفير التكرار باستخدام مساحة أقل من النسخ المتطابق.

يمكن دمج المستويات مثل RAID 1+0 أو RAID 0+1.

مثال لحساب متوسط الوقت لفقدان البيانات في أقراص منسوخة (Mirrored) تفشل بشكل مستقل. \[Mean\ time\ to\ data\ loss = \frac{100,000^2}{2 \times 10} = 500 \times 10^6\ hours\]

9.6 إدارة أجهزة التخزين

تهيئة القرص فيزيائياً ومنطقياً ليتمكن نظام التشغيل من استخدامه والإقلاع منه، مثل تخطيط أرض فارغة وبناء شوارع ومنازل عليها.

إدارة التخزين تتضمن:

  • التهيئة منخفضة المستوى (Physical Formatting) لتقسيم القرص إلى قطاعات يمكن للمتحكم قراءتها (تحتوي على ترويسة، بيانات، ورمز تصحيح الأخطاء ECC).
  • ثم التقسيم (Partitioning) لإنشاء أقراص منطقية.
  • وأخيراً التهيئة المنطقية (Logical Formatting) لإنشاء نظام الملفات.

للإقلاع، يُخزن برنامج Bootstrap loader في كتل الإقلاع (Boot blocks) في قسم الإقلاع.

10 أنظمة الإدخال والإخراج

إدارة تواصل النواة مع الأجهزة الخارجية عبر المقاطعات، الوصول المباشر للذاكرة (DMA)، وواجهات برامج التشغيل الموحدة.

10.1 أساسيات أجهزة الإدخال والإخراج

تتواصل الأجهزة مع الحاسوب عبر المنافذ والنواقل ووحدات التحكم، تماماً مثل تواصل الأجهزة المنزلية بشبكة الكهرباء عبر المقابس والأسلاك.

تتنوع أجهزة الإدخال والإخراج بشكل كبير (تخزين، نقل، واجهة مستخدم).

تتصل هذه الأجهزة بالحاسوب من خلال المنفذ (Port)، وتتشارك البيانات عبر الناقل (Bus) مثل PCIe.

يتم إدارة كل جهاز بواسطة وحدة تحكم (Controller) تحتوي على معالج وذاكرة خاصة.

تتواصل النواة مع وحدة التحكم عبر سجلات (Registers) محددة: سجل إدخال البيانات، سجل إخراج البيانات، سجل الحالة، وسجل التحكم.

10.2 الاستعلام والمقاطعات

الاستعلام هو أن تسأل الجهاز باستمرار 'هل انتهيت؟'، بينما المقاطعة هي أن يخبرك الجهاز 'لقد انتهيت!' عندما يجهز.

في الاستعلام (Polling)، يقرأ المضيف بت الحالة (busy bit) بشكل متكرر حتى يصبح فارغاً.

هذا الأسلوب فعال إذا كان الجهاز سريعاً جداً، ولكنه يهدر دورات المعالج إذا كان الجهاز بطيئاً.

لحل هذه المشكلة، نستخدم المقاطعات (Interrupts)، حيث يرسل الجهاز إشارة إلى المعالج عبر خط طلب المقاطعة (Interrupt-request line) عند اكتمال المهمة.

يتحقق المعالج من هذا الخط بعد كل تعليمة، وينتقل إلى معالج المقاطعات (Interrupt handler) عند الحاجة.

10.3 الوصول المباشر للذاكرة (DMA)

الـ DMA هو مساعد ينقل كميات ضخمة من البيانات بين الجهاز والذاكرة مباشرة، تاركاً المعالج حراً للقيام بمهام أخرى.

يُستخدم الوصول المباشر للذاكرة (DMA) لتجنب الإدخال/الإخراج المبرمج (نقل بايت واحد في كل مرة بواسطة المعالج) عند نقل كميات كبيرة من البيانات.

يتطلب ذلك وحدة تحكم DMA خاصة.

يكتب نظام التشغيل كتلة أوامر DMA في الذاكرة (تحتوي على عناوين المصدر والوجهة، وضع القراءة/الكتابة، وعدد البايتات).

تقوم وحدة تحكم DMA بنقل البيانات مباشرة متجاوزة المعالج، وعند الانتهاء ترسل مقاطعة واحدة فقط.

10.4 واجهة تطبيقات الإدخال والإخراج

تقوم النواة بإخفاء تعقيدات الأجهزة المختلفة عن التطبيقات من خلال توفير واجهات قياسية وموحدة.

تغلف استدعاءات نظام الإدخال والإخراج سلوكيات الأجهزة في فئات عامة.

تخفي طبقة برامج تشغيل الأجهزة (Device Drivers) الاختلافات بين وحدات التحكم عن النواة.

تختلف الأجهزة في عدة أبعاد: نقل الكتل مقابل تدفق الحروف (Block vs Character)، الوصول التسلسلي مقابل العشوائي، المتزامن مقابل غير المتزامن، والقابل للمشاركة مقابل المخصص.

10.5 الإدخال والإخراج المحظور، غير المحظور، وغير المتزامن

المحظور يوقفك حتى تنتهي المهمة، غير المحظور يعطيك ما توفر فوراً، وغير المتزامن يجعلك تكمل عملك ويخبرك لاحقاً عند الانتهاء.

في الإدخال/الإخراج المحظور (Blocking)، يتم تعليق العملية حتى يكتمل الإدخال/الإخراج.

إنه سهل الاستخدام ولكنه غير كافٍ لبعض الاحتياجات.

في غير المحظور (Non-blocking)، يعود الاستدعاء فوراً بأي قدر متاح من البيانات (يُستخدم غالباً مع واجهات المستخدم أو عبر خيوط متعددة).

أما في غير المتزامن (Asynchronous)، تستمر العملية في العمل بينما يتم تنفيذ الإدخال/الإخراج في الخلفية، ويقوم النظام بإرسال إشارة للعملية عند اكتمال المهمة.

10.6 النظام الفرعي للإدخال والإخراج في النواة

النواة هي المايسترو الذي ينظم طلبات الإدخال والإخراج عبر الجدولة، التخزين المؤقت، والتخزين المخبئي لضمان الأداء السلس.

يقدم النظام الفرعي للنواة خدمات حيوية تشمل:

الجدولة (Scheduling) لترتيب الطلبات عبر طوابير الأجهزة لتحقيق العدالة وجودة الخدمة.

التخزين المؤقت (Buffering) لتخزين البيانات في الذاكرة أثناء النقل للتعامل مع عدم تطابق سرعات الأجهزة أو أحجام النقل، وللحفاظ على 'دلالات النسخ' (Copy semantics).

التخزين المخبئي (Caching) للاحتفاظ بنسخة من البيانات في جهاز أسرع لتحسين الأداء.

التخزين المؤقت للمهام (Spooling) للأجهزة التي تخدم طلباً واحداً في كل مرة مثل الطابعات.

10.7 حماية الإدخال والإخراج ودورة حياة الطلب

الإدخال والإخراج عملية خطيرة، لذا يجب أن تمر جميع الطلبات عبر النواة كحارس أمن.

لمنع عمليات المستخدم من تعطيل النظام (عن قصد أو بغير قصد)، يتم تعريف جميع تعليمات الإدخال والإخراج على أنها تعليمات ذات امتياز (Privileged Instructions). يجب أن يتم الإدخال والإخراج حصرياً عبر استدعاءات النظام (System Calls).

تبدأ دورة حياة الطلب عندما يطلب المستخدم إدخال/إخراج عبر استدعاء نظام. تتحقق النواة مما إذا كان يمكن تلبية الطلب من الذاكرة المخبئية.

إذا لم يكن كذلك، يتم إرسال الطلب إلى برنامج تشغيل الجهاز، الذي يرسل الأوامر إلى وحدة التحكم. ينفذ الجهاز الأمر، ويولد مقاطعة عند الانتهاء.

يستلم معالج المقاطعات الإشارة، ويتم إرجاع البيانات والتحكم إلى العملية الطالبة.

11 نظام الملفات وتنفيذه

دراسة شاملة لمفاهيم أنظمة الملفات، هياكل الأدلة، وطرق التخصيص وإدارة المساحات الفارغة على الأقراص.

11.1 مفهوم الملف وخصائصه

الملف هو مساحة عناوين منطقية متجاورة تخزن البيانات، ويمتلك خصائص مثل الاسم، المعرف، الحجم، والحماية.

الملف يمثل وحدة التخزين المنطقية الأساسية. يتم تعريف محتوياته بواسطة منشئه ويمكن أن يكون نصاً، برنامجاً، أو بيانات ثنائية.

تشمل خصائص الملف: الاسم (المعلومة الوحيدة المقروءة للبشر)، المعرف (رقم فريد داخل النظام)، النوع، الموقع (مؤشر لمكانه على الجهاز)، الحجم، الحماية (من يمكنه القراءة/الكتابة/التنفيذ)، والوقت والتاريخ وهوية المستخدم. تُحفظ هذه المعلومات في هيكل الدليل (Directory Structure) على القرص.

11.2 عمليات الملفات والأقفال

نظام التشغيل يوفر عمليات أساسية (إنشاء، قراءة، كتابة، حذف) ويستخدم الأقفال (Locking) لمنع التعارض عند وصول عدة عمليات لنفس الملف.

العمليات الأساسية تشمل: Create, Write (عند موقع مؤشر الكتابة)، Read (عند موقع مؤشر القراءة)، Reposition (Seek)، Delete، و Truncate. لتجنب البحث المتكرر في الدليل، يُستخدم الأمر Open لنقل معلومات الملف إلى الذاكرة، و Close لإزالتها.

أقفال الملفات (File Locking): تشبه أقفال القارئ/الكاتب. القفل المشترك (Shared) يسمح لعدة عمليات بالقراءة، بينما القفل الحصري (Exclusive) يمنع الآخرين أثناء الكتابة. الأقفال إما إلزامية (Mandatory) حيث يمنع نظام التشغيل الوصول، أو استشارية (Advisory) حيث يجب على العمليات التحقق من حالة القفل بنفسها.

11.3 طرق الوصول

يمكن قراءة الملفات إما بالتسلسل (بايت تلو الآخر) أو بالوصول المباشر (القفز إلى كتلة محددة فوراً).

  • الوصول التسلسلي (Sequential Access): تتم قراءة/كتابة السجلات بالترتيب (read next, write next). لا يمكن التخطي للأمام أو الخلف إلا بإعادة الضبط (Reset).
  • الوصول المباشر (Direct Access): يسمح بالقفز إلى أي كتلة منطقية (read n, write n). مفيد لقواعد البيانات.
  • طرق أخرى: تُبنى فوق الطرق الأساسية، مثل استخدام الفهارس (Index). يتم الاحتفاظ بفهرس في الذاكرة لتحديد موقع البيانات بسرعة (مثل ISAM من IBM).

11.4 هياكل الأدلة

تتطور هياكل الأدلة من مستوى واحد بسيط إلى شجرة هرمية، وصولاً إلى رسوم بيانية تسمح بمشاركة الملفات والروابط المعقدة.

يُنظم الدليل منطقياً لتحقيق الكفاءة، التسمية المريحة، والتجميع. الأنواع تشمل:

  1. الدليل ذو المستوى الواحد (Single-Level): دليل واحد لجميع المستخدمين. يعاني من مشاكل التسمية (لا يمكن تكرار الأسماء) والتجميع.
  2. الدليل ذو المستويين (Two-Level): دليل منفصل لكل مستخدم. يحل مشكلة التسمية بين المستخدمين ولكن لا يدعم التجميع الداخلي.
  3. الدليل الشجري (Tree-Structured): هرمي، يسمح للمستخدمين بإنشاء أدلة فرعية. البحث فعال والتجميع ممتاز.
  4. الرسم البياني غير الدوري (Acyclic-Graph): يسمح بمشاركة الأدلة الفرعية والملفات (روابط/Links). يطرح مشكلة المؤشرات المعلقة (Dangling pointers) عند حذف الملف الأصلي.
  5. الرسم البياني العام (General Graph): يسمح بوجود حلقات (Cycles). يتطلب خوارزميات لجمع القمامة (Garbage collection) واكتشاف الحلقات.

11.5 حماية نظام الملفات

تتحكم الحماية في من يمكنه الوصول للملفات ونوع العمليات المسموحة (قراءة، كتابة، تنفيذ) باستخدام قوائم الوصول أو المجموعات.

يجب أن يكون مالك/منشئ الملف قادراً على التحكم في أنواع الوصول (Read, Write, Execute, Append, Delete, List).

في أنظمة UNIX: يتم تصنيف المستخدمين إلى ثلاث فئات: المالك (Owner)، المجموعة (Group)، والعامة (Public). يتم تمثيل الصلاحيات بـ 3 بتات (RWX). على سبيل المثال، `761` تعني: المالك له كل الصلاحيات (7 = 111)، المجموعة لها قراءة وكتابة (6 = 110)، والعامة لهم تنفيذ فقط (1 = 001). يمكن إرفاق مجموعة بملف باستخدام أمر `chgrp`.

في أنظمة Windows: تُستخدم قوائم التحكم في الوصول (ACL) لتحديد صلاحيات دقيقة لكل مستخدم أو مجموعة.

11.6 طبقات نظام الملفات

يُبنى نظام الملفات في طبقات متدرجة من البرامج التطبيقية وصولاً إلى الأجهزة المادية، لتقليل التعقيد.

يتكون نظام الملفات من الطبقات التالية (من الأعلى للأسفل):

  1. البرامج التطبيقية (Application Programs)
  2. نظام الملفات المنطقي (Logical File System): يدير البيانات الوصفية (Metadata)، يترجم اسم الملف إلى رقم/مقبض باستخدام كتلة تحكم الملف (FCB/inodes)، ويدير الحماية والأدلة.
  3. وحدة تنظيم الملفات (File-organization module): تفهم الملفات والعناوين المنطقية، وتترجم رقم الكتلة المنطقية إلى رقم كتلة مادية. تدير المساحة الحرة.
  4. نظام الملفات الأساسي (Basic File System): يرسل أوامر مثل 'استرجع الكتلة 123' إلى مشغل الجهاز، ويدير الذاكرة المخبئية (Caches) والمخازن المؤقتة (Buffers).
  5. التحكم في الإدخال/الإخراج (I/O Control): مشغلات الأجهزة (Device Drivers) التي تدير الأجهزة المادية وترسل أوامر منخفضة المستوى.
  6. الأجهزة (Devices).

11.7 هياكل نظام الملفات في الذاكرة

لتسريع العمليات، يحتفظ نظام التشغيل بجداول في الذاكرة الرئيسية مثل جدول الملفات المفتوحة لتجنب قراءة القرص باستمرار.

الهياكل الموجودة في الذاكرة تشمل:

  1. جدول التثبيت (Mount table): يخزن معلومات عن أنظمة الملفات المثبتة ونقاط التثبيت.
  2. جدول الملفات المفتوحة على مستوى النظام (System-wide open-file table): يحتوي على نسخة من FCB لكل ملف مفتوح حالياً ومعلومات أخرى.
  3. جدول الملفات المفتوحة لكل عملية (Per-process open-file table): يحتوي على مؤشرات تشير إلى الإدخالات المناسبة في جدول النظام العام، بالإضافة إلى معلومات خاصة بالعملية (مثل مؤشر القراءة/الكتابة الحالي).

11.8 تنفيذ الأدلة

يمكن تنفيذ الأدلة كقائمة خطية بسيطة (بطيئة) أو كجدول تجزئة (سريع ولكن معقد).

  • القائمة الخطية (Linear List): قائمة بأسماء الملفات مع مؤشرات لكتل البيانات. سهلة البرمجة ولكنها تستهلك وقتاً طويلاً في التنفيذ (وقت بحث خطي). يمكن تحسينها باستخدام قائمة مرتبة أبجدياً أو شجرة B+.
  • جدول التجزئة (Hash Table): قائمة خطية مدمجة مع هيكل بيانات تجزئة. يقلل بشكل كبير من وقت البحث في الدليل. من عيوبه حدوث التصادمات (Collisions) عندما ينتج عن اسمين نفس قيمة التجزئة، ويكون فعالاً فقط إذا كانت الإدخالات ذات حجم ثابت، أو يتطلب استخدام تقنية السلسلة (Chained-overflow).

11.9 طرق تخصيص الكتل

يحدد نظام التشغيل كيفية تخزين الملفات على القرص إما ككتلة واحدة متصلة (Contiguous)، أو كسلسلة مترابطة (Linked)، أو باستخدام جدول فهارس (Indexed).

  1. التخصيص المتجاور (Contiguous): يحتل الملف مجموعة من الكتل المتتالية. يوفر أفضل أداء وسهل الإدارة (يحتاج فقط موقع البداية والطول). مشاكله: إيجاد مساحة كافية، معرفة حجم الملف مسبقاً، والتجزئة الخارجية (External fragmentation).
  2. التخصيص المترابط (Linked): كل ملف هو قائمة مرتبطة من الكتل. لا توجد تجزئة خارجية. مشاكله: بطيء جداً في الوصول العشوائي، وموثوقية ضعيفة (تلف مؤشر واحد يفسد الملف). FAT هو تحسين لهذه الطريقة بوضع المؤشرات في جدول بداية القرص.
  3. التخصيص المفهرس (Indexed): يمتلك كل ملف كتلة فهرس (Index block) تحتوي على مؤشرات لجميع كتل البيانات. يدعم الوصول العشوائي ولا يعاني من تجزئة خارجية، لكنه يستهلك مساحة إضافية لكتلة الفهرس.
حساب الكتلة المادية في التخصيص المتجاور (حيث LA هو العنوان المنطقي، 512 حجم الكتلة، Q رقم الكتلة، R الإزاحة). \[LA / 512 = Q, R\]

11.10 إدارة المساحة الحرة

يتتبع نظام التشغيل الكتل الفارغة على القرص باستخدام مصفوفة بتات (Bit Vector) أو قائمة مرتبطة (Linked List).

يحتفظ نظام الملفات بقائمة المساحات الحرة. الطرق تشمل:

  1. متجه البتات (Bit Vector / Bit Map): كل كتلة تُمثل ببت واحد (1 = حر، 0 = مشغول). يسهل العثور على كتل متجاورة، لكنه يتطلب مساحة إضافية في الذاكرة.
  2. القائمة المرتبطة (Linked List): ربط الكتل الحرة معاً. لا يوجد هدر للمساحة، لكن يصعب الحصول على مساحة متجاورة وبطيء في التصفح.
  3. التجميع (Grouping): تخزين عناوين n-1 من الكتل الحرة في أول كتلة حرة، لتسريع الوصول.
  4. العد (Counting): الاحتفاظ بعنوان أول كتلة حرة وعدد الكتل الحرة المتجاورة التي تليها.
  5. خرائط المساحة (Space Maps): تُستخدم في ZFS للأنظمة الضخمة، حيث تُقسم المساحة إلى وحدات (metaslabs) وتُدار باستخدام سجلات (Logs) وأشجار متوازنة.
حساب رقم الكتلة الحرة باستخدام متجه البتات. \[\text{Block Number} = (\text{bits per word}) \times (\text{0-value words}) + \text{offset of first 1 bit}\]

12 الأمن والحماية في نظم التشغيل

تغطي هذه الوحدة مفاهيم الأمن والحماية في نظم التشغيل، بما في ذلك التهديدات البرمجية والشبكية، مصفوفة الوصول، ومبادئ الحماية مثل مبدأ الامتياز الأقل.

12.1 انتهاكات الأمن وطرق الهجوم

الأمن هو حماية النظام من الانتهاكات، والهجوم هو محاولة اختراق هذا الأمن سواء بشكل عرضي أو متعمد.

يصعب تحقيق أمان مطلق للنظام.

تشمل فئات انتهاك الأمن: خرق السرية (قراءة غير مصرح بها)، خرق النزاهة (تعديل غير مصرح به)، خرق التوافر (تدمير البيانات)، وسرقة الخدمات (استخدام غير مصرح به للموارد)، وحجب الخدمة (DOS).

تتضمن طرق الهجوم: التنكر (Masquerading)، هجوم إعادة الإرسال (Replay)، هجوم الوسيط (Man-in-the-middle)، اختطاف الجلسة (Session hijacking)، وتصعيد الصلاحيات (Privilege escalation).

12.2 نموذج الأمن رباعي الطبقات

الأمن قوي بقدر أضعف حلقة فيه، ويجب تطبيقه على أربعة مستويات: المادي، الشبكة، نظام التشغيل، والتطبيق.

لكي يكون الأمن فعالاً، يجب أن يتم على أربعة مستويات:

  1. المادي (حماية مراكز البيانات والخوادم).
  2. الشبكة (منع اعتراض الاتصالات وحجب الخدمة).
  3. نظام التشغيل (آليات الحماية وتصحيح الأخطاء).
  4. التطبيق (منع التطبيقات الخبيثة أو التي تحتوي على ثغرات).

بالإضافة إلى ذلك، يعتبر العنصر البشري خطراً عبر هجمات التصيد والهندسة الاجتماعية.

12.3 التهديدات البرمجية

برامج مصممة لاستغلال أو تعطيل الكمبيوتر، مثل الفيروسات، أحصنة طروادة، وبرامج الفدية.

تشمل التهديدات البرمجية: البرمجيات الخبيثة (Malware)، حصان طروادة (Trojan Horse) الذي يعمل بشكل سري، برامج التجسس (Spyware) التي تجمع بيانات المستخدم، وبرامج الفدية (Ransomware) التي تشفر البيانات وتطلب فدية.

تشمل التهديدات الأخرى الأبواب الخلفية (Trap Doors) والقنابل المنطقية (Logic Bombs).

جميعها تحاول انتهاك مبدأ الامتياز الأقل، وغالباً ما تهدف إلى ترك أداة وصول عن بعد (RAT).

12.4 تهديدات النظام والشبكة

تهديدات تنتقل عبر الشبكات مثل الديدان (Worms)، هجمات حجب الخدمة (DoS)، ومسح المنافذ (Port Scanning).

الأنظمة المتصلة بالشبكة تواجه تهديدات يصعب اكتشافها.

الديدان (Worms) هي برامج مستقلة تستخدم آليات التكاثر عبر الشبكة (مثل استغلال ثغرات الوصول عن بعد).

هجمات حجب الخدمة (DoS) تهدف إلى إرهاق الكمبيوتر المستهدف لمنعه من أداء عمله، ويمكن أن تكون موزعة (DDoS) من مواقع متعددة.

مسح المنافذ (Port Scanning) هو أداة آلية للبحث عن المنافذ المفتوحة والبروتوكولات للبحث عن ثغرات.

12.5 مبادئ الحماية

المبدأ التوجيهي الأساسي هو 'مبدأ الامتياز الأقل'، حيث يُمنح المستخدم أو البرنامج الصلاحيات الضرورية فقط لأداء مهمته.

تتضمن مبادئ الحماية:

  1. مبدأ الامتياز الأقل (Least Privilege) للحد من الضرر في حال وجود خطأ أو اختراق.
  2. التقسيم (Compartmentalization) لحماية كل مكون نظام على حدة.
  3. مسار التدقيق (Audit trail) لتسجيل جميع الأنشطة المتعلقة بالحماية لفهم ما حدث.
  4. الدفاع في العمق (Defense in depth) حيث لا يوجد مبدأ واحد يكفي بمفرده.

12.6 نطاق الحماية

نطاق الحماية يحدد الموارد (الكائنات) التي يمكن للعملية الوصول إليها والعمليات المسموح بها عليها.

يُعامل الكمبيوتر كمجموعة من العمليات والكائنات (أجهزة أو برمجيات).

يجب أن تصل العملية فقط إلى الكائنات التي تحتاجها لإكمال مهمتها (مبدأ الحاجة إلى المعرفة).

كل نطاق (Domain) يحدد مجموعة من حقوق الوصول بصيغة: <اسم الكائن، مجموعة الحقوق>.

يمكن أن يكون النطاق مستخدماً، عملية، أو إجراءً.

12.7 مصفوفة الوصول

جدول يمثل الحماية، حيث تمثل الصفوف النطاقات (Domains) والأعمدة تمثل الكائنات (Objects).

مصفوفة الوصول هي نموذج حماية يحدد حقوق الوصول.

الخلية Access(i, j) تحتوي على مجموعة العمليات التي يمكن لعملية في النطاق i تنفيذها على الكائن j.

تفصل المصفوفة بين الآلية (Mechanism) التي يوفرها نظام التشغيل، والسياسة (Policy) التي يحددها المستخدم.

تشمل الحقوق الخاصة: المالك (Owner)، النسخ (Copy - يُشار إليه بـ *)، التحكم (Control)، والتحويل (Transfer).

12.8 تنفيذ مصفوفة الوصول

تُنفذ المصفوفة عادةً كقوائم تحكم بالوصول (ACL) للكائنات، أو قوائم قدرات (Capability Lists) للنطاقات، لتوفير مساحة الذاكرة.

بما أن مصفوفة الوصول غالباً ما تكون متفرقة (Sparse)، فإن تخزينها كجدول عالمي (Global Table) يستهلك ذاكرة كبيرة. البدائل هي:

  1. قوائم الوصول للكائنات (ACL): كل عمود يُنفذ كقائمة تحدد النطاقات المسموح لها بالوصول.
  2. قوائم القدرات للنطاقات (Capability List): كل صف يُنفذ كقائمة كائنات مسموح للنطاق بالوصول إليها (تعمل كمفتاح أو مؤشر آمن).
  3. القفل والمفتاح (Lock-key): حل وسط حيث يمتلك الكائن أقفالاً ويمتلك النطاق مفاتيح.

13 الأجهزة الافتراضية والأنظمة الموزعة

تغطي هذه الوحدة تقنيات الأجهزة الافتراضية، أنواع الـ Hypervisors، بالإضافة إلى مفاهيم الأنظمة الموزعة وأنظمة الملفات الموزعة (DFS).

13.1 الأجهزة الافتراضية وأنواع الـ Hypervisors

الـ Hypervisor (أو VMM) هو الطبقة التي تدير الأجهزة الافتراضية، وتأتي في ثلاثة أنواع رئيسية: 0 (مدمج في العتاد)، 1 (نظام تشغيل مخصص)، و 2 (تطبيق يعمل فوق نظام تشغيل مضيف).

تتنوع تطبيقات إدارة الأجهزة الافتراضية (VMMs):

النوع 0 (Type 0): حلول تعتمد على الأجهزة توفر دعماً لإنشاء وإدارة الأجهزة الافتراضية عبر البرامج الثابتة (Firmware). كل ضيف يحصل على عتاد مخصص (مثل IBM LPARs).

النوع 1 (Type 1): برمجيات تشبه نظام التشغيل تُبنى لتوفير المحاكاة الافتراضية (مثل VMware ESX). تعمل في وضع النواة (Kernel mode) وتدير أنظمة التشغيل الضيفة. يمكن أن تكون أيضاً أنظمة تشغيل عامة توفر وظائف VMM (مثل Windows مع Hyper-V).

النوع 2 (Type 2): تطبيقات تعمل على أنظمة تشغيل قياسية وتوفر ميزات VMM للضيوف. أداؤها أقل لأنها لا تستفيد من بعض ميزات العتاد، لكنها لا تتطلب تغييرات في نظام التشغيل المضيف.

13.2 تقنيات المحاكاة الافتراضية البديلة

ليست كل المحاكاة الافتراضية تكراراً تاماً للعتاد؛ تشمل البدائل المحاكاة شبه الافتراضية (Paravirtualization)، المحاكاة (Emulation)، واحتواء التطبيقات (Application Containment).

المحاكاة شبه الافتراضية (Paravirtualization): يتم تعديل نظام التشغيل الضيف ليعمل بالتعاون مع VMM لتحسين الأداء (مثل Xen). يستخدم مخازن مؤقتة دائرية مشتركة (Circular buffers) للإدخال/الإخراج الفعال.

المحاكاة (Emulation): تترجم التعليمات من معالج الضيف إلى معالج المضيف. مفيدة لتشغيل أنظمة مصممة لبنية مختلفة، لكنها أبطأ بكثير.

احتواء التطبيقات (Application Containment): لا توفر محاكاة افتراضية كاملة، بل تعزل التطبيقات عن نظام التشغيل (مثل Oracle Solaris Zones). تعمل نواة واحدة فقط (نظام المضيف)، وتُقسم الموارد بين 'المناطق' (Zones).

13.3 مكونات نظام التشغيل في المحاكاة الافتراضية

يجب على VMM إدارة جدولة وحدة المعالجة المركزية (CPU)، الإدخال/الإخراج (I/O)، التخزين، وتوفير ميزات متقدمة مثل الترحيل الحي (Live Migration).

جدولة CPU: غالباً ما يكون هناك التزام زائد (Overcommitment) بوحدات المعالجة المركزية، مما يؤدي إلى 'سرقة الدورات' (Cycle stealing) وتأخير استجابة الضيف. قد تصبح ساعات النظام غير دقيقة.

الإدخال/الإخراج (I/O): معقد بالنسبة لـ VMM. يشمل الحلول: الوصول المباشر للأجهزة، تمرير DMA، وترجمة عناوين الشبكة (NAT).

التخزين: يوفر VMM أقراص إقلاع وبيانات للضيوف، غالباً كملفات صور (Disk images) في نظام ملفات المضيف (النوع 2) أو نظام ملفات VMM (النوع 1).

الترحيل الحي (Live Migration): نقل جهاز افتراضي قيد التشغيل من خادم مادي إلى آخر دون مقاطعة المستخدم. يتم ذلك عبر إرسال صفحات الذاكرة للقراءة فقط، ثم صفحات القراءة/الكتابة، وتكرار إرسال الصفحات المعدلة (Dirty pages) حتى تصبح الدورة قصيرة جداً، فيتم تجميد الضيف ونقل الحالة النهائية.

13.4 نظرة عامة على الأنظمة الموزعة وقضايا التصميم

النظام الموزع هو مجموعة من العقد (Nodes) المترابطة بشكل فضفاض عبر شبكة، تهدف إلى مشاركة الموارد، تسريع الحوسبة، وزيادة الموثوقية.

أسباب استخدام الأنظمة الموزعة: مشاركة الموارد (ملفات، طابعات، قواعد بيانات)، تسريع الحوسبة (توزيع العمليات الفرعية)، موازنة الأحمال، والموثوقية (اكتشاف الفشل والتعافي منه).

قضايا التصميم:

  1. المتانة (Robustness): قدرة النظام على تحمل الأعطال. يتطلب اكتشاف الفشل (عبر بروتوكول نبض القلب Heartbeat)، إعادة التكوين، والتعافي.
  2. الشفافية (Transparency): يجب أن يبدو النظام للمستخدم كنظام مركزي تقليدي (مثل إخفاء موقع الملفات).
  3. قابلية التوسع (Scalability): قدرة النظام على استيعاب إضافة موارد جديدة بسلاسة عند زيادة الطلب.

13.5 أنظمة الملفات الموزعة (DFS)

نظام الملفات الموزع (DFS) يخزن الملفات عبر أجهزة متعددة في الشبكة ولكنه يظهر للمستخدم كنظام ملفات محلي واحد.

نماذج DFS:

  1. نموذج الخادم والعميل (Client-Server): يخزن الخادم الملفات والبيانات الوصفية (Metadata). يتصل العملاء بالخادم لطلب الملفات. يعاني من نقطة فشل واحدة (Single point of failure) وعنق زجاجة في الأداء (مثل NFS).
  2. النموذج القائم على الكتلة (Cluster-based): أكثر متانة وقابلية للتوسع (مثل GFS و HDFS). يتصل العملاء بخادم بيانات وصفية رئيسي (Master metadata server) وعدة خوادم بيانات تحتفظ بـ 'أجزاء' (Chunks) من الملفات. يتم نسخ الأجزاء عدة مرات لضمان الموثوقية.

13.6 التخزين المؤقت والاتساق في أنظمة الملفات الموزعة

يقلل التخزين المؤقت (Caching) من حركة مرور الشبكة، لكنه يخلق تحدياً في الحفاظ على اتساق (Consistency) النسخ المخبأة مع الملف الأصلي.

موقع التخزين المؤقت: يمكن أن يكون في القرص (أكثر موثوقية، يبقى بعد التعافي) أو في الذاكرة الرئيسية (أسرع، يسمح بمحطات عمل بدون أقراص).

سياسات التحديث:

  • Write-through: كتابة البيانات للقرص فوراً (موثوق لكن أداؤه ضعيف).
  • Delayed-write (Write-back): التعديلات تُكتب في الذاكرة المؤقتة وتُنقل للخادم لاحقاً (سريع لكن موثوقيته ضعيفة إذا تعطل الجهاز).
  • Write-on-close: تُكتب البيانات للخادم عند إغلاق الملف.

الاتساق (Consistency):

  • بمبادرة العميل (Client-initiated): العميل يتحقق من صحة البيانات.
  • بمبادرة الخادم (Server-initiated): الخادم يسجل من يمتلك النسخ ويتفاعل عند اكتشاف عدم اتساق.

معادلات الجدولة والأداء

المعادلة / المفهوم الوحدة LaTeX / Notation
حساب العنوان المادي باستخدام سجل إعادة التوطين. M7 \(Physical\ Address = Logical\ Address + Relocation\ Register\)
p هو رقم الصفحة، و d هو الإزاحة داخل الصفحة. M7 \(Logical\ Address = (p, d)\)
حساب وقت الوصول الفعال بافتراض أن وقت الوصول إلى TLB مدمج أو مهمل كما في مثال الشرائح. M7 \(EAT = Hit\ Ratio \times (Memory\ Access) + Miss\ Ratio \times (2 \times Memory\ Access)\)
حيث a_i هو التخصيص للعملية، s_i هو حجم العملية، S هو الحجم الكلي للعمليات، و m هو العدد الكلي للإطارات المتاحة. M8 \(a_i = \frac{s_i}{S} \times m\)
معادلة حساب متوسط وقت الإدخال والإخراج للقرص الصلب. M9 \(Average\ I/O\ time = average\ access\ time + \left(\frac{amount\ to\ transfer}{transfer\ rate}\right) + controller\ overhead\)
مثال لحساب متوسط الوقت لفقدان البيانات في أقراص منسوخة (Mirrored) تفشل بشكل مستقل. M9 \(Mean\ time\ to\ data\ loss = \frac{100,000^2}{2 \times 10} = 500 \times 10^6\ hours\)
حساب الكتلة المادية في التخصيص المتجاور (حيث LA هو العنوان المنطقي، 512 حجم الكتلة، Q رقم الكتلة، R الإزاحة). M11 \(LA / 512 = Q, R\)
حساب رقم الكتلة الحرة باستخدام متجه البتات. M11 \(\text{Block Number} = (\text{bits per word}) \times (\text{0-value words}) + \text{offset of first 1 bit}\)

مقارنة خوارزميات الجدولة

مقارنة خوارزميات التخصيص الديناميكي

المعيار First-fit Best-fit Worst-fit
السرعة سريع جداً (يجد أول فجوة) بطيء (يبحث في القائمة كاملة) بطيء (يبحث في القائمة كاملة)
حجم الفجوة المتبقية متوسط أصغر فجوة متبقية أكبر فجوة متبقية

التجزئة الداخلية مقابل الخارجية

المعيار External Fragmentation Internal Fragmentation
الموقع خارج الأقسام المخصصة (مبعثرة) داخل القسم المخصص
الحل الضغط (Compaction) أو التجزئة (Paging) تقليل حجم الصفحة (لا يمكن حله تماماً في Paging)

الاستبدال الشامل مقابل الاستبدال المحلي

المعيار Global Replacement Local Replacement
الإنتاجية (Throughput) أعلى (أكثر شيوعاً) أقل (بسبب عدم استغلال الذاكرة بالكامل)
اتساق الأداء (Performance Consistency) متغير بشكل كبير (يعتمد على العمليات الأخرى) أكثر اتساقاً لكل عملية
اختيار الإطار الضحية من جميع الإطارات في النظام من الإطارات المخصصة للعملية فقط

محركات الأقراص الصلبة (HDD) مقابل الذاكرة غير المتطايرة (NVM/SSD)

المعيار HDD NVM (SSD)
الأجزاء المتحركة يوجد (أقراص دوارة وذراع) لا يوجد
وقت البحث والتأخير الدوراني موجود ويؤثر على الأداء غير موجود
طريقة الكتابة يمكن الكتابة فوق البيانات مباشرة يجب مسح الكتلة أولاً قبل الكتابة
العمر الافتراضي طويل جداً لعمليات الكتابة محدود بعدد مرات المسح (~100,000)

NAS مقابل SAN

المعيار NAS SAN
مستوى الوصول مستوى الملفات (File-level) مستوى الكتل (Block-level)
البروتوكولات الشائعة NFS, CIFS Fibre Channel, iSCSI
الشبكة المستخدمة شبكة محلية عادية (LAN/TCP/IP) شبكة تخزين مخصصة

الاستعلام مقابل المقاطعات

المعيار Polling Interrupts
استهلاك المعالج يهدر دورات المعالج في الانتظار (Busy-wait) يحرر المعالج لمهام أخرى
الأداء مع الأجهزة السريعة جداً ممتاز، لا يوجد عبء تبديل السياق بطيء بسبب عبء تبديل السياق

الإدخال/الإخراج المتزامن مقابل غير المتزامن

المعيار Synchronous I/O Asynchronous I/O
حالة العملية تُعلق (Blocked) حتى الانتهاء تستمر في التنفيذ
سهولة الاستخدام سهل الفهم والاستخدام صعب الاستخدام والبرمجة

مقارنة طرق تخصيص الكتل

المعيار Contiguous Linked Indexed
الوصول العشوائي (Random Access) ممتاز وسريع بطيء جداً جيد (يتطلب قراءة الفهرس)
التجزئة الخارجية (External Fragmentation) يعاني منها بشدة لا توجد لا توجد
العبء الإضافي (Overhead) قليل جداً مؤشرات في كل كتلة كتلة فهرس كاملة لكل ملف

قائمة التحكم بالوصول مقابل قائمة القدرات

المعيار Access Control List (ACL) Capability List
التركيز (محور المصفوفة) تعتمد على الكائن (الأعمدة) تعتمد على النطاق (الصفوف)
إلغاء الصلاحيات (Revocation) سهل (تعديل قائمة الكائن مباشرة) صعب (يتطلب البحث في جميع النطاقات)
معرفة صلاحيات عملية معينة صعب (يتطلب فحص قوائم جميع الكائنات) سهل (موجودة في قائمة النطاق الخاصة بها)

مقارنة بين أنواع الـ Hypervisors

المعيار Type 0 Type 1 Type 2
مستوى التنفيذ البرامج الثابتة (Firmware) / العتاد مباشرة على العتاد (Bare-metal) / وضع النواة كتطبيق فوق نظام تشغيل مضيف
الأداء عالي جداً (موارد مخصصة) عالي (وصول مباشر للعتاد) أقل (بسبب طبقة نظام التشغيل المضيف)

نماذج أنظمة الملفات الموزعة

المعيار Client-Server DFS Cluster-Based DFS
نقطة الفشل نقطة فشل واحدة (الخادم) متسامح مع الأخطاء (نسخ متعددة للأجزاء)
قابلية التوسع محدودة (عنق زجاجة في الخادم) عالية جداً (توزيع البيانات على خوادم متعددة)

سياسات تحديث التخزين المؤقت

المعيار Write-through Delayed-write (Write-back)
الموثوقية عالية (البيانات آمنة على القرص فوراً) ضعيفة (قد تفقد البيانات عند التعطل)
الأداء ضعيف (ينتظر الكتابة على القرص) سريع (يكتب في الذاكرة المؤقتة فقط)

🃏 البطاقات التعليمية

🎯 اختبر نفسك

1 / 269 🎯 نتيجتك: 0

حديث البروفيسور

أهلاً بكم يا أبنائي وبناتي طلاب مقرر CS351 في ليلة الامتحان النهائي. لقد وصلنا أخيراً إلى المحطة الأخيرة من هذا الفصل الدراسي، وفي هذه الليلة الحاسمة، أريدكم أن تنظروا إلى المنهج بأكمله ليس كفصول متفرقة أو مواضيع منعزلة، بل كقصة واحدة متكاملة تصف عبقرية تصميم أنظمة التشغيل الحديثة. تبدأ رحلتنا في الوحدة السابعة مع الذاكرة الرئيسية (Main Memory)، حيث تعلمنا كيف ندير الذاكرة الفعلية ونستخدم تقنية الـ Paging للقضاء تماماً على مشكلة التجزئة الخارجية (External Fragmentation). وبما أن طموحنا دائماً أكبر من حجم الذاكرة الفعلية المتاحة، تأخذنا الوحدة الثامنة إلى عالم الذاكرة الافتراضية (Virtual Memory)، حيث نستخدم تقنية الـ Demand Paging وخوارزميات استبدال الصفحات المعقدة لتشغيل برامج ضخمة جداً. ولكن، يجب أن نسأل أنفسنا: أين تُحفظ هذه الصفحات عند إخراجها من الذاكرة؟ هنا يأتي دور الوحدة التاسعة الخاصة بأنظمة التخزين الشامل (Mass-Storage Systems)، حيث درسنا بالتفصيل الأقراص الصلبة (HDD) ومحركات الحالة الصلبة (SSD)، وخوارزميات جدولة الأقراص لتحسين الأداء وتقليل وقت البحث، بالإضافة إلى تقنيات RAID لضمان الموثوقية وتجنب فقدان البيانات. ولربط هذه الأقراص السريعة بالمعالج والذاكرة، تشرح الوحدة العاشرة أنظمة الإدخال والإخراج (I/O Systems)، مسلطة الضوء على دور المقاطعات (Interrupts) والوصول المباشر للذاكرة (DMA) في تسريع نقل البيانات دون إرهاق المعالج. فوق هذه البنية التحتية المادية القوية، تبني الوحدة الحادية عشرة نظام الملفات (File Systems)، حيث ننظم البيانات في أدلة (Directories) ونتعلم طرق تخصيص المساحات على القرص بكفاءة. ومع وجود كل هذه البيانات القيمة والموارد الحساسة، كان لزاماً علينا دراسة الوحدة الثانية عشرة المتعلقة بأمن وحماية أنظمة التشغيل (OS Security and Protection)، لفهم مصفوفة الوصول (Access Matrix) وكيفية التصدي للتهديدات البرمجية والشبكية المختلفة. وأخيراً، نكسر حدود الجهاز المادي الواحد في الوحدة الثالثة عشرة لندرس الآلات الافتراضية (Virtual Machines) وأنواع الـ Hypervisors، وصولاً إلى الأنظمة الموزعة (Distributed Systems). احذروا من فخاخ الامتحان الشائعة! لا تخلطوا أبداً بين خوارزميات استبدال الصفحات (في الوحدة 8) وخوارزميات جدولة الأقراص (في الوحدة 9). تذكروا دائماً العلاقة الوثيقة بين حدوث خطأ الصفحة (Page Fault) وكيف يستدعي ذلك عملية إدخال/إخراج (I/O) لجلب البيانات من نظام الملفات المخزن على القرص. ركزوا على فهم الصورة الكبرى وكيف تتواصل هذه الوحدات السبع معاً بتناغم تام. أتمنى لكم ليلة دراسة مثمرة، هادئة، وتوفيقاً كبيراً في امتحانكم النهائي غداً.

خزنة الامتحان | النقاط الحرجة

33 نقطة حرجة
⚠️ فخ M11
الخلط بين التجزئة الداخلية والخارجية. التخصيص المتجاور يعاني من التجزئة الخارجية (مساحات فارغة بين الملفات)، بينما التخصيص المترابط والمفهرس قد يعانيان من التجزئة الداخلية (مساحة مهدرة داخل الكتلة الأخيرة).
⚠️ فخ M8
الاعتقاد بأن الخوارزمية المثلى (OPT) يمكن برمجتها واستخدامها في أنظمة التشغيل الحديثة. الحقيقة: هي مستحيلة التنفيذ لأنها تتطلب معرفة المستقبل، وتُستخدم فقط كمعيار (Benchmark) لتقييم الخوارزميات الأخرى.
🔑 مفهوم أساسي M11
فصل جدول الملفات المفتوحة إلى 'عام للنظام' و 'خاص بالعملية' هو تصميم عبقري. الجدول العام يمنع تكرار قراءة الـ FCB من القرص، والجدول الخاص يسمح لعدة برامج بقراءة نفس الملف من أماكن مختلفة في نفس الوقت.
⚠️ فخ M9
الاعتقاد بأن RAID 0 يوفر حماية للبيانات. RAID 0 (Striping) يزيد السرعة فقط؛ إذا فشل قرص واحد، تفقد كل البيانات. التكرار يبدأ من RAID 1.
🔑 مفهوم أساسي M12
ACL مقابل قوائم القدرات: ACL تركز على 'الكائن' (من يمكنه الدخول إلى هذا الملف؟)، بينما قائمة القدرات تركز على 'النطاق' (ما هي الملفات التي يمكن لهذا المستخدم فتحها؟).
⚠️ فخ M12
الخلط بين الفيروس والدودة. تذكر: الفيروس يحتاج إلى برنامج مضيف (Host) وتدخل بشري للانتشار، بينما الدودة برنامج مستقل (Standalone) ينتشر تلقائياً عبر الشبكة.
🔑 مفهوم أساسي M13
في أنظمة الملفات الموزعة القائمة على الكتلة (Cluster-based DFS)، يتم فصل البيانات الوصفية (Metadata) عن البيانات الفعلية (Chunks) لتجنب عنق الزجاجة وتحقيق قابلية توسع هائلة.
🔑 مفهوم أساسي M8
بت التعديل (Dirty Bit) هو بطل الأداء الخفي. بدون هذا البت، سيضطر نظام التشغيل لكتابة كل صفحة يتم استبدالها إلى القرص الصلب، مما سيبطئ النظام بشكل كارثي. بت التعديل يضمن كتابة الصفحات التي تغيرت بياناتها فقط.
⚠️ فخ M9
الخلط بين NAS و SAN: تذكر أن NAS يعمل على مستوى الملفات (File-level) عبر شبكة عادية، بينما SAN يعمل على مستوى الكتل (Block-level) عبر شبكة مخصصة.
💡 سر الامتحان M12
مصفوفة الوصول تفصل بين 'الآلية' و'السياسة'. نظام التشغيل يوفر الآلية (الجدول والقواعد)، لكن المستخدم أو المدير هو من يحدد السياسة (من يملك أي صلاحية).
🔑 مفهوم أساسي M13
الترحيل الحي (Live Migration) لا ينقل كل شيء دفعة واحدة. السر يكمن في النقل التكراري لـ 'الصفحات المتسخة' (Dirty Pages) في الخلفية بينما يستمر الضيف في العمل، حتى تصبح التغييرات المتبقية صغيرة جداً.
🔑 مفهوم أساسي M9
خوارزمية C-SCAN تعالج مشكلة عدم العدالة في SCAN من خلال معاملة الأسطوانات كقائمة دائرية، مما يوفر وقت انتظار موحد لجميع الطلبات.
💡 سر الامتحان M10
على الرغم من أن الـ DMA يحرر المعالج، إلا أنه يبطئه قليلاً بسبب 'سرقة الدورات' (Cycle Stealing) حيث يتنافسان على نفس ناقل الذاكرة.
🔑 مفهوم أساسي M11
المخطط الهجين في UNIX UFS (المؤشرات المباشرة وغير المباشرة) هو تطبيق لمبدأ 'تحسين الحالة الشائعة'. معظم الملفات صغيرة، لذا تُستخدم المؤشرات المباشرة لتوفير أقصى سرعة، مع الاحتفاظ بالقدرة على دعم الملفات الضخمة عند الحاجة.
⚠️ فخ M7
الخلط بين التجزئة الداخلية والخارجية. تذكر: 'الخارجية' تعني أن المساحة موجودة ولكنها مبعثرة (خارج العمليات). 'الداخلية' تعني أن المساحة محجوزة لعملية ولكنها لا تستخدمها (داخل العملية).
⚠️ فخ M10
الخلط بين التخزين المؤقت (Buffering) والتخزين المخبئي (Caching). تذكر: Buffering يتعامل مع عدم تطابق السرعة/الحجم ويحتفظ بالنسخة الوحيدة للبيانات أثناء النقل. Caching يحتفظ بنسخة مكررة لتسريع الوصول.
⚠️ فخ M7
الاعتقاد بأن التجزئة (Paging) تقضي على جميع أنواع التجزئة. خطأ! هي تقضي على التجزئة الخارجية فقط، ولكنها تسبب تجزئة داخلية في الصفحة الأخيرة من كل عملية.
💡 سر الامتحان M8
التعثر (Thrashing) يخدع نظام التشغيل. عندما ينخفض استخدام المعالج بسبب التعثر، يعتقد نظام التشغيل أن المشكلة هي قلة العمليات، فيقوم بإضافة عمليات جديدة (زيادة Multiprogramming)، مما يزيد الضغط على الذاكرة ويجعل التعثر أسوأ بكثير!
🔑 مفهوم أساسي M10
حماية الإدخال والإخراج تعني أن جميع تعليمات الإدخال والإخراج هي تعليمات ذات امتياز (Privileged). لا يمكن لبرنامج المستخدم التحدث مباشرة إلى الأجهزة؛ يجب أن يطلب ذلك من النواة عبر استدعاء النظام.
⚠️ فخ M13
الاعتقاد بأن عدم تلقي رد في بروتوكول 'نبض القلب' يعني حتماً أن العقدة الأخرى قد تعطلت. في الواقع، قد يكون الرابط معطلاً أو الرسالة فُقدت، مما يجعل اكتشاف الفشل في الأنظمة الموزعة أمراً غامضاً.
⚠️ فخ M13
الخلط بين المحاكاة (Emulation) والمحاكاة الافتراضية (Virtualization). المحاكاة تترجم التعليمات بين معماريات مختلفة (بطيئة جداً)، بينما المحاكاة الافتراضية تشغل التعليمات محلياً على نفس المعمارية.
⚠️ فخ M8
افتراض أن إضافة المزيد من الذاكرة (الإطارات) سيقلل دائماً من أخطاء الصفحة. الحقيقة: في خوارزمية FIFO، قد تحدث 'مفارقة بيلادي' حيث تؤدي زيادة الإطارات إلى زيادة أخطاء الصفحة!
⚠️ فخ M10
الاعتقاد بأن الاستعلام (Polling) دائماً سيء. في الواقع، إذا كان الجهاز سريعاً جداً، فإن الاستعلام يكون أكثر كفاءة من المقاطعات لأنه يتجنب العبء الثقيل لتبديل السياق (Context Switch).
🔑 مفهوم أساسي M7
الفصل بين العنوان المنطقي والمادي هو أساس الذاكرة الافتراضية. البرنامج لا يعرف أين هو في الذاكرة الحقيقية (RAM)، الـ MMU هي من تقوم بالسحر في الخلفية.
💡 سر الامتحان M9
في أجهزة SSD (NVM)، لا يمكنك الكتابة فوق البيانات الموجودة مباشرة. يجب مسح 'كتلة' (Block) كاملة أولاً قبل كتابة 'صفحات' (Pages) جديدة، مما يتطلب خوارزميات معقدة مثل جمع القمامة (Garbage Collection).
💡 سر الامتحان M7
في حساب EAT، إذا وجدت الصفحة في TLB، فإنك تحتاج لوصول واحد للذاكرة (لجلب البيانات). إذا لم تجدها، تحتاج لوصولين (واحد لجدول الصفحات، وواحد للبيانات). لذلك نضرب نسبة الخطأ في 2 * وقت الذاكرة.
💡 سر الامتحان M13
النوع 1 من الـ Hypervisors ليس دائماً نظاماً صغيراً مخصصاً فقط للمحاكاة. أنظمة تشغيل عامة مثل RedHat Linux (مع KVM) و Windows Server (مع Hyper-V) يمكن أن تعمل كـ Type 1 لأنها تدير العتاد مباشرة.
⚠️ فخ M11
الاعتقاد بأن التخصيص المترابط (Linked Allocation) يدعم الوصول العشوائي السريع. الحقيقة أنه بطيء جداً لأنه يتطلب تتبع السلسلة من البداية للوصول إلى أي كتلة.
💡 سر الامتحان M11
نظام FAT هو في الأساس 'تخصيص مترابط'، ولكن السر يكمن في فصل المؤشرات عن كتل البيانات ووضعها جميعاً في جدول واحد في بداية القرص، مما يسمح بتحميل الجدول في الذاكرة وتسريع البحث بشكل هائل.
🔑 مفهوم أساسي M9
زمن الوصول (Access Latency) للقرص الصلب هو مجموع وقت البحث (Seek Time) والتأخير الدوراني (Rotational Latency). هذا هو عنق الزجاجة الرئيسي في أداء الأقراص الميكانيكية.
🔑 مفهوم أساسي M7
جدول الصفحات المعكوس (Inverted Page Table) يقلب المنطق: بدلاً من تتبع كل صفحة افتراضية لكل عملية، يتتبع فقط الإطارات المادية الموجودة فعلياً في الـ RAM.
🔑 مفهوم أساسي M12
مبدأ الامتياز الأقل (Principle of Least Privilege): هو حجر الزاوية في أمن النظم. كل عملية أو مستخدم يجب أن يمتلك فقط الصلاحيات الضرورية جداً لإنجاز عمله، ولا شيء أكثر.
⚠️ فخ M12
الاعتقاد بأن تأمين نظام التشغيل يكفي. الأمن رباعي الطبقات (مادي، شبكة، نظام تشغيل، تطبيق). النظام آمن بقدر أضعف حلقة فيه.