سلسلهمراتب حافظه
اصطلاح سلسلهمراتب حافظه دربارهٔ طراحی معماری کامپیوتر استفاده میشود، وقتی در مورد عملکرد طراحی معماری کامپیوتر، پیشبینی الگوریتم و سازههای برنامهنویسی سطح پایین بحث میشود مانند ارجاع محلی. «سلسله مراتب حافظه» در ذخیرهسازی کامپیوتر هر سطح را با زمان پاسخ متمایز میکند. از آنجا که زمان پاسخ، پیچیدگی و ظرفیت با هم مرتبط هستند، سطوح نیز ممکن است با توجه به فناوری کنترل متمایز شود.
بسیاری از بده بستانها در تمایز قایل شدن در کارایی در سطح بالا شامل ساختار سلسله مراتب حافظه میشود. به عنوان مثال اندازه و فناوری هر مؤلفه؛ بنابراین مؤلفههای مختلف میتوانند به عنوان انئاع مختلف سلسله مراتب حافظه در نظر گرفته شوند(m1,m2,…) به گونهای که هر کدام از این mها به عنوان یک تابعی به m بعدی در سلسله مراتب است. برای انتظار محدود در سطوح بالاتر، سطوح پایینتر باید از طریق پر کردن بافر و سپس علامت دهی برای فعال کردن انتقال باید پاسخگو باشند.
چهار سطح ذخیرهسازی بزرگ وجود دارد
ویرایش- داخلی – ثبّاتهای پردازشگر و حافظه نهان
- اصلی - RAM سیستم و کارت کنترل
- ذخیرهسازی انبوه آنلاین - ذخیرهسازی ثانویه
- ذخیرهسازی انبوه آفلاین- ذخیرهسازی برای سومین بار
این سلسله مراتب اصلی ساختار حافظه است. بسیاری از ساختارهای مفید دیگری هم هستند. به عنوان مثال، یک الگوریتم صفحه بندی ممکن است به عنوان یک سطح برای حافظه مجازی در هنگام طراحی معماری کامپیوتر در نظر گرفته شود.
مثال استفاده از این اصطلاح
ویرایشدر اینجا برخی از نقل قولها هستند.
- اضافه کردن پیچیدگی سلسله مراتب حافظه را کند میکند.
- تکنولوژی حافظه COMx فضای فلش را در سلسله مراتب گسترش میدهد.
- یکی از راههای اصلی برای افزایش کارایی سیستم به حداقل رساندن پایین رفتن سلسله مراتب حافظه برای دستکاری اطلاعات.
- زمان تأخیر و پهنای باند دو معیارهای مرتبط با حافظه کش و حافظه هستند. هیچکدام از آنها یکسان نیستند، اما مخصوص به یک مؤلفه خاص از سلسله مراتب حافظه است
- پیشبینی محل اطلاعات در سلسله مراتب حافظه دشوار است.
- محل در سلسله مراتب حافظه زمان مورد نیاز را برای رخ دادن واکشی اولیه، تعیین میکند.
کاربرد مفهوم
ویرایشتعداد سطوح در سلسله مراتب حافظه و عملکرد در هر سطح در طول زمان افزایش یافتهاست. برای مثال سلسله مراتب حافظه پردازنده اینتل هاسول موبایل ۲۰۱۳ عبارت است از:
- ثباتهای پردازشگر- سریعترین دسترسی ممکن (معمولاً۱چرخه CPU). دراندازه چند هزار بایت
- حافظه کش
- سطح 0(L0)کشهای ریزعملیات - در اندازه ۶کیلوبایت
- سطح1L1))کشهای دستورالعمل - در اندازه ۱۲۸کیلوبایت
- سطح 1L1))کشهای داده - در اندازه ۱۲۸کیلوبایت. بهترین سرعت دسترسی حدود ۷۰۰ گیگابایت بر ثانیه است
- سطح 2(L2) دستورالعمل و داده - در اندازه ۱مگابایت. بهترین سرعت دسترسی حدود ۲۰۰ گیگابایت برثانیه است
- سطح 3(L3) کش به اشترک گذاشته شده - در اندازه ۶ مگابایت. بهترین سرعت دسترسی حدود ۱۰۰گیگابایت برثانیه است
- سطح 4(L4) کش به اشترک گذاشته شده - در اندازه ۱۲۸مگابایت. بهترین سرعت دسترسی حدود ۴۰ گیگابایت برثانیه است
- حافظه اصلی – دراندازه چندین گیگابایت. بهترین سرعت دسترسی حدود ۱۰ گیگابایت برثانیه است. در مورد ماشینهای NUMA، سرعت دسترسی یکسان نیست.
- ذخیرهسازی در دیسک – در اندازه چندین ترابایت. از سال ۲۰۱۳، بهترین سرعت دسترسی از یک درایو جامد در حدود ۶۰۰مگابایت برثانیه است.
- ذخیرهسازی ثالث – در اندازه بیش از یک بیلیون بایت. ازسال ۲۰۱۳، بهترین سرعت دسترسی حدود ۱۶۰مگابایت برثانیه است.
اکثر پردازندههای مدرن چنان سریع هستند که برای اکثر حجم سنگین کار برنامه، تنگنا محل مرجع و کارایی ذخیرهسازی و انتقال حافظه بین سلسله مراتب مختلف حافظه. در نتیجه CPUبیشتر وقت خود را تلف میکند و منتظر کامل شدن ورودی و خروجی حافظه میماند. این گاهی اوقات هزینه فضا نامیده میشود. شرایط برای دادههای که در حال از دست رفتن هستند از یک سطح بالاتر به ترتیب عبارتند از: ریختن ثبات (با توجه به فشار ثبات: ثبات برای کش)، فقدان حافظه پنهان (کش به حافظه اصلی) و خطای صفحه (حافظه اصلی به دیسک) زبانهای برنامهنویسی مدرن عمدتاً دو سطح حافظه را فرماندهی میکنند، حافظه اصلی و ذخیرهسازی دیسک، از طریق زبانهای اسمبلی و اسمبلرهای درون خط در زبانهایی مثل C میتوان به ثباتها بهطور مستقیم دسترسی یافت. استفاده بهینه از سلسله مراتب حافظه نیاز به همکاری برنامه، سختافزار و کامپایلرها دارد (و همچنین حمایت اساسی از سیستم عامل):
- برنامه نویسان مسئول حرکت دادهها بین دیسک و حافظه از طریق فایل I/O هستند.
- سختافزار مسئول حرکت دادهها بین حافظه و کش است
- کامپایلر بهینهسازی مسئول تولید کد میشود که زمانی که اجرا شود، سبب استفاده سختافزار از کش و ثبت بهطور کارآمد میشود.
بسیاری از برنامه نویسان یک سطح از حافظه را فرماندهی میکنند. این کار خوب است تا زمانی که برنامه به یک دیوار اجرا برخورد میکند. سپس سلسله مراتب حافظه در طول بازیابی کد ارزیابی میشود.[۱]