Mr_Code
مشرف سابق




السمعة:
تكملة على آخر موضوع بعنوان Process Synchronization سنتحدث في هذا الموضوع عن مشكلة جديدة تدعي Critical Section Problem
"Common Variable" بينهم فإن ذلك يؤدي الى عدم تناسق ويؤدي الي مشكلة تعرف بإسم Race Condition .
ال Critical Section هو جزء في البرمجية او ال Code تقوم فيه العملية "Process" بالتعديل على متغير مشترك او جدول بيانات مشترك او ملف.
أهم مبدأ بالنسبة للـ Critical Section هو أنه عندما توجد عملية تعمل في ال Critical Section الخاص بها فإنه لا يمكن لاي Process أخرى أن تعمل في ال Critical Section الخاص بها.
لاحظ : كل عملية لها ال Critical Section الخاص بها لذلك فإنه لا يمكن لأي عملية أنت تدخل في هذه المنطقة الخاصة بها طالما توجد عملية أخرى تعمل بالمنطقة الخاصة بها.
لا تقلق اذا لم تتصور الأمر حتى الآن سوف نستعرض الأمر بصور حتى تتمكن من فهمه بسهولة بإذن الله.
كل ما عليك معرفته حتى الآن هو أن ال Critical Section Problem تستخدم لوضع منهجية او طريقة حتى يمكن للعمليات أن تتشارك فيما بينها وللحفاظ على اتساق البيانات.
بالنسبة لبنية الكود ف هو أقرب لما يلي :
في البداية يوجد Entry Section وهو المسؤول عن تنفيذ طلب كل عملية لدخول ال Critical Section الخاص بها; فلا يمكن لأي عملية دخول ال Critical Section الخاص بها إلا بعد الطلب أولًا.
بعد ذلك تأتي بعد ال Critical Section منطقة تسمى ال Exit Section وهي التي تبين أنه قد انتهت العملية من تنفيذ عملياتها على المتغير المشترك.
وفي النهاية تكمل العملية باقي البرمجية أو ال Code بدون أي مشكلة وهذه المنطقة تدعى بال Remainder Section
في النهاية توجد ثلاثة متطلبات حتى يتم حل مشكلة ال Critical Section Problem
ويمكنكم الوصول الي الموضوع القادم من خلال الرابط التالي : شرح Semaphores بالعربي
Critical Section Problem
في البداية علينا أن نفهم ما هي ال Critical Section problem, لذلك وتكملة على كلامنا في الموضوع السابق; فإنه بافتراض أنه لدينا عمليتان أو اكثر " Two Or more Processes" يحاولان تعديل متغير مشترك"Common Variable" بينهم فإن ذلك يؤدي الى عدم تناسق ويؤدي الي مشكلة تعرف بإسم Race Condition .
ال Critical Section هو جزء في البرمجية او ال Code تقوم فيه العملية "Process" بالتعديل على متغير مشترك او جدول بيانات مشترك او ملف.
أهم مبدأ بالنسبة للـ Critical Section هو أنه عندما توجد عملية تعمل في ال Critical Section الخاص بها فإنه لا يمكن لاي Process أخرى أن تعمل في ال Critical Section الخاص بها.
لاحظ : كل عملية لها ال Critical Section الخاص بها لذلك فإنه لا يمكن لأي عملية أنت تدخل في هذه المنطقة الخاصة بها طالما توجد عملية أخرى تعمل بالمنطقة الخاصة بها.
لا تقلق اذا لم تتصور الأمر حتى الآن سوف نستعرض الأمر بصور حتى تتمكن من فهمه بسهولة بإذن الله.
كل ما عليك معرفته حتى الآن هو أن ال Critical Section Problem تستخدم لوضع منهجية او طريقة حتى يمكن للعمليات أن تتشارك فيما بينها وللحفاظ على اتساق البيانات.
بالنسبة لبنية الكود ف هو أقرب لما يلي :
C:
do
{
Entery Section
Critical Section
Exit Section
Remainder Section
} while (true);
بعد ذلك تأتي بعد ال Critical Section منطقة تسمى ال Exit Section وهي التي تبين أنه قد انتهت العملية من تنفيذ عملياتها على المتغير المشترك.
وفي النهاية تكمل العملية باقي البرمجية أو ال Code بدون أي مشكلة وهذه المنطقة تدعى بال Remainder Section
في النهاية توجد ثلاثة متطلبات حتى يتم حل مشكلة ال Critical Section Problem
- Mutual Exclusion : وتعني أنه عندما تعمل ال Process في ال Critical section الخاص بها فإنه لا يسمح لاي Process اخرى بالدخول الي ال Critical Section الخاص بها.
- Progress : عندما لا توجد أي Process في ال Critical Section الخاص بها ويوجد عدد من ال Processes تريد الدخول فإنه يمكن لل Processes أو العمليات التي لم تصل الي ال Remainder Section فقط المشاركة في اتخاذ قرار من يمكنه الدخول الي ال Critical Section من هذه العمليات, وهذا القرار لا يمكن تأجيله تحت اي ظرف كان.
- Bounded Waiting : باختصار فإنه لا يمكن أن نسمح ل Process أنت تدخل ال Critical Section مرات عديدة وهناك Process أخرى تنتظر الدخول ولا يمكنها الدخول الي فترة طويلة وتسمى هذه المشكلة ايضاً بإسم Starvation .
ويمكنكم الوصول الي الموضوع القادم من خلال الرابط التالي : شرح Semaphores بالعربي
التعديل الأخير: