حافظه پنهان یا حافظه کش سیپییو (CPU cache) چیست؟
حافظه پنهان یا حافظه کش سیپییو (CPU cache) در یک نگاه
حافظه پنهان یا حافظه کش سیپییو (CPI cache)1، نوعی حافظه رم بسیار سریع و واسطه بین پردازنده مرکزی (سیپییو) و حافظه رم اصلی گوشی/رایانه/... است. دادههایی که سیپییو بارها باید آنها را پردازش کند و یا دادههایی که در شرف پردازش هستند، از حافظه رم به حافظه کش منتقل میشوند تا ریزپردازنده (سیپییو ) سریعتر به آنها دسترسی یابد. حافظه کش مانند حافظه رم اصلی، ناپایا (volatile) است، یعنی دادهها موقتا در آن ذخیره میشوند زیرا اگر برق حافظه قطع شود، دادههای حافظه نیز پاک میشود.
پیش از پرداختن به جزئیات حافظه کش و نحوه کار آن، بهتر است ابتدا انواع حافظه از نظر نحوه دسترسی سیپییو مرور شود.
انواع حافظه از نظر نحوه دسترسی سیپییو
حافظههای مورد استفاده در گوشیها و رایانهها از نظر سطح دسترسی سیپییو به آنها به چهار دسته2 کلی تقسیم میشوند اما در اینجا تنها از دو دسته نخست که موضوع بحث است، نام برده میشود: حافظههای اولیه (primary memory) و حافظههای ثانویه (secondary memory).
حافظههای اولیه (primary memory): حافظههایی هستند که سیپییو مستقیما به آنها دسترسی دارد، مثل:
- حافظه رم (RAM)
- حافظه رام (ROM)
- حافظه پنهان یا کش (cache memory)
حافظههای ثانویه (secondary memory): حافظههایی هستند که سیپییو مستقیما به دادههای آنها دسترسی ندارد و آن دادهها جهت پردازش باید به حافظه اولیه منتقل شوند، مثل:
- دیسک سخت یا هارددیسک
- حافظه فلش
- دیویدی
دسترسی سیپییو به حافظههای اولیه بسیار سریعتر از دسترسی آن به حافظههای ثانویه است. برای مثال، زمانی که سیپییو برای دسترسی به هارددیسک لازم دارد، صدبرابر زمانی است که برای دسترسی به حافظه رم صرف میکند. لذا اگر سیپییو بخواهد دادههای ذخیره شده در هارددیسک را پردازش کند، دادهها نخست از هارددیسک به رم (و سپس بخشی از آن به حافظه کش) منتقل میشود.
اکثر حافظههای اولیه (غیر از حافظه ROM) ناپایا هستند، یعنی دادهها موقتا در آنها ذخیره میشوند و اگر برق حافظه قطع شود، دادههای حافظه نیز پاک میشود. اما حافظههای ثانویه پایا هستند و معمولا برای ذخیره دائمی دادهها به کار میروند.
کاربرد و اهمیت حافظه پنهان (کش) سیپییو
حافظه کش سیپییو چرا ساخته شده است؟ چون سرعت کار سیپییو بسیار بیشتر از سرعت دسترسی آن به حافظه رم است. لذا سیپییو هر قدر هم که سریع باشد، چون حافظه رم نمیتواند پابهپای آن عمل کند، سرعت کلی سامانه کاهش مییابد (قدرت یک زنجیر برابر با قدرت ضعیفترین حلقه آن است). اما حافظه پنهان (کش) چون سریع و به سیپییو نزدیکتر است، زمان دسترسی سیپییو به دادهها را تا جای ممکن کاهش میدهد و ضعف یادشده را جبران میکند.
حافظه پنهان واسطه بین سیپییو و حافظه اصلی (رم دستگاه) است. پس طبیعتا سیپییو زودتر و پیش از حافظه رم به آن دسترسی مییابد. حافظه کش برنامه (یا بخشی از برنامهای) را که در حال اجراست یا ممکن است بهزودی پردازش شود و نیز دادههایی را که بارها در سیپییو پردازش میشوند، ذخیره میکند. حافظه کش برای این منظور از الگوریتمهای مختلفی بهره میبرد. این الگوریتمها حدس میزنند که کدام اطلاعات متناوبا به کار خواهندرفت و باید در حافظه کش ذخیره شوند.
انواع حافظه پنهان (کش) سیپییو
حافظه پنهان یا کش در سه سطح تعریف میشود: حافظه پنهان سطح یک (L1 cache)، حافظه پنهان سطح دو (L2 cache) و حافظه پنهان سطح سه (L3 cache). انتقال دادهها از حافظه رم به حافظههای کش از L3 آغاز میشود، اما دسترسی سیپییو به آنها برعکس است، یعنی سیپییو ابتدا به کش L1 مراجعه میکند و اگر دادههای مورد نیازش را آنجا نیافت، سراغ کش L2 و سپس کش L3 میرود.
حافظه پنهان سطح یک (L1 cache)
حافظه پنهان L1 نزدیکترین کش به سیپییو و درنتیجه سریعترین آنهاست. کش L1 معمولا روی خود سیپییو تعبیه میشود. سیپییو ابتدا به حافظه پنهان L1 مراجعه میکند و اگر دادههای موردنیاز خود را در آنجا نیافت، سراغ حافظه پنهان L2 میرود. کش L1 سریعتر از کش L2 و L3 اما ظرفیتش محدودتر از آنها و معمولا کمتر از یک مگابایت است. در پردازندههای چندهستهای معمولا هر هسته، حافظه پنهان سطح یک (L1 cache) مخصوص خود را دارد. در برخی پردازندهها حافظه پنهان L2 نیز اختصاصی است اما تقریبا در همه پردازندهها حافظه کش L3 بین همه هستهها مشترک است.
حافظه پنهان سطح دو (L2 cache)
سرعت حافظه پنهان L2 کمتر از L1 اما ظرفیتش معمولا بیشتر است. در برخی سیپییوها کش L2 روی سیپییو تعبیه میشود و گاهی نیز تراشهای مجزا یا پردازندهای کمکی است که توسط گذرگاه اختصاصی پرسرعت به سیپییو متصل میشود. ظرفیت کش L2 بسته به نوع پردازنده مرکزی، از چندصد کیلوبایت تا چند مگابایت متغیر است.
حافظه پنهان سطح سه (L3 cache)
حافظه پنهان L3 بازده حافظه پنهان L1 و L2 را افزایش میدهد. کش L3 بزرگتر و کندتر از دو حافظه قبلی، اما همچنان سریعتر از حافظه رم است. ظرفیت ذخیرهسازی حافظه کش L3 بسته به نوع پردازنده مرکزی میتواند چند مگابایت تا چندده مگابایت باشد.
تفاوت حافظه پنهان سیپییو با رم اصلی گوشی/رایانه
حافظه پنهان در اصل، نوعی حافظه رم است، هرچند با رم اصلی گوشی/رایانه تفاوت مهمی دارد: حافظه اصلی یا اصطلاحا رم گوشی/رایانه از نوع رم پویا (DRAM: Dynamic Random Access Memory) است. اما حافظه پنهان، از نوع رم ثابت (SRAM: Static Random Access Memory) است. حافظههای DRAM هر چند میلیثانیه یکبار باید نوسازی (ریفرش) شوند، اما حافظههای SRAM از این کار بینیازند؛ و نیز سریعتر و گرانترند. حافظه DRAM روی بورد اصلی تعبیه میشود و سیپییو از طریق گذرگاههای بورد اصلی به آن دسترسی مییابد، اما حافظه پنهان یا جزئی از سیپییو و یا تراشهای جداگانه اما بسیار نزدیک به سیپییو است.
سخن آخر
حافظه پنهان (کش) گرانقیمت و ظرفیت ذخیرهسازی آن اندک است، اما سرعت چشمگیرش سبب شده است تا در سلسلهمراتب پردازش، نقشی کلیدی داشته باشد (سرعت دسترسی سیپییو به حافظه پنهان و حافظه رم برحسب نانوثانیه و سرعت دسترسی آن به هارددیسک برحسب میلیثانیه سنجیده میشود). البته حافظه کش منحصر به سیپییو نیست. در نرمافزارهای مرورگر وب، حافظه رم و هارددیسک نیز حافظهای تحت عنوان حافظه پنهان یا کش تعریف شده است که هر یک کاربرد خاصی دارد.
پینوشت:
- حافظه پنهان (کش) را حافظه نهان یا حافظه سیپییو نیز میگویند.
- در دستهبندی حافظهها از نظر نحوه دسترسی سیپییو به آنها دو نوع حافظه دیگر موسوم به حافظههای سوم (tertiary) و حافظههای آفلاین نیز تعریف شدهاند که چون موضوع این بحث نیست، به آنها اشاره نشد.