From Wikipedia, the free encyclopedia
این مقاله در حال ترجمه از ویکی انگلیسی است لطفا حذف نشود. سلسله مراتب حافظه نهان یا کش های چند سطحی به معماری حافظه ای اشاره دارد که از سطوح مختلف از کش ها براساس دسترسی سریعتر به داده ها استفاده می کند . داده های پر استفاده در حافظههای سطح پایین تر ذخیره میشوند و امکان دسترسی سریعتر توسط هستههای واحد پردازش مرکزی (CPU) را فراهم میکنند.
سلسله مراتب کش یک مدل حافظه و بخشی از سلسله مراتب حافظه است و می توان آن را نوعی ذخیره سازی لایه ای در نظر گرفت. [1] هدف از این شکل لایه ای باتوجه به تأخیر دسترسی به حافظه اصلی، ایجاد دسترسی سریعتر هستههای CPU به داده ها است . تاخیر دسترسی به حافظه اصلی یک سرعتگیر در عملکرد هسته های CPU است چرا که CPU منتظر داده است و در این فاصله کاری انجام نمیدهد، هنگامی که هزینه دسترسی سریع به تمامی حافظه اصلی میتواند بسیار پرهزینه باشد. حافظه نهان سریع راهکاری است که امکان دسترسی پرسرعت به داده هایی را که بیشتر توسط CPU استفاده می شود، فراهم می کند و باعث می شود تا نرخ کلاک پردازنده سریعتر شود. [2]
در تاریخ توسعه کامپیوتر و تراشه های الکترونیکی، دوره ای وجود داشت که افزایش سرعت CPU از بهبود سرعت دسترسی به حافظه پیشی گرفت. [3] تاخیر حافظه نسبت به پردازنده به این معنی است که CPU اغلب بیکار است. [4] پیشرفت CPU ها باعث شده بود تا آنها به مقدار قابل توجهی قادر به اجرای دستورهای بیشتری در یک زمان معین بودند، اما زمان مورد نیاز برای دسترسی به داده ها از حافظه اصلی مانع از بهره مندی کامل برنامه ها از این ظرفیت می شد. [5] این موضوع انگیزه توسعه حافظه های جدید با دسترسی سریعتر و آسان تر جهت استفاده حداکثری از پتانسیل پردازنده های سریعتر را ایجاد کرد. [6]
این منجر به مفهوم حافظه نهان شد که اولین بار توسط موریس ویلکس ، دانشمند کامپیوتر بریتانیایی در دانشگاه کمبریج در سال 1965 ارائه شد. او چنین مدل های حافظه ای را حافظه برده ای (slave memory) نامید. [7] تقریباً بین سالهای 1970 و 1990، مقالاتی از آنانت آگاروال ، آلن جی اسمیت ، مارک دی هیل ، توماس آر پوزاک و دیگران درباره طراحیهای حافظه کش بهتر بحث کردند. اولین مدلهای حافظه نهان در آن دوره ساخته و به کارگرفته شدند، اما حتی زمانی که محققان در حال پژوهش و ساخت مدل های بهتر از حافظه کش بودند، نیاز به مدلهای حافظه سریعتر همچنان ادامه داشت. دلیل نیاز به کش های سریعتر این است که اگرچه سرعت دسترسی به حافظه به کمک کش تا حد بسیار خوبی کاهش می یابد اما امکان ساخت کش با ظرفیتی حتی نزدیک به حافظه اصلی اصلا به صرفه نیست و حتی از لحاظ فنی مشکل است. از سال 1990 به بعد، ایده هایی مانند افزودن حافظه نهان سطح دوم، به عنوان پشتیبان برای حافظه نهان سطح اول ارائه شد. ژان لوپ بائر ، ون هان وانگ، اندرو دبلیو. ویلسون و دیگران تحقیقاتی را در مورد این مدل انجام دادهاند. بعد از چندین شبیه سازی و پیاده سازی و مشخص شدن مزایای کش دو سطحی را نشان دادند، مفهوم کش چند سطحی به عنوان یک مدل جدید و به طور کلی بهتر از حافظه های کش مورد توجه قرار گرفت. از سال 2000، مدلهای کش چند سطحی مورد توجه گسترده قرار گرفتهاند و در حال حاضر در بسیاری از سیستمها پیاده سازی میشوند، مانند کشهای سه سطحی که در محصولات Core i7 اینتل وجود دارند. [8]
زمان صرف شده برای دسترسی به حافظه اصلی برای هر اجرای دستورالعمل ممکن است بسته به سرعت کلاک سیستم برای یافتن و قراردادن داده ها، منجر به کند شدن پردازش شود. به منظور پنهان کردن این تاخیر حافظه از پردازنده، از کش داده ها استفاده می شود. [9] هر زمان که داده مورد نظر در پردازنده نیاز باشد، از حافظه اصلی در حافظه کوچکتر به نام کش منتقل شده و ذخیره می شود. هنگامی که استفاده از آن داده نیاز میشود، در ابتدا در حافظه نهان جستجو شده و سپس در صورت عدم وجود در حافظه اصلی جستجو میشود. [10] در این صورت سرعت پردازش پردازنده با سرعت بارگیری داده در پردازنده متناسب تر از حافظه اصلی است. [11] مزایای استفاده از حافظه نهان را با محاسبه متوسط زمان دسترسی(AAT) به حافظه در ساختار حافظه نهان چند سطحی اثبات کرد. [12]
از آنجایی که حافظه نهان، از لحاظ اندازه از حافظه اصلی بسیار کوچک تر است ، ممکن است جستجوی داده در آن نا موفق باشد و داده مورد نظر در کش موجود نباشد. در این صورت نیاز است تا این داده از حافظه اصلی فراخوانی شود. از این رو، متوسط زمان دسترسی تحت تأثیر میزان موفقیت جستجو در هر ساختاری است که از آن دادهها را جستجو میکند.
از این رو میانگین زمان دسترسی به داده از رابطه زیر محاسبه میشود:
زمان دسترسی به حافظه پنهان بسیار کمتر از زمان دسترسی به حافظه اصلی میباشد، به همین دلیل متوسط زمان دسترسی با حضور کش در ساختار با اختلاف قابل توجهی از زمان دسترسی به حافظه اصلی کمتر است. [13]
با اینکه استفاده از کش به طور متوسط تاخیر حافظه را کاهش میدهد اما گاهی ممکن است به دلیل نحوه سازماندهی و جستجو در حافظه نهان، زمان واکشی داده ها سریعتر نباشد . مثلا، حافظه های نهان با نقشه مستقیم که اندازه یکسانی دارند، معمولاً نسبت به کش های کاملاً ارتباطی، نرخ اشتباه بالاتری دارند. البته این موضوع میتواند به الگوی دستورهای کامپیوتر نیز مربوط باشد اما به طور کلی کش هایی با ساختار کاملا مرتبط انرژی بیشتر مصرف کرده اما ضریب موفقیت بالاتری دارند. در هرصورت برقراری تعادل میان مصرف انرژی و گرمای مربوطه به میزان موفقیت الزامی است . [14]
در صورت عدم جستجوی موفق در حافظه پنهان، هدف از استفاده از چنین ساختاری کاملا بی فایده است و پردازنده باید برای لود کردن داده های مورد نیاز به حافظه اصلی مراجعه کند. با این حال، با یک کش چند سطحی ، اگر کامپیوتر داده را در نزدیکترین کش به پردازنده یعنی کش L1 از دست بدهد آن را در سطح دوم یا سوم یا بالاتر جستجو میکند و در آخرین مرحله در صورت شکست در تمامی حافظه ها به حافظه اصلی جستجو میکند. روند کلی این است که حافظه نهان سطح یک با ظرفیت کم و در فاصله 1 تا 2 سیکل ساعت پردازنده از پردازنده نگه داشته شود، در سطوح بالاتر حافظه نهان برای ذخیره بیشتر داده ها نسبت به L1 حجم بیشتری در نظر گرفته میشود، بنابراین در فاصله دورتری از پردازنده واقع شده اما نرخ شکست جستجو در آن کمتر است که خود منجر به متوسط زمان دسترسی بهتری می شود. [15] تعداد سطوح کش توسط معماران بر اساس نیازهای آنها پس از بررسی و ایجاد تعادل بین هزینه، متوسط زمان دسترسی و اندازه طراحی کرد. [16] [17]
با پیشرفت فناوری مقیاس بندی ها که به ساختار حافظه ای امکان قراردادن تعداد بیشتری حافظه نهان در یک پردازنده میدهد، اکثر پردازندههای مدرن تا سه یا چهار سطح کش دارند. [18] کاهش متوسط زمان دسترسی را می توان با این مثال درک کرد، جایی که کامپیوتر متوسط زمان دسترسی را برای پیکربندی های مختلف تا حافظه نهان L3 بررسی می کند.
مثال: حافظه اصلی = ۵۰ نانوثانیه، کش سطح یک = ۱ نانوثانیه با ۱۰٪ نرخ شکست، کش سطح دو = ۵ نانوثانیه با ۱٪ نرخ شکست و کش سطح ۳ با ۰.۲٪ نرخ شکست.
در یک کش جدا شده، حافظه نهان به دو بخش ذخیره سازی دستورالعمل ها و یک بخش اختصاص داده شده به داده ها تقسیم می شود. در مقابل، یک کش یکپارچه حاوی دستورالعمل ها و داده ها در یک بخش است. [22] در طول یک فرآیند، حافظه نهان L1 (یا نزدیکترین سطح حافظه نهان به پردازنده) برای بازیابی دستورالعمل ها و داده های موردنیاز گاهی نیاز به اقدام به چند پورت و استفاده همزمان از داده و دستورالعمل دارد که اجرای این فرآیند در یک کش یکپارچه زمان دسترسی بیشتری میطلبد. داشتن چندین پورت بیشتر نیازمند سخت افزار بیشتر و سیم کشی بیشتر است که ساختار پردازنده را تغییر می دهد. [23] برای جلوگیری از این مشکلات، حافظه نهان سطح یک بیشتر اوقات یک کش جدا شده است تا از پورت های کمتر و سخت افزار کمتر استفاده شده و زمان دسترسی کاهش یابد. [14]
پردازندههای مدرن دارای حافظههای پنهان جدا شده هستند و سیستم هایی با ساختار حافظه پنهان چند سطحی، حافظههای پنهان سطح بالاتر ممکن است یکپارچه شوند در حالی که سطوح پایینتر به دوبخش تقسیم میشوند. [24]
شرط اینکه آیا یک بلاک کش که در لایه بالایی قرار دارد میتواند در کش پایینی نیز وجود داشته باشد یا خیر، توسط استراتژی دربرگیری سیستم حافظه ای مشخص می شود، که میتواند، انحصاری(کاملا جدا) یا غیر انحصاری(دربرگرفته شده توسط لایه بالاتر) یا غیرفراگیر و غیر انحصاری (NINE) باشد.
در یک استراتژی دربرگیرنده، تمام بلوک های موجود در کش سطح بالاتر باید در حافظه نهان سطح پایین نیز وجود داشته باشند. و در واقع هر جز حافظه سطح بالایی حاوی حافظه نهان سطح پایینی است. در این حالت، از آنجایی که حافظه ها تکراری هستند، مقداری از حافظه در هر سطح کش هدر می رود. با این حال مزیت این روش تاخیر کمتر در دسترسی به حافظه است.
تحت یک استراتژی انحصاری کش، تمام سطوح و لایه های حافظه نهان از یکدیگر کاملا جدا شده و انحصاری هستند، به صورتی که هیچ بلوک تکراری در تمامی سطوح کش وجود ندارد و هیچ حافظه ای تکراری نیست. این امکان استفاده کامل از حافظه کش را فراهم می کند. با این حال، تاخیر دسترسی به حافظه بالا است. [25]
سیاست های فوق مستلزم رعایت مجموعه ای از قوانین برای اجرای آنها است. اگر این موارد به طول کامل اجرا نشوند یا به نحوی متفاوت اجرا شوند، سیاست دربرگیری حاصل را غیر فراگیر غیر انحصاری (NINE) می نامند. این بدان معنی است که کش سطح بالا ممکن است در حافظه نهان سطح پایین وجود داشته باشد یا نباشد.
دو خط مشی وجود دارد که نحوه به روز رسانی یک بلوک کش تغییرکرده در حافظه اصلی را مشخص میکند: نوشتن مستقیم و نوشتن بازگشتی .
در مورد خط مشی نوشتن مستقیم، هر زمان که مقدار بلوک کش تغییر کند، در همان لحظه بقیه سطوح حافظه نیز تغییر کرده و اصلاح میشود. [26] این خط مشی تضمین می کند که داده ها به طور ایمن ذخیره می شوند، همانطور که در سراسر سطوح حافظه ذخیره شده اند.
با این حال، در مورد سیاست بازنویسی بازگشتی، بلوک تغییر یافته در کش هنگامی که تنها زمانی در سطوح پایینتر اپدیت خواهد شد که بلوک حافظه از کش خارج شود. به این صورت که یک "بیت کثیف"(dirty bit) به هر بلوک کش متصل شده و تا زمانی که بلوک کش اصلاح نشود باقی می ماند. [27] به هنگام خارج شدن، بلوک هایی از حافظه که در سطوح پایین با بیت کثیف مشخصه شده اند تغییر میکنند. تحت این سیاست، خطر از دست رفتن داده وجود دارد، زیرا آخرین نسخه تغییر یافته از یک داده تنها در کش ذخیره شده و در بخش های دیگر حافظه موجود نیست و بنابراین باید برخی از تکنیک های اصلاحی را رعایت کرد.
هنگام بازنویسی بایتی که در بلوک کش وجود ندارد، بایت می تواند طبق دو سیاست بازنویسی نوشتن تخصیصی یا نوشتن عدم تخصیصی به حافظه پنهان آورده شود. در سیاست حافظه تخصیصی در صورت اشتباه نوشتن یک بلوک، آن را از حافظه اصلی واکشی کرده و قبل از نوشتن در حافظه پنهان قرار می دهیم. [28] در سیاست نوشتن بدون تخصیص، اگر بلوک در حافظه نهان گم شود، درسطوح پایین تر حافظه بدون واکشی در حافظه پنهان نوشته میشود. [29]
یک کش خصوصی تنها توسط یک هسته از پردازنده قابل دسترسی است و هیچ هسته دیگری نمی تواند به آن دسترسی داشته باشد. در برخی از معماری ها، هر هسته حافظه پنهان خصوصی خود را دارد. که البته این روش ممکن است به تکراری شدن بلوک های حافظه در هر کدام از کش های هسته ها شود و استفاده حداکثری از ظرفیت محقق نشود. با این حال، این نوع انتخاب طراحی در معماری کش چند لایه نیز می تواند برای کاهش زمان دسترسی به داده ها خوب باشد. [30] [31] [32]
کش اشتراکی به کشی اطلاق میشود که توسط چندین هسته قابل دسترسی است. [33] از آنجایی که تمامی هسته ها به کش دسترسی دارند و هیچ بلوک تکراری در کش وجود ندارد نرخ موفقیت در جستجوی بالاتری نسبت به کش خصوصی دارد. با این حال، هنگامی که چندین هسته برای دسترسی به حافظه پنهان اقدام میکنند، تاخیر دسترسی به داده ها می تواند افزایش یابد. [34]
در پردازندههای چند هستهای ، عملکرد پردازنده بسته به طراحی مشترک یا خصوصی حافظه نهان می تواند متفاوت باشد. [35] در عمل، کش سطح بالایی L1 (یا گاهی اوقات L2) [36] [37] به صورت خصوصی و کش های سطح پایین به صورت اشتراکی پیاده سازی می شوند.مزیت این طراحی دسترسی بهتر و سریع تر برای کش های سطح بالا است و برای کش های سطح پایین نرخ موفقیت بیشتر در جستجو است. [35]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.