منافس


في الحوسبة ، المحاكي هو جهاز أو برنامج يمكّن نظام كمبيوتر واحد (يُسمى المضيف ) من التصرف مثل نظام كمبيوتر آخر (يُسمى الضيف ). عادةً ما يمكّن المحاكي النظام المضيف من تشغيل البرامج أو استخدام الأجهزة الطرفية المصممة لنظام الضيف. يشير المحاكاة إلى قدرة برنامج كمبيوتر في جهاز إلكتروني على محاكاة (أو تقليد) برنامج أو جهاز آخر.
على سبيل المثال، تم تصميم العديد من الطابعات لمحاكاة طابعات HP LaserJet لأن الكثير من البرامج مكتوبة لطابعات HP. إذا قامت طابعة غير HP بمحاكاة طابعة HP، فإن أي برنامج مكتوب لطابعة HP حقيقية سيعمل أيضًا في محاكاة الطابعة غير HP وينتج طباعة مكافئة. منذ تسعينيات القرن العشرين على الأقل، استخدم العديد من عشاق ألعاب الفيديو والهواة برامج محاكاة لتشغيل ألعاب الآركيد الكلاسيكية من ثمانينيات القرن العشرين باستخدام كود الآلة الأصلي للألعاب وبياناتها من ثمانينيات القرن العشرين، والتي يتم تفسيرها بواسطة نظام العصر الحالي، ومحاكاة وحدات تحكم ألعاب الفيديو القديمة (انظر محاكي وحدة تحكم ألعاب الفيديو ).
محاكي الأجهزة هو محاكي يأخذ شكل جهاز مادي. تشمل الأمثلة البطاقة المتوافقة مع نظام التشغيل DOS المثبتة في بعض أجهزة كمبيوتر ماكنتوش من حقبة التسعينيات ، مثل Centris 610 أو Performa 630 ، والتي سمحت لها بتشغيل برامج الكمبيوتر الشخصي ومحاكيات الأجهزة القائمة على مصفوفة البوابات القابلة للبرمجة ميدانيًا . تشير أطروحة تشرش-تورينج إلى أنه من الناحية النظرية، يمكن محاكاة أي بيئة تشغيل داخل أي بيئة أخرى، على افتراض تجاهل قيود الذاكرة. ومع ذلك، في الممارسة العملية، يمكن أن يكون الأمر صعبًا للغاية، خاصةً عندما لا يتم توثيق السلوك الدقيق للنظام المراد محاكاته ويجب استنتاجه من خلال الهندسة العكسية . كما لا تقول شيئًا عن قيود التوقيت؛ إذا لم يعمل المحاكي بنفس السرعة التي كان يعمل بها باستخدام الأجهزة الأصلية، فقد يعمل البرنامج داخل المحاكاة بشكل أبطأ بكثير (ربما يؤدي ذلك إلى تشغيل مقاطعات مؤقتة تغير السلوك).
"هل يمكن لجهاز Commodore 64 محاكاة نظام التشغيل MS-DOS ؟" نعم، من الممكن لجهاز Commodore 64 محاكاة جهاز كمبيوتر IBM [الذي يستخدم نظام التشغيل MS-DOS]، بنفس الطريقة التي يمكن بها إنقاذ بحيرة ميشيغان باستخدام ملعقة شاي .
— رسالة إلى الحاسب! والإجابة التحريرية، أبريل 1988 [1]
أنواع


إن أغلب المحاكيات تحاكي بنية الأجهزة فقط، فإذا كانت البرامج الثابتة أو البرامج الخاصة بنظام التشغيل مطلوبة للبرنامج المطلوب، فيجب توفيرها أيضًا (ويمكن محاكاتها هي نفسها). ثم يتم تفسير كل من نظام التشغيل والبرنامج بواسطة المحاكي، بدلاً من تشغيلهما بواسطة الأجهزة الأصلية. وبصرف النظر عن هذا المترجم للغة الآلة الثنائية المحاكية ، يجب توفير بعض الأجهزة الأخرى (مثل أجهزة الإدخال أو الإخراج) في شكل افتراضي أيضًا؛ على سبيل المثال، إذا كان الكتابة إلى موقع ذاكرة معين يجب أن تؤثر على ما يتم عرضه على الشاشة، فيجب محاكاة هذا. وبينما يمكن للمحاكاة، إذا تم أخذها إلى أقصى حد، أن تنزل إلى المستوى الذري، وتستند في ناتجها على محاكاة الدوائر الفعلية من مصدر طاقة افتراضي، فإن هذا سيكون حلاً غير معتاد للغاية. تتوقف المحاكيات عادةً عند محاكاة مواصفات الأجهزة الموثقة والمنطق الرقمي. تتطلب المحاكاة الكافية لبعض منصات الأجهزة دقة شديدة، حتى مستوى دورات الساعة الفردية، والميزات غير الموثقة، والعناصر التناظرية غير المتوقعة، وأخطاء التنفيذ. ينطبق هذا بشكل خاص على أجهزة الكمبيوتر المنزلية الكلاسيكية مثل Commodore 64 ، والتي تعتمد برامجها غالبًا على حيل برمجة منخفضة المستوى ومتطورة للغاية اخترعها مبرمجو الألعاب و" مشهد العروض التوضيحية ".
على النقيض من ذلك، كان لبعض المنصات الأخرى استخدام ضئيل للغاية لعنونة الأجهزة المباشرة، مثل محاكي بلاي ستيشن 4. [2] في هذه الحالات، قد تكون طبقة توافق بسيطة كافية. هذا يترجم نداءات النظام للنظام الأجنبي إلى نداءات النظام للنظام المضيف، على سبيل المثال، طبقة توافق لينكس المستخدمة في *BSD لتشغيل برامج لينكس الأصلية مغلقة المصدر على FreeBSD و NetBSD . [3] على سبيل المثال، بينما كان معالج الرسوميات نينتندو 64 قابلاً للبرمجة بالكامل، استخدمت معظم الألعاب أحد البرامج القليلة المعدة مسبقًا، والتي كانت في الغالب مستقلة وتتواصل مع اللعبة عبر FIFO ؛ لذلك، لا تحاكي العديد من المحاكيات معالج الرسوميات على الإطلاق، ولكنها ببساطة تفسر الأوامر الواردة من وحدة المعالجة المركزية كما يفعل البرنامج الأصلي. غالبًا ما يصمم مطورو البرامج للأنظمة المضمنة أو وحدات تحكم ألعاب الفيديو برامجهم على محاكيات دقيقة بشكل خاص تسمى المحاكيات قبل تجربتها على الأجهزة الحقيقية. هذا حتى يمكن إنتاج البرامج واختبارها قبل وجود الأجهزة النهائية بكميات كبيرة، بحيث يمكن اختبارها دون إضاعة الوقت في نسخ البرنامج المراد تصحيح أخطائه على مستوى منخفض ودون إدخال الآثار الجانبية لمصحح الأخطاء . في كثير من الحالات، يتم إنتاج المحاكي بالفعل من قبل الشركة التي توفر الأجهزة، مما يزيد من دقته نظريًا. تسمح محاكيات المعالج المساعد للرياضيات للبرامج المترجمة بإرشادات الرياضيات بالعمل على الأجهزة التي لا تحتوي على المعالج المساعد مثبتًا، ولكن العمل الإضافي الذي تقوم به وحدة المعالجة المركزية قد يبطئ النظام. إذا لم يتم تثبيت معالج مساعد للرياضيات أو وجوده على وحدة المعالجة المركزية، فعندما تنفذ وحدة المعالجة المركزية أي تعليمات للمعالج المساعد، فإنها ستؤدي إلى مقاطعة محددة (المعالج المساعد غير متاح)، مما يؤدي إلى استدعاء روتينات محاكي الرياضيات. عندما يتم محاكاة التعليمات بنجاح، يستمر البرنامج في التنفيذ.
محاكيات المنطق
المحاكاة المنطقية هي استخدام برنامج كمبيوتر لمحاكاة تشغيل دائرة رقمية مثل المعالج. [4] يتم ذلك بعد تصميم الدائرة الرقمية في معادلات منطقية، ولكن قبل تصنيع الدائرة في الأجهزة.
المحاكيات الوظيفية
المحاكاة الوظيفية هي استخدام برنامج كمبيوتر لمحاكاة تنفيذ برنامج كمبيوتر ثانٍ مكتوب بلغة التجميع الرمزية أو لغة المترجم ، بدلاً من الكود الثنائي للآلة . باستخدام محاكي وظيفي، يمكن للمبرمجين تنفيذ وتتبع أقسام محددة من الكود المصدر للبحث عن أخطاء البرمجة (الأخطاء)، دون إنشاء كود ثنائي. وهذا يختلف عن محاكاة تنفيذ الكود الثنائي، وهو محاكاة برمجية. كتبت شركة Autonetics أول محاكي وظيفي حوالي عام 1960 [ بحاجة لمصدر ] لاختبار برامج لغة التجميع للتنفيذ اللاحق في الكمبيوتر العسكري D-17B . وقد جعل هذا من الممكن كتابة برامج الطيران وتنفيذها واختبارها قبل بناء أجهزة الكمبيوتر D-17B. كما برمجت شركة Autonetics محاكي وظيفي لاختبار برامج الطيران للتنفيذ اللاحق في الكمبيوتر العسكري D-37C .
محاكيات وحدة تحكم ألعاب الفيديو
محاكيات وحدات تحكم ألعاب الفيديو هي برامج تسمح لجهاز كمبيوتر شخصي أو وحدة تحكم ألعاب فيديو بمحاكاة وحدة تحكم ألعاب فيديو أخرى. تُستخدم غالبًا لتشغيل ألعاب الفيديو القديمة من حقبة الثمانينيات إلى العقد الأول من القرن الحادي والعشرين على أجهزة الكمبيوتر الشخصية الحديثة ووحدات تحكم ألعاب الفيديو الأكثر معاصرة. تُستخدم أيضًا لترجمة الألعاب إلى لغات أخرى، وتعديل الألعاب الموجودة، وفي عملية تطوير العروض التوضيحية "المنزلية الصنع" وفي إنشاء ألعاب جديدة للأنظمة القديمة. ساعدت الإنترنت في انتشار محاكيات وحدات التحكم، حيث لن تكون معظمها - إن لم يكن كلها - متاحة للبيع في منافذ البيع بالتجزئة. أمثلة لمحاكيات وحدات التحكم التي تم إصدارها في العقود القليلة الماضية: RPCS3 و Dolphin و Cemu و PCSX2 و PPSSPP و ZSNES و Citra و ePSXe و Project64 و Visual Boy Advance و Nestopia و Yuzu .
بسبب شعبيتها، تم انتحال هوية المحاكيات بواسطة البرامج الضارة. معظم هذه المحاكيات مخصصة لوحدات تحكم ألعاب الفيديو مثل Xbox 360 وXbox One وNintendo 3DS وما إلى ذلك. بشكل عام، تقدم هذه المحاكيات ادعاءات مستحيلة حاليًا مثل القدرة على تشغيل ألعاب Xbox One و Xbox 360 في برنامج واحد. [5]
القضايا القانونية
مع استمرار تقدم أجهزة الكمبيوتر وشبكات الكمبيوتر العالمية وتزايد مهارة مطوري المحاكيات في عملهم، بدأت المدة الزمنية بين الإصدار التجاري لوحدة التحكم ومحاكاتها الناجحة في التقلص. شهدت وحدات التحكم من الجيل الخامس مثل Nintendo 64 و PlayStation وأجهزة الجيل السادس المحمولة، مثل Game Boy Advance ، تقدمًا كبيرًا نحو المحاكاة أثناء إنتاجها. أدى هذا إلى جهد من جانب مصنعي وحدات التحكم لوقف المحاكاة غير الرسمية، ولكن الإخفاقات المتسقة مثل Sega v. Accolade 977 F.2d 1510 (9th Cir. 1992)، و Sony Computer Entertainment، Inc. v. Connectix Corporation 203 F.3d 596 (2000)، و Sony Computer Entertainment America v. Bleem 214 F.3d 1022 (2000)، [6] كان لها التأثير المعاكس. وفقًا لجميع السوابق القانونية، فإن المحاكاة قانونية داخل الولايات المتحدة. ومع ذلك، يظل التوزيع غير المصرح به للكود المحمي بحقوق الطبع والنشر غير قانوني، وفقًا لقانون حقوق الطبع والنشر الخاص بكل دولة وقانون حقوق الطبع والنشر الدولي بموجب اتفاقية برن . [7] [ بحاجة لمصدر أفضل ] بموجب قانون الولايات المتحدة، يعد الحصول على نسخة منقحة من BIOS الخاص بالجهاز الأصلي قانونيًا بموجب حكم Lewis Galoob Toys, Inc. v. Nintendo of America, Inc. , 964 F.2d 965 (9th Cir. 1992) باعتباره استخدامًا عادلاً طالما حصل المستخدم على نسخة تم شراؤها بشكل قانوني من الجهاز. للتخفيف من ذلك، فإن العديد من المحاكيات للمنصات مثل Game Boy Advance قادرة على العمل بدون ملف BIOS، باستخدام محاكاة عالية المستوى لمحاكاة البرامج الفرعية BIOS بتكلفة طفيفة في دقة المحاكاة. [ بحاجة لمصدر ]
صالة
محاكيات المحطات الطرفية هي برامج برمجية توفر لأجهزة الكمبيوتر والأجهزة الحديثة إمكانية الوصول التفاعلي إلى التطبيقات التي تعمل على أنظمة تشغيل الكمبيوتر المركزية أو أنظمة الاستضافة الأخرى مثل HP-UX أو OpenVMS . لم تعد المحطات الطرفية مثل IBM 3270 أو VT100 والعديد من الأجهزة الأخرى تُنتج كأجهزة مادية. بدلاً من ذلك، تحاكي البرامج التي تعمل على أنظمة التشغيل الحديثة محطة طرفية "غبية" وتكون قادرة على عرض العناصر الرسومية والنصية للتطبيق المضيف، وإرسال ضغطات المفاتيح ومعالجة الأوامر باستخدام بروتوكول المحطة الطرفية المناسب. تتضمن بعض تطبيقات محاكاة المحطات الطرفية Attachmate Reflection و IBM Personal Communications و Micro Focus Rumba.
أنواع أخرى
تشمل الأنواع الأخرى من المحاكيات ما يلي:
- محاكي الأجهزة : عملية تقليد سلوك قطعة واحدة أو أكثر من الأجهزة (عادةً نظام قيد التصميم) بقطعة أخرى من الأجهزة، عادةً نظام محاكاة لأغراض خاصة
- محاكي الدائرة : استخدام جهاز مادي لتصحيح أخطاء برمجيات النظام المضمن
- محاكي الفاصلة العائمة : بعض أجهزة الفاصلة العائمة تدعم العمليات البسيطة فقط: الجمع والطرح والضرب. في الأنظمة التي لا تحتوي على أي أجهزة فاصلة عائمة، تحاكيها وحدة المعالجة المركزية باستخدام سلسلة من العمليات الحسابية البسيطة ذات الفاصلة الثابتة والتي تعمل على وحدة المنطق الحسابي الصحيحة.
- محاكي مجموعة التعليمات في لغة برمجة عالية المستوى : يحاكي سلوك الحاسوب المركزي أو المعالج الدقيق من خلال "قراءة" التعليمات والحفاظ على المتغيرات الداخلية التي تمثل سجلات المعالج .
- محاكاة الشبكة : تقنية لاختبار أداء التطبيقات الحقيقية عبر شبكة افتراضية. وهي تختلف عن محاكاة الشبكة حيث يتم تطبيق نماذج افتراضية لحركة المرور ونماذج الشبكة والقنوات والبروتوكولات.
- محاكي الخادم : غالبًا ما تعتمد ألعاب الفيديو متعددة اللاعبين على خادم ألعاب عبر الإنترنت، والذي قد يكون متاحًا أو غير متاح للتثبيت في الموقع. محاكي الخادم هو خادم غير رسمي في الموقع يقلد سلوك الخادم الرسمي عبر الإنترنت، على الرغم من أن عمله الداخلي قد يكون مختلفًا.
- المحاكاة : عملية التحكم في المحاكاة من خلال جهاز محاكاة
الهيكل والتنظيم
يحتاج قسم "البنية والتنظيم" في هذه المقالة إلى مصادر إضافية للتحقق . ( يونيو 2008 ) |
عادةً ما يتم تقسيم المحاكي إلى وحدات تتوافق تقريبًا مع الأنظمة الفرعية للكمبيوتر الذي يتم محاكاته. وفي أغلب الأحيان، يتكون المحاكي من الوحدات التالية:
- محاكي وحدة المعالجة المركزية أو محاكي وحدة المعالجة المركزية (المصطلحان متبادلان في الغالب في هذه الحالة)، ما لم يكن الهدف الذي يتم محاكاته له نفس بنية وحدة المعالجة المركزية مثل المضيف، وفي هذه الحالة يمكن استخدام طبقة آلة افتراضية بدلاً من ذلك
- وحدة نظام فرعي للذاكرة
- محاكيات أجهزة الإدخال والإخراج المختلفة
غالبًا ما لا يتم محاكاة الحافلات، إما لأسباب تتعلق بالأداء أو البساطة، وتتواصل الأجهزة الطرفية الافتراضية مباشرة مع وحدة المعالجة المركزية أو نظام الذاكرة الفرعي.
نظام فرعي للذاكرة
من الممكن أن يتم تقليص محاكاة نظام الذاكرة الفرعي إلى مجرد مجموعة من العناصر بحجم كلمة محاكية؛ ومع ذلك، يفشل هذا النموذج بسرعة كبيرة بمجرد عدم تطابق أي موقع في الذاكرة المنطقية للكمبيوتر مع الذاكرة المادية . من الواضح أن هذا هو الحال كلما سمحت الأجهزة المحاكية بإدارة متقدمة للذاكرة (في هذه الحالة، يمكن تضمين منطق وحدة ذاكرة الوصول العشوائي في محاكي الذاكرة، أو جعلها وحدة خاصة بها، أو دمجها أحيانًا في محاكي وحدة المعالجة المركزية). حتى إذا لم يكن الكمبيوتر المحاكى مزودًا بوحدة ذاكرة الوصول العشوائي، فهناك عادةً عوامل أخرى تكسر التكافؤ بين الذاكرة المنطقية والذاكرة المادية: تقدم العديد من البنيات (إن لم يكن معظمها) إدخال /إخراج مُخصص للذاكرة ؛ حتى تلك التي لا تحتوي غالبًا على كتلة من الذاكرة المنطقية مُخصصة للقراءة فقط ، مما يعني أنه يجب التخلص من وحدة مجموعة الذاكرة إذا كان من المقرر محاكاة طبيعة القراءة فقط للقراءة فقط للذاكرة. قد تؤدي ميزات مثل التبديل بين البنوك أو التجزئة أيضًا إلى تعقيد محاكاة الذاكرة. ونتيجة لذلك، تقوم معظم المحاكيات بتنفيذ إجراءين على الأقل للكتابة إلى الذاكرة المنطقية والقراءة منها، ومن واجب هذه الإجراءات تعيين كل وصول إلى الموقع الصحيح للكائن الصحيح.
في نظام عنونة حد القاعدة حيث تكون الذاكرة من العنوان 0 إلى العنوان ROMSIZE-1 عبارة عن ذاكرة للقراءة فقط، بينما الباقي عبارة عن ذاكرة وصول عشوائي (RAM)، فإن شيئًا ما على غرار الإجراءات التالية سيكون نموذجيًا:
void WriteMemory ( عنوان الكلمة ، قيمة الكلمة ) { عنوان الكلمة الحقيقي ؛ عنوان الكلمة الحقيقي = عنوان + سجل القاعدة ؛ إذا (( عنوان الحقيقة < سجل الحد ) و ( عنوان الحقيقة > حجم الذاكرة )) { الذاكرة [ عنوان الحقيقة ] = قيمة ؛ } وإلا { رفع المقاطعة ( INT_SEGFAULT )؛ } }
كلمة ReadMemory ( عنوان الكلمة ) { كلمة RealAddress ؛ عنوان RealAddress = عنوان + سجل أساسي ؛ إذا ( عنوان RealAddress < سجل محدود ) { إرجاع ذاكرة [ عنوان RealAddress ]؛ } وإلا { رفع المقاطعة ( INT_SEGFAULT )؛ إرجاع NULL ؛ } }
محاكي وحدة المعالجة المركزية
غالبًا ما يكون محاكي وحدة المعالجة المركزية هو الجزء الأكثر تعقيدًا في المحاكي. تتم كتابة العديد من المحاكيات باستخدام محاكيات وحدة المعالجة المركزية "المُعبأة مسبقًا"، من أجل التركيز على المحاكاة الجيدة والفعّالة لجهاز معين. أبسط أشكال محاكي وحدة المعالجة المركزية هو المفسّر ، وهو برنامج كمبيوتر يتبع تدفق تنفيذ كود البرنامج المُحاكي، ولكل تعليمات كود الجهاز التي يتم مواجهتها، ينفذ عمليات على المعالج المضيف تعادل دلاليًا التعليمات الأصلية. يصبح هذا ممكنًا من خلال تعيين متغير لكل سجل وعلم لوحدة المعالجة المركزية المحاكاة. يمكن بعد ذلك ترجمة منطق وحدة المعالجة المركزية المحاكاة بشكل أو بآخر إلى خوارزميات برمجية، مما يؤدي إلى إنشاء إعادة تنفيذ للبرنامج تعكس بشكل أساسي التنفيذ المادي الأصلي.
يوضح المثال التالي كيفية إنجاز محاكاة وحدة المعالجة المركزية بواسطة المترجم. في هذه الحالة، يتم التحقق من المقاطعات قبل تنفيذ كل تعليمة، على الرغم من أن هذا السلوك نادر في المحاكيات الحقيقية لأسباب تتعلق بالأداء (من الأسرع عمومًا استخدام برنامج فرعي للقيام بعمل المقاطعة).
void Execute ( void ) { if ( Interrupt != INT_NONE ) { SuperUser = TRUE ; WriteMemory ( ++ StackPointer , ProgramCounter ); ProgramCounter = InterruptPointer ; } switch ( ReadMemory ( ProgramCounter ++ )) { /* * معالجة كل تعليمات صالحة * تذهب هنا... */ default : Interrupt = INT_ILLEGAL ; } }
تحظى المترجمات الفورية بشعبية كبيرة باعتبارها محاكيات حاسوبية، حيث أنها أسهل في التنفيذ من الحلول البديلة الأكثر كفاءة من حيث الوقت، وسرعتها أكثر من كافية لمحاكاة أجهزة الكمبيوتر التي يزيد عمرها عن عقد من الزمان على الأجهزة الحديثة. ومع ذلك، فإن عقوبة السرعة المتأصلة في التفسير يمكن أن تشكل مشكلة عند محاكاة أجهزة الكمبيوتر التي تكون سرعة معالجها بنفس ترتيب حجم الجهاز المضيف [ مشكوك فيه - ناقش ] . حتى سنوات قليلة مضت، كان الكثيرون يعتبرون المحاكاة في مثل هذه المواقف غير عملية تمامًا [ مشكوك فيه - ناقش ] .
ما سمح بكسر هذا القيد هو التقدم في تقنيات إعادة التجميع الديناميكية [ مشكوك فيه – ناقش ] . عادةً ما يكون من المستحيل إجراء ترجمة مسبقة بسيطة لرمز البرنامج المُحاكي إلى رمز قابل للتشغيل على بنية المضيف بسبب عدة أسباب:
- قد يتم تعديل الكود أثناء وجوده في ذاكرة الوصول العشوائي (RAM) ، حتى لو تم تعديله فقط بواسطة نظام التشغيل المحاكي عند تحميل الكود (على سبيل المثال من القرص)
- قد لا تكون هناك طريقة موثوقة للتمييز بين البيانات (التي لا ينبغي ترجمتها) من الكود القابل للتنفيذ .
تحاول أشكال مختلفة من إعادة التجميع الديناميكي، بما في ذلك تقنية المترجم Just In Time (JIT) الشهيرة ، التحايل على هذه المشكلات من خلال الانتظار حتى يقفز تدفق التحكم في المعالج إلى موقع يحتوي على كود غير مترجم، وعندها فقط ("في الوقت المناسب") يترجم كتلة من الكود إلى كود مضيف يمكن تنفيذه. يتم الاحتفاظ بالكود المترجم في ذاكرة تخزين مؤقتة للكود [ مشكوك فيه - ناقش ] ، ولا يتم فقد الكود الأصلي أو تأثره؛ بهذه الطريقة، يمكن حتى لأجزاء البيانات أن تترجم (بلا معنى) بواسطة المترجم المعاد، مما لا يؤدي إلا إلى إهدار وقت الترجمة. قد لا تكون السرعة مرغوبة حيث لم يتم تصميم بعض الألعاب القديمة مع وضع سرعة أجهزة الكمبيوتر الأسرع في الاعتبار. قد تمنح اللعبة المصممة لجهاز كمبيوتر بسرعة 30 ميجاهرتز مع مؤقت مستوى يبلغ 300 ثانية لعبة اللاعب 30 ثانية فقط على جهاز كمبيوتر بسرعة 300 ميجاهرتز. قد لا تعمل برامج أخرى، مثل بعض برامج DOS، حتى على أجهزة كمبيوتر أسرع. وخاصة عند محاكاة أجهزة الكمبيوتر التي كانت "مغلقة الصندوق"، حيث كانت التغييرات في جوهر النظام غير نمطية، قد يستخدم البرنامج تقنيات تعتمد على خصائص محددة للكمبيوتر الذي يعمل عليه (على سبيل المثال سرعة وحدة المعالجة المركزية الخاصة به)، وبالتالي فإن التحكم الدقيق في سرعة المحاكاة مهم لمثل هذه التطبيقات ليتم محاكاتها بشكل صحيح.
الإدخال/الإخراج (I/O)
لا تحاكي أغلب المحاكيات، كما ذكرنا سابقًا، ناقل النظام الرئيسي ؛ وبالتالي غالبًا ما يتم التعامل مع كل جهاز إدخال/إخراج باعتباره حالة خاصة، ولا يتم توفير واجهة متسقة للأجهزة الطرفية الافتراضية. يمكن أن يؤدي هذا إلى ميزة في الأداء، حيث يمكن تخصيص كل وحدة إدخال/إخراج وفقًا لخصائص الجهاز المُحاكي؛ ومع ذلك، يمكن للتصاميم القائمة على واجهة برمجة تطبيقات قياسية موحدة للإدخال/الإخراج أن تنافس مثل هذه النماذج الأكثر بساطة، إذا تم التفكير فيها جيدًا، ولديها ميزة إضافية تتمثل في توفير خدمة إضافية "تلقائيًا" يمكن من خلالها استخدام أجهزة افتراضية تابعة لجهات خارجية داخل المحاكي. قد لا تعكس واجهة برمجة تطبيقات الإدخال/الإخراج الموحدة بالضرورة بنية ناقل الأجهزة الحقيقي: تصميم الناقل محدود بالعديد من القيود الكهربائية والحاجة إلى إدارة التزامن للأجهزة والتي يمكن تجاهلها في الغالب في تنفيذ البرنامج.
حتى في المحاكيات التي تعامل كل جهاز كحالة خاصة، عادة ما يكون هناك بنية أساسية مشتركة لـ:
- إدارة المقاطعات ، عن طريق إجراء يحدد علامات قابلة للقراءة بواسطة محاكي وحدة المعالجة المركزية كلما تم رفع مقاطعة، مما يسمح لوحدة المعالجة المركزية الافتراضية "بالاستطلاع على المقاطعات (الافتراضية)"
- الكتابة إلى الذاكرة المادية والقراءة منها، عن طريق إجراءين مماثلين لتلك التي تتعامل مع الذاكرة المنطقية (على الرغم من أنه على عكس الأخير، يمكن غالبًا استبعاد الإجراء الأول، واستخدام مراجع مباشرة إلى مجموعة الذاكرة بدلاً من ذلك)
التطبيقات
في الحفظ
المحاكاة هي إحدى الاستراتيجيات المتبعة في السعي إلى الحفاظ الرقمي ومكافحة التقادم . تركز المحاكاة على إعادة إنشاء بيئة كمبيوتر أصلية، والتي قد تستغرق وقتًا طويلاً ويصعب تحقيقها، ولكنها قيمة بسبب قدرتها على الحفاظ على اتصال أوثق بأصالة الكائن الرقمي أو نظام التشغيل أو حتى منصة الألعاب. [8] تعالج المحاكاة بيئة الأجهزة والبرامج الأصلية للكائن الرقمي، وتعيد إنشائها على جهاز حالي. [9] يسمح المحاكي للمستخدم بالوصول إلى أي نوع من التطبيقات أو أنظمة التشغيل على منصة حالية ، بينما يعمل البرنامج كما كان في بيئته الأصلية. [10] يقول جيفري روثنبرج، أحد المؤيدين الأوائل للمحاكاة كاستراتيجية للحفاظ الرقمي ، "إن النهج المثالي سيوفر حلاً واحدًا قابلاً للتوسيع وطويل الأمد يمكن تصميمه مرة واحدة وإلى الأبد وتطبيقه بشكل موحد وتلقائي وفي تزامن منظم (على سبيل المثال، في كل دورة تحديث) على جميع أنواع المستندات والوسائط". [11] ويذكر كذلك أن هذا لا ينبغي أن ينطبق فقط على الأنظمة القديمة، بل ينبغي أيضًا أن يكون قابلاً للتحرك صعودًا نحو الأنظمة غير المعروفة في المستقبل. [12] من الناحية العملية، عندما يتم إصدار تطبيق معين في إصدار جديد، بدلاً من معالجة مشكلات التوافق والهجرة لكل كائن رقمي تم إنشاؤه في الإصدار السابق من هذا التطبيق ، يمكن للمرء إنشاء محاكي للتطبيق ، مما يسمح بالوصول إلى جميع الكائنات الرقمية المذكورة.
في فن الوسائط الجديدة
بسبب الاستخدام الأساسي للتنسيقات الرقمية، يعتمد فن الوسائط الجديدة بشكل كبير على المحاكاة كاستراتيجية للحفاظ على الأعمال الفنية. يتخصص فنانون مثل كوري أركانجيل في إحياء التقنيات القديمة في أعمالهم الفنية ويدركون أهمية العملية اللامركزية وغير المؤسسية للحفاظ على الثقافة الرقمية. في كثير من الحالات، يكون هدف المحاكاة في فن الوسائط الجديدة هو الحفاظ على الوسيط الرقمي بحيث يمكن حفظه إلى أجل غير مسمى وإعادة إنتاجه دون خطأ، بحيث لا يكون هناك اعتماد على الأجهزة التي تتقدم في العمر وتصبح قديمة. المفارقة هي أنه يجب جعل المحاكاة والمحاكي يعملان على أجهزة الكمبيوتر المستقبلية. [13]
في تصميم الأنظمة المستقبلية
تُستخدم تقنيات المحاكاة بشكل شائع أثناء تصميم وتطوير أنظمة جديدة. فهي تسهل عملية التطوير من خلال توفير القدرة على اكتشاف وإعادة إنشاء وإصلاح العيوب في التصميم حتى قبل بناء النظام فعليًا. [14] وهي مفيدة بشكل خاص في تصميم أنظمة متعددة النواة ، حيث قد يكون من الصعب جدًا اكتشاف أخطاء التزامن وتصحيحها بدون البيئة الخاضعة للرقابة التي توفرها الأجهزة الافتراضية. [15] وهذا يسمح أيضًا بتطوير البرامج قبل أن تصبح الأجهزة جاهزة، [16] وبالتالي المساعدة في التحقق من صحة قرارات التصميم وإعطاء المزيد من التحكم.
مقارنة مع المحاكاة
تم صياغة كلمة "محاكي" في عام 1963 في شركة IBM [17] أثناء تطوير خط إنتاج NPL ( IBM System/360 )، باستخدام " مزيج جديد من البرامج والميكروكود والأجهزة ". [18] اكتشفوا أن المحاكاة باستخدام تعليمات إضافية تم تنفيذها في الميكروكود والأجهزة ، بدلاً من محاكاة البرنامج باستخدام التعليمات القياسية فقط، لتنفيذ البرامج المكتوبة لأجهزة كمبيوتر IBM السابقة زادت بشكل كبير من سرعة المحاكاة. في وقت سابق، قدمت IBM محاكيات ، على سبيل المثال، 650 على 705. [19] بالإضافة إلى المحاكيات، كان لدى IBM ميزات توافق على 709 و 7090 ، [20] حيث قدمت لجهاز كمبيوتر IBM 709 برنامجًا لتشغيل البرامج القديمة المكتوبة لـ IBM 704 على 709 ولاحقًا على IBM 7090. استخدم هذا البرنامج التعليمات المضافة بواسطة ميزة التوافق [21] لاحتجاز التعليمات التي تتطلب معالجة خاصة؛ تم تشغيل جميع تعليمات 704 الأخرى بنفس الطريقة على 7090. تتطلب ميزة التوافق على 1410 [22] فقط ضبط مفتاح تبديل وحدة التحكم، وليس برنامج الدعم.
في عام 1963، عندما تم استخدام التعليمات البرمجية الدقيقة لأول مرة لتسريع عملية المحاكاة هذه، صاغ مهندسو IBM مصطلح "المحاكي" لوصف المفهوم. في العقد الأول من القرن الحادي والعشرين، أصبح من الشائع استخدام كلمة "محاكاة" في سياق البرمجيات. ومع ذلك، قبل عام 1980، كانت كلمة "محاكاة" تشير فقط إلى المحاكاة بمساعدة الأجهزة أو التعليمات البرمجية الدقيقة، بينما كانت كلمة "محاكاة" تشير إلى محاكاة برمجية خالصة. [23] على سبيل المثال، الكمبيوتر المصمم خصيصًا لتشغيل البرامج المصممة لهندسة معمارية أخرى هو محاكي. على النقيض من ذلك، يمكن أن يكون المحاكي برنامجًا يعمل على جهاز كمبيوتر، بحيث يمكن محاكاة ألعاب أتاري القديمة عليه. يستمر المتشددون في الإصرار على هذا التمييز، ولكن حاليًا غالبًا ما يعني مصطلح "المحاكاة" التقليد الكامل لجهاز ينفذ كودًا ثنائيًا بينما تشير كلمة "محاكاة" غالبًا إلى محاكاة الكمبيوتر ، حيث يتم استخدام برنامج كمبيوتر لمحاكاة نموذج مجرد. تُستخدم المحاكاة الحاسوبية في كل المجالات العلمية والهندسية تقريبًا، ولا يُستثنى من ذلك علم الحاسوب، حيث توجد العديد من المشاريع التي تحاكي النماذج المجردة لأنظمة الحاسوب، مثل محاكاة الشبكة ، والتي تختلف عمليًا ودلاليًا عن محاكاة الشبكة. [24]
مقارنة مع الأجهزة الافتراضية
المحاكاة الافتراضية للأجهزة هي المحاكاة الافتراضية لأجهزة الكمبيوتر كمنصات أجهزة كاملة، أو تجريدات منطقية معينة لمكوناتها، أو فقط الوظائف المطلوبة لتشغيل أنظمة تشغيل مختلفة . تخفي المحاكاة الافتراضية الخصائص المادية لمنصة الحوسبة عن المستخدمين، وتقدم بدلاً من ذلك منصة حوسبة مجردة. [25] [26] في أصولها، كان البرنامج الذي يتحكم في المحاكاة الافتراضية يسمى "برنامج التحكم"، ولكن مصطلحي " مشرف الجهاز الافتراضي " أو "مراقب الجهاز الافتراضي" أصبحا مفضلين بمرور الوقت. [27] يمكن لكل مشرف جهاز افتراضي إدارة أو تشغيل أجهزة افتراضية متعددة .
انظر أيضا
مراجع
- ^ واريك، مايك (أبريل 1988). "محاكاة MS-DOS لنظام التشغيل 64". Compute! . ص. 43. تم الاسترجاع في 10 نوفمبر 2013 .
- ^ GuideStorm. "محاكيات بلاي ستيشن 4" . تم الاسترجاع في 2019-08-04 .
- ^ تمت إزالة محاكاة Linux من OpenBSD في الإصدار 6.0 https://www.openbsd.org/60.html
- ^ أتمتة التصميم الإلكتروني: التركيب والتحقق والاختبار. لونغ تيرن وانغ، ياو وين تشانج، كوانغ تينغ تشنغ. أمستردام: مورغان كوفمان/إلسيفير. 2009. ISBN 978-0-08-092200-3. OCLC 433173319.
{{cite book}}: CS1 maint: others (link) - ^ "The Emulation Imitation". Malwarebytes Labs . 17 أكتوبر 2014 . تم الاسترجاع في 2016-05-30 .
- ^ "Sony Computer Entertainment America v. Bleem, 214 F. 3d 1022". الدائرة التاسعة 2000. Google Scholar . محكمة الاستئناف (نُشر في 4 مايو 2000). 14 فبراير 2000. تم الاسترجاع في 15 يونيو 2016 .
- ^ انظر Midway Manufacturing Co. v. Artic International, Inc. , 574 F.Supp. 999, aff'd, 704 F.2d 1009 (9th Cir 1982) (تعتبر ذاكرة القراءة فقط للكمبيوتر الخاصة بلعبة Pac Man بمثابة تثبيت كافٍ لأغراض قانون حقوق النشر حتى لو تغيرت اللعبة في كل مرة يتم لعبها فيها.) والمادة 2 من اتفاقية برن
- ^ “ما هو مضاهاة؟”. مكتبة كونينكليكي . مؤرشف من الأصل بتاريخ 13-09-2015 . تم الاسترجاع 2007-12-11 .
- ^ فان دير هوفن، جيفري، برام لوهمان، وريمكو فيرديجيم. "المحاكاة لحفظ المواد الرقمية في الممارسة العملية: النتائج". المجلة الدولية لحفظ المواد الرقمية 2.2 (2007): 123-132.
- ^ مويرا، جريجوري. "دفع حدود سياسة التراث التقليدي: الحفاظ على الوصول طويل الأمد إلى محتوى الوسائط المتعددة". مجلة الاتحاد الدولي لجمعيات المكتبات والمعلومات 33 (2007): 323-326.
- ^ روثنبرج، جيفري (1998). ""معايير الحل المثالي." تجنب الرمال المتحركة التكنولوجية: إيجاد أساس تقني قابل للتطبيق للحفظ الرقمي". مجلس موارد المكتبات والمعلومات . واشنطن العاصمة . تم الاسترجاع في 2008-03-08 .
- ^ روثنبرج، جيفري. "حل المحاكاة". تجنب الرمال المتحركة التكنولوجية: إيجاد أساس تقني قابل للتطبيق للحفظ الرقمي. واشنطن العاصمة: مجلس موارد المكتبات والمعلومات، 1998. مجلس موارد المكتبات والمعلومات. 2008. 28 مارس 2008 http://www.clir.org/pubs/reports/rothenberg/contents.html
- ^ "أصداء الفن: المحاكاة كإستراتيجية للحفاظ على التراث". مؤرشف من الأصل في 27 أكتوبر 2007. استرجاع 11 ديسمبر 2007 .
- ^ بيتر ماجنوسون (2004). "محاكاة النظام الكامل: الحلقة المفقودة في تطوير البرمجيات".
- ^ "التصحيح ومحاكاة النظام الكامل".
- ^ فانيا جولوبوف (2009). "محاكاة النظام الكامل للأنظمة المضمنة" (PDF) . مؤرشف من الأصل (PDF) في 2014-02-09 . تم الاسترجاع في 2012-04-22 .
- ^ Pugh, Emerson W. (1995). Building IBM: Shaping an Industry and Its Technology . MIT. p. 274. ISBN 0-262-16147-8.
- ^ Pugh, Emerson W.; et al. (1991). IBM's 360 and Early 370 Systems . MIT. ISBN 0-262-16123-0.الصفحات 160-161
- ^ محاكاة IBM 650 على IBM 705
- ^ "أرشيفات IBM: نظام معالجة البيانات 7090 (تابع)". www-03.ibm.com . 23 يناير 2003. مؤرشف من الأصل في 13 مارس 2005.
- ^ "عمليات توافق النظام". دليل مرجعي لنظام معالجة البيانات IBM 7090 (PDF) . مارس 1962. ص 65-66. A22-6528-4.
- ^ "عمليات توافق النظام". مبادئ تشغيل IBM 1410 (PDF) . مارس 1962. ص 56-57، 98-100. A22-0526-3.
- ^ Tucker, S. G (1965). "محاكاة الأنظمة الكبيرة". Communications of the ACM . 8 (12): 753–61. doi : 10.1145/365691.365931 . S2CID 15375675.
- ^ "محاكاة الشبكة أم المحاكاة؟". Network World . 22 سبتمبر 2017 . تم الاسترجاع في 22 سبتمبر 2017 .
- ^ توربان، إي؛ كينج، دي؛ لي، جيه؛ فيلاند، دي. (2008). "19". التجارة الإلكترونية منظور إداري (PDF) (الطبعة الخامسة). برنتيس هول. ص. 27. مؤرشف من الأصل (PDF) في 2009-05-21 . تم الاسترجاع في 2021-12-13 .
- ^ "الافتراضية في التعليم" (PDF) . آي بي إم . أكتوبر 2007. تم استرجاعه في 6 يوليو 2010 .
- ^ Creasy, RJ (1981). "The Origin of the VM/370 Time-sharing System" (PDF) . IBM . تم الاسترجاع في 26 فبراير 2013 .
روابط خارجية
