امولاتور Emulator چیست و چگونه کار میکند؟
با پیشرفت روز افزون تکنولوژی، برنامهها، بازیها و دستگاههای جدید تولید میشوند و بعد از گذشت چند سال از رده خارج میشوند. اما تعداد زیادی از افراد هنوز هم میخواهند از بسیاری از این نرمافزارها و سختافزارها استفاده کنند. ولی مشکل اینجاست که کامپیوترشان نمیتواند آن برنامه را اجرا کند، پس باید چه کار کرد؟ پاسخ این سوال، «امولاتور»ها هستند. قبل از اینکه وارد بحث چگونه کار کردن یک شبیهساز شویم، اول باید بدانیم Emulator چیست.
Emulator (شبیهساز) چیست؟ همانطور که از نامش مشخص است، شبیهساز، نرمافزاری است که «محیط» یک نرمافزار یا سختافزار دیگر را شبیهسازی میکند. این شبیهسازی باعث میشود تا آن بازی یا برنامهای که میخواهید اجرا کنید، «فکر کند» که دارد روی دستگاه اصلی اجرا میشود.
مثلا شما نمیتوانید یک بازی کنسول پلیاستیشن ۱ را روی کامپیوتر اجرا کنید. اما وقتی یک شبیهساز نصب میکنید، آن Emulator یک سختافزار مجازی و غیرواقعی روی سیستم شما اجرا میکند تا کدهای بازی بتوانند توسط کامپیوتر شما خوانده شوند. وقتی این اتفاق بیوفتد، میتوانید بازی را تجربه کنید.
به سیستم شما که میخواهید آن را با شبیهساز تغییر دهید، «Host یا میزبان» میگویند.
در این مقاله میخواهیم بهشکل تخصصیتر، به پرسشهایی مثل: یک امولاتور چگونه کار میکند؟ دلیل بد عمل کردن یک Emulator چیست؟ شبیهسازها چند نوع هستند؟ و سوالات دیگری که ممکن است از خود پرسیده باشید، جواب دهیم.
موارد استفاده از Emulator چیست؟
درست است که از شبیهسازها بیشتر برای اجرای برنامهها و بازیهای کنسولی و اندروید استفاده میشود، اما برای موارد دیگری هم کاربرد دارند.
مثلا شما یک کامپیوتر مک (کامپیوتر میزبان) دارید و میخواهید از یک برنامهای که فقط برای ویندوز پورت شده استفاده کنید. در اینجا به کمک شبیهساز، یک محیط مجازی مثل ویندوز ساخته میشود.
فرض کنید که سیستم شما، چهرهی شماست. شبیهساز، چهره شما را گریم میکند (ویندوز مجازی) و وقتی برنامه به چهره شما نگاه میکند، شما را با ویندوز واقعی اشتباه میگیرد. وقتی گول میخورد، درنهایت برنامه اجرا میشود.
امولاتورها حتی برای شبیهسازی خود ویندوز هم به کار میروند. یعنی مثلا شما ویندوز ۱۰ دارید و میخواهید ببینید ویندوز ۱۱ چگونه است و آیا میتوانید با آن ارتباط برقرار کنید یا نه. در اصل باید ویندوز ۱۱ را روی سیستمتان نصب کنید تا از آن استفاده کنید. ولی درعوض شما یک امولاتور نصب میکنید تا ویندوز ۱۱ را به شکل مجازی و نصب نشده، روی کامپیورتان اجرا کنید.
البته توجه داشته باشید که سیستم شما یا همان میزبان، باید قویتر از دستگاه اصلیای باشد که میخواهید آن را شبیهسازی کنید. مثلا اگر شما میخواهید پلیاستیشن ۳ را شبیهسازی کنید، سیستم شما باید از سختافزار پلیاستیشن ۳ (قطعاتی مثل CPU و GPU) قویتر باشد.
امولاتورها دقیقا چگونه کار میکنند؟
بهطور کلی شبیهسازی کردن، یک فرآیند پیچیده و بسیار سخت است. مهمترین قطعاتی که امولاتور باید آنها را شبیهسازی کند، CPU و GPU و چیپ صوتی است. از بین این سه، سختترین قطعه برای شبیهسازی کردن، سی پی یو است. میدانیم که سی پی یو دارای یک چرخه (Cycle) بینهایت است. این چرخه بارها و بارها تکرار میشود.
زمانبندی
زمانبندی Emulator چیست؟ یعنی همکاری بین قطعات آنقدری خوب باشد که شبیهسازی برای هر ورودی، مثل دستگاه اصلی عمل کند. امولاتور وظیفه دارد تا سرعت چرخه پردازنده کامپیوتر میزبان را با سرعت چرخه پردازنده دستگاه اصلی، هماهنگ کند. این زمانبندی هماهنگ سازی به دو شکل است:
Cycle-Accurate Timing
زمانبندی دقیق چرخه پردازندهها، بهترین نوع هماهنگسازی است. امولاتورهایی که از این زمانبندی استفاده میکنند عملکرد بهتری دارند.
Cycle-Estimated Timing
این نوع زمانبندی که در اکثر امولاتورها هم استفاده میشود، هماهنگ سازی تخمینی است، که البته تقریبا هم درست است. اکثر امولاتورها به این صورت چرخه پردازندهها را شبیهسازی میکنند. درست است که بهصورت دقیق هماهنگسازی نمیشود ولی این هماهنگی به اندازهای هست که بتواند مثلا یک بازی را درست اجرا کند.
شبیهسازها وظیفه دارند که سرعت خوانش و اجرای آن بازی را بجز CPU، با سرعت GPU و صدای سیستم شما هم هماهنگ کنند. هرچه همگامسازی بیشتر باشد، آن بازی بهتر روی کامپیوتر شما اجرا میشود.
همچنین هرچقدر بازی سنگینتر باشد، از CPU بیشتر استفاده میشود و فشار بیشتری هم میآورد. درنتیجه، سختافزار کامپیوتر میزبان باید قویتر باشد.
انواع Emulator
امولاتورها به دو دسته تقسیم میشوند:
Low Level Emulation (LLE)
در «شبیهسازی کم عمق/سطحی»، امولاتور رفتار یک سختافزار دیگر را تقلید میکند. کامپیوتر میزبان با کمک امولاتور، یک محیطی درست میکند تا به محیط آن دستگاه اصلی تا جای ممکن شباهت داشته باشد.
خود شبیهسازی Low-Level به دو گروه نرمافزاری و سختافزاری تقسیم میشود:
نرمافزاری: در LLE نرمافزاری، شبیهسازی سختافزار یک دستگاه دیگر، فقط با خود نرمافزار امولاتور انجام میشود و به هیچ چیز دیگری احتیاج نیست.
مثلا شما برای اجرای بازیهای اندروید روی سیستمتان با امولاتور Bluestacks، نیازی به هیچ چیز اضافهای ندارید و خود قطعات کامپیوتر شما کافی هستند.
سختافزاری: در LLE سختافزاری، شبیهسازی دستگاه اصلی به کمک یک قطعه کمکی انجام میشود. در واقع برای شبیهسازی حتما به یک قطعه دیگر هم نیاز است.
مثلا کنسول پلیاستیشن ۳ میتوانست بازیهای کنسول پلیاستیشن ۲ را اجرا کند (که به این ویژگی اصطلاحا Backward Compatibility میگویند). در کنار قطعات داخلی پلیاستیشن ۳، چیپهای پلیاستیشن ۲ هم قرار داشتند. یعنی: پلیاستیشن ۳ به کمک چیپهای پلیاستیشن ۲، میتوانست بازیهای پلیاستیشن ۲ را شبیهسازی LLE سختافزاری کند. درنهایت بازیها به راحتی نصب و اجرا میشدند.
درنتیجه:
LLE نرمافزاری: خود سیستم
LLE سختافزاری: خود سیستم + یک قطعه دیگر
High Level Emulation (HLE)
در «شبیهسازی پر عمق/عمیق»، امولاتور بهجای این که بخواهد رفتار خود سختافزار را تقلید کند، «عملکردهای موردنیاز» آن را تقلید میکند.
مثلا اگر شما یک بازی کنسولی را با امولاتور HLE اجرا کنید، امولاتور بهجای اینکه سعی کند قطعاتی مثل CPU کنسول بازی را شبیهسازی کند، بهجایش سعی میکند بفهمد که آن بازی به چه چیزهایی نیاز دارد تا اجرا شود. وقتی این را فهمید، فقط همان عملکردهای موردنیاز را انجام میدهد تا بازی اجرا شود. هیچ کار اضافه دیگری انجام نمیدهد.
به زبان سادهتر، امولاتور از خود میپرسد: من چه کارهایی انجام بدهم تا آن بازی اجرا شود و دیگر زحمت بیشتری نکشم.
امولاتورهای High-Level از سه روش برای شبیهسازی عملکردهای دستگاه اصلی استفاده میکنند:
Interpreting
همه برنامهها و بازیها از تعداد زیادی کد تشکیل شدهاند. به این کدها، کدهای دستورالعمل میگویند.
در روش «تفسیر»: امولاتور، کدهای دستورالعمل بازی را خط به خط از اول تفسیر میکنند و در ادامه آنها را تقلید میکند. با تقلید کردن آن کدها، بازی میتواند اجرا شود. اما این روش یک ایراد بزرگ دارد. چون تمام خطها باید از اول، خط به خط و تک به تک تفسیر شوند، شبیهسازی زمان خیلی زیادی طول میکشد.
Dynamic Recompiling
قبل از توضیح روش «کامپایل مجدد دینامیکی» بهتر است اول بدانیم کامپایل چیست و چگونه در فرایند Emulator نقش دارد.
به فرایندی که کدهای قابل خواندن برای انسان، به کدهای قابل خواندن برای یک ماشین تبدیل شوند، «کامپایل/Compile» میگویند.
حالا برمیگردیم به توضیح روش: امولاتور، هر گروه از کدهای دستورالعمل آن بازی را بررسی میکند تا ببیند میشود آنها را بهینهسازی کرد تا بهتر روی سیستم میزبان اجرا شوند یا نه. در ادامه، آنها را تبدیل میکند که فرایند کامپایل کردن اینجا اتفاق میافتد.
بعد، وقتی که امولاتور با همان کد دستورالعملی که قبلا بررسیاش کرده بود، دوباره مواجه میشود، دوباره آن را بررسی نمیکند چون قبلا این کار را انجام داده بود. در عوض از حافظه کَش استفاده میکند که سرعت بیشتری دارد.
مثلا شما وقتی برای اولین بار در تلگرام میروید، عکس پروفایل یک نفر برای شما لود میشود. وقتی بعدا دوباره توی برنامه بروید، دیگر آن عکس پروفایل نیازی به لود شدن ندارد چون دیگر در حافظه کَش تلگرام قرار دارد.
این روش دقیقا برعکس روش بالایی است. در روش «تفسیر»، هر خط از کدها تفسیر میشد ولی در این روش، مجموعهای از کدها تفسیر میشوند.
Lists interception
لیست دستورالعملها، مجموعهای از فرمانها (Commands) هستند. این دستورالعملها باید از پردازنده اصلی به کمکپردازندههایی مثل GPU و چیپ صوتی ارسال شوند، تا به آنها بگوید که هرکدام باید چه کاری را انجام دهند. در مرحله بعد، امولاتور میتواند این فرمانها را دریافت کند و به فرمتی تبدیل کند تا کمکپردازندههای کامپیوتر میزبان، بتوانند آنها را تفسیر کنند.
درنتیجه:
Low-Level Emulation: شبیهسازی خود دستگاه اصلی
High-Level Emulation: فقط شبیهسازی عملکردهای موردنیاز دستگاه اصلی برای اجرای بازی/برنامه
شبیهسازی Low-Level بهتر است یا High-Level؟
از آنجایی که شبیهسازی Low Level رفتار یک سختافزار را کپی میکند، یکی از بهترین مدلهای شبیهسازی است. همانطور که قبلا اشاره کردیم، این مدل شبیهسازی به دو گروه تقسیم میشود:
LLE سختافزاری: از آنجایی که به یک قطعه دیگر برای شبیهسازی نیاز دارد، هزینه بیشتری روی دست فرد میگذارد.
LLE نرمافزاری: شبیهسازی نرمافزاری برای توسعه دهندگان امولاتورها سخت، ولی برای استفادهکنندگان راحت است. چون توسعه دهندگان امولاتورها باید دانش دقیقی از کل دستگاهی که میخواهند شبیهسازی کنند را داشته باشند. این به خودی خود کار خیلی سختی است. البته توسعه دهندگان امولاتور باید سیستم خیلی قویتری هم از آن دستگاه اصلی داشته باشند.
ولی استفادهکنندگان، خیلی ساده فقط با نصب یک نرمافزار میتوانند از آن امولاتور استفاده کنند و به هیچ دانش دیگر و هزینه دیگری، برای خرید هیچ قطعه اضافهای نیاز ندارند.
در High Level دقیقا برعکس است. نکته مثبت این شبیهسازی این است که توسعه دهندگان نیازی نیست که همه قطعات سازنده دستگاه اصلی را بدانند. بهعلاوه فقط به سیستم مقداری قویتر از دستگاه اصلی نیاز دارند. ولی نکته منفیاش این است که چون فقط یک سری «عملکردهای موردنیاز» دستگاه اصلی را شبیهسازی میکنند، در حدی که فقط یک بازی/برنامه بتواند اجرا شود، بنابراین ما نمیتوانیم کارهای دیگری روی دستگاه شبیهسازی شده انجام دهیم.
نتیجه: بهترین مدل امولاتورها برای استفاده، LLEهای نرمافزاری هستند. چون بدون هزینه اضافه در کنار دسترسی به تمام قابلیتهای دستگاه اصلی، به راحتی میتوان از آنها استفاده کرد. اما این را بدانید که موقع دانلود یک امولاتور اصلا لازم نیست که بدانید آن امولاتور LLE است یا HLE. تنها چیزی که باید به آن توجه کنید این است که: آیا این امولاتور، این بازی یا برنامه را خوب اجرا میکند؟
چرا بعضی شبیهسازها خوب کار نمیکنند؟
شبیهسازی کردن یک کار پیچیده است که به دانش، تجربه، تلاش و صبر زیادی نیاز دارد. برای بسیاری از امولاتورها، چندین برنامهنویس تلاش میکنند تا یک دستگاه را شبیهسازی کنند. از آنجایی هم که خودشان بدون هیچ پشتوانه مالیای شبیهسازها را توسعه میدهند، این کار حتی سختتر است. توسعه یک نرمافزار آن هم به پیچیدگی شبیهساز، به افراد متخصصی نیاز دارد که بتوانند هر بخش را عیبیابی و بعد برطرف کنند.
برای همین ممکن است چندین سال طول بکشد تا یک شبیهساز به سطحی برسد تا عموم مردم بتوانند از آن بدون مشکل استفاده کنند. مثلا PCSX2 که شبیهساز پلیاستیشن ۲ در کامپیوتر است، بعد از گذشت چند سال به سطح خوب و پایداری در آمده که میتواند بسیاری از بازیهای پلیاستیشن ۲ را اجرا کند.
توجه داشته باشید که یک امولاتور نمیتواند %۱۰۰ مثل دستگاه اصلی عمل کند.
ملاک ساخت یک Emulator خوب چیست؟ شناخت قطعات دستگاه اصلی، تسلط توسعه دهنده و میزان پیچیدگی دستگاه.
همچنین هرچه دستگاه اصلی امروزیتر و پیچیدهتر باشد، شبیهسازیاش سختتر است. مثلا شبیهسازی Playstation 3 نسبت به Playstation 2 سختتر است.
آیا امولاتور قانونی است؟
جواب دادن به این سوال را میتوان از چند جهت بررسی کرد:
از محصول پشتیبانی نمیشود و شما مالک آن محصول بودید: اگر قبلا شما مالک آن بازی/برنامه بودید و الان هم دیگر راه دسترسی به آن برای شما وجود ندارد، میتوان اینطور برداشت کرد که قانونی است.
مثلا شما بازی Spider-Man پلیاستیشن ۲ را قبلا قانونی خریده بودید. حالا میخواهید با نصب شبیهساز، چیزی که خودتان مالکاش هستید را دوباره بازی کنید. میتوان گفت کار شما قانونی است.
از محصول پشتیبانی نمیشود ولی شما هم مالک آن محصول نبودید: این مورد جای بحث بیشتری دارد. شما مالک آن بازی نبودید و وقتی آن را با امولاتور بازی میکنید، در واقع بازیای را تجربه میکنید که از لحاظ قانونی به شما تعلق ندارد. برای همین نقض کپی رایت اتفاق افتاده است و این کار قانونی نیست.
اما از طرفی، اگر از آن دستگاه دیگر پشتیبانی نشود و هیچ راه قانونیای برای خرید آن دستگاه و آن بازی هم وجود نداشته باشد، چون همه راههای ممکن قانونی بسته شدهاند، پس کار شما هم غیرقانونی نیست.
از محصول پشتیبانی میشود: این کار صد در صد غیرقانونی است. چون از محصول پشتیبانی میشود، پس امکان خرید قانونی هم وجود دارد. ولی فرد تصمیم میگیرد از شبیهساز استفاده کند. یعنی قانون کپی رایت را نقض کرده است.
بهعنوان مثال شرکت Nintendo با افرادی که شبیهساز های کنسول Nintendo Switch را توسعه میدادند، برخورد جدی و قطعانهای کرد بهطوری که آنها را به دادگاه میکشاند و مجازاتهایی مثل حبس و جریمه نقدی میشدند.
سوالات متداول
Emulator چیست؟
امولاتور نرمافزاری است که به شما اجازه میدهد بازی/برنامه یک نرمافزار یا سختافزار دیگر را روی سیستمتان اجرا کنید.
Emulator چگونه کار میکند؟
امولاتور با شبیهسازی تمام یا بخشهایی از دستگاه اصلی، بازی/برنامه موردنظر شما را اجرا میکند.
Emulatorها به چند دسته تقسیم میشوند؟
به دو دسته Low Level Emulation و High Level Emulation تقسیم میشوند.
بهترین Emulator اندروید و کنسول چیست؟
اندروید: MeMU
پلی استیشن ۱: PSX، پلی استیشن ۲: PCSX2، پلی استیشن ۳: RPSC3
ایکس باکس اوریجینال: Xemu، ایکس باکس ۳۶۰: Xenia
Wii و گیم کیوب: Dolphin
سگا جنسیس: OpenEMU