محاكيات أنظمة الكمبيوتر - هل تبدو واقعية

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

صورة

إذا تم سؤالي عن المحاكاة منذ فترة ، فإن أول شيء كان سيحدث لي هو ابني ، الذي يتحدث عن معدته المريضة عشية التحكم في المدرسة. ومع ذلك ، على مدى السنوات العشر الماضية ، كنت أعمل مع محاكيات أنظمة الكمبيوتر المختلفة ، من الهواتف إلى الخوادم القائمة على المعالجات الدقيقة ، SOCs (System-On-Chip) وشرائح من أكبر الشركات المصنعة (للأسف ، الاسم تحت NDA) ، وفكرتي عن لقد تغيرت المحاكاة. لكن أول الأشياء أولاً.

أنا متأكد من أن العديد منكم قد صادفوا أجهزة محاكاة ، والتي غالبًا ما تسمى الأجهزة الافتراضية ، hypervisors. قام شخص ما بتثبيت Parallels Studio على جهاز Mac الخاص به لتشغيل Windows من MacOS ، ويستخدم شخص ما منتجًا من VmWare - Workstation للحصول على نظام تشغيل (OS) آخر يعمل داخل مثبت بالفعل. أولئك الذين يعرفون لينكس يفضلون KVM و QEMU. يحظى VirtualBox بشعبية كبيرة بين الناس. يدرك الأشخاص الذين يطورون بشكل احترافي الأجهزة المستندة إلى FPGA (الدوائر المتكاملة المنطقية القابلة للبرمجة) VCS من Synopsys و Mentor Graphics Questa. ومع ذلك ، هذا ليس سوى جزء صغير مما يمكن أن يسمى المحاكاة.

ما هي المحاكاة؟


المحاكي هو نموذج ، عادة برنامج ، جهاز حقيقي. وفقا لذلك ، المحاكاة هي عملية مثل هذا النموذج الذي يكرر تشغيل الجهاز.

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

Airbnb في المحاكاة - ضيف ومضيف


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

صورة

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

المحاكاة والمحاكاة - أي اسم صحيح؟


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

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

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

صورة

4 مستويات من تفاصيل المحاكاة


كما كتبت أعلاه ، فإن الخيار الأكثر شيوعًا هو المحاكاة على مستوى تعليمات المعالج ، أو ما يسمى ISA (بنية مجموعة التعليمات) ، أو ، بشكل أدق ، نتيجة تنفيذها ، أي بدون محاكاة كل المنطق الداخلي لكيفية حدوث ذلك في معالج حقيقي ، ودون مراعاة وقت تنفيذ التعليمات المختلفة. تسمى هذه المحاكيات أيضًا وظيفية. هذه هي الطريقة التي يعمل بها VirtualBox و Vmware Workstation و Wind River Simics و KVM و QEMU. يسمح لك هذا بتشغيل البرامج المصممة للجهاز المحاكي بدون إجراءات إضافية غير ضرورية. وبعبارة أخرى ، لا يلزم إعادة الترجمة ولا أي عمليات تلاعب أخرى مع البرامج قيد التشغيل. في مثل هذه الحالات ، يقولون أنه من الممكن تشغيل كود ثنائي غير معدل.

إذا تحدثنا عن مستوى أعلى من التجريد ، فسيكون هذا تنفيذ واجهة ABI (واجهة تطبيق ثنائية) معينة. باختصار ، يصف ABI واجهة ثنائية للتفاعل بين برنامجين - عادة برنامج مستخدم ومكتبة أو نظام تشغيل. يغطي ABI اصطلاحات الاستدعاء (كيفية تمرير المعلمات وقيم الإرجاع) ، وأحجام أنواع البيانات ، وإجراء مكالمات النظام. كيف تعمل؟ على سبيل المثال ، إذا احتاج برنامج مكتوب لنظام Linux إلى إنشاء سلسلة رسائل إضافية (من سلسلة المحادثات الإنجليزية) للتنفيذ ، فسيتم استدعاء وظيفة pthread_create (). ولكن ماذا لو قمت بإنشاء مكتبة بمثل هذه الوظيفة في Windows وقمت بتنفيذ الآليات اللازمة لربط التطبيق والمكتبة (ارتباط ديناميكي)؟ في هذه الحالة ، يمكنك تشغيل تطبيقات Linux من Windows. سيقوم Windows "بمحاكاة" Linux.هذا هو بالضبط ما تم القيام به في نظام Windows الفرعي لنظام Linux على Windows 10 ، والذي يسمح لك بتشغيل تطبيقات Linux الثنائية غير المعدلة على Windows.

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

تحت مستوى المحاكاة المعمارية الدقيقة هو مستوى محاكاة العناصر المنطقية التي تصنع منها الرقائق الحديثة. مثل هذه المحاكيات هي برامج وأجهزة تستخدم FPGA. يوصف منطق FPGA باستخدام RTL (مستوى نقل التسجيل) في Verilog ، VHDL ، وما إلى ذلك. بعد التجميع ، يتم الحصول على صورة (bitstream) ، ثم تومض في FPGA. ولهذا ، ليس من الضروري استخدام حديد لحام وفهم الهندسة الكهربائية. اللوحة متصلة بجهاز كمبيوتر ، على سبيل المثال ، عبر واجهة USB أو JTAG ، ويقوم برنامج خاص من الشركة المصنعة لبطاقة FPGA بالتسجيل. تبدأ تكلفة هذه اللوحات من عشرة دولارات لأبسط الخيارات إلى ملايين الدولارات لألواح FPGA الكبيرة بحجم الخزانة المستخدمة في شركات تصنيع الرقائق الكبيرة.في مثل هذه الشركات ، تعد محاكاة FPGA هي المرحلة النهائية قبل وضع RTL في الإنتاج.

إذا كنا نتحدث عن الأجهزة البسيطة ، فعندئذٍ لدينا صورة FPGA في متناول اليد ، يمكنك الاتصال بشركات متخصصة ستصنع جهازًا حقيقيًا (غير FPGA) مع منطق مبرمج.

يوضح الشكل أدناه مستويات المحاكاة الموصوفة.

صورة

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

فماذا عن مقارنة المحاكاة والواقع؟

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

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

All Articles