نقد و برسی

رم مجازی چیست و چگونه سرعت گوشی ها را افزایش می دهد؟

رم مجازی چیست و چگونه سرعت گوشی ها را افزایش می دهد؟

در این مقاله به طور کامل ویژگی رم مجازی را توضیح می دهیم تا ببینیم این ویژگی چیست و چگونه می تواند سرعت گوشی ها را برای اجرای بهتر و روانتر اپلیکیشن ها افزایش دهد.

حافظه مجازی یا رم مجازی چیست؟

ابتدا توضیح مختصری در مورد اپلیکیشن ها می دهیم تا وقتی در مورد حافظه مجازی و تاثیرات آن بر اپلیکیشن ها صحبت می کنیم، موضوع برای شما واضح تر و قابل درک تر شود. هر اپلیکیشن از کدها و داده های متفاوتی استفاده می کند. وقتی برنامه را اجرا می کنید، این کدها به طور کامل در رم قرار می گیرند. کد در یک لحظه خاص شروع می شود و هر لحظه یک دستورالعمل خاص را اجرا می کند. داده ها از حافظه داخلی خوانده می شوند، از شبکه بازیابی می شوند یا همزمان تولید می شوند. حتی ممکن است ترکیبی از هر سه در جریان باشد. اکنون در هر ناحیه از رم، کدها یا داده ها با آدرس خود شناخته می شوند. همانطور که یک آدرس پستی به طور منحصر به فرد با یک خانه مرتبط است، کد و داده ها آدرس های خاص خود را در حافظه RAM دارند.

حافظه‌ی رم مجازی، داده‌های اپلیکیشن را روی حافظه‌ی رم اصلی سیستم شما نقشه‌برداری می‌کند.

بزرگترین مشکل رم سخت افزاری این است که برنامه ها نمی دانند کجا باید قرار گیرند. بنابراین اگر برنامه ای انتظار دارد مثلاً به 12048 برود، باید به همان آدرس برود تا بهینه کار کند. اما این امکان وجود دارد که برنامه مذکور در جای دیگری و 12048 قرار داشته باشد زیرا برنامه دیگری در منطقه مورد انتظار آن وجود دارد.

راه حلی که می تواند به RAM سخت افزار کمک کند تا آدرس صحیح را برای برنامه اختصاص دهد، یک آدرس مجازی است که از 0 تا 4 گیگابایت یا حتی بیشتر متغیر است. حالا هر اپلیکیشنی می تواند هر آدرسی که می خواهید داشته باشد. هر اپلیکیشن فضای آدرس مجازی منحصر به فرد خود را دارد و دیگر لازم نیست نگران کارهایی باشید که اپلیکیشن دیگری ممکن است انجام دهد. این آدرس های مجازی به یک منطقه خاص از RAM اصلی نگاشت می شوند. این وظیفه هسته لینوکس است که تمام نقشه برداری ها را انجام می دهد و آدرس های مجازی را در رم سخت افزار قرار می دهد.

چرا رم مجازی مفید است؟

با توجه به توضیحات داده شده، رم مجازی برای افزایش سرعت گوشی بسیار مفید و تا حدودی ضروری است. در واقع، ما باید آن را به عنوان یک نمایش دیجیتالی از RAM سخت‌افزاری در نظر بگیریم که به برنامه‌ها اجازه می‌دهد از آدرس خصوصی خود استفاده کنند، زیرا می‌توان آن‌ها را مدیریت کرد که به طور مستقل بدون رزرو آدرس برنامه دیگری کار کنند و از گرفتن سریع آن جلوگیری کنند.

این اساس همه سیستم عامل های چندوظیفه ای از جمله اندروید را تشکیل می دهد. اتفاقی که در اندروید می افتد این است که از آنجایی که هر برنامه در حالت خاص خود اجرا می شود، سیستم عامل می تواند آن را اجرا کند، آن را متوقف کند، به برنامه دیگری سوئیچ کند، آن برنامه دیگر را اجرا کند و غیره. بدون حافظه مجازی، ما مجبور بودیم تنها یک برنامه را در یک زمان در حال اجرا نگه داریم، که باعث کاهش سرعت سیستم عامل می شود.

