الفصل ٢: هياكل أنظمة التشغيل

CS330 - أنظمة التشغيل

فهم خدمات نظام التشغيل، الواجهات، والهيكلة

٢.١ خدمات نظام التشغيل

أنظمة التشغيل توفر بيئة لتنفيذ البرامج وخدمات للبرامج والمستخدمين. الخدمات تنقسم إلى تلك المفيدة لـ المستخدم وتلك التي تضمن تشغيلًا فعالًا لـ النظام.

خدمات للمستخدمين:

🖥️ واجهة المستخدم

تقريبًا كل أنظمة التشغيل لها واجهة مستخدم. تختلف بين واجهة أوامر نصية (CLI)، واجهة رسومية (GUI)، أو كلاهما.

📂 تنفيذ البرامج

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

💾 عمليات الإدخال/الإخراج

بما أن برامج المستخدم لا تستطيع تنفيذ عمليات الإدخال/الإخراج مباشرة، نظام التشغيل يجب أن يوفر وسائل لأدائها.

📁 التعامل مع نظام الملفات

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

🔗 الاتصالات

تبادل المعلومات بين العمليات على نفس الجهاز أو أنظمة مختلفة عبر الذاكرة المشتركة أو تمرير الرسائل.

⚠️ اكتشاف الأخطاء

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

خدمات لكفاءة النظام:

  • تخصيص الموارد: عندما عدة مستخدمين أو وظائف تعمل في وقت واحد، يجب تخصيص الموارد لكل منهم
  • المحاسبة: تتبع أي المستخدمين يستخدم كم وماذا من الموارد
  • الحماية والأمان:
    • الحماية - تضمن التحكم في كل وصول لموارد النظام
    • الأمان - يدافع عن النظام من الهجمات الخارجية والداخلية

📊 نظرة على خدمات نظام التشغيل

مخطط خدمات نظام التشغيل

يظهر العلاقة بين المستخدم، خدمات نظام التشغيل، والنظام

٢.٢ واجهة مستخدم نظام التشغيل

واجهة الأوامر النصية (CLI)

  • إدخال أوامر مباشرة
  • تُنفّذ في النواة أو برنامج نظام
  • قذائف متعددة (bash, zsh, cmd)
  • الأوامر قد تكون مدمجة أو أسماء برامج
  • أمثلة: طرفية لينكس، موجه أوامر ويندوز

الواجهة الرسومية (GUI)

  • واجهة سطح مكتب سهلة الاستخدام
  • تفاعل بالفأرة، لوحة المفاتيح، الشاشة
  • أيقونات، نوافذ، قوائم
  • اخترعت في Xerox PARC (السبعينات)
  • أمثلة: ويندوز، macOS Aqua، GNOME
الخاصية CLI GUI
السرعة أسرع للمستخدمين الخبراء أبطأ لكن أكثر بديهية
استخدام الموارد استخدام قليل للذاكرة/المعالج متطلبات موارد أعلى
منحنى التعلم حاد - يحتاج حفظ الأوامر لطيف - مرئي وبديهي
الأتمتة سهل كتابة سكربتات وأتمتة أصعب لأتمتة المهام
الدقة تحكم دقيق جدًا أقل دقة، أكثر عمومية

أمثلة أنظمة تشغيل حديثة:

  • ويندوز: GUI مع CLI "command" shell
  • macOS: واجهة Aqua مع نواة Unix وقذائف متاحة
  • لينكس: CLI مع واجهة رسومية اختيارية (KDE, GNOME, XFCE)

٢.٣ استدعاءات النظام (System Calls)

استدعاءات النظام توفر واجهة بين البرنامج الجاري ونظام التشغيل. عادةً تكون متاحة كتعليمات لغة تجميع ويتم الوصول إليها عبر API في اللغات العالية.

آلية استدعاء النظام:

برنامج المستخدم
استدعاء API
واجهة استدعاءات النظام
وضع النواة
خدمة نظام التشغيل

📊 علاقة API - استدعاء النظام - نظام التشغيل

مخطط استدعاء النظام

يظهر الانتقال من وضع المستخدم إلى وضع النواة

أنواع استدعاءات النظام:

الفئة الوظائف أمثلة
التحكم في العمليات إنهاء، إجهاض، تحميل، تنفيذ، إنهاء/إنشاء عملية، جلب/تعيين سمات، انتظار fork(), exit(), wait(), exec()
إدارة الملفات إنشاء، حذف، فتح، إغلاق، قراءة، كتابة، إعادة تموضع، جلب/تعيين سمات open(), close(), read(), write(), lseek()
إدارة الأجهزة طلب/تحرير جهاز، قراءة، كتابة، إعادة تموضع، جلب/تعيين سمات ioctl(), read(), write()
صيانة المعلومات جلب/تعيين الوقت أو التاريخ، جلب/تعيين بيانات النظام، جلب/تعيين سمات العملية getpid(), alarm(), sleep()
الاتصالات إنشاء/حذف اتصال، إرسال/استقبال رسائل، نقل الحالة pipe(), shmget(), socket()
الحماية جلب/تعيين الصلاحيات، السماح/منع الوصول chmod(), umask(), chown()
// مثال: استدعاءات نظام في لغة C (لينكس) #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main() { pid_t pid; // استدعاء نظام fork() - التحكم في العمليات pid = fork(); if (pid == 0) { // العملية الابنة printf("العملية الابنة: PID = %d\n", getpid()); // استدعاء نظام exec() - يستبدل صورة العملية execlp("/bin/ls", "ls", "-l", NULL); } else if (pid > 0) { // العملية الأم printf("العملية الأم: PID = %d\n", getpid()); // استدعاء نظام wait() - انتظار الابنة wait(NULL); printf("الابنة اكتملت\n"); } return 0; }

٢.٤ التشغيل ثنائي الوضع

التشغيل ثنائي الوضع يخلّي نظام التشغيل يحمي نفسه والمكونات الأخرى. العتاد يوفر mode bit للتفريق بين تنفيذ كود المستخدم وكود النواة.

وضع المستخدم (١)

  • ✓ تنفيذ تطبيقات المستخدم
  • ✓ تعليمات معالج محدودة
  • ✗ لا وصول مباشر للعتاد
  • ✗ لا تعليمات مميزة

وضع النواة (٠)

  • ✓ تنفيذ كود نظام التشغيل
  • ✓ كل تعليمات المعالج
  • ✓ وصول مباشر للعتاد
  • ✓ تعليمات مميزة

⚠️ مهم للاختبارات:

  • Mode bit: ٠ = وضع النواة، ١ = وضع المستخدم
  • استدعاء النظام يغيّر الوضع من مستخدم إلى نواة
  • الرجوع من استدعاء النظام يعيده لوضع المستخدم
  • التعليمات المميزة تُنفّذ فقط في وضع النواة

📝 سؤال تطبيقي:

س: ماذا يحدث عندما يحاول برنامج مستخدم تنفيذ تعليمة مميزة في وضع المستخدم؟

  • أ) التعليمة تُنفّذ بشكل طبيعي
  • ب) النظام يتحول لوضع النواة تلقائيًا
  • ج) يتم توليد trap ونظام التشغيل يتعامل مع الاستثناء
  • د) التعليمة تُتجاهل

٢.٥ هيكلة نظام التشغيل

نظام التشغيل للأغراض العامة هو برنامج كبير جدًا. هناك طرق متعددة لهيكلة أنظمة التشغيل، لكل منها مزايا وعيوب.

١. الهيكلة البسيطة (أحادية النواة)

مثال: MS-DOS, UNIX الأصلي

  • لا هيكلة محددة جيدًا
  • طبقات قليلة
  • وصول مباشر للعتاد من التطبيقات
  • سريع لكن غير آمن أو موثوق

٢. الهيكلة الطبقية

الطبقة N: واجهة المستخدم
الطبقة N-1: برامج المستخدم
الطبقة ٣: إدارة الإدخال/الإخراج
الطبقة ٢: إدارة الذاكرة
الطبقة ١: إدارة العمليات
الطبقة ٠: العتاد

الخصائص:

  • نظام التشغيل مقسم لطبقات (مستويات)
  • كل طبقة مبنية فوق الطبقات الأدنى
  • الطبقة ٠ هي العتاد، الطبقة N هي واجهة المستخدم
  • كل طبقة تستخدم خدمات الطبقة الأدنى فقط
  • تقسيم إلى وحدات مع وظائف محدودة ومحددة

٣. هيكلة النواة المصغرة

برنامج تطبيقي
نظام ملفات
برنامج تشغيل جهاز
نواة مصغرة
(IPC, إدارة ذاكرة, جدولة معالج)

خصائص النواة المصغرة:

  • تزيل كل المكونات غير الأساسية من النواة
  • تنفذ المكونات المزالة كبرامج على مستوى المستخدم
  • الاتصال عبر تمرير الرسائل
  • الفوائد:
    • أسهل لتوسيع نظام التشغيل
    • أسهل لنقله لعتاد مختلف
    • أكثر موثوقية (كود أقل في وضع النواة)
    • أكثر أمانًا (الخدمات كعمليات مستخدم)
  • مثال: Mach, QNX

٤. الهيكلة المعيارية

📊 هيكلة معيارية

مخطط الهيكلة المعيارية

هيكلة نظام تشغيل معيارية بوحدات قابلة للتحميل

ميزات النظام المعياري:

  • النواة بها مكونات أساسية - خدمات أساسية فقط في النواة
  • خدمات إضافية عبر وحدات - تُحمّل عند الإقلاع أو ديناميكيًا أثناء التشغيل
  • نهج كائني التوجه - كل مكون منفصل ومغلف
  • المكونات تتواصل عبر واجهات معروفة - APIs محددة بين الوحدات
  • قابلة للتحميل حسب الحاجة داخل النواة - يمكن إضافتها أو إزالتها بدون إعادة تشغيل
  • أكثر مرونة من الهيكلة الطبقية - أي وحدة يمكنها استدعاء أي وحدة أخرى
  • أمثلة: لينكس، macOS، Solaris، ويندوز

٥. الأنظمة الهجينة

معظم أنظمة التشغيل الحديثة ليست نموذجًا نقيًا واحدًا بل تجمع بين عدة طرق:

  • لينكس: أحادي النواة مع تصميم معياري
  • ويندوز: في الغالب أحادي النواة، مع نواة مصغرة لأنظمة فرعية
  • macOS: هجين مع نواة Mach مصغرة + أنظمة BSD الفرعية
الهيكلة المزايا العيوب أمثلة
بسيطة/أحادية النواة سريعة، فعالة صعبة الصيانة، غير آمنة MS-DOS, UNIX المبكر
طبقية معيارية، سهلة التصحيح عبء أداء، صعوبة تعريف الطبقات THE, OS/2
نواة مصغرة موثوقة، آمنة، قابلة للنقل عبء أداء من تمرير الرسائل Mach, QNX, Minix
معيارية مرنة، فعالة، قابلة للصيانة تعقيد في واجهات الوحدات لينكس، Solaris، ويندوز

٢.٦ برامج النظام

برامج النظام توفر بيئة مناسبة لتطوير وتنفيذ البرامج. يمكن تقسيمها لعدة فئات.

📁 إدارة الملفات

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

ℹ️ معلومات الحالة

التاريخ، الوقت، استخدام الذاكرة، مساحة القرص، عدد المستخدمين، الأداء

✏️ تعديل الملفات

محررات نصوص لإنشاء وتعديل الملفات، البحث في المحتويات

🔧 دعم البرمجة

مترجمات، مُجمّعات، مصححات، مفسرات

📚 تحميل البرامج

لوادر، روابط، أدوات تنفيذ

💬 الاتصالات

بريد إلكتروني، متصفحات ويب، دخول عن بُعد، نقل ملفات

٢.٧ إقلاع النظام

عملية بدء تشغيل الكمبيوتر بتحميل النواة تُعرف باسم الإقلاع.

خطوات عملية الإقلاع:

١. تشغيل الطاقة
٢. BIOS/UEFI
٣. محمل الإقلاع
٤. تحميل النواة
٥. عملية init
  1. تشغيل الطاقة: التنفيذ يبدأ من موقع ذاكرة محدد مسبقًا (ROM)
  2. البرامج الثابتة (BIOS/UEFI):
    • تهيئة العتاد
    • تشغيل التشخيصات (POST)
    • تحميل محمل الإقلاع
  3. محمل الإقلاع:
    • موجود في قطاع/قسم الإقلاع
    • يحمل النواة في الذاكرة
    • قد يحمل محمل إقلاع ثانوي (GRUB)
  4. تهيئة النواة:
    • تهيئة هياكل البيانات
    • بدء برامج النظام الخلفية
    • تثبيت نظام الملفات الجذر
  5. النظام جاهز: تظهر شاشة الدخول أو الواجهة الرسومية

٢.٨ أسئلة تطبيقية على طريقة الاختبارات

أسئلة اختيار من متعدد

