





السمعة:
بسم الله الرحمن الرحيم
اللهم علّمنا كما علّمت إبراهيم وفهّمنا كما فهّمت سُليمان
اللهم علّمنا كما علّمت إبراهيم وفهّمنا كما فهّمت سُليمان
اليوم رح أحكي بشكل مٌبسط عن أنظمة التشغيل في الحاسوب (Operating System) وما هي مهامها الرئيسية, بسمك اللهم نبدأ...
بالبداية لازم نعرف إنه في عدة تعريفات لنظام التشغيل, لكن بنقدر نحكي بشكل عام أن نظام التشغيل هو عبارة عن برنامج يقوم بإدارة جهاز الكمبيوتر (كـ Hardware) ويعمل كوسيط بين الحاسوب ومُستخدميه.
فينا نتخيل الحاسوب كإنسان, ونظام التشغيل هو الدماغ يلي بتحكم بكل أفعاله تمامًا مثل ما بدير الدماغ وظائف الجسم المختلفة عند الإنسان. بتحكم نظام التشغيل في جميع مكونات الحاسوب وبخليها تعمل بانسجام. لأنه ببساطة هو البرنامج الأساسي يلي ببدأ العمل بمجرد تشغيل الجهاز, وهو المسؤول عن تفسير الأوامر يلي بدخلها المُستخدم, وتشغيل البرامج والتطبيقات المُختلفة, وإدارة الموارد مثل الذاكرة والقرص الصلب وغيرهم.
خلينا نشوف بشكل سريع جهاز الحاسوب ومكوناته من الداخل:
- System Program: إلها علاقة بنظام التشغيل والوظائف الموجودة فيه لكن هي ليست جزء أساسي داخل الـ OS .
- Application Program: هي عبارة عن تطبيقات بتفيد المُستخدم فقط ما إلها أي صِلّة بنظام التشغيل, مثل Microsoft PowerPoint
كل مُستخدم فيهم بده ينفذ مَهمة مُعينة وأكيد هدول المستخدمين بحاجة إنهم يوصلوا للـ Hardware لتنفيذ المَهام, مثلًا بحاجة يوصلوا للذاكرة والمعالج وغيرها. لكن للأسف ما عندهم صلاحية أو access على الـ Hadware , لهيك بدنا طرف ثالث بينهم يعمل كوسيط وهاد الطرف هو نظام التشغيل (operating system).

لحتى نفهم بشكل أكبر عن شغل ومهام نظام التشغيل, خلينا نبدأ نحكي عن شغلتين رئيسيتين:
1. نظام التشغيل مُخصص للموارد (Resource Allocator): نظام التشغيل هو الجهة المسؤولة عن تخصيص الموارد لمُستخدم مُعين أو مَهمة مُعينة. مثلًا لما أشغل أكثر من تطبيق بنفس اللحظة, مَهمة نظام التشغيل إنه ينظم تشغيل هي المهام كلها ويحدد لكل مَهمة كم مرة رح يتم تشغيلها على الـ CPU.
بدنا نتفق إنه لما نشغل برنامج مُعين بمر بعدة مراحل لحتى يقدر الـ CPU ينفذه:
بالبداية بتم تخزين الكود على الـ Hard disk, بعدها بصيرها عملية ترجمة أو compilation لهاد الكود وبنتج عن هي العملية البرنامج (program), لكن لحد الآن الـ CPU ما بقدر يعالج هذا البرنامج ولا ينفذه لأنه لساته بالـ Hard disk والـ CPU ما بنفذه إلا إذا كان موجود بالـ Main Memory , لهيك بتم نقل البرنامج من الـ Hard disk إلى الـ Main Memory بواسطة نظام التشغيل وبصير اسمه Process.
أحيانًا على أجهزتنا بنكون مشغلين أكثر من برنامج بنفس الوقت, هي البرامج أو مثل ما حكينا إنه بصير اسمها process بالميموري بتتنافس على الـ CPU , مثلًا لو كان عندي 4processor
وعندي كمان 100Processes لحتى يقدر الـ CPU يخدم الـ 100 , نظام التشغيل رح يدخل أول 4Precesses ويعطيهم وقت مُحدد وبس يخلص وقتهم بطلعهم وبدخل بدالهم 4 وهكذا.
يلي احنا بنشوفه إنهم الـ 100 شغالين سوا,لكن في الحقيقة جزء منهم فقط شغال.
بناءًا على الحكي يلي حكيناه, لازم نظام التشغيل يدير الموارد بشكل فعّال جدًا بحيث إنه ما يكون فيه processes بتستنى إنها تدخل الـ CPU وهو فاضي ما بنفذ شي; لأنه الوقت يلي بضيع هو خسارة ولازم أقلله.

مثلًا كنت بنفذ بكود وبمكان ما طلبت من المستخدم يدخل قيمة معينة:
C++:
int number;
cin >> number;
لما كان البرنامج شغال قبل هذا الأمر كان مستغل الـ CPU بشكل كامل, لكن لما وصل لعند الـ cin ما قدر المعالج يكمل الـprocess إلا لما تيجيه القيمة من وحدات الإدخال (I/O Device).
بهي الحالة نظام التشغيل بحكي للـ process تستنى شيء من الـ (I/O Device)؟؟ أكيد , بطلعها من الـ CPU وبحطها بشي اسمه Waiting Qeue , وبدخل بدالها process ثانية ولما تجهز القيمة المطلوبة من المستخدم برجعها على الـ CPU ليكمل تنفيذها.
2. نظام التشغيل هو برنامج تحكم (control program): لما يتم نقل البرنامج من الـ Hard disk للـ Main Memory لازم يتوفر مساحة لهي الProcess والمسؤول عن توفيرها هو نظام التشغيل. ومن مهام نظام التشغيل أيضًا إنه لما يصير البرنامج بالميموري وصار لازم يتنفذ من قبل المعالج, بخبر المعالج أن الـ process جاهزة بالميموري وبقدر ينفذها.
الآن الـ CPU ما بفهم الـ process يلي بنفذها لأي برنامج أو تطبيق تابعه, هو كل شغله إنه عنده Register (PC) فيها عنوان (Address) بروح عليه وببلش تنفيذ. لكن نظام التشغيل هو يلي بفهم هي البروسيس لمين تابعه بالتالي هو يلي بحط العنوان للشي يلي لازم يتنفذ من قبل المعالج بالـ PC. لهيك الـ OS يتحكم في تنفيذ البرامج لمنع الأخطاء والاستخدام غير السليم للكمبيوتر.
في شغلة مُهمة لازم نذكرها, على فرض كان المعالج ينفذ بـ process (1) يلي الـ Address إلها هو 100 بعد وقت معين طلعها نظام التشغيل من المعالج وبده يدخل process (2) وكان واصل بالتنفيذ عند العنوان 110. طيب لما يرجع يدخلها على المعالج مرة ثانية لازم يبلش من عند 110, كيف رح يعرف؟؟
بدنا نعرف أن كل process بكون إلها شي اسمه PCB اختصار لـ Process Control Block , وهي بمثابة بطاقة تعريف خاصة بالـ process مثل الهوية المدنية الخاصة فينا كأشخاص رح أحكي عنها بشكل أكثر في الأيام الجاية إن قدر الله لي ذلك. بخزن فيها نظام التشغيل أخر مكان وصله المعالج في التنفيذ , بالتالي لما برجع الـ process على المعالج بشوف وين وصل من خلال الـ PCB وبحط العنوان في الـ PC وبكمل التنفيذ فيها دون أي أخطاء.
Kernal
آخر شي رح أحكي عنه هو الـ Kernal يلي مُرتبط بشكل كبير مع نظام التشغيل, زي ما حكينا أن نظام التشغيل إله أكثر من تعريف بناءًا على الأشياء يلي بنعتبرها من ضمن النظام أو لا.
مثلًا لما بدي أنزل الويندوز بجيب CD وبنزله, في ناس بتحكي أن كل شيء موجود على هذا الـ CD هو عبارة عن نظام تشغيل, وفي ناس بتحكي لا نظام التشغيل هو الجزء يلي بضل شغال كل الوقت. البرامج هي يلي بتضل شغالة طول وقت تشغيل الجهاز بنسميها Kernal , لهيك في ناس تعتبر أن نظام التشغيل هو نفسه الـ Kernal.
Kernal هو برنامج موجود بالـ Memory بتنفذ كل الوقت, بالتالي حتى الـ Kernal بتنافس مع باقي البرامج على المعالج, لكن عنده ميزة بالميموري لأنه بوخذ جزء من الذاكرة إله وباقي الذاكرة بتكون للبرامج الثانية.

بنظام التشغيل في Two Mode واحد خاص بالـ Kernal وواحد خاص ببرامج بالمستخدم:
1- Kernal Mode: هذا المود بنحكي عنه Privileged Mode بتفعل فقط إذا كانت الإنستركشن يلي موجودة بالـ CPU خاصة بالـ Kernal وبهي الحالة بكون أي عملية على الـ Hardware مسموحة.
2- User Mode: هذا المود بتفعل فقط لما تكون الأوامر يلي بنفذها الـ CPU خاصة بتطبيقات المُستخدم.
لحتى نظام التشغيل يميز بين الـ Two Mode عنا شي اسمه mode bit بالهاردوير , إذا كان هاد الـ mode bit قيمته 0 معناها إنه احنا بـالـ Kernal Mode وإذا قيمته 1 بنكون بالـ user mode. لما نظام التشغيل يعمل تنفيذ لنفسه ويبلش ينفذ بالـ Kernal Code بعمل قيمة الـ mode bit = 0 , فالهاردوير بعرف إنه احنا بالـ privileged وبسمح بتنفيذ الأوامر يلي إلها access عليه.إذا كان صلاحية الوصول للهاردوير فقط في الـ Kernal mode , أنا لما أكتب كود بكون بحاجة إنه أعمل access على الهاردوير, كيف بدي أعمل access إذا مو مسموح إلي كمُستخدم؟؟
الـ OS Code في جزء منه هو عبارة Functions بنسميهم System Call Interface:
بشكل عام أنا كمُستخدم بدي أعمل access على الهاردوير , لازم استدعي الـ System Call Interface وهون مباشرة بتم التحويل من الـUser Mode للـ Kernal Mode وأكيد بتغير الـ Mode bit, وهيك بقدر أعمل access على الهاردوير. وهيك بضمن انه الاستخدام يكون آمن بحيث إنه مو أي حدا عنده صلاحية الوصول للهاردوير إلا الـ Kernal أو من خلاله.
هيك بكون حاولت أوصل كل شي بقدر عليه , إن شاء الله يكون واضح ومُفيد.
نلقاكم في مواضيع أُخرى إن قدر الله لي ذلك.
دُمتم في رعاية الله وحفظه
نلقاكم في مواضيع أُخرى إن قدر الله لي ذلك.
دُمتم في رعاية الله وحفظه