حافظه‌ی نهان (Cache) و تاثیر آن در عملکرد پردازنده

زمان مطالعه: حدود 6 دقیقه / 21 گفتگو

اگر تا به‌حال به مشخصات پردازنده‌ی رایانه‌ی خود توجه کرده باشید حتما با واژه‌ای به نام کش (Cache) رو‌به‌رو شده‌اید، در واقع باید بدانید این واحد تاثیر قابل توجهی در سرعت و عملکرد پردازنده‌‌ها دارد، این بخش را با نام‌های حافظه‌ی نهان، حافظه‌ی میان‌گیر و حافظه‌ی CPU نیز می‌شناسند، همانطور که گفتیم حافظه‌ی کش نقش قابل ملاحظه‌ای در عملکر پردازنده دارد، برای آشنایی با این واحد و نحوه‌ی عملکرد آن با همیار آی تی همراه باشید.

Cpu-Cache-Performance

حافظه‌ی نهان (Cache) چیست؟

کش (Cache) حافظه‌ی کوچکی داخل پردازنده است که همیشه مقداری از اطلاعات موجود در رم (RAM) را به صورت موقتی در خود نگهداری کرده و آن‌ها را برای پردازش در اختیار CPU قرار می‌هد، حافظه‌ی Cache حدودا از سال 1980 در پردازنده‌ها مورد استفاده قرار گرفت، نام این واحد از کلمه‌ی Cacher که در زبان فرانسوی به معنای “نهان کردن یا مخفی کردن” است گرفته شده.

در دهه‌های اولیه‌ی استفاده از کامپیوتر حافظه‌ی اصلی بسیار کند بود و در عین حال پردازنده‌ها نیز از سرعت بالایی برخوردار نبودند، با گذشت زمان و در اوایل سال ۱۹۸۰ در حالی که حافظه های رایانه‌ای هنوز سرعت کمی داشتند سرعت پردازنده‌ها به طرز چشمگیری افزایش یافت به طوری که حافظه‌‌ی اصلی و رم توان رقابت با سرعت پردازنده‌ها را نداشتند و وقت زیادی از پردازنده صرف انتقال اطلاعات از حافظه‌ به بخش پردازش CPU می‌شد، می‌توانید مقایسه‌ی سرعت رشد حافظه‌ی DRAM و CPU را در نمودار زیر مشاهده کنید:

CPU-vs-DRAM-Speed-Performance

اگر کمی با نحوه‌ی عملکرد رایانه‌ها آشنایی داشته باشید حتما می‌دانید که سیستم‌عامل و سایر نرم‌افزار‌ها داخل حافظه‌ی اصلی (SSD یا HDD) قرار دارند، این قطعه نسبت به پردازنده سرعت بسیار کمتری دارد از این رو حافظه‌ی رم به وجود آمد تا این مشکل را برطرف کند هرچند رم از سرعت بالاتری نسبت به حافظه‌ی اصلی برخوردار بود ولی توان مقابله با سرعت پردازنده‌ را نداشت و نتوانست این کمبود را جبران کند، برای این منظور در نهایت با اختراع حافظه‌ی Cache و عملیات کشینگ این مشکل تا حدودی برطرف شد، می‌توانید ترتیب قرارگیری حافظه‌ها را در تصویر زیر به صورت خیلی ساده مشاهده کنید:

Memory-Levels

اگر به تصویر توجه کنید متوجه وجود بخش‌های مختلفی در CPU می‌شوید، این اجزا به ترتیب از سمت راست به چپ: حافظه‌ی کش پردازنده (رنگ نارنجی)، حافظه‌ی رجیستر پردازنده (رنگ آبی) و هسته‌ی پردازنده (رنگ بنفش) هستند، حال قصد داریم به داخل CPU سفر کرده و با نحوه‌ی کار حافظه‌ی کش بیشتر آشنا شویم (عملکرد سایر قسمت‌ها در آموزش‌ها بعدی مورد بررسی قرار خواهند گرفت)

حافظه‌ی کش (Cache) چگونه کار می‌کند؟

برای اینکه بهتر با مفهوم کش و عملیات Caching آشنا شوید نحوه‌ی عملکرد این قسمت را با مثالی ساده برای شما توضیح می‌دهیم:

کتابخانه‌ای را در نظر بگیرید که تعداد زیادی کتاب در آن وجود دارد، شما برای دریافت یک کتاب به کتابدار مراجعه می‌کنید و او کتاب را در قفسه اصلی جستجو کرده و به شما تحویل می‌دهد، پس از مدتی شما کتاب را باز گردانده و کتابدار آن را در قفسه‌ای کوچک نزدیک خود نگه میدارد، پس از مدتی شخص دیگری مراجعه کرده و همان کتاب را درخواست میکند، این بار کتابدار سریع‌تر کتاب را به او میدهد، چرا که کتاب را در یک فضای محدود و نزدیک به خود قرار داده تا در دفعات بعدی بتواند سریع‌تر به آن دسترسی داشته باشد، اگر قرار بود کتابدار مجددا به مخزن اصلی مراجعه کند مطمئنا زمان بیشتری صرف این‌کار می‌شد ولی با نگهداری کتاب‌های پر استفاده در نزدیکی خود سرعت عمل جستجو و استفاده از کتاب‌ها به طرز چشمگیری بهبود می‌یابد.

حافظه Cache پردازنده نیز به همین صورت است، این حافظه‌ها با حجم کم خود (در حد چند مگابایت) و ساختار خاصی که دارند باعث میشوند سرعت جستجو در آن‌ها تا حد چشمگیری افزایش یافته و به همین دلیل در سرعت پردازنده نقش چشمگیری ایفا می‌کنند، اطلاعاتی که CPU بیشتر به آن‌ها احتیاج دارد در حافظه کش ذخیره می‌شوند تا سرعت پردازنده بالاتر رود، در اکثر پردازنده‌های امروزی چند لایه حافظه کش قرار دارد (تا ۳ یا ۴ لایه)، این بخش تاثیر مستقیمی در قیمت پردازنده‌ها نیز دارد!

طبق یک اصل هنگامی که پردازنده به بخشی از حافظه‌ی اصلی احتیاج داشته باشد احتمالا در آینده‌ای نزدیک نیز مجددا به آن احتیاج خواهد داشت که به این اصل همجواری زمانی گفته می‌شود، همچنین اگر پردازنده به مکانی در حافظه‌ی اصلی احتیاج داشته باشد احتمالا در آینده‌ای نزدیک به مکان‌های مجاور آن نیز احتیاج خواهد داشت که یه این اصل همجواری مکانی گفته می‌شود، هدف از استفاده‌ی کش این‌ است که بیت بعدی که پردازنده به آن احتیاج خواهد داشت در حافظه‌ی کش آماده باشد، به این فرایند Cache Hit نیز گفته می‌شود، انتخاب اطلاعات موجود در کش توسط الگوریتم‌های پیچیده و فرضیات متعدد نرم‌افزاری صورت می‌گیرد.

طبق تعریف بالا هنگامی که داده‌ای به پردازنده منتقل می‌شود بخشی از اطلاعات مرتبط با آن نیز منتقل شده و در حافظه‌ی Cache پردازنده ذخیره می‌شود چراکه به احتمال زیاد پردازنده در عملیات بعدی خود به آن‌ها احتیاج خواهد داشت، با انجام این کار سرعت پردازش داده‌ها افزایش چشم‌گیری خواهد داشت.

معمولا در پردازنده‌های امروزی حافظه‌ی کش از چند لایه (۳ یا 4 لایه) تشکیل شده‌ است، این لایه‌ها به ترتیب L1، L2، L3، L4 نامیده می‌شوند، میزان حجم این حافظه‌ها به صورت زیر تقسیم‌بندی می‌شود:

L4 > L3 > L2 > L1

سرعت عملکرد این لایه‌ها نیز به صورت زیر دسته‌بندی می‌شود:

L1 > L2 > L3 > L4

همانگونه که متوجه شده‌اید لایه‌ی L1 کمترین اندازه را داشته ولی در عین حال از بیشترین سرعت برخوردار است و در طرف مقابل سطح L4 بیشترین حجم و کمترین سرعت را نسبت به دیگر لایه‌ها دارد.

هنگامی که پردازنده به داده‌ای نیاز داشته باشد ابتدا سطح L1 را مورد بررسی قرار می‌دهد در صورتی که داده‌ی مورد نظر در آنجا  وجود نداشته باشد به سراغ سطح L2 می‌رود، این عملیات تا پیدا کردن داده‌ی مورد نیاز و تا سطح L4 انجام می‌شود به این عمل Cache Miss گفته می‌شود، در نهایت اگر اطلاعات مورد نیاز در حافظه‌ی کش موجود نباشد CPU به ناچار به حافظه‌ی RAM مراجعه کرده و اطلاعات مورد نیاز خود را از آن‌جا استخراج می‌کند.

ساختار لایه‌های کش در پردازنده‌های مختلف، متفاوت می‌باشد، در برخی از پردازنده‌ها لایه‌ها دارای ساختار پوششی هستند یعنی یک کپی از اطلاعات موجود در کش سطح ۱ در سطح ۲ نیز وجود دارد، همچنین یک کپی از اطلاعات موجود در کش سطح ۲ در کش سطح ۳ موجود است، علاوه بر این ساختار طرح دیگری نیز در سطوح کش وجود دارد به این‌صورت که هیچ‌یک از داده‌های موجود در لایه‌ها با دیگری یکسان نخواهند بود.

با توجه به این توضیح در میابیم که حافظه‌ی کش باید از سرعت بسیار بالایی برخوردار باشد به طوری که مدت زمان جستجو در آن تقریبا نزدیک به صفر بوده و وقت پردازنده برای جستجو در کش تلف نشود.

در پردازنده‌های چند هسته‌ای (پردازنده‌های امروزی) معمولا هر هسته مقدار مشخصی حافظه‌ی کش اختصاصی و مقداری حافظه‌ی کش اشتراکی در اختیار دارد که بسته به پردازشی که در حال انجام آن است این مقدار متفاوت خواهد بود، طرح ساده‌ای از این مفهوم را در تصویر زیر مشاهده می‌کنید:

Cache-memory-hirearchy

چرا کل حافظه‌ی کامپیوتر را از نوع Cache نمی‌سازند؟

با مطالعه‌ی توضیحات بالا شاید این سوال برای شما پیش‌ بیاید که چرا کل حافظه‌ی سیستم را از نوع کش نمی‌سازند تا به این ترتیب سرعت کامپیوترها افزایش پیدا کند؟

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

شما یک گام جلوتر از دیگران باشید! اگر به آی‌تی و تکنولوژی علاقه‌مندید و دوست دارید سریع‌تر در این زمینه پیشرفت کنید، همین حالا به جمع ۲۸۲۷ عضو همیار آی‌تی بپیوندید، دسترسی به تمام آموزش‌های پریمیوم، دریافت جدیدترین آموزش‌های کاربردی مرتبط با آی‌تی و استفاده از مشاوره‌ی رایگان، برخی از مزایای عضویت در سایت هستد، شما نیز به کاربران همیار پیوسته و همین حالا وارد دنیای حرفه‌ای‌ها شوید... من هم می‌خواهم عضو ویژه‌ی همیار شوم

21 گفتگو

در بحث‌‌ پیرامون این مقاله شرکت کنید، سوالات شما توسط کارشناسان همیار آی‌تی پاسخ داده می‌شود...

  1. Avatar سعید گفت:

    سلام وقتتون بخیر
    مطالبتون عالی بود
    سوالی که دارم اینه که دلیل اینکه سرعت کش باید به سی پی یو نزدیک باشه چیه؟

  2. Avatar norouzi.s75 گفت:

    سلام
    عالی بود مطالبتون
    سوالی که دارم اینه دلیل اینکه باید سرعت catch به cpu نزدیک تر باشه چیه؟

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام دوست عزیز، خوشحالیم که این آموزش برای شما مفید بوده، به زبان ساده CPU سریع‌ترین قسمت یک کامپیوتر هست و به طور مستقیم با RAM در ارتباطه، در حالی که حافظه‌ی RAM به اندازه‌ی CPU سریع نیست، به همین علت برای جبران این اختلاف سرعت،‌ حافظه‌های کش رو داخل CPU قرار می‌دند که با اون‌ها کار کنه و اصطلاحا معطل RAM نشه، حافظه‌ی کش از اونجایی که از تکنولوژی خاصی ایجاد شده سرعتش خیلی از RAM بیشتره و از نظر سرعت در مقایسه‌ی بین سی‌پی‌یو و رم، به سرعت CPU نزدیک‌تر هست (یعنی اینکه سرعت بسیار بالا در حد CPU داره)

  3. Avatar Taheri گفت:

    سلام وقتتون بخیر
    من تخصصی توی کامپیوتر ندارم اما مطالب تا حدی قابل درک بود برام
    اما بازم سوالی که هست اینه که سرعت cache بهتره به cpu نزدیک باشه یا ram?

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام، سرعت Cache به سرعت CPU نزدیک‌تره دوست عزیز، چون سریع‌ترین قطعه در کامپیوتر CPU هست، سرعت CPU از RAM هم بیشتره و به طبع حافظه‌ی کش هم از رم سریع‌تر خواهد بود.

  4. Avatar ناشناس گفت:

    با سلام
    به هر حال تکنولوژی در حال پیشرفته. و وقتی یه تکنولوژی پیشرفته تر هست نمیشه از توسعه ی اون چشم پوشی کرد. قطعا با پیشرفت تکنولوژی در آینده و ارزانتر شدن قیمت تمام شده ی حافظه ها و افزایش حجم اطلاعات و نیاز به حافظه های پرسرعت تر نه تنها برای رم ها بلکه برای هارد ها هم از تکنولوژی حافظه های کش استفاده خواهد شد. تکنولوژی حافظه های کش یک تکنولوژی بسیار پیشرفته است

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام، بله دیدگاهتون درسته، مطمئنا با پیشرفت تکنولوزی حافظه‌های معمولی هم می‌تونند به اون سطح برسند، اما در حال حاضر به دلیل قیمت تمام‌شده‌ی بالا این مورد امکان‌پذیر نیست.

  5. Avatar رضا گفت:

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

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام خدمت شما دوست گرامی
      بله اکثر برنامه‌ها یکسری اطلاعات رو روی حافظه جانبی ذخیره می‌کنند، منتها فکر نمیکنم اینها کش باشه، بلکه یکسری اطلاعات هست که در اولین اجرای برنامه به دست میاد (مثلا میتونه شامل تنظیمات یه برنامه‌ی خاص باشه) و از اونجایی که این تنظیمات برای هر یوزر متفاوت هست در پوشه‌ی یوزر همون فرد ذخیره میشه.
      به عنوان مثال اگر دقت کرده باشید شما وقتی برای اولین بار اندروید استدیو رو اجرا می‌کنید یه سری اطلاعات و تنظیمات خاص از شما دریافت می‌کنه و یه کمی طول میشکه تا اولین اجرا تکمیل شه، بعدش یک فولدر در یوزر ایجاد می‌کنه و داده‌ها رو داخل اون فولدر قرار میده.
      یا به عنوان مثال بعضی از برنامه‌ها که احتیاج دارن در اولین اجرا داده‌ای رو از اینترنت دانلود کنند هم ممکنه داخل همون فولدر ذخیره کنند اطلاعاتشون رو.
      بنابراین این کش اون چیزی نیست که ما در CPU باهاش سروکار داریم، چراکه بالاخره این اطلاعات باید از حافظه خونده بشن، برن به رم و از اونجا به CPU انتقال پیدا کنند.
      اما در خصوص سوالتون، به نظرم دقیقا همین کلمه‌ای که به کار بردین رو داخل گوگل جستجو کنید: How to save app data in windows (به جای ویندوز می‌تونید پلتفرم مورد استفاده‌ی خودتون رو قرار بدید)
      دقیقا راهکارهاش اومده و میتونید استفاده کنید ازش.

  6. Avatar امید گفت:

    ببخشید حافظه RAM بیشتره یا cach?

    1. فرشاد گوهری فرشاد گوهری گفت:

      RAM بیشتره دوست عزیز.
      کش ساختار خاص، سرعت بسیار بالاتر و هزینه‌ی بیشتری داره.

  7. Avatar احمدويس گفت:

    میشه بگین یک ابر رایانه چنتا کش میموری داره

    1. فرشاد گوهری فرشاد گوهری گفت:

      ببینید حافظه‌ی کش CPU معمولا به صورت حجمی محاسبه میشه و نه تعدادی که در پردازنده هست، ابر رایانه‌ها معمولا چندتا پردازنده دارند و هر پردازنده‌ای هم برای خودش یک حجم معینی حافظه‌ی کش در اختیار داره، که البته مقدارش با توجه به نوع و برند CPU متفاوت هست.

  8. Avatar asma گفت:

    سلام مطلب مفیدی بود و اینکه آیا قیمت یک مدل سی پی یو با حافظه ۳ با ۶ مگ حافظه کش چه مقدار می تونه متفاوت باشه ؟

    1. فرشاد گوهری فرشاد گوهری گفت:

      خوب ببیند، کاملا بستگی داره به موارد مختلف داره، چون خود حافظه‌های کش هم انواع متفاوتی دارن و همچنین معیاری به نام Hit Ratio که میتونه در حافظه کش موثر باشه میران فضای ذخیره‌سازی کش تنها یکی از فاکتورهای مشخص کننده‌ی هزینه هست.

  9. Avatar مهرداد گفت:

    درود به شما و بسیار تشکر می کنم.
    یه سوال آیا حافظه کش فقط در هنگام اجرای نرم افزار کارایی داره یا در هنگام کار با بخش های نرم افزار مانند فتوشاپ هم کارایی داره ؟

    1. فرشاد گوهری فرشاد گوهری گفت:

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

  10. Avatar ناشناس گفت:

    ممنون از لطفتون ????

  11. Avatar محمد گفت:

    عالی بود.به نسبت سایت ها ومنابع دیگر بسیار مفهومی ورسا بود.موفق باشید

  12. Avatar مرتضی گفت:

    واقعا عالی بود اما کاش یه خورده در مرد رجیستر میگفتین
    توی سی پی یو های امروزی جایگاه رجیستر کجاست ؟ داخل هسته یا بین هسته و کش ؟

    1. فرشاد گوهری فرشاد گوهری گفت:

      سلام، بله حق با شماست، چون این مطلب بیشتر در مورد کش بود خیلی راجع به رجیستر صحبت نشد.
      سعی میکنم به زودی یه پست کامل درمورد حافظه رجیستر بنویسم، که خوشحال میشم مطالعش کنید و نظرتون رو بدید دربارش.
      در مورد سوالتون هم باید بگم حافظه رجیستر نزدیک ترین فاصله رو نسبت به هسته ها داره داده ها یا آدرس هاشون در حافظه رجیستر قرار میگیرن، پردازنده اول رجیستر رو مورد بررسی قرار میده و بعد میره سراغ کش. (البته تصویر بالا یه طرح ساده مفهومی از موقعیت کش بود، در مقاله ای که در مورد رجیستر مینویسم سعی میکنم دقیق تر رجیستر و جایگاهش رو مورد بررسی قرار بدم)