مقدمة في أنظمة التشغيل
مرحبا يا هبر! أود أن ألفت انتباهكم إلى سلسلة من المقالات المترجمة لأدب واحد مثير للاهتمام في رأيي - OSTEP. تناقش هذه المقالة بعمق أعمال أنظمة التشغيل المشابهة لنظام التشغيل يونكس ، أي العمل مع العمليات ، وجداول المواعيد المختلفة ، والذاكرة ، والمكونات المماثلة الأخرى التي تشكل نظام التشغيل الحديث. الأصلي لجميع المواد التي يمكنك أن ترى
هنا . يرجى ملاحظة أن الترجمة تمت بدون احتراف (بحرية تامة) ، لكن آمل أن أحتفظ بالمعنى العام.
يمكن العثور على العمل المختبري حول هذا الموضوع هنا:
أجزاء أخرى:
ويمكنك إلقاء نظرة على قناتي في
برقية =)
برنامج العمل
ماذا يحدث عندما يعمل البرنامج؟ تشغيل البرامج يفعل شيئًا بسيطًا - وهو ينفذ التعليمات. في كل ثانية ، يتم استخراج الملايين وربما مليارات التعليمات من المعالج من ذاكرة الوصول العشوائي ، وهو بدوره يقوم بفك تشفيرها (على سبيل المثال ، يتعرف على النوع الذي تنتمي إليه هذه التعليمات) ويتم تنفيذه. يمكن أن يكون ذلك إضافة رقمين ، والوصول إلى الذاكرة ، والتحقق من الشروط ، والتحول إلى الوظائف ، وما إلى ذلك. بعد الانتهاء من إرشادات واحدة ، يواصل المعالج تنفيذ آخر. وحتى التعليمات بالتعليمات ، يتم تنفيذها حتى يتم الانتهاء من البرنامج.
يعتبر هذا المثال مبسّطًا بشكل طبيعي - في الواقع ، لتسريع المعالج ، تسمح لك الأجهزة الحديثة بتنفيذ الإرشادات بدلاً من ذلك ، وحساب النتائج المحتملة ، واتباع الإرشادات في نفس الوقت والحيل المشابهة.
نموذج فون نيومان للحوسبة
إن الشكل المبسط للعمل الموصوف من قبلنا يشبه نموذج الحسابات Von Neumann.
فون نيومان هو واحد من رواد أنظمة الكمبيوتر ؛ وهو أيضًا أحد مؤلفي نظرية الألعاب . أثناء تشغيل البرنامج ، تحدث مجموعة من الأحداث الأخرى والعديد من العمليات الأخرى ومنطق الطرف الثالث ، والغرض الرئيسي منه هو تبسيط تشغيل النظام وتشغيله وصيانته.
هناك مجموعة من البرامج المسؤولة عن بساطة تشغيل البرامج (أو حتى السماح لك بتشغيل عدة برامج في نفس الوقت) ، فهي تسمح للبرامج بمشاركة نفس الذاكرة ، وكذلك التفاعل مع أجهزة مختلفة. تسمى هذه المجموعة من البرامج (البرمجيات) أساسًا نظام التشغيل وتتضمن مهامها مراقبة أن النظام يعمل بشكل صحيح وفعال ، وكذلك ضمان سهولة إدارة هذا النظام.
نظام التشغيل
نظام التشغيل ، اختصار لنظام التشغيل ، عبارة عن مجموعة من البرامج المترابطة المصممة لإدارة موارد الكمبيوتر وتنظيم تفاعل المستخدم مع جهاز الكمبيوتر .
يحقق نظام التشغيل فعاليته بشكل أساسي من خلال التقنية الأكثر أهمية - تقنية
المحاكاة الافتراضية . يتفاعل نظام التشغيل مع مورد مادي (المعالج والذاكرة والقرص وما شابه ذلك) ويحوله إلى شكل أكثر عمومية وأكثر قوة وأسهل في استخدام نفسه. لذلك ، لفهم عام ، يمكنك مقارنة نظام التشغيل تقريبًا بجهاز ظاهري.
للسماح للمستخدمين بإعطاء إرشادات لنظام التشغيل وبالتالي استخدام إمكانات جهاز ظاهري (مثل: تشغيل برنامج ، تخصيص الذاكرة ، الوصول إلى ملف ، وما إلى ذلك) ، يوفر نظام التشغيل بعض الواجهة التي تسمى
API (واجهة برمجة التطبيقات) والتي يمكنك إجراء المكالمات. يتيح نظام التشغيل النموذجي إجراء المئات من مكالمات النظام.
وأخيرًا ، نظرًا لأن المحاكاة الافتراضية تسمح للعديد من البرامج بالعمل (وبالتالي مشاركة وحدة المعالجة المركزية) ، وفي الوقت نفسه الوصول إلى تعليماتهم وبياناتهم (وبالتالي مشاركة الذاكرة) ، وكذلك الوصول إلى الأقراص (وبالتالي مشاركة أجهزة الإدخال / الإخراج ) ، ويسمى نظام التشغيل أيضا مدير الموارد. يعد كل معالج وقرص وذاكرة موردًا للنظام ، وبالتالي يصبح أحد أدوار نظام التشغيل مهمة إدارة هذه الموارد ، أو القيام بذلك بكفاءة أو بأمانة أو ، على العكس من ذلك ، اعتمادًا على المهمة التي تم تصميم نظام التشغيل من أجلها.
وحدة المعالجة المركزية الافتراضية
النظر في البرنامج التالي:
(Https://www.youtube.com/watch؟v=zDwT5fUcki4)

إنه لا يؤدي أي إجراءات خاصة ، في الواقع ، كل ما يفعله هو استدعاء الدالة
spin () ، والتي تتمثل مهمتها في دورة الوقت والعودة بعد مرور ثانية واحدة. وبالتالي ، فإنه يكرر ما لا نهاية السلسلة التي مرت المستخدم كوسيطة.
قم بتشغيل هذا البرنامج ، وقم بتمرير الرمز "A" إليه كوسيطة. النتيجة ليست مثيرة للاهتمام للغاية - يقوم النظام ببساطة بتشغيل برنامج يعرض الرمز "A" بشكل دوري.
الآن ، لنجرب الخيار عند تشغيل العديد من مثيلات البرنامج نفسه ، ولكن مع عرض رسائل مختلفة ، بحيث يكون أكثر قابلية للفهم. في هذه الحالة ، ستكون النتيجة مختلفة قليلاً. على الرغم من حقيقة أن لدينا معالج واحد ، يتم تشغيل البرنامج في وقت واحد. كيف يحدث هذا؟ لكن اتضح أن نظام التشغيل ، وليس بدون مساعدة قدرات الأجهزة ، يخلق وهمًا. وهم أن هناك العديد من المعالجات الافتراضية في النظام ، مما يحول معالجًا فعليًا واحدًا إلى عدد لا نهائي من الناحية النظرية ، وبالتالي يسمح بتنفيذ البرامج في وقت واحد. هذا الوهم يسمى
وحدة المعالجة المركزية الافتراضية .
مثل هذه الصورة تثير العديد من الأسئلة ، على سبيل المثال ، إذا كانت هناك عدة برامج ترغب في البدء في وقت واحد ، أي منها سيتم إطلاقه؟ "سياسات" نظام التشغيل هي المسؤولة عن هذا السؤال. يتم استخدام السياسات في العديد من أماكن نظام التشغيل والإجابة على أسئلة مشابهة ، وكذلك الآليات الأساسية التي ينفذها نظام التشغيل. ومن هنا دور نظام التشغيل كمدير للموارد.
الذاكرة الافتراضية
الآن دعونا نلقي نظرة على الذاكرة.
يتم تمثيل نموذج الذاكرة الفعلية في الأنظمة الحديثة كمجموعة من وحدات البايت . لقراءة من الذاكرة ، يجب عليك تحديد
عنوان الخلية من أجل الوصول إليها. لتسجيل البيانات أو تحديثها ، يجب عليك أيضًا تحديد البيانات وعنوان الخلية التي تريد كتابتها.
تحدث عمليات الوصول إلى الذاكرة باستمرار أثناء تشغيل البرنامج. يخزن البرنامج في الذاكرة بنية البيانات بالكامل ، والوصول إليها باتباع الإرشادات المختلفة. وفي الوقت نفسه ، يتم تخزين التعليمات أيضًا في الذاكرة ، لذلك يتم الوصول إليها أيضًا لكل طلب للتعليمات التالية.
اتصل malloc ()
النظر في البرنامج التالي الذي يخصص منطقة من الذاكرة باستخدام استدعاء
malloc () (https://youtu.be/jnlKRnoT1m0):

البرنامج يفعل بعض الأشياء. أولاً ، يخصص مقدار معين من الذاكرة (السطر 7) ، ثم يعرض عنوان الخلية المحددة (السطر 9) ، ويكتب صفرًا في الفتحة الأولى من الذاكرة المخصصة. بعد ذلك ، يدخل البرنامج في دورة تزيد فيها القيمة المسجلة في الذاكرة على العنوان في المتغير "p". كما يعرض معرف العملية في حد ذاته.
معرف العملية فريد لكل عملية قيد التشغيل . بعد إطلاق عدة نسخ ، سنتوصل إلى نتيجة مثيرة للاهتمام: في الحالة الأولى ، إذا لم تفعل شيئًا وبدأت للتو عدة نسخ ، فستكون العناوين مختلفة. لكن هذا لا يندرج تحت نظريتنا! صحيح ، لأنه في التوزيعات الحديثة ، يتم تشغيل وظيفة التوزيع العشوائي للذاكرة افتراضيًا. إذا قمت بإيقاف تشغيله ، فسنحصل على النتيجة المتوقعة - تتزامن عناوين الذاكرة الخاصة ببرنامجين يتم تشغيلهما في وقت واحد.
نتيجة لذلك ، اتضح أن هناك برنامجين مستقلين يعملان مع مساحات العناوين الخاصة ، والتي يتم عرضها بدورها بواسطة نظام التشغيل في الذاكرة الفعلية . لذلك ، لن يؤثر استخدام عناوين الذاكرة في برنامج واحد على الآخرين بأي شكل من الأشكال ، ويبدو لكل برنامج أن لديه قطعة من الذاكرة الفعلية الخاصة به ، والتي هي بالكامل تحت تصرفه. ولكن الواقع هو أن الذاكرة الفعلية هي مورد مشترك يديره نظام التشغيل.
اتساق
موضوع مهم آخر ضمن أنظمة التشغيل هو
الاتساق . يستخدم هذا المصطلح عندما يتعلق الأمر بمشاكل في النظام يمكن أن تحدث عند العمل مع أشياء كثيرة في نفس الوقت داخل نفس البرنامج. تنشأ مشاكل التناسق حتى في نظام التشغيل نفسه. في الأمثلة السابقة مع الذاكرة الظاهرية للمعالج والمعالج ، أدركنا أن نظام التشغيل يدير العديد من الأشياء في نفس الوقت - يبدأ العملية الأولى ، ثم الثانية ، وهكذا. كما اتضح ، هذا السلوك يمكن أن يؤدي إلى بعض المشاكل. لذلك ، على سبيل المثال ، تواجه البرامج الحديثة ذات مؤشرات الترابط هذه الصعوبات.
النظر في البرنامج التالي:

ينشئ البرنامج في الوظيفة الرئيسية مؤشرات
ترابط باستخدام استدعاء
Pthread_create () . في هذا المثال ، يمكن اعتبار مؤشر الترابط بمثابة وظيفة تعمل في نفس مساحة الذاكرة بجانب الوظائف الأخرى ، ومن الواضح أن عدد الوظائف التي يتم تشغيلها في وقت واحد هو أكثر من وظيفة. في هذا المثال ، يبدأ كل مؤشر ترابط وينفذ الدالة
worker () ،
والتي بدورها تزيد المتغير ببساطة ،.قم بتشغيل هذا البرنامج باستخدام الوسيطة 1000. كما قد تكون خمنت ، يجب أن تكون النتيجة 2000 ، لأن كل مؤشر ترابط يزيد المتغير 1000 مرة. ومع ذلك ، كل شيء ليس بهذه البساطة. دعونا نحاول تشغيل البرنامج بعدد مرات التكرار بترتيب أكبر.

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