باسكال المتزامن
لغة البرمجة Concurrent Pascal هي لغة برمجة صممها بير برينش هانسن لكتابة برامج الحوسبة المتزامنة مثل أنظمة التشغيل وأنظمة مراقبة الحوسبة في الوقت الحقيقي على أجهزة الكمبيوتر ذات الذاكرة المشتركة . [ 1 ]
تُستخدم لغة منفصلة، هي لغة باسكال التسلسلية ، كلغة لبرامج التطبيقات التي تُشغّلها أنظمة التشغيل المكتوبة بلغة باسكال المتزامنة. كلتا اللغتين امتداد للغة باسكال التي ابتكرها نيكلاوس ويرث ، وتشتركان في مُفسّر شيفرة مُتعددة الخيوط . [ 2 ] فيما يلي وصفٌ لكيفية اختلاف باسكال المتزامنة عن باسكال ويرث.
وصف اللغة
تمت إزالة العديد من البنى في لغة باسكال من لغة باسكال المتزامنة من أجل التبسيط والأمان: [ 2 ]
- سجلات متغيرة
- انتقل إلى البيان، والتسميات
- الإجراءات كمعايير
- المصفوفات المعبأة
- أنواع المؤشرات
- أنواع الملفات، وإجراءات الإدخال/الإخراج القياسية المرتبطة بها
تتيح هذه الإغفالات ضمان، من خلال مزيج من عمليات التحقق في وقت الترجمة والحد الأدنى من عمليات التحقق في وقت التشغيل في مترجم التعليمات البرمجية متعددة الخيوط، أن البرنامج لا يمكنه أن يضر نفسه أو برنامجًا آخر عن طريق العنونة خارج المساحة المخصصة له.
تتضمن لغة Concurrent Pascal أنواع بيانات الفئة والمراقبة والعملية. يتم تعريف مثيلات هذه الأنواع كمتغيرات، ويتم تهيئتها في initعبارة.
تتشابه الفئات والمراقبون: فكلاهما يجمع المتغيرات والإجراءات الخاصة ضمن إجراءات عامة (تُسمى مدخلات الإجراءات). لا يمكن استخدام نسخة الفئة إلا من قِبل عملية واحدة، بينما يمكن مشاركة نسخة المراقب بين العمليات. يوفر المراقبون الآلية الوحيدة للتواصل بين العمليات في برنامج باسكال المتزامن.
لا يمكن تنفيذ سوى عملية واحدة ضمن مثيل مراقبة معين في كل مرة. يُستخدم نوع البيانات المدمج، وهو قائمة الانتظار، مع العمليات `queue` delayو` continuequeue`، لجدولة العمليات داخل المراقبات. يمكن لكل متغير من نوع `queue` استيعاب عملية واحدة. إذا كان من المقرر تأخير عدة عمليات في مراقب واحد، فيجب توفير متغيرات متعددة لقائمة الانتظار، وعادةً ما تكون مُنظمة على شكل مصفوفة. يمنح متغير قائمة الانتظار الخاص بعملية واحدة المراقب تحكمًا كاملاً في الجدولة متوسطة المدى، ولكن يظل المبرمج مسؤولاً عن إلغاء حظر العملية الصحيحة.
تحتوي العملية، مثل الفئة أو جهاز المراقبة، على متغيرات محلية وإجراءات وعبارة بدء، ولكنها لا تحتوي على مداخل إجراءات. عادةً ما تُنفَّذ عبارة البدء إلى ما لا نهاية، مستدعيةً الإجراءات المحلية وإجراءات الفئة وإجراءات جهاز المراقبة. تتواصل العمليات من خلال إجراءات جهاز المراقبة. تمنع قواعد اللغة حدوث حالة الجمود بفرض تسلسل هرمي على أجهزة المراقبة. ولكن لا يوجد ما يمنع جهاز المراقبة من نسيان إلغاء حظر عملية متأخرة (بعدم استدعاء continue)، وبالتالي قد يتوقف النظام فعليًا بسبب أخطاء البرمجة.
يتم عادةً تحديد تكوين العمليات والمراقبين والفئات في برنامج باسكال متزامن عند بدء التنفيذ، ولا يتم تغييره بعد ذلك. وتُنشأ مسارات الاتصال بين هذه المكونات بواسطة متغيرات تُمرر في التعليمات init، حيث لا يمكن استخدام متغيرات مثيلات الفئات والمراقبين كمعاملات للإجراءات.
مثال
يوضح المثال التالي تعريف جهاز مراقبة بسيط، واستخدامه من قبل عمليتين متصلتين.
نوع "مراقب المخزن المؤقت المحدود" المخزن المؤقت = الشاشة متغير saved : عدد صحيح؛ "العنصر المحفوظ هو عدد صحيح" fullq, emptyq : قائمة انتظار؛ "تستخدمها عمليتان فقط" full : قيمة منطقية؛ "صحيح إذا تم حفظ عنصر:""يضع العنصر في المخزن المؤقت"procedureentryput(item:Integer);يبدأiffullthenتأخير(قائمة الانتظار الممتلئة)؛ "حظر في حالة الامتلاء" تم حفظ := العنصر؛ "حفظ العنصر" ممتلئ := صحيح؛ "وضع علامة كممتلئ" استمر(قائمة الانتظار الفارغة) "إلغاء حظر المستهلك" نهاية؛ "يحصل على العنصر من المخزن المؤقت"procedureentryget(varitem:Integer);يبدأifnotfullthenتأخير(emptyq)؛ "حظر إذا كان فارغًا" العنصر := تم حفظه؛ "استرجاع العنصر" ممتلئ := خطأ؛ "وضع علامة على أنه غير ممتلئ" استمر(fullq) "إلغاء حظر المُنتِج" نهاية؛ "تهيئة الشاشة" يبدأ كامل := خطأ نهاية؛ "المنتج يستخدم مخزنًا مؤقتًا" المنتج = العملية(الممرر : المخزن المؤقت)؛varitem:Integer;يبدأ حلقة "التنفيذ في حلقة لا نهائية" "إنتاج عنصر" تمرير.وضع(العنصر) "تمرير عنصر إلى الشاشة" نهاية نهاية؛ "يستخدم المستهلك وسيطًا" المستهلك = العملية(الممرر : المخزن المؤقت)؛varitem:Integer;يبدأ دورة pass.get(item); "استرجاع عنصر من الشاشة" "استخدام العنصر" نهاية نهاية؛ "إعلان مثيلات للمراقب والمنتج والمستهلك" "منح المنتج والمستهلك حق الوصول إلى المراقب" متغير تمرير: المخزن المؤقت؛ prod: منتج؛ السلبيات: المستهلك؛ يبدأ init pass, "تهيئة جهاز المراقبة" prod(pass), "بدء عملية المنتج" cons(pass) "بدء عملية المستهلك" end.
مراجع
- ↑ برينش هانسن، بير (يونيو 1975). "لغة البرمجة كونكرنت باسكال" (ملف PDF) . معاملات IEEE في هندسة البرمجيات (2): 199-207 . doi : 10.1109/tse.1975.6312840 .
- 1 2 برينش هانسن، بير (1977). هندسة البرامج المتزامنة . برنتيس هول. ISBN 978-0-13-044628-2.
- عائلة لغات البرمجة باسكال
- باسكال (لغة برمجة)