س١. أي من التالي ليس فائدة لهيكلة النواة المصغرة؟

  • أ) أسهل لتوسيع نظام التشغيل
  • ب) أكثر موثوقية وأمانًا
  • ج) أداء أفضل من الأنوية أحادية النواة
  • د) أسهل لنقله لعتاد مختلف

س٢. في هيكلة نظام التشغيل الطبقية، كل طبقة يمكنها استخدام خدمات:

  • أ) الطبقات الأعلى
  • ب) الطبقات الأدنى
  • ج) أي طبقة أخرى
  • د) الطبقات المجاورة فقط

س٣. أي فئة من استدعاءات النظام ينتمي إليها chmod()؟

  • أ) التحكم في العمليات
  • ب) إدارة الملفات
  • ج) إدارة الأجهزة
  • د) الحماية

س٤. عندما يقوم برنامج مستخدم باستدعاء نظام، فإن mode bit يتغير من:

  • أ) ٠ إلى ١
  • ب) ١ إلى ٠
  • ج) يبقى عند ٠
  • د) يبقى عند ١

س٥. أي من التالي اخترع في Xerox PARC؟

  • أ) واجهة الأوامر النصية
  • ب) الواجهة الرسومية
  • ج) استدعاءات النظام
  • د) هيكلة النواة المصغرة

أسئلة إجابة قصيرة

س٦. اشرح الفرق بين وضع المستخدم ووضع النواة. لماذا هذا التمييز مهم؟ (٥ درجات)

نموذج الإجابة:

  • وضع المستخدم: وضع مقيد حيث تعمل تطبيقات المستخدم. وصول محدود لموارد النظام ولا يمكن تنفيذ تعليمات مميزة.
  • وضع النواة: وضع غير مقيد حيث تعمل نواة نظام التشغيل. وصول كامل للعتاد ويمكن تنفيذ كل تعليمات المعالج.
  • الأهمية:
    • الحماية: يمنع برامج المستخدم من إتلاف النظام
    • الأمان: يقيد الوصول للموارد الحيوية
    • الاستقرار: يعزل أعطال برامج المستخدم عن النظام

س٧. قارن بين هيكلة النواة الأحادية والنواة المصغرة. اذكر ميزة وعيب لكل منهما. (٨ درجات)

نموذج الإجابة:

الخاصية نواة أحادية نواة مصغرة
الهيكلة كل خدمات نظام التشغيل في مساحة النواة نواة بسيطة، خدمات في مساحة المستخدم
الميزة أداء سريع (لا تمرير رسائل) أكثر موثوقية وأمانًا
العيب صعبة الصيانة، أقل أمانًا عبء أداء من الاتصال بين العمليات
مثال لينكس، يونكس Mach, QNX

س٨. اذكر وصف بإيجاز خمسة أنواع من استدعاءات النظام مع مثال لكل منها. (١٠ درجات)

نموذج الإجابة:

  1. التحكم في العمليات: إدارة العمليات - مثال: fork()
  2. إدارة الملفات: التعامل مع الملفات - مثال: open()
  3. إدارة الأجهزة: التحكم بالأجهزة - مثال: ioctl()
  4. صيانة المعلومات: جلب/تعيين معلومات النظام - مثال: getpid()
  5. الاتصالات: اتصال بين العمليات وشبكات - مثال: socket()

٢.٩ المصطلحات الرئيسية والتعريفات

المصطلح التعريف
استدعاء النظام واجهة بين البرنامج الجاري ونواة نظام التشغيل
API واجهة برمجة التطبيقات - مجموعة وظائف متاحة للمبرمجين
القشرة (Shell) مفسر أوامر يوفر واجهة مستخدم لنظام التشغيل
وحدة نواة مكون نواة قابل للتحميل يوسع وظائف نظام التشغيل
Mode Bit بت عتادي يفرق بين وضع المستخدم (١) ووضع النواة (٠)
تعليمة مميزة تعليمة معالج يمكن تنفيذها فقط في وضع النواة
محمل الإقلاع برنامج يحمل نواة نظام التشغيل أثناء إقلاع النظام
IPC اتصال بين العمليات - تمرير الرسائل بين العمليات
برنامج نظام برنامج يوفر بيئة لتطوير/تنفيذ البرامج

٢.١٠ مخططات من الشرائح

📊 مخطط هيكلة نظام التشغيل الطبقية

مخطط هيكلة نظام التشغيل الطبقية

📊 هيكلة النواة المصغرة

مخطط هيكلة النواة المصغرة