تعد النواة kernel قلب نظام التشغيل (Operating System) ونواته الرئيسة؛ نظرًا لأن نظام التشغيل يتحكم في النظام ككل، فإن Kernel تتحكم أيضًا في كل شيء في النظام لتعتبر الجزء الأكثر أهمية فيه؛ فعندما يبدأ تشغيل أحد الأنظمة تكون Kernel أول برنامج يتم تحميله بعد bootloader لأن Kernel يجب أن تتعامل مع باقي العناصر الخاصة بنظام التشغيل، وتبقى مخزنةً في الذاكرة حتى يتم إيقاف تشغيل نظام التشغيل.
إن الـ kernel مسؤولة عن المهام ذات العلاقة بعتاد الحاسوب- hardware وبرمجياته- software بشكل مباشر (أي low-level task) مثل: إدارة القرص – disk management، وإدارة الذاكرة – memory management وإدارة المهام – task management وغير ذلك من المهام؛ فهي توفر واجهة بين المستخدم والمكونات الصلبة hardware components في النظام.
عند تقديم عملية process طلبًا إلى kernel، فإن الطلب يسمى system call.
تُوفَّر مساحة خاصة للـ kernel تسمى مساحة النواة – kernel space وهي منطقة منفصلة من الذاكرة ولا يمكن الوصول إلى هذه المنطقة بواسطة البرامج والتطبيقات الأخرى. لذلك؛ عند بدء تشغيل النظام، يتم تحميل الكود البرمجي الخاص بالـ kernel في هذه المساحة التي تدعى بالـ kernel space. وتسمى الذاكرة التي تستخدمها التطبيقات الأخرى مساحة المستخدم – user space لأن مساحتي الذاكرة السابقتين تستخدمان لأغراض مختلفة، فإن الاتصال بينهما يكون بطيئًا. (1)
وظائف الـ kernel:
1- إدارة العمليات Process Management:
يستمر إنشاء العمليات وتنفيذها وإنهاؤها داخل النظام طالما أن النظام لا يزال في وضع التشغيل، وتحتوي العملية process على كافة المعلومات عن المهمة task التي يجب القيام بها، وبالتالي لتنفيذ أي task تُنشأ process داخل النظام. أحيانًا يكون هناك العديد من العمليات الفعالة داخل النظام، وإدارة كل هذه العمليات مهم للغاية لتجنب تعليق النظام واستمراره بالعمل بسلاسة؛ والمسؤول عن إدارة جميع العمليات هو kernel.
2- إدارة الذاكرة Memory management:
عندما تُنشأ process وتُنفَّذ فإنها تشغل حيزًا في الذاكرة، وعندما يتم إنهاؤها يمكن استخدام الذاكرة المخصصة لها مرة أخرى. ولكن يجب إدارة الذاكرة بحيث يمكن تعيين الذاكرة المحررة مرة أخرى إلى عمليات جديدة. يتم تنفيذ هذه المهمة أيضًا بواسطة الـ kernel؛ حيث تتبع أي جزء مُخصص من الذاكرة حاليًا وأي جزء متاح لتخصيصه للعمليات الأخرى.
3- إدارة الأجهزة Device Management:
تُدير الـ kernel أيضًا جميع الأجهزة المختلفة المتصلة بالنظام مثل أجهزة الإدخال والإخراج كلوحة المفاتيح والسماعات والطابعة وغيرهم.
4- معالجة الانقطاع أو التوقف Interrupt Handling:
في أثناء تنفيذ بعض العمليات؛ هناك حالات يجب فيها معالجة المهام tasks ذات الأولوية الأعلى أولاً. لتنفيذ ذلك، يجب على kernel أن تقاطع تنفيذ العملية process الحالية وتعطي الأولوية لتنفيذ هذه المهام.
5- إدارة عمليات الإدخال والإخراج I/O Communication:
بما أن Kernel تدير جميع الأجهزة المتصلة بها، فهي مسؤولة أيضًا عن التعامل مع جميع أنواع المدخلات والمخرجات التي يتم تبادلها من خلال هذه الأجهزة. وبالتالي فإن جميع المعلومات التي يتلقاها النظام من المستخدم وجميع المخرجات التي تُوفرها البرامج المختلفة للمستخدم تُدار عن طريق الـ kernel.
وضع المستخدم ووضع الـ kernel:
هناك تعليمات معينة يجب تنفيذها بواسطة Kernel فقط، لذلك فإن وحدة المعالجة المركزية cpu تنفذ هذه التعليمات في وضع Kernel فقط؛ على سبيل المثال: يجب أن تتم إدارة الذاكرة Memory Management في وضع Kernel فقط،
وفي أثناء الوجود في وضع المستخدم، تنفذ وحدة المعالجة المركزية cpu العمليات التي يقوم بها المستخدم في الـ User Space. (1)

