طريقة عملنا Syncالتسلسل: مشكلة القسم الحرج في نظام التشغيل

⚡ ملخص ذكي

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

  • 🔗 فريف: Syncالتنسيق المتزامن ينسق العمليات بحيث لا تصل إلى البيانات المشتركة في وقت واحد.
  • ⚠️ لماذا هناك حاجة إلى: يؤدي الوصول غير المنسق إلى الذاكرة المشتركة إلى بيانات غير متناسقة وخاطئة.
  • 🧩 جزء حرج: تُساهم أقسام الدخول، والأقسام الحرجة، وأقسام الخروج، والأقسام المتبقية في تنظيم الوصول الآمن إلى المتغيرات المشتركة.
  • 📏 ثلاث قواعد: يجب أن يفي الحل الصحيح بمعايير الاستبعاد المتبادل والتقدم والانتظار المحدود.
  • 🛠️ الحلول: خوارزمية بيترسون، وأجهزة التزامن، وأقفال التزامن، والإشارات الثنائية تحل المشكلة.
  • 🚦 Semaphore: متغير مشترك غير سالب يتم الإشارة إليه باستخدام عمليات الانتظار والإشارة الذرية.

طريقة عملنا Syncكرونة

ما هي العملية Synchronization؟

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

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

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

كيف العملية Syncيعمل كرونة؟

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

طريقة عملنا Syncأعمال التسلسل

أقسام البرنامج

فيما يلي أربعة عناصر أساسية للقسم الحرج:

  • قسم الدخول: إنه جزء من العملية التي تقرر دخول عملية معينة.
  • جزء حرج: يسمح هذا الجزء لعملية واحدة بإدخال وتعديل المتغير المشترك.
  • قسم الخروج: يسمح قسم الخروج للعمليات الأخرى المنتظرة في قسم الدخول بالدخول إلى القسم الحرج. كما يتحقق من ضرورة إزالة أي عملية انتهت من تنفيذها من خلال هذا القسم.
  • قسم الباقي: جميع الأجزاء الأخرى من Codeأما الأقسام التي لا تقع في الأقسام الحرجة، وأقسام الدخول، وأقسام الخروج، فتُعرف باسم قسم الباقي.

ما هي مشكلة القسم الحرج؟

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

  • تتم معالجة الإدخال إلى القسم الحرج بواسطة وظيفة الانتظار () ويتم تمثيله كـ P ().
  • يتم التحكم في الخروج من القسم الحرج بواسطة الدالة signal()، الممثلة بالرمز V().

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

قواعد القسم النقدي

يجب على القسم الحرج تطبيق القواعد الثلاث جميعها:

  • استبعاد متبادل: الاستبعاد المتبادل هو نوع خاص من الإشارة الثنائية يُستخدم للتحكم في الوصول إلى المورد المشترك. يتضمن آلية وراثة الأولوية لتجنب مشاكل انعكاس الأولوية الموسعة. لا يمكن تنفيذ أكثر من عملية واحدة في قسمها الحرج في وقت واحد.
  • التقدم: يُستخدم هذا الحل عندما لا يكون هناك أحد في القسم الحرج، ويريد شخص ما الدخول. عندئذٍ يجب على تلك العمليات غير الموجودة في قسمها المتبقي أن تقرر من يجب أن يدخل، في وقت محدد.
  • الانتظار المقيد: عندما يطلب أحد العمليات الدخول إلى القسم الحرج، هناك حدٌّ أقصى لعدد العمليات التي يمكنها الدخول إلى هذا القسم. لذا، عند بلوغ هذا الحد، يجب على النظام السماح للعملية بالدخول إلى قسمها الحرج.

حلول للقسم النقدي

تحت المعالجة Syncفي عملية التزامن، يلعب القسم الحرج الدور الرئيسي، لذا يجب حل المشكلة.

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

حل بيترسون

يُعدّ حل بيترسون حلاً شائع الاستخدام لمشاكل المقاطع الحرجة. وقد طوّر هذه الخوارزمية عالم حاسوب يُدعى بيترسون، ومن هنا جاءت تسميتها.

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

مثال

حلول للقسم النقدي

PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
  • لنفترض أن هناك N عملية (P1، P2، ... PN) وكل عملية في وقت ما تتطلب الدخول إلى القسم الحرج.
  • يتم الاحتفاظ بمصفوفة FLAG[] بحجم N، وقيمتها الافتراضية هي خطأ. لذا، عندما يحتاج أي برنامج إلى الدخول إلى القسم الحرج، عليه أن يُعيّن قيمة FLAG[i] إلى صحيح. على سبيل المثال، إذا أراد البرنامج Pi الدخول، فسيُعيّن FLAG[i]=TRUE.
  • يشير متغير آخر يسمى TURN إلى رقم العملية التي تنتظر حاليًا الدخول إلى CS.
  • العملية التي تدخل في القسم الحرج أثناء الخروج ستغير TURN إلى رقم آخر من قائمة العمليات الجاهزة.
  • مثال: إذا كان رقم الدور 2، فإن P2 يدخل القسم الحرج وأثناء الخروج يكون رقم الدور 3 وبالتالي يخرج P3 من حلقة الانتظار.

Syncالأجهزة كرونة

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

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

أقفال موتيكس

Syncلا تُعد أجهزة التزامن طريقة بسيطة للتنفيذ بالنسبة للجميع، لذلك تم أيضًا تقديم طريقة برمجية صارمة تُعرف باسم أقفال Mutex.

في هذا الأسلوب، في قسم إدخال التعليمات البرمجية، يتم الحصول على قفل على الموارد الهامة المستخدمة داخل القسم الحرج. في قسم الخروج يتم تحرير هذا القفل.

Semaphore الحلول

Semaphore هو ببساطة متغير غير سالب ومشترك بين الخيوط. وهو خوارزمية أو حل آخر لمشكلة القسم الحرج. وهو آلية إشارة، حيث يمكن لخيط ينتظر إشارة أن يتلقى إشارة من خيط آخر.

يستخدم عمليتين ذريتين: 1) الانتظار، و 2) الإشارة لمزامنة العملية.

مثال

WAIT ( S ):
while ( S <= 0 );
S = S - 1;
SIGNAL ( S ):
S = S + 1;

الأسئلة الشائعة

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

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

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

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

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

تلخيص هذه التدوينة بـ: