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

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

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

رم مجازی را می توان زیرساختی برای تمام سیستم عامل های مولتی تسکینگ به حساب آورد که در این مطلب به صورت خاص مفهوم و کاربرد آن را در سیستم عامل اندروید مورد بررسی قرار خواهیم داد. هسته مرکزی سیستم عامل اندروید در گوشی که اکنون با آن مشغول کار هستید، کرنل یا همان هسته لینوکس قرار گرفته که در واقع کار اصلی آن برقراری ارتباط بین سخت افزار و کامپیوتر است. هسته لینوکس وظیفه مدیریت کردن منابع محاسباتی گوشی نظیر گرافیک، پردازنده، حافظه داخلی، نمایشگر، شبکه و … را بر عهده دارد. مدیریت رم یا همان حافظه دسترسی تصادفی (Random Access Memory) هم یکی از وظایف همین هسته به شمار میرود. اپلیکیشن ها، سرویس های در حال اجرا در پس زمینه و حتی خود سیستم عامل اندروید باید به رم دسترسی داشته باشند. حال لینوکس چگونه رم را پارتیشن بندی می کند و آن را در اختیار تمام موارد یادشده قرار می دهد موضوع بسیار مهمی است که باعث می شود گوشی روان تر کار کند. اینجا، یعنی روان تر شدن گوشی دقیقا جایی است که رم مجازی وارد عمل می شود.

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

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

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

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

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

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

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

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

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

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

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

MMU چگونه کار معال سازی را انجام می دهد؟

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

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

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

حافظه میانی یا TBL چیست؟

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

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

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

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

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

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

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

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

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

اندروید چگونه پیج های مشکل دار را مدیریت می کند؟

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

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

فوائد حافظه رم مجازی

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

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

منبع: Android Authority

منبع: دیجیکالا مگ

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

امتیاز دهید:

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

* نظرتان را در مورد این مقاله با ما درمیان بگذارید