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