محاكيات أنظمة الكمبيوتر: محاكي النظام الأساسي الكامل المألوف والشريط والتتبع غير المعروفين

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

محاكيات أنظمة الكمبيوتر: محاكي النظام الأساسي الكامل المألوف والشريط والتتبع غير المعروفين

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

محاكاة منصة كاملة، أو "وحدك في الميدان ليس محاربًا"

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

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

يوجد أدناه رسم تخطيطي لمجموعة شرائح x58 من Intel. يتطلب محاكي الكمبيوتر ذو النظام الأساسي الكامل على مجموعة الشرائح هذه تنفيذ معظم الأجهزة المدرجة، بما في ذلك الأجهزة الموجودة داخل IOH (مركز الإدخال/الإخراج) وICH (مركز تحكم الإدخال/الإخراج)، والتي لم يتم توضيحها بالتفصيل في المخطط التفصيلي . على الرغم من أنه، كما تظهر الممارسة، لا توجد العديد من الأجهزة التي لا يستخدمها البرنامج الذي سنقوم بتشغيله. لا يلزم إنشاء نماذج لهذه الأجهزة.

محاكيات أنظمة الكمبيوتر: محاكي النظام الأساسي الكامل المألوف والشريط والتتبع غير المعروفين

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

أداء المحاكاة

محاكيات أنظمة الكمبيوتر: محاكي النظام الأساسي الكامل المألوف والشريط والتتبع غير المعروفين

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

هنا سيكون من المناسب أن نتطرق إلى موضوع أداء المحاكاة. يتم قياسه عادةً بـ IPS (التعليمات في الثانية)، وبشكل أكثر دقة بـ MIPS (ملايين IPS)، أي عدد تعليمات المعالج التي ينفذها جهاز المحاكاة في ثانية واحدة. وفي الوقت نفسه، تعتمد سرعة المحاكاة أيضًا على أداء النظام الذي تعمل عليه المحاكاة نفسها. لذلك قد يكون من الأصح الحديث عن "تباطؤ" جهاز المحاكاة مقارنة بالنظام الأصلي.

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

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

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

محاكيات أنظمة الكمبيوتر: محاكي النظام الأساسي الكامل المألوف والشريط والتتبع غير المعروفين

محاكاة فوز تلو الآخر

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

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

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

محاكيات أنظمة الكمبيوتر: محاكي النظام الأساسي الكامل المألوف والشريط والتتبع غير المعروفين

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

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

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

المحاكاة القائمة على التتبع

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

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

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

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

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

المصدر: www.habr.com

إضافة تعليق