أنواع النوى- kernel:
1- نوى الوحدات المتراصة- Monolithic Kernels:
في هذا النوع يتم تنفيذ جميع الوظائف functions (مثل: إدارة العمليات- Process Management وإدارة الذاكرة Memory management و interrupt handling وغيرهم) في الـ kernel space.
كانت الـ Monolithic Kernel قديمًا تتكون من وحدة واحدة فقط one module، وهذه الوحدة module هي المسؤولة عن جميع الوظائف التي يؤديها الـ kernel.
أدى ذلك إلى تحسين أداء نظام التشغيل حيث كانت جميع الوظائف موجودة داخل نفس الوحدة؛ ولكن هذا أدى أيضًا إلى عيوب خطيرة مثل الحجم الكبير للـ Kernel، إضافة إلى موثوقية منخفضة جدًا low reliability لأنه يكفي حصول مشكلة في وظيفة واحدة في Kernel، لحدوث خلل في برنامج الـ Kernel بأكمله وضعف الصيانة poor maintenance لنفس السبب.
حاليًا؛ حُلَّت المشكلات السابقة عن طريق اعتماد منهج الوحدات- modular approach في Monolithic kernels بحيث وُضعَت كل function موجودة في module مختلفة داخل الـ kernel space. وبالتالي لإصلاح أي أخطاء في التنفيذ، يمكن إلغاء تحميل (unload) هذه الـ module فقط وتحميلها load بعد إصلاح الخلل. (3)
يستخدم هذا النوع حاليًا في dedicated servers.


2- النوى المكروية- Microkernel:
في هذا النوع تكون خدمات المستخدم user services الأساسية (مثل قرص إدارة النظام device driver management و protocol stack management ونظام إدارة الملفات File system management وتحكم الرسوميات graphics control) موجودة في User space، والوظائف المتبقية (مثل: إدارة الذاكرة- Memory management، وإدارة العمليات- Process management) موجودة داخل Kernel space.
لذلك؛ كلما كان النظام يتطلب تنفيذ الخدمات الموجودة في Kernel space، يتحول نظام التشغيل إلى Kernel Mode، وبالنسبة لتنفيذ الخدمات الموجودة في User space، فإنه يتحول إلى User Mode.
يساعد هذا النوع في تقليل حجم Kernel وبالتالي حجم نظام التشغيل، ولكن تكون سرعة تنفيذ العمليات processes وتقديم خدمات services أخرى أبطأ بكثير مقارنة بالنوع السابق.
جميع خدمات نظام التشغيل الأساسية التي تشكل جزءًا من user space مصممة للعمل كخوادم servers يتم استخدامها بواسطة برامج أخرى في النظام من خلال الاتصال بين العمليات inter process communication IPC.
ما الحد الأدنى من الخدمات services الواجب وجوده في kernel space حسب البنية الهيكلية للـ Microkernel؟
- Managing memory protection
- Process scheduling
- Inter Process communication IPC
يمكن جعل جميع الخدمات الأساسية الأخرى جزءًا من user space ويمكن تشغيلها في شكل خوادم servers.
يستخدم هذا النوع في أنظمة الزمن الحقيقي (real time systems)، مثل: Air Traffic Control System و Multimedia Systemsو Command Control Systems. (3)


3- النوى الهجينة- Hybrid Kernel:
للحصول على أفضل أداء لنظام التشغيل، نحتاج إلى سرعة عالية في التنفيذ و حجم صغير للـ kernel (يكون حجم هذا النوع أكبر من حجم microkernel وأصغر من monolithic kernel) حتى نحصل على أقصى قدر من الكفاءة. ولتحقيق ذلك صُمم نوع جديد من الـ Kernel والذي كان إلى حد ما مزيجًا من Monolithic Kernel و MicroKernel، ويُعرف هذا النوع بالـ Hybrid Kernel. يُستخدَم هذا النوع في جميع الأنظمة المكتبية PC تقريبًا التي يتم تصنيعها في الوقت الحاضر. (3)
4- النوى النانوية- Nanokernel:
يوفر هذا النوع hardware abstraction وهي مجموعة من الإجراءات في الكود البرمجي التي توفر للبرامج إمكانية الوصول إلى موارد الأجهزة من خلال واجهات برمجية إذ إنه لا يوفر أي خدمات services (مثل memory management كمثال) وتكون kernel في اقل حجم مسموح .
تشكل الـ Nanokernel أساس برنامج Hypervisor الذي يمكنك من خلاله تحميل عدة أنظمة تشغيل على نفس الجهاز عبر عملية virtualization. أيضا تستخدم Nanokernel في embedded systems. (1)
5- الـ Exokernel:
تم تطويره بواسطة جامعة MIT وبالتعاون مع مجموعة Distributed Operating Systems. في هذا النوع، يتم فصل حماية الموارد- resource protection عن الإدارة- management، وهذا بدوره يؤدي إلى السماح لنا بتنفيذ application-specific customization. (1)
المصادر:
- إعداد: ياسر طبيله.
- مراجعة: نور عبدو.
Why do we switch
From the user’s Stack to aKernel Stack when we enter the Kernel (e. g. for a system call)
Why do we associate a unique kernel stack for each user thread?
اريد اجابه لهذا السؤال من فصلك
شكرا لك الف شكر لقيت معلوماتي عندك