محاكي مجموعة التعليمات

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

تُعدّ محاكاة التعليم منهجية تُستخدم لأحد الأسباب المحتملة التالية:

  • يهدف هذا الأسلوب إلى محاكاة بنية مجموعة التعليمات (ISA) لمعالج مستقبلي، مما يسمح بتطوير البرمجيات واختبارها دون انتظار اكتمال تطوير وإنتاج الأجهزة. يُعرف هذا الأسلوب في مجال تطوير الأجهزة باسم "التحول إلى اليسار" أو "دعم ما قبل تصنيع الرقاقة". يتضمن برنامج محاكاة النظام الكامل أو المنصة الافتراضية للأجهزة المستقبلية عادةً برنامج محاكاة واحد أو أكثر لمجموعة التعليمات.
  • لمحاكاة رمز الآلة لجهاز أجهزة آخر أو جهاز كمبيوتر كامل لتحقيق التوافق مع الإصدارات السابقة .
على سبيل المثال، تمت محاكاة جهاز IBM 1401 على جهاز IBM/360 اللاحق من خلال استخدام محاكاة الشفرة المصغرة .
  • لمراقبة وتنفيذ تعليمات كود الآلة (ولكن يتم التعامل معها كتدفق إدخال) على نفس الأجهزة لأغراض الاختبار والتصحيح، على سبيل المثال مع حماية الذاكرة (التي تحمي من تجاوز سعة المخزن المؤقت العرضي أو المتعمد ).
  • لتحسين أداء السرعة - مقارنة بمحاكي أبطأ وأكثر دقة في الدورة - لعمليات المحاكاة التي تتضمن نواة معالج حيث لا يكون المعالج نفسه أحد العناصر التي يتم التحقق منها؛ في تصميم لغة وصف الأجهزة باستخدام Verilog حيث يمكن تشغيل المحاكاة باستخدام أدوات مثل ISS بشكل أسرع عن طريق " PLI " (لا ينبغي الخلط بينها وبين PL/1 ، وهي لغة برمجة ).

تطبيق

يمكن تنفيذ محاكيات مجموعة التعليمات باستخدام ثلاث تقنيات رئيسية:

  • التفسير، حيث يتم تنفيذ كل تعليمة مباشرة بواسطة محطة الفضاء الدولية.
  • الترجمة الفورية (JIT)، حيث تُترجم الشفرة المراد تنفيذها أولاً إلى مجموعة تعليمات الحاسوب المضيف. وعادةً ما تكون هذه الطريقة أسرع بعشر مرات تقريبًا من المفسر المُحسَّن جيدًا.
  • المحاكاة الافتراضية، حيث تُستخدم ملحقات المعالج للآلات الافتراضية لتنفيذ التعليمات في بيئة محاكاة مجموعة التعليمات (ISS). لا تعمل هذه التقنية إلا مع محاكاة نفس مجموعة التعليمات على نفس الجهاز، مثل تشغيل محاكيات x86 على مضيفات x86، أو محاكيات ARM على مضيفات ARM.

غالبًا ما تُزوَّد بيئة التشغيل المتكاملة (ISS) بمصحح أخطاء (أو تكون هي نفسها) لتمكين مهندس البرمجيات / المبرمج من تصحيح البرنامج قبل الحصول على الجهاز المستهدف. يُعدّ GDB أحد مصححات الأخطاء التي تتضمن بيئة تشغيل متكاملة مُدمجة. ويتم دمجه أحيانًا مع دوائر طرفية مُحاكاة مثل المؤقتات ، والمقاطعات ، والمنافذ التسلسلية ، ومنافذ الإدخال/الإخراج العامة ، وما إلى ذلك، لمحاكاة سلوك وحدة التحكم الدقيقة .

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

يُحمّل البرنامج المستهدف في الذاكرة، لكن لا يُنقل التحكم إلى البرنامج. بدلاً من ذلك، تُحسب نقطة الدخول داخل البرنامج المُحمّل، ويُعيّن رمز حالة البرنامج (PSW) إلى هذا الموقع. يتكون رمز حالة البرنامج (PSW) من سجل حالة وعداد برنامج ، يشير الأخير إلى التعليمات التالية المراد تنفيذها. [ 1 ] لذلك، يُخصص عداد البرنامج تحديدًا لهذا الموقع. تُضبط مجموعة من السجلات الوهمية على ما كانت ستحتويه لو مُنح البرنامج التحكم مباشرةً.

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

بعد ذلك، تتم عملية التنفيذ على النحو التالي:

  1. حدد طول التعليمات عند موقع PSW الوهمي (أول تعليمات في البرنامج المستهدف مبدئيًا). إذا تطابق إزاحة هذه التعليمات داخل البرنامج مع مجموعة من نقاط "التوقف" المحددة مسبقًا، فحدد سبب "التوقف"، ثم انتقل إلى الخطوة 7.
  2. استرجع التعليمات من موقعها الأصلي (إن لزم الأمر) إلى ذاكرة الشاشة. إذا كانت خاصية "التتبع" متاحة ومفعلة، فقم بتخزين اسم البرنامج وإزاحة التعليمات وأي قيم أخرى.
  3. بحسب نوع التعليمات، قم بإجراء فحوصات ما قبل التنفيذ ثم نفّذها. إذا تعذّر تنفيذ التعليمات لأي سبب (تعليمات غير صالحة، وضع غير صحيح، إلخ)، فانتقل إلى الخطوة 7. إذا كانت التعليمات ستُغيّر الذاكرة، فتحقق من وجود وجهة الذاكرة (لهذا الخيط ) وأنها كبيرة بما يكفي. إذا كان كل شيء على ما يرام، قم بتحميل السجلات الوهمية المناسبة في سجلات حقيقية مؤقتة، ونفّذ عملية نقل مكافئة باستخدام السجلات الحقيقية، واحفظ العنوان وطول التخزين المُعدَّل إذا كان التتبع مُفعَّلاً، ثم انتقل إلى الخطوة 4. إذا كانت التعليمة عبارة عن عملية "سجل إلى سجل"، فقم بتحميل السجلات الوهمية في السجلات الحقيقية للمراقب، ونفّذ العملية، ثم احفظ البيانات في السجلات الوهمية المناسبة، ثم انتقل إلى الخطوة 4. إذا كانت التعليمة عبارة عن تفرع شرطي، فحدد ما إذا كان الشرط مُتحققًا: إذا لم يكن كذلك، فانتقل إلى الخطوة 4، وإذا كان الشرط مُتحققًا، فاحسب عنوان التفرع، وحدد ما إذا كان صالحًا (إذا لم يكن كذلك، فعيّن الخطأ = " تفرع غير صالح " وانتقل إلى الخطوة 7). إذا كان كل شيء على ما يرام، فانتقل إلى الخطوة 5. إذا كانت التعليمة عبارة عن استدعاء لنظام التشغيل ، فقم بإجراء استدعاء حقيقي من برنامج المراقبة عن طريق "تزييف" العناوين لإعادة التحكم إلى برنامج المراقبة، ثم أعد ضبط السجلات الوهمية لتعكس الاستدعاء؛ ثم انتقل إلى الخطوة 4.
  4. أضف طول التعليمات إلى قيمة Pseudo PSW الحالية.
  5. قم بتخزين العنوان التالي في Pseudo PSW.
  6. انتقل إلى 1.
  7. أوقفوا التنفيذ.

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

تتيح محاكاة التعليمات فرصة اكتشاف الأخطاء قبل تنفيذها، مما يعني أن الظروف تبقى كما هي تمامًا دون أن تتأثر بالخطأ. ومن الأمثلة الجيدة في بيئة IBM S/360 تسلسل التعليمات التالي الذي قد يُسبب صعوبات في تصحيح الأخطاء دون استخدام برنامج مراقبة محاكاة التعليمات.

 LM R14,R12,12(R13) حيث يشير r13 بشكل خاطئ إلى سلسلة من X"00"s يتسبب الخطأ BR R14 في احتواء PSW على X"0000002" مع فحص البرنامج "استثناء العملية". * جميع السجلات تحتوي على قيم فارغة عند حدوث خطأ.

عواقب

التكاليف العامة

يعتمد عدد التعليمات اللازمة لتنفيذ "الحلقة" الأساسية المذكورة أعلاه (جلب/تنفيذ/حساب عنوان جديد) على نوع الجهاز، ولكن يمكن إنجازها على أجهزة IBM S/360 /370/390/ES9000 في حوالي 12 أو 13 تعليمة للعديد من أنواع التعليمات. يُضيف التحقق من مواقع الذاكرة الصالحة أو من "التوقفات" المشروطة عبئًا إضافيًا كبيرًا، ولكن يمكن لتقنيات التحسين تقليله إلى مستويات مقبولة. لأغراض الاختبار، يُعد هذا مقبولًا عادةً نظرًا لتوفير إمكانيات تصحيح أخطاء قوية، بما في ذلك تتبع التعليمات ، والقفز المتعمد لاختبار روتين الخطأ (عند عدم وجود خطأ فعلي). بالإضافة إلى ذلك، يمكن استخدام تتبع كامل للتعليمات لاختبار تغطية الكود الفعلي (المنفذ) .

مزايا إضافية

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

إذا قام البرنامج المستهدف بجلب القيمة من موقع عشوائي في الذاكرة (موقع لا يملكه عادةً)، فقد تكون هذه القيمة فارغة (X"00") في معظم الحالات العادية، وسيعمل البرنامج بشكل صحيح. أما إذا قام برنامج المراقبة بتغيير نقطة التحميل، فقد يجلب قيمة مثلاً X"FF"، مما سيؤدي إلى نتائج مختلفة أثناء عملية المقارنة. وبالمثل، إذا كان برنامج المراقبة يشغل الآن المساحة التي يتم جلب القيمة منها، فقد تحدث نتائج مماثلة.

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

العمليات غير القانونية: تتطلب بعض أنظمة التشغيل (أو الأجهزة) أن يكون برنامج التطبيق في "الوضع" الصحيح لإجراء بعض الاستدعاءات لنظام التشغيل. يمكن لمحاكاة التعليمات اكتشاف هذه الشروط قبل التنفيذ.

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

لأغراض تعليمية

لا تزال بعض برامج المحاكاة هذه تُستخدم كأدوات لتدريس لغة التجميع وبنية مجموعة التعليمات، وقد صُممت بعضها خصيصًا باستخدام طبقات محاكاة متعددة ومحاكاة من بنية مجموعة تعليمات إلى أخرى، مع القدرة على تصميم بنى مجموعات التعليمات ومحاكاتها. [ 2 ]

نقد

في المجلد الأول من كتاب "فن برمجة الحاسوب" ، كتب دونالد كنوث : "في رأي المؤلف، تم إهدار الكثير من وقت المبرمجين في كتابة محاكيات [لغة الآلة] هذه، وتم إهدار الكثير من وقت الحاسوب في استخدامها." [ 3 ] ومع ذلك، في القسم التالي، يقدم المؤلف أمثلة على كيفية فائدة هذه المحاكيات كإجراءات تتبع أو مراقبة لأغراض تصحيح الأخطاء.

مثال

مخرجات التتبع النموذجية من المحاكاة بواسطة برنامج المراقبة المستخدم للاختبار والتصحيح:

تعليمات إزاحة البرنامج ، سجل/مخزن مفكك (بعد التنفيذ) TEST001 000000 X'05C0' BALR R12,0 R12=002CE00A 000002 X'47F0C00E' BC 15,X'00C'(R12) 00000E X'98ECD00C' STM R14,R12,X'00C'(R13) X'002E0008' ==> X'00004CE,002CE008,..إلخ....' 000012 X'45E0C122' BAL R14,X'122'(R12) R14=002C0016 SUB1 000124 X'50E0C28A' ST R14,X'28A'(R12) X'002CE294' ==> X'002C0016' إلخ...

انظر أيضاً

أجهزة المحاكاة

  • ARMulator - محاكيات وحدة المعالجة المركزية لبنية ARM ، مقدمة من ARM نفسها كمرجع وأداة لتطوير البرمجيات.
  • محاكي هندسة الحاسوب
  • برنامج محاكاة وحدة المعالجة المركزية (CPU Sim) - برنامج قائم على لغة جافا يسمح للمستخدم بتصميم وإنشاء مجموعة تعليمات، ثم تشغيل برامج التعليمات من هذه المجموعة من خلال المحاكاة.
  • Gpsim - محاكي المتحكم الدقيق PIC
  • INTERP/8 - Intel 8008 و INTERP/80 لـ Intel 8080.
  • حاسوب الرجل الصغير - مثال بسيط قائم على لغة جافا لمحاكي مجموعة التعليمات
  • MikroSim - محاكي وحدة المعالجة المركزية، يسمح بتحديد مجموعة التعليمات على مستوى الشفرة المصغرة للاستخدام التعليمي
  • برنامج محاكاة وحدة المعالجة المركزية VIP ، يسمح بتحديد مجموعة التعليمات على مستوى الشفرة المصغرة للاستخدام التعليمي.
  • OVPsim - محاكي وحدة المعالجة المركزية والنظام الكامل، يوفر أكثر من 170 نموذجًا دقيقًا للمعالجات. يسمح بتعريف مجموعات التعليمات من قبل المستخدم.
  • Saturn+ ، وهو برنامج محاكاة محسّن لوحدة المعالجة المركزية ونظام Saturn لتشغيل RPL على آلات حاسبة بيانية HP الأحدث المزودة بمعالجات ARM بين عامي 2003 و2015
  • Simics - إطار عمل لمحاكاة وحدة المعالجة المركزية والنظام الكامل، يقوم ببناء نماذج كاملة للأجهزة الحديثة المعقدة.
  • Simh - محاكاة لأكثر من 50 جهاز كمبيوتر تاريخي بما في ذلك أنظمة PDP-11 الكاملة مع الإدخال/الإخراج، قيد التطوير منذ الستينيات.
  • محاكي وحدة المعالجة المركزية ونظام التشغيل - محاكيات تعليمية متكاملة لوحدة المعالجة المركزية من نوع RISC ونظام التشغيل متعدد الخيوط.

آخر

مراجع

  1. هايز، جون ب. (1978). هندسة الحاسوب وتنظيمه . شركة ماكجرو هيل الدولية للنشر. ص  51. ISBN 0-07-027363-4.
  2. المصري، إ.، أبنده، ج.، شحادة، أ.، شهرور، أ. (ديسمبر 2011). محاكي ISA عالمي مع معالج برمجي مُنفذ على FPGA. في مؤتمر IEEE الأردني لعام 2011 حول الهندسة الكهربائية التطبيقية وتقنيات الحوسبة (AEECT) (ص 1-6). IEEE.
  3. "فن برمجة الحاسوب"، دونالد كنوث ، 1997، المجلد 1، الطبعة الثالثة، الصفحة 202.