حافظه پنهان (cache memory)، همچنین حافظه CPU نامیده می شود، حافظه با سرعت دسترسی تصادفی بالا (SRAM) است که یک ریزپردازنده کامپیوتری می تواند سریعتر از آنکه مرتبا به حافظه دسترسی آزاد (RAM) دسترسی پیدا کند به سرعت به آن دسترسی داشته باشد. این حافظه به طور مستقیم به تراشه CPU متصل می شود و یا در یک تراشه جداگانه قرار می گیرد که یک اتصال BUS جداگانه با CPU دارد.
هدف حافظه پنهان این است که دستورالعمل های برنامه و داده هایی را که در برنامه های کاری یا اطلاعاتی که احتمالا پردازنده بعدا نیازمند هست و مجددا استفاده می شود ذخیره کند. پردازشگر کامپیوتر می تواند به سرعت از حافظه پنهان به این اطلاعات دسترسی پیدا کند و نیاز به دریافت آن از حافظه اصلی رایانه ندارد. دسترسی سریع به این دستورالعمل باعث افزایش سرعت کلی برنامه می شود.
زمانی که ریزپردازنده داده ها را پردازش می کند، آنها را اولین بار در حافظه کش جستجو می کند. اگر ریزپردازنده در آنجا دستورالعملها یا داده هایی را که از خواندن قبلی داده ها پیدا کند، لازم نیست برای خواندن داده ها از حافظه اصلی بزرگ یا سایر دستگاه های ذخیره سازی داده وقت بیشتری را صرف کند. حافظه پنهان مسئول سرعت بخشیدن به عملیات کامپیوتر و پردازش است.
زمانیکه آنها برای یک بار باز شده و عمل می کنند، اکثر برنامه ها از منابع کمی از کامپیوتر استفاده می کنند. این به این دلیل است که اغلب
دستورالعمل مجددا مورد استفاده قرار می گیرند. . به همین دلیل است که اندازه گیری های عملکرد سیستم برای رایانه های با پردازنده های آهسته اما حافظه های بزرگتر می تواند سریع تر از رایانه های با پردازنده های سریعتر، اما فضای حافظه کمتر باشد
پیاده سازی و تاریخچه
رایانه های بزرگ از نسخه اولیه حافظه پنهان استفاده می کنند، اما تکنولوژی که امروز شناخته می شود، با ظهور میکرو رایانه ها آغاز شد. با استفاده از رایانه های شخصی اولیه، عملکرد پردازنده بسیار سریعتر از عملکرد حافظه شد، و حافظه در برابر این سرعت بالا کندتر شد.
در دهه ۱۹۸۰، این ایده در نظر گرفته شد که یک SRAM گران تر و سریع تر می تواند برای بهبود عملکرد حافظه اصلی استفاده شود. در ابتدا حافظه پنهان از پردازشگر سیستم جدا بود و در چیپست پردازنده نبود. رایانه های اولیه به طور معمول از ۱۶KBتا ۱۲۸KB حافظه پنهان داشتند.
در پردازنده ۴۸۶، اینتل ۸ کیلو بایت حافظه را به CPU به عنوان حافظه سطح ۱ (L1) اضافه کرد. حداکثر ۲۵۶ کیلو بایت حافظه پنهانی سطح ۲ (L2) خارجی در این سیستم ها استفاده شد. پردازنده های پنتیوم دوباره حافظه حافظه پنهان را به دو برابریعنی ۵۱۲ کیلوبایت رساندند. آنها همچنین حافظه پنهان داخلی را به دو حافطه کش تقسیم می کنند: یکی برای دستورالعمل و دیگری برای داده ها.
پردازنده های مبتنی بر میکرو آرشیو P6 اینتل، که در سال ۱۹۹۵ معرفی شد، اولین بار بود که حافظه پنهان L2 را در پردازنده قرار داده و تمام حافظه پنهان سیستم را برای اجرای همزمان با سرعت پردازنده به کار می برد. قبل از P6 حافظه L2 خارج از CPU در سرعت ساعت خیلی کندتر از نرخ بهره برداری پردازنده دیده شد و عملکرد سیستم را به میزان قابل توجهی کاهش می داد.
کنترل کننده های حافظه ی اولیه
کنترل کننده های حافظه ی اولیه از معماری حافظه پنهان استفاده می کردند، جایی که دادههای ذخیره شده در حافظه بلافاصله در RAM به روز می شدند. این باعث به حداقل رساندن تلفات داده شده، اما عملکرد را کند می کند. در کامپیوترهای مبتنی بر ۴۸۶ بعدی، معماری حافظه پنهان نوشتن توسعه داده شد، جایی که RAM بلافاصله به روز نمی شود. در عوض، داده ها در حافظه پنهان ذخیره می شوند و RAM تنها در فواصل زمانی خاص یا در شرایط خاصی که داده ها از دست رفته یا قدیمی است، به روز می شود.
نقشه برداری حافظه پنهان
پیکربندی های ذخیره سازی همچنان به تکامل می رسند، اما حافظه پنهان معمولا تحت سه پیکربندی متفاوت کار می کند:
۱- نقشه برداری مستقیم در ساختار :در این ساختار هر بخش از اطلاعات دقیقا به یک مکان حافظه پنهان منتقل شود. به طور مفهومی، نقشه کش مستقیم مانند سطرها در یک جدول با سه ستون است: بلوک داده یا ردیف کش که حاوی اطلاعات واقعی واکشی شده و ذخیره شده است، یک تگ با تمام یا بخشی از آدرس داده که دریافت شده است و یک بیت پرچم در یک ردیف یک بیت معتبر از داده ها را نشان می دهد.
۲- نقشه کش کاملا مشارکتی : کاملا مشابه است با نقشه برداری مستقیم در ساختار، اما اجازه می دهد که یک بلوک به هر محل ذخیره سازی به جای یک مکان حافظه پنهان پیش فرض، همانطور که در مورد نقشه برداری مستقیم باشد، نقشه برداری شود.
۳- مجموعه نقشه کش های مشارکتی را می توان به عنوان یک ترکیب بین نقشه برداری مستقیم و نقشه برداری به طور کامل وابسته مشاهده کرد که در آن هر بلوک به یک زیر مجموعه از مکان های حافظه کش منتقل شده است. گاهی اوقات N-way set mapping associative نامیده می شود، که برای موقعیت مکانی اصلی در حافظه اصلی ذخیره می شود تا به مکان های “N” در حافظه L1 ذخیره شود
فرمت دسته بندی کش
حافظه پنهان سریع و گران است به طور سنتی، آن را در “سطوحی” طبقه بندی می شود که نزدیک بودن آنها و دسترسی به ریزپردازنده را توصیف می کند.
حافظه L1 یا کش اولیه، بسیار سریع اما نسبتا کوچک است و معمولا در تراشه پردازنده به عنوان حافظه CPU تعبیه شده است.
حافظه L2 یا حافظه ثانویه اغلب بیشتر از L1 است. حافظه L2 ممکن است در CPU جاسازی شود، یا آن می تواند بر روی یک تراشه یا هم پوشش جداگانه باشد و یک BUS سیستم جایگزین با سرعت بالا داشته باشد که حافظه کش و CPU را متصل می کند. به این ترتیب آن را با ترافیک در سییستم BUS اصلی تضعیف نمی شود.
حافظه سطح ۳ (L3) حافظه اختصاصی برای بهبود عملکرد L1 و L2 است. L1 یا L2 می تواند به طور قابل توجهی سریعتر از L3 باشد، با این حال L3 معمولا سرعت RAM را دو برابر می کند. با پردازنده های چند هسته ای، هر هسته می تواند حافظه کش L1 و L2 را اختصاص داده، اما آنها می توانند یک حافظه L3 را به اشتراک بگذارند. اگر یک حافظه L3 دستورالعمل را ارجاع می دهد، معمولا به سطح بالاتر کش می رسد.
فرمت گذشته کش
در گذشته، مخازن L2، L1 و L3 با استفاده از اجزای مرکب پردازنده و مادربرد ایجاد شده اند. به تازگی، این روند به سمت اختصاص تمام سه سطح ذخیره سازی حافظه در خود پردازنده است. به همین دلیل مهمترین وسیله برای افزایش اندازه حافظه پنهان، تغییر از خرید یک مادربرد خاص با تراشه های مختلف و معماری BUS به خرید یک پردازنده با مقدار مناسب از حافظه کش L2، L1 و L3 است.
بر خلاف باور عمومی، اجرای فلش یا رم دینامیک (DRAM) بیشتر در یک سیستم، حافظه پنهان را افزایش نخواهد داد. این امر می تواند گیج کننده باشد زیرا حافظه ذخیره حافظه (حافظه هارد دیسک) و حافظه پنهان اغلب به جای هم استفاده می شوند. حافظه پنهان، با استفاده از DRAM یا فلش برای خواندن دیسک های بافر، به منظور بهبود ذخیره سازی I / O با ذخیره داده ها است که اغلب در یک بافر قبلا از دیسک یا نوار مغناطیسی کندتر نشان داده می شود. از سوی دیگر حافظه پنهان حافظه خواندن بافر را برای CPU فراهم می کند.
تخصص و قابلیت
علاوه بر دستورالعمل ها و حافظه های ذخیره داده، حافظه های دیگر نیز طراحی شده اند تا توابع خاص سیستم را طراحی کنند. با توجه به برخی تعاریف، طراحی مشترک Cache کش L3 آن را یک حافظه پنهان اختصاصی می کند. تعاریف دیگر دستورالعمل های ذخیره سازی و ذخیره داده ها را جداگانه نگه می دارند و هر یک به عنوان یک حافظه پنهان اختصاص داده می شوند.
Buffers lookup های ترجمه (TLBs) همچنین حافظه های ویژه HD هستند که عملکرد آن ثبت آدرس مجازی به ترجمه آدرس های فیزیکی است.
دنیس مارتین، بنیانگذار و رئیس Demartek LLC، جوانب مثبت و منفی استفاده از درایوهای حالت جامد را به عنوان حافظه کش و ذخیره سازی اولیه توضیح می دهد.
حافظه های اختصاصی نیز برای برنامه های کاربردی مانند مرورگرهای وب، پایگاه های داده، اتصال پرونده های شبکه و پشتیبانی از پروتکل پروتکل شبکه در دسترس هستند. این انواع حافظه های مخفی ممکن است در میان میزبان های مختلف شبکه توزیع شوند تا مقیاس پذیری یا عملکرد بیشتری را به یک برنامه کاربردی که آنها استفاده می کند، ارائه دهد
کش در مقابل حافظه اصلی
DRAM به عنوان یک حافظه اصلی رایانه، انجام محاسبات روی داده های بازیابی شده از ذخیره سازی را بر عهده دارد. هر دو DRAM و حافظه پنهان حافظه های فرار هستند که محتویات خود را هنگام خاموش شدن دستگاه از دست می دهند. DRAM بر روی مادربرد نصب شده است و پردازنده از طریق یک اتصال BUS به آن دسترسی می دهد.
DRAM معمولا در حدود نیمی از سرعت حافظه پنهان L1، L2 یا L3 را دارد و خیلی ارزانتر است. این دسترسی سریعتر داده ها را از حافظه فلش، هارد دیسک (هارد دیسک) و ذخیره سازی نوار فراهم می کند.
DRAM باید هر چند میلی ثانیه تجدید شود. حافظه پنهان، که همچنین یک نوع حافظه دسترسی تصادفی است، نیازی به تجدید ندارد.و مستقیم به پردازنده چسبیده است تا سریعترین دسترسی به مکان های حافظه را به پردازنده ارائه دهد و سرعت دسترسی برای بار دوم به دستورالعمل ها و داده ها را افزایش می دهد. SRAM سریعتر از DRAM است، اما به دلیل اینکه تراشه ای پیچیده تر است، هزینه آن نیز افزایش می یابد.
حافظه پنهان در مقابل حافظه مجازی
یک کامپیوتر دارای مقدار محدودی از RAM و حتی حافظه پنهان حافظه است. هنگامی که یک برنامه بزرگ یا چندین برنامه در حال اجرا است، ممکن است حافظه به طور کامل مورد استفاده قرار گیرد. برای جبران کمبود حافظه فیزیکی، سیستم عامل کامپیوتر (سیستم عامل) می تواند حافظه مجازی ایجاد کند.
برای انجام این کار، سیستم عامل به طور موقت داده های غیر فعال را از حافظه رم به حافظه دیسک انتقال می دهد. این رویکرد فضای آدرس مجازی را با استفاده از حافظه فعال در RAM و حافظه غیر فعال در هارد دیسک، برای ایجاد آدرس های متناوب که هر دو برنامه و داده های آن را نگه می دارد، افزایش می دهد. حافظه مجازی به شما اجازه می دهد یک برنامه کامپیوتری بزرگتر یا برنامه های چندگانه را همزمان اجرا کنید، و هر برنامه عمل می کند همانطور که حافظه نامحدود دارد.
- به منظور کپی کردن حافظه مجازی به حافظه فیزیکی، سیستم عامل حافظه را به فایل های صفحه یا فایل های مبادله ای که حاوی تعداد مشخصی از آدرس ها است، تقسیم می کند. این صفحات بر روی یک دیسک ذخیره می شوند و زمانی که مورد نیاز هستند، OS آنها را از دیسک به حافظه اصلی کپی می کند و آدرس های مجازی را به آدرس های واقعی تبدیل می کند.