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

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

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

رم مجازی را می توان زیرساختی برای تمام سیستم عامل های مولتی تسکینگ به حساب آورد که در این مطلب به صورت خاص مفهوم و کاربرد آن را در سیستم عامل اندروید مورد آنالیز قرار خواهیم داد. هسته مرکزی سیستم عامل اندروید در گوشی که اکنون با آن مشغول کار هستید، کرنل یا همان هسته لینوکس نهاده شده که در واقع کار اصلی آن برقراری ارتباط بین سخت افزار و کامپیوتر است. هسته لینوکس وظیفه مدیریت کردن منابع محاسباتی گوشی نظیر گرافیک، پردازنده، حافظه داخلی، نمایشگر، شبکه و … را بر عهده دارد. مدیریت رم یا همان حافظه دسترسی تصادفی (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

منبع: دیجیکالا مگ
انتشار: 2 خرداد 1401 بروزرسانی: 2 خرداد 1401 گردآورنده: hecaconf.ir شناسه مطلب: 13860

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

امتیاز دهید:

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

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