حافظه نهان، حافظه کش، حافظه موقت، اسمهایی هستند که هر کدام از ما، برای حداقل یکبار، شنیدهایم. کش (Cache Memory) یک فضای ذخیرهسازی سریع، کوچک و موقت است که به پردازنده کامپیوتر اجازه میدهد تا به سرعت به دادههای ضروری دسترسی پیدا کند و آنها را بازیابی کند. حافظه کش در مقایسه با حافظه اصلی (RAM) بهطرز باورنکردنیای سریع است و همین امر باعث سرعت بخشیدن به زمان کلی پردازش میشود.
اگر پردازنده برای پردازش، به دادهای نیاز داشته باشد؛ ابتدا حافظه کش را بررسی میکند. اگر داده وجود داشته باشد، CPU میتواند به سرعت به آن دسترسی پیدا کند. در غیر اینصورت، باید دادهها را از حافظه اصلی واکشی (Fetch) کند. در واقع میتوان گفت که کش یک بافر بین RAM و CPU است.
این مقاله توسط کارشناس فنی تیوان سرور به نگارش درآمده است؛ پیشنهاد میکنیم اگر میخواهید بهصورت کامل با Cache Memory آشنا شوید؛ حتما تا انتهای مطلب را مطالعه کنید.
حافظه کش، کوچک ولی پر سرعت!
حافظه Cache در مقایسه با RAM بین 10 تا 100 برابر سریعتر عمل میکند و تنها به چند نانو ثانیه برای پاسخ به درخواست CPU زمان نیاز دارد! کش یک حافظه کوچکتر و سریعتر است که نسخههای کپی از دادههای مورد نیاز را از حافظه اصلی ذخیره میکند. در یک CPU، کشهای جداگانهای وجود دارد که برای ذخیره دستورالعملها و دادهها استفاده میشوند. مهمترین کاربرد حافظه کش کاهش میانگین زمان دسترسی به دادهها از حافظه اصلی است.
حافظه کش گاهی اوقات به عنوان حافظه CPU هم شناخته میشود، زیرا معمولا بهصورت مستقیم درون چیپ CPU یکپارچه شده یا روی یک چیپ جداگانه قرار میگیرد که با یک باس جداگانه به CPU متصل است. بنابراین، این حافظه از نظر فیزیکی به پردازنده نزدیکتر و دسترسی به آن آسانتر است که باعث افزایش کارایی میشود.
یکی از نکاتی که بد نیست بدانید؛ این است که نام سخت افزار واقعی که برای حافظه کش استفاده میشود، Static Random Access Memory یا SRAM است. در صورتی که نام سخت افزاری که در حافظه اصلی استفاده میشود، DRAM است. نگران نباشید؛ در مقالات بعدی مجله تیوان این موضوع را به طور کامل شرح میدهیم.
انواع حافظه کش

شاید تعجب برانگیز باشد؛ اما میزان نزدیکی و میزان دسترسی حافظه کش به ریزپردازنده نوع سطح یا Level آن را نشان میدهد. به طور کلی چهار سطح حافظه پنهان داریم:
حافظه کش L1
حافظه نهان سطح یک را حافظه نهان اولیه نیز مینامند. کش L1 نسبتا کوچک اما بسیار سریع است و معمولاً در تراشه پردازنده به عنوان کش CPU تعبیه می شود. توجه داشته باشید از آنجایی که این حافظه در خود CPU موجود است، با همان سرعت CPU کار میکند. کش سطح 1 به دو نوع دیگر تقسیم می شود: کش دستورالعمل، برای ذخیره دستورالعملها و کش داده که وظیفه ذخیره دادههای مورد نیاز CPU را بر عهده دارد.
حافظه کش L2
حافظه نهان سطح دو که Secondary Cache یا حافظه ثانویه هم نامیده میشود، نسبت به کش سطح یک ظرفیت بیشتری دارد. این حافظه یا مستقیما روی خود CPU قرار میگیرد یا روی یک تراشه جداگانه نصب میشود. در حالتی که روی تراشه جداگانه باشد، یک گذرگاه اختصاصی و پرسرعت بین CPU و کش ساخته میشود تا فشار روی گذرگاه اصلی سیستم کم شده و سرعت کل سیستم پایین نیاید. به یاد داشته باشید که از نظر سرعت، L2 Cache کندتر از L1 Cache است.
حافظه کش L3
حالا نوبت به کش L3 میرسد! این سطح از حافظه کش بهمنظور بهبود عملکرد کشهای L1 و L2 طراحی شده و تخصصیتر از آنها عمل میکند. کش L3، که با نام Last Level Cache (LLC) نیز شناخته میشود؛ در مقایسه با L1 و L2 بزرگتر اما کندتر است. این حافظه خارج از CPU قرار دارد و توسط تمام هستهها به اشتراک گذاشته میشود، که نقش حیاتی در تبادل دادهها و ارتباطات بین هستهها ایفا میکند. ظرفیت کش L3 معمولاً بین 1 تا 8 مگابایت متغیر است. توجه داشته باشید که کش L3 معمولاً دو برابر سریعتر از حافظه DRAM است و این نوع کش در همه پردازندهها موجود نیست!
یک حقیقت پنهان!
توجه داشته باشید که میزان حافظه نهان (حافظه کش) با افزایش میزان حافظه فلش یا DRAM افزایش نمییابد. این موضوع کمی گیج کننده است؛ زیرا اغلب تصور میشود، Cache Memory و Memory Caching یکسان هستند.
همانطور که گفتیم، حافظه کش یک حافظه بسیار سریع و کوچک است که سرعت دسترسی پردازنده به دادهها را بسیار کم میکند؛ در حالی که Memory Caching با استفاده از DRAM یا فلش سبب بهبود عملکرد I/O میشود.
همه چیز در مورد نگاشت حافظه کش

نگاشت حافظه کش (Cache Memory Mapping) به تکنیکی اشاره دارد که از طریق آن دادههای موجود در حافظه اصلی به حافظه کش منتقل میشوند.
حافظه اصلی به چند پارتیشن با اندازههای مساوی تقسیم میشود که به آنها فریم یا بلوک گفته میشود.
حافظه کش نیز به پارتیشنهای مختلف با همان اندازه بلوکها تقسیم میشود که به خطوط (Lines) معروف هستند.
در طول فرآیند نگاشت، بلوک حافظه اصلی به سادگی در حافظه کش کپی میشود و به هیچ وجه از حافظه اصلی حذف نمیشود.
برای نگاشت حافظه کش سه نوع روش مجزا وجود دارد؛ که در این قسمت به بررسی آنها میپردازیم.
کش با روش نگاشت مستقیم
در روش کش با نگاشت مستقیم (Direct Mapped Cache)، هر بلوک از حافظه اصلی به طور دقیق به یک مکان خاص در حافظه کش نگاشت میشود. از نظر مفهومی، کش نگاشت مستقیم شبیه به یک جدول با سه ستون است:
- بلوک کش: حاوی دادههای واقعی واکشی شده و ذخیره شده.
- برچسب: شامل تمام یا بخشی از آدرس دادهای که واکشی شده است.
- بیت پرچم (بیت معتبر): نشان میدهد که دادههای موجود در ردیف معتبر هستند یا خیر.
این روش سادهترین تکنیک نگاشت است که در آن هر بلوک از حافظه اصلی فقط میتواند به یک خط خاص در کَش نگاشت شود. به بیان دیگر، در نگاشت مستقیم، هر بلوک از حافظه اصلی به یک خط خاص در حافظه کش اختصاص مییابد.
تعداد کل خطوط کَش که هر بلوک میتواند به آن نگاشت شود، به این صورت محاسبه میشود:
شماره خط کَش = (آدرس بلوک حافظه اصلی) Modulo (تعداد کل خطوط در حافظه کش)
برای مثال، فرض کنید حافظه کش به ‘n’ خط تقسیم شده است. در این حالت، بلوک «j» از حافظه اصلی تنها میتواند به شماره خط کش (j mod n) نگاشت شود.
کش با نگاشت کاملا انجمنی
نگاشت کاملاً انجمنی (Fully Associative Mapping) از نظر ساختاری شباهتهایی با نگاشت مستقیم دارد، اما با این تفاوت که هر بلوک حافظه اصلی میتواند به جای یک مکان خاص و از پیش تعیینشده، به هر مکان دلخواه در کش نگاشت شود.
در این نوع نگاشت، دادهها و آدرسهای حافظه به گونهای ذخیره میشوند که هر بلوک بتواند به هر خطی از حافظه کش منتقل شود. در این فرایند، از بیتهای شناسه (ID) برای شناسایی کلمه مورد نیاز در بلوک استفاده میشود. این روش به عنوان سریعترین و انعطافپذیرترین روش نگاشت شناخته میشود.
Set Associative Cache Mapping
این نوع نگاشت یک نسخه بهبود یافته از Direct Mapping است که مشکلاتی Thrashing را که در Direct Mapping ممکن است رخ دهد، حل میکند. در این روش، هر آدرس در کش میتواند با دو یا چند بلوک مختلف از حافظه اصلی مرتبط باشد. این باعث میشود که انعطافپذیری بیشتری نسبت به Direct Mapping داشته باشد و کارایی کش نیز بهبود مییابد.
در واقع Set Associative Cache Mapping یک روشی بین Direct Mapping و Fully Associative Mapping است. در این روش، هر بلوک از حافظه اصلی به یک زیرمجموعه از مکانهای کش نگاشت میشود. این روش را گاهی N-way Set Associative Mapping مینامند، که به این معناست که یک بلوک حافظه میتواند به هر یک از “N” مکان مشخص در کش سطح 1 (L1) نگاشت شود.
همانطور که از نام N-way Set Associative Mapping پیداست؛ حافظه کش به چندین مجموعه تقسیم میشود و هر مجموعه شامل N خط (Line) کش است. هر بلوک از حافظه اصلی فقط میتواند به یکی از این مجموعهها نگاشت شود.
اما در داخل آن مجموعه خاص، بلوک حافظه میتواند به هر Line کشی که خالی باشد، منتقل شود.
برای تعیین اینکه یک بلوک از حافظه اصلی به کدام مجموعه در کش نگاشت شود، از فرمول زیر استفاده میشود:
شماره مجموعه کش = (آدرس بلوک حافظه اصلی) Modulo (تعداد کل مجموعههای موجود در کش)
این فرمول به سادگی مشخص میکند که یک بلوک حافظه اصلی باید در کدام مجموعه از کش قرار بگیرد. سپس، داخل آن مجموعه، بلوک میتواند به هر خط خالی نگاشت شود. این روش باعث میشود که از فضای کش به صورت بهینهتر و انعطافپذیرتر استفاده شود.
دلیل اهمیت حافظه کش چیست؟
حافظه کش را یک سلاح مخفی در نظر بگیرید که بدون جلب توجه، کیفیت و سرعت بازیابی اطلاعات را بهبود میبخشد. این حافظه، دستورالعملها و دادهها و هر چیزی که CPU به احتمال زیاد به زودی نیاز خواهد داشت، را در خودش ذخیره میکند و به پردازنده این امکان را میدهد تا اطلاعات را خیلی سریعتر از حافظه اصلی دریافت کند.
صبر کنید! اشتباه نکنید! حافظه کش فقط سرعت را بهبود نمیدهد؛ بلکه یک شاخص کلیدی برای ارزیابی عملکرد کلی کامپیوتر شماست. یکی از راههای بررسی عملکرد حافظه کش این است که ببینیم چند بار سیستم موفق میشود دادههای مورد نیاز خود را از حافظه کش پیدا کند. به این موفقیت “برخورد کش (Cache Hits)” میگویند. یعنی وقتی سیستم دادهای که نیاز دارد را مستقیما از کش میگیرد، این یک برخورد کش است.
حالا، اگر سیستم نتواند داده را در حافظه کش پیدا کند و مجبور شود به جای دیگری مثل حافظه اصلی مراجعه کند، به آن “از دست رفتن کش (Cache Miss)” میگویند.
بنابراین، اگر سیستم شما بیشتر اوقات دادهها را از کش بگیرد (برخورد کش بالا باشد)، عملکرد آن بهتر است. اگر تعداد “از دست رفتن کش” زیاد باشد، یعنی سیستم بیشتر وقت خود را صرف جستجو در حافظه اصلی میکند و سرعت کلی کمتر میشود.
مزایای استفاده از حافظه کش (Cache Memory)
- پردازش سریعتر: با کاهش زمان دسترسی به دادههایی که مکررا مورد استفاده قرار میگیرند، عملکرد سیستم روانتر شده و سرعت پاسخدهی پردازنده بهطور چشمگیری افزایش مییابد.
- افزایش بهرهوری پردازنده: وقتی CPU مجبور نیست برای دریافت دادهها از حافظه اصلی منتظر بماند، زمان آزاد بیشتری برای انجام سایر عملیات خواهد داشت و در نتیجه کارایی کلی سیستم بالاتر میرود.
- کاهش مصرف انرژی: از آنجایی که پردازنده کمتر از حافظه اصلی استفاده میکند، میزان مصرف انرژی نیز کاهش پیدا میکند.
نوبت مقایسه حافظه اصلی با حافظه کش رسیده است…
حافظه DRAM به عنوان حافظه اصلی کامپیوتر عمل میکند و برای انجام محاسبات روی دادههایی که از حافظه ذخیرهسازی بازیابی میشوند، استفاده میشود. هر دو حافظه DRAM و حافظه کش، حافظههای فرّار هستند؛ یعنی وقتی برق قطع میشود، محتوای آنها پاک میشود. DRAM روی مادربرد نصب میشود و CPU از طریق یک اتصال باس به آن دسترسی دارد.
سرعت DRAM معمولا نصف سرعت حافظه کش L1، L2 یا L3 است و البته بسیار ارزانتر هم هست. با این حال، DRAM همچنان سریعتر از حافظه فلش، هارد دیسکها (HDD) و ذخیرهسازی نوار است. در دهههای اخیر، DRAM به کار گرفته شد تا دادههای دیسکی که بیشتر مورد استفاده قرار میگیرند را ذخیره کند و عملکرد ورودی/خروجی (I/O) را بهبود بخشد.
یک نکته مهم این است که DRAM باید هر چند میلیثانیه یک بار تازهسازی (Refresh) شود، در حالی که کش که نوعی حافظه دسترسی تصادفی (RAM) است، نیازی به تازهسازی ندارد. کش مستقیما درون CPU ساخته میشود تا پردازنده بتواند با بالاترین سرعت ممکن به موقعیتهای حافظه دسترسی پیدا کند. حافظه کش سرعت دسترسی در حد نانو ثانیه به دستورالعملها و دادههایی که مکرراً استفاده میشوند، ارائه میدهد. SRAM سریعتر از DRAM است، اما به دلیل پیچیدگی بیشتر، ساخت آن گرانتر تمام میشود.
سوالات متداول درباره کش (Cache Memory)
حافظه کش چیست و چه کاربردی دارد؟
حافظه کش یک حافظه بسیار سریع و موقت است که دادهها و دستورالعملهایی را که CPU بیشتر به آنها نیاز دارد ذخیره میکند تا سرعت پردازش سیستم افزایش یابد.
تفاوت حافظه کش با حافظه اصلی (RAM) چیست؟
RAM بزرگتر اما کندتر است و باید بهطور مداوم تازهسازی شود. حافظه کش کوچکتر اما بسیار سریعتر است و روی CPU قرار دارد و بدون نیاز به ریفرش کار میکند.
چرا کش باعث افزایش سرعت کامپیوتر میشود؟
چون CPU ابتدا دادهها را از کش دریافت میکند. اگر داده در کش باشد (Cache Hit)، دسترسی در حد نانوثانیه انجام میشود. این موضوع زمان پردازش را به شدت کاهش میدهد.
کش L1 و رجیستر چه تفاوتی دارند؟
رجیسترها سریعترین نوع حافظه و جزئی از خود پردازنده هستند. کش L1 مستقل از رجیسترهاست و برای ذخیره دادههای تکراری استفاده میشود. این دو یکسان نیستند.
آیا با افزایش رم، حافظه کش هم افزایش مییابد؟
خیر. میزان RAM هیچ ارتباطی به مقدار Cache ندارد. حافظه کش روی CPU تعبیه میشود و مقدار آن توسط معماری پردازنده مشخص میگردد.
سرور HPE G10
سرور HPE G10 Plus



















2 دیدگاه در “حافظه کش چیست؟”
خیلی تخصصی حافظه کش رو توضیح دادین ممنون