این ویژگی به اندروید اجازه می‌دهد حتی حالت‌ها را بین برنامه‌ها تغییر دهد یا از zRAM برای افزایش تعداد برنامه‌ها در حافظه قبل از پاک شدن برای اجرای یک برنامه دیگر استفاده کند. صفحات در حالت مجازی و سخت افزاری باید هم اندازه باشند و معمولا 4K طول دارند. برای تمایز بین صفحات مجازی و فیزیکی باید بگوییم که آخرین آن یعنی فیزیکی، صفحه فریم نامیده می شود و فقط صفحه نیست. در زیر می توانید یک مثال ساده از اتصال 64 کیلوبایت حافظه مجازی به 32 کیلوبایت حافظه سخت افزاری را مشاهده کنید.

gfoj540wtp رم مجازی چیست و چگونه سرعت گوشی ها را افزایش می دهد؟

همانطور که می بینید، RAM مجازی صفحه 0 (0-4095) به فریم صفحه 2 سخت افزار RAM (8192-12287) نگاشت شده است. صفحه 1 در رم مجازی (4096 تا 8191) صفحه فریم 1 در رم سخت افزاری (4096 تا 8191) و غیره. نکته جالب در این زمینه این است که قرار نیست تمام فضای مجازی به فضای سخت افزاری نگاشت شود، زیرا هر اپلیکیشن به قدری آدرس در دسترس دارد که مشکلی ندارد و در نتیجه فضای زیادی وجود دارد که وجود ندارد. نیاز به نقشه برداری برخی از این فضاهای آزاد می توانند تا چندین گیگابایت حجم داشته باشند. به عنوان مثال، اگر برنامه ای بخواهد به یک آدرس مجازی مثلاً 3101 که در صفحه 0 رم قرار دارد دسترسی پیدا کند، باید فریم 3 رم سخت افزاری را وارد کند که دقیقاً 11293 است.

واحد مدیریت حافظه RAM (MMU) به کمک شما می آید

پردازنده های جدید از اسلات های سخت افزاری جداگانه ای استفاده می کنند که وظیفه ترکیب رم مجازی و سخت افزاری را بر عهده دارند. این سخت افزار به اختصار MMU یا RAM Management Unit نامیده می شود که در واقع حاوی نقشه ای است که نشان می دهد هر صفحه (آدرس رم مجازی) در کدام صفحه فریم (آدرس رم سخت افزار) باید قرار گیرد. این بدان معنی است که سیستم عامل دیگر نیازی به انجام این کار ندارد زیرا پردازنده این کار را به صورت خودکار انجام می دهد که بسیار سریعتر و کارآمدتر است. خوبی پردازنده این است که می‌داند برنامه‌ها سعی می‌کنند به یک آدرس در RAM مجازی دسترسی پیدا کنند و سپس آن را به RAM فیزیکی نگاشت می‌کنند. وظیفه سیستم عامل این است که فقط فضاهای مورد استفاده توسط MMU یا واحد مدیریت حافظه را مدیریت کند.

MMU چگونه نقشه برداری را انجام می دهد؟

22b2hyskey رم مجازی چیست و چگونه سرعت گوشی ها را افزایش می دهد؟

همانطور که می بینید، سیستم عامل یک نمودار صفحه ایجاد می کند و MMU از آن برای نگاشت آدرس های مجازی به یک نمونه سخت افزاری استفاده می کند. بیایید به مثال بالا برگردیم، یعنی فضای 3101، که در واقع به صورت باینری به 1101 0001 1100 0000 ترجمه می شود. بنابراین به طور کلی به نظر می رسد این است:

اولین دسته چهار بیتی، 000، شماره صفحه مجازی است. این آدرس برای یافتن قاب صفحه مربوطه در رم سخت افزاری استفاده می شود. ورودی صفحه 0 در رم مجازی، صفحه فریم 2 در رم سخت افزاری است که 0010 باینری است. بیت 0010 برای ساخت چهار بیت اول استفاده می شود. 12 بیت باقیمانده که به آنها شاخه شاخه می گویند، مستقیماً در رم سخت افزار کپی می شوند.

تنها تفاوت بین صفحات 3101 و 11293 این است که چهار بیت اول آنها برای اشاره به فایل صفحه مربوطه در RAM سخت افزاری به جای RAM مجازی تغییر می کند. نقطه قوت استفاده از صفحه این است که آدرس بعدی، 3102، دقیقاً از همان قاب صفحه 3101 استفاده می کند. در واقع، MMU از کشی به نام Translation Lookaside Buffer استفاده می کند (این یک کش کوچک است که حاوی اطلاعات مورد نیاز برای ترجمه آدرس های مجازی به فیزیکی که به اختصار TBL نیز نامیده می شود) برای افزایش سرعت یکسان شوند.

حافظه بافر یا TBL چیست؟

232bnpe1u6 رم مجازی چیست و چگونه سرعت گوشی ها را افزایش می دهد؟

TLB که در بالا به سادگی توضیح دادیم، حافظه نهان تساوی اخیر نامیده می شود که توسط MMU پیاده سازی می شود. قبل از اینکه آدرس موازی شود، MMU بررسی می کند که آیا حافظه پنهان ترجمه صفحه به صفحه در TLB قرار دارد یا خیر. اگر کش صفحه درخواستی موجود باشد، بلافاصله پاک می شود.

هر ورودی TLB به خودی خود معمولاً فقط یک صفحه یا فریم صفحه را می گیرد، اما مواردی مانند نوع RAM، شرایط حافظه پنهان، حقوق دسترسی و غیره را نیز شامل می شود. اگر TLB از یک ورودی معتبر برای RAM مجازی استفاده نکند که یک خطا در نظر گرفته می شود، MMU مجبور است قاب صفحه را در جدول مربوطه جستجو کند. از آنجایی که این جدول خود بخشی از RAM است، MMU در واقع باید دوباره به RAM دسترسی پیدا کند. با سخت افزار تعبیه شده در MMU، می تواند به سرعت جدول معادلات را در RAM بخواند. هنگامی که یک اتصال موازی جدید رخ می دهد، کش آن را می توان برای استفاده احتمالی در آینده در RAM ذخیره کرد.

آیا همه چیز به همین سادگی است؟

از طرفی تراز کردن MMU بسیار ساده و بدون عارضه به نظر می رسد. جستجوی ساده و کپی بیت به بیت داده ها. اما چند چیز وجود دارد که همه چیز را بسیار پیچیده تر از آنچه فکر می کنید، می کند.

نمونه های بالا در واقع برای حافظه 64K هستند. اما در دنیای واقعی، ما با صدها مگابایت یا گیگابایت رم روبرو هستیم. یک جدول کامل 32 بیتی حدود 4 مگابایت است. هر برنامه همچنین مختص جدول صفحه است (طبق ویکی پدیا، جدول صفحه یک ساختار داده ای است که سیستم حافظه مجازی در سیستم عامل برای ذخیره آدرس های حافظه مجازی مربوط به آدرس های حافظه فیزیکی استفاده می کند) به خود نیاز دارد. به عنوان مثال، اگر 100 فعالیت در حال اجرا دارید، از جمله برنامه‌ها، خدمات پس‌زمینه، سرویس‌های اندروید و غیره، به این معنی است که 400 مگابایت رم برای مدیریت جدول صفحه مورد نیاز است.

داستان زمانی پیچیده تر می شود که متوجه می شوید اگر به بالای 32 بیت بروید، جداول صفحه باید برای همیشه در رم بمانند و قابل جابجایی یا فشرده سازی نباشند. مهمتر از آن، جدول صفحه برای هر صفحه نیاز به یک ورودی دارد، حتی اگر اصلاً استفاده نشده باشد و فریم صفحه مخصوص به خود را نداشته باشد.

راه حل این است که از جدول صفحات چند سطحی استفاده کنید. در مثال بالا دیدیم که از چهار بیت به عنوان شماره صفحه استفاده شده است. می توان جدول را به چند قسمت مختلف تقسیم کرد. دو بیت اول ارجاع به جدول دیگری است. خود جدول صفحه شامل تمام آدرس هایی است که حاوی این دو بیت هستند. بنابراین ما یک جدول صفحه برای همه آدرس ها داریم که از 00 شروع می شود، یکی در 01، دیگری در 10 و در نهایت 11، که چهار جدول صفحه به اضافه یک جدول والد را می سازد.

جدول سطح بالا باید در RAM باقی بماند، اما چهار جدول دیگر را می توان در صورت نیاز جابجا کرد. اگر آدرسی وجود نداشته باشد که با 11 شروع شود، به جدول صفحه ای نیاز نیست. در دنیای واقعی، این جداول می توانند چهار یا پنج سطح عمق داشته باشند. هر جدول همچنین جدول دیگری مربوط به بیت های مرتبط با هر آدرس را نشان می دهد.

در بالا می توانید جدولی را ببینید که مهندسان 48 بیت یک آدرس مجازی را شناسایی می کنند. هر ورودی جدول صفحه دارای پرچم هایی در فضاهای استفاده شده توسط این شماره های شعبه است. بیت های مجوز R، W و X نشان می دهد که آیا صفحه قابل خواندن، نوشتن یا اجرا است. وقتی مقادیر مربوط به هر سه صفر باشد، ورودی جدول صفحه در واقع نشان دهنده رسیدن به سطح بعدی است. در غیر این صورت، ورودی معیوب است و برای اصلاح آن باید تشخیص چهره شروع شود.

اندروید چگونه صفحات مشکل دار را مدیریت می کند؟

وقتی MMU و OS در هماهنگی کامل باشند، همه چیز به خوبی پیش می رود. اما برخی از مشکلات نیز وجود دارد. به عنوان مثال، وقتی MMU سعی می کند یک آدرس مجازی را جستجو کند اما نمی تواند آن را در جدول صفحه پیدا کند، چه اتفاقی می افتد؟ این مشکل یک خطای صفحه محسوب می شود و انواع مختلفی دارد.

خطای صفحه سخت: فریم صفحه در رم نیست و باید از zRAM بارگیری شود. Soft Page Fault: زمانی که یک صفحه در حافظه RAM بارگذاری شده است، هنگامی که یک خطا رخ می دهد، اما MMU آن را به عنوان یک صفحه بارگذاری شده تشخیص نمی دهد. سیستم مدیریت صفحه بد یا ناقص سیستم عامل در این مرحله پیاده سازی می شود و باید یک ورودی برای این صفحه در MMU ایجاد کند. این زمانی اتفاق می‌افتد که حافظه توسط برنامه‌های مختلف استفاده می‌شود یا از قبل وارد رم شده است یا زمانی که برنامه‌ای درخواست فضایی از رم ارسال می‌کند، اما این فضا به درستی تخصیص داده نمی‌شود و در نتیجه، این برنامه باید منتظر بماند تا به خانه دسترسی پیدا کند. صفحه خطای صفحه بد: برنامه ای سعی می کند به رمی دسترسی پیدا کند که اصلاً در فضای آدرس آن نیست. این باعث دسترسی نامعتبر می شود. این زمانی اتفاق می افتد که برنامه سعی می کند در حافظه فقط خواندنی بنویسد یا زمانی که بافر پر می شود.

مزایای رم مجازی

همانطور که می بینید، رم مجازی راهی است که سازندگان گوشی های هوشمند به رم فیزیکی گوشی کمک می کنند تا برنامه ها بتوانند به طور مستقل از رم استفاده کنند بدون اینکه نگران این باشند که برنامه دیگری از آن استفاده می کند. از فضای مربوطه در رم استفاده کنید. این به اندروید و گوشی‌های مبتنی بر این سیستم عامل کمک می‌کند تا نسبتاً سریع‌تر از حالت عادی مدیریت و چند کار را انجام دهند.

بدون RAM مجازی، گوشی های هوشمند ما در هر زمان تنها یک برنامه کاربردی دارند. برنامه‌ها را نمی‌توان جابه‌جا کرد، یا به طور کلی عمل نگه داشتن بیش از یک برنامه در RAM باعث ایجاد مشکل می‌شود. دفعه بعد که یک برنامه را اجرا می کنید، دقیقاً می دانید که در پردازنده چه می گذرد و اندروید چه می کند، بنابراین تجربه ای روان و لذت بخش از کار با تلفن خود خواهید داشت.

نظرات

نظرتان را با ما به اشتراک بگذارید!

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *