حافظه کش چیست و چه کاربردی دارد؟
حافظه ها یکی از عناصر اصلی همه سیستم های کامپیوتری به شمار می روند که برای عملکرد نرم افزار و سخت افزار بسیارمهم هستند. آن ها از تنوع بسیار زیادی برخوردارند و انواع مختلفی از حافظه وجود دارد. هر کدام از این حافظهها ظرفیت، نقاط قوت و ضعف خاصی دارند که باعث میشوند در حیطه خاصی مورد استفاده قرار بگیرند. برخی از آن ها برای ذخیرهسازی دادهها، برخی دیگر برای پردازش و برخی دیگر برای اضافه کردن قدرت به فرآیندهای نرمافزاری استفاده میشوند. به عبارت دیگر برخی برای کارهای کوتاه مدت و برخی هم برای کارهای طولانی مدت تنظیم خواهند شد.
قطعا تا به حال متوجه شده اید که وقتی یک اپلیکیشن را برای اولین بار در گوشی یا لب تاب خود باز می کنید مدت زمانی طول میکشد. این طولانی شدن زمان بارگذاری برنامهها، عمدتا به این خاطر است که دادههای کش شدهای برای آنها روی حافظه دستگاه مورد استفاده وجود ندارد. بنابراین بسیاری از توسعهدهندگان و متخصصان فناوری اطلاعات برای دسترسی سریعتر به دادههای کلیدی و مهم از حافظه کش (حافظه پنهان / Cache) استفاده میکنند. تمام پردازندههای امروزی چه آنهایی که در موبایلها استفاده میشوند، چه پردازندههای قدرتمند سرورها همگی حافظهی کش دارند.
در ادامه این مقاله با مفهوم و کاربرد حافظه کش بیشتر آشنا خواهید شد.
حافظه کش (Cache) به چه معناست؟
اصطلاح cache از کلمه Cacher فرانسه به معنای نهان کردن و مخفی کردن آمده است . این نوع حافظه ظرفیت کمتر و سرعت بیشتری نسبت به دیگر حافظههای مورداستفاده در کامپیوتر از جمله حافظه اصلی (RAM) دارد. به طوریکه CPU می تواند سریعتر از حافظه اولیه به آن دسترسی پیدا کند. بنابراین، از آن برای همگام سازی با CPU با سرعت بالا و بهبود عملکرد استفاده می شود.
حافظه کش پردازنده یا حافظه نهان CPU یک بخش بسیار مهم از انواع پردازشگر کامپیوتر و لپ تاپ به شمار می رود که برای کاهش زمان دسترسی به دیتاهای ذخیره در حافظه اصلی مورد استفاده قرار می گیرد. به این صورت که وقتی پردازنده از حافظه درخواست خواندن دارد، ابتدا محتویات حافظه کش سیستم بررسی میشود. اگر دادۀ مدنظر در حافظه CACHE سیستم وجود داشته باشد، دیگر نیازی به دسترسی به حافظۀ رم وجود ندارد و به این ترتیب، سرعت فرآیند بیشتر خواهد شد.
پس حافظه کش (Cache)، یک مکان ذخیرهسازی است که اطلاعات موقتی را جمعآوری میکند تا وبسایتها، مرورگرها و اپلیکیشنها بتوانند سریعتر بارگذاری شوند. به بیان دیگر نوعی حافظه میانجی کوچک است که سرعت دستیابی به اطلاعات را بالا میبرد.
بله همانطور که متوجه شدید این نوع حافظه نقش بسزایی در افزایش سرعت کار پردازنده ایفا می کند. بهطور کلی هرچه مقدار حافظۀ کش یک پردازنده بیشتر باشد، بدین معنی است که آن پردازنده قویتر است. پس در هنگام انتخاب پردازنده دقت کنید که بالاترین مقدار حافظۀ کش را داشته باشد.
اما برای آن که حافظه پنهان تأثیر مثبتی در کارایی سامانه داشته باشد باید جستجو درون آن در زمان بسیار کوتاهی انجام شود. یعنی تشخیص این که آیا دیتا مورد نیاز پردازنده مرکزی درون حافظه پنهان هست یا نیست باید بسیار بسرعت انجام شود. به همین دلیل ساختار حافظه پنهان کاملاً با ساختار حافظه اصلی متفاوت است و بسیار پیچیدهتر می باشد و هرچه حجم حافظه پنهان افزایش یابد این پیچیدگی نیز بیشتر میشود. علاوه بر آن سیستم ذخیرهسازی این حافظه، بینهایت سریع است و توانایی ذخیرهسازی بینهایت تراکنش دیتا را دارد. همچنین دادههای موجود در آن، برای همیشه امن هستند. قطعا چنین حافظهای وجود خارجی ندارد پس باید هنگام انتخاب پردازنده به آن دقت کنید. به همین دلیل حافظه پنهان بسیار گرانتر است و افزایش قیمت پردازنده با افزایش حجم حافظه پنهان بسیار زیاد است
با وجود اینکه کش نیز انرژی زیادی مصرف میکند، اما مزیتهای حافظهی کش آنقدر مهم هستند که استفاده از کش را توجیه میکند.
بنابراین اصطلاح کش در دنیای کامپیوتر، همزمان با تلاش برای افزایش کارایی CPU (پردازندههای مرکزی کامپیوترها) به صورت گسترده رواج پیدا کرد. بسته به اینکه دستگاه شما یک کامپیوتر رومیزی، لپتاپ یا موبایل باشد و از مرورگر یا اپلیکیشن استفاده کنید، انواع متفاوتی از کش را خواهید داشت که ظرفیت آن نیز بر اساس مدل و قدرت CPU متغیر است.
حافظه کش در کجا قرار دارد؟
این حافظه عموماً درون دل پردازنده یا CPU قرار دارد و بخش بزرگی از پردازنده را اشغال کرده است و گاهی نیز به شکل یک چیپ خارجی در کنار آن نصب می شود. که اگر در خارج از پردازنده نصب شود، به وسیله یک باس جداگانه به پردازنده متصل می گردد. پس حافظه CACHE چیزی نیست که بخواهید به صورت جداگانه از فروشگاه خریداری کنید.
تاریخچه پیدایش حافظه کش
تاریخچه اولیه فناوری کش تقریباً مصادف با ابداع و استفاده از حافظه مجازی است. در دهه ۱۹۶۰ به دلیل قیمت بالای نیمه رساناها، کامپیوترها به سمت استفاده از حافظه مجازی رفتند. در روزهای اولیه پردازنده ها سرعتی بسیار بیشتر از سرعت رم ها داشتند و به همین خاطر این اختلاف سرعت تبدیل به یک معضل در توسعه رایانه های شخصی بود. اما در دهه 1980 یک ایده در بین طراحان رایانه ها شکل گرفت و با ساخت پردازندههای پرسرعت شکاف سرعت بین پردازنده و حافظه بسیار بیشتر شد که این موضوع باعث پدید آمدن حافظههای میانی از جمله کش گردید.
رایانه های بزرگ اولین رایانه هایی بودند که از حافظ کش استفاده می کردند. حافظه های کش ابتدایی که در آغاز این فرایند به کار گرفته شدند، فضایی برابر با 16 تا 128 کیلوبایت داشتند.
اولین پردازنده های تولید شده به صورت انبوه دارای یک سطح از حافظه نهان (L1 Cache) بودند و دلیل این امر نیز سرعت بسیار پایین CPU و همچنین دستورات بسیار ساده و ابتدایی برای کار با سیستم عامل بود.
کمپانی اینتل نیز در سال 1993 با تولید اولین نسل از پردازنده های سری Pentium از حافظه نهان سطح اول بهره برد. در ادامه نیز حافظه ای به میزان 256 کیلوبایت به عنوان حافظه کش سطح دوم (Level 2 یا L2) به این سیستم ها اضافه شد.
پردازنده های سری پنتیوم، اولین سری از پردازنده هایی بودند که توانستند حافظه های کش دوگانه با ظرفیت 512 کیلوبایت را به دست بیاورند، البته این حافظه های کش در خارج از پردازنده نصب می شدند. آن ها جدا از حافظه های کش داخلی بودند. در این جا یکی از حافظه ها برای دستورالعمل ها و دیگری برای حفظ مقادیر و داده ها به کار گرفته می شد.
اما امروزه پردازنده های جدید در بخش حافظه نهان فاصله فراوانی با اولین نسل از پردازنده های تولید شده در جهان دارند و به طور کلی نمی توان عملکرد آنها را چه از لحاظ شرایط کارکرد و چه از لحاظ سرعت مقایسه کرد. حافظه نهان سطح اول در پردازنده های مدرن دارای تعداد بلوک های کوچکتر، انداز بلوک کوچکتر، تعداد بلوک های کمتر هستند، اما با این حال سرعت دسترسی به دیتاها در L1 Cache بسیار بالاست. حافظه های سطح بالاتر از جمله L2 Cache و L3 Cache دارای تعداد بلوک بیشتر، اندازه بلوک بزرگتر، بلوک های بیشتر در یک مجموعه و همچنین زمان دسترسی به نسبت طولانی تر در مقایسه با حافظه سطح اول هستند.
چند نوع حافظه کش پردازنده وجود دارد؟
حافظۀ کش انواع مختلف و ساختاری سلسله مراتبی دارد. در واقع این حافظه بهصورت لایهبندیشده از دادهها نگهداری میکند بنابراین بر اساس «سطح یا Level» طبقه بندی می شوند. این سطوح و طبقه ها در واقع نزدیک بودن و در دسترس قرار داشتن حافظه کش نسبت به پردازنده را نشان می دهند. در حال حاضر، کش در انواع L1 و L2 و L3 وجود دارد. L بهمعنی لایه (LEVEL) و عدد جلوی آن مشخصکنندۀ نوع کش است.
کش لایه اول L1
اولین سطح حافظه کش یا کش اصلی که به آن حافظه نهان سطح ۱ یا L1 می گویند. این نوع حافظۀ عموماً درون چیپ خود پردازنده تعبیه می شود و برای هر هسته بهصورت جداگانه طراحی می شود. پس هر هسته حافظه کش سطح ۱ خود را خواهد داشت. بنابراین می تواند با همان سرعتی که CPU کار می کند، کار کند . بیشترین سرعت، کمترین حجم و کمترین زمان وقفه مربوط به این سطح از کش می باشد. حجم آن برای هر هسته در حد کیلوبایت است و اندازه استاندارد آن چیزی بین 8 تا 64 کیلوبایت است.
کش لایه دوم L2
این حافظه به عنوان کش ثانویه یا ا L2 شناخته می شود. این کش ممکن است در درون یک CPU قرار گرفته باشد و یا آنکه به صورت یک چیپ ست جدا از یک پردازنده به کار رود، که با استفاده از باس های بسیار پرسرعت به کش و یا خود پردازنده متصل می شوند. هر لایه از کش در مقایسه با لایۀ قبل، ظرفیت بیشتر و سرعت کمتر دارد. پس کش لایۀ دوم ظرفیتی بیشتر از کش لایۀ اول دارد؛ ولی سرعتش پایینتر است. حجم آن برای هر هسته در حد چندصد کیلوبایت است واندازه استاندارد این کش در محدوده ۲۵۶ KB تا ۵۱۲ KB است.
کش لایه سوم L3
این لایه به عنوان یک حافظه اضافه و بهبود یافته برای افزایش کارایی دو سطح کش L1 و L2 به کار می رود. اگر دادهای در لایۀ دوم کش پیدا نشود، در لایۀ سوم جستوجو میشود. این حافظه در تمام پردازنده ها موجود نیست و در بیشتر پردازندههای امروزی و سطح بالا این نوع کش بهصورت یک لایۀ اشتراکی برای تمام هستهها استفاده میشود و کار آن جلوگیری از ایجاد گلوگاه در سیستم است و به نوعی برای تقویت عملکرد حافظه نهان سطح ۱ و سطح ۲ استفاده می شود. اگر یک دستور به کش L3 ارجاع شود، این دستور به سرعت به یکی از سطح های بالاتر L2 یا L1 فراخوان می شود.
لایۀ سوم سرعت پایینتر و ظرفیت بیشتری نسبت به لایۀ اول و دوم کش دارد. حجم این لایه از دیگر لایهها بیشتر و در حدود چند مگابایت برای کل پردازنده است. اندازه آن از ۱ مگابایت تا ۸ مگابایت است.
در گذشته، حافظه های کش L1 و L2 و نیز L3 با استفاده از ترکیب پردازنده و بخش های از مادر برد ساخته می شدند. اما امروزه هر سه سطح حافظه در درون خود پردازنده قرار می گیرد. این کار اساسا به این معنا است که شکل مادربورد ها تغییراتی پیدا می کند و از چیپ ست و باس های متفاوتی باید در آنها استفاده شود. لازم به ذکر است که حافظههای کش قابلیت ذخیرهسازی دائمی اطلاعات را ندارند که به آنها حافظه موقت میگویند.
حافظه کش چگونه کار می کند؟
بهطور کلی، Caching فرایندی است که در آن یک کپی از فایلهایی که قرار است به طور مکرر مورد استفاده قرار بگیرند، در یک مکان ذخیرهسازی موقت ذخیره میشوند، تا بعدا بتوان با سرعت بیشتری به آنها دسترسی پیدا کرد.
همان طور که اطلاع دارید، یک برنامه شامل مجموعهای دستورات است که باید توسط پردازنده اجرا شود. وقتی برنامه را اجرا میکنید این دستورات باید به نحوی از حافظه اصلی به CPU منتقل شود. اینجاست که سلسله مراتب حافظه وارد عمل میشود.
دادهها ابتدا در حافظه (RAM) بارگیری میشوند و سپس به CPU ارسال میشوند. پردازنده های امروزی قادر به انجام دستورات عظیم در هر ثانیه هستند و برای استفاده کامل از توان خود، باید بسیار سریع به حافظه دسترسی داشته باشد. اینجاست که حافظه کش وارد عمل میشود و با پردازنده به تبادل دیتا میپردازد و دادهها را به درون و بیرون پردازنده منتقل میکند.
پس حافظه کش زمانی وارد عمل می شود که شما در حال بازخوانی دستورات پیشین بوده و دیتاهای مربوط به آن در این حافظه وجود دارد. از این رو دیگر نیازی به صرف زمان برای دستیابی به دیتاهای مورد نظر و طی کردن مسیر پردازنده به حافظه اصلی و بالعکس وجود ندارد. حافظه نهان پس از هر بار راه اندازی مجدد (Restart) یا خاموش کردن کامپیوتر شخصی حذف و پس از روشن شدن آن شروع به ذخیره کرده داده های موقت می کند.
به طور کلی قانون کش در سیستم لایهبندی بدینگونه است که دادهها از حافظه (RAM) به حافظه نهان L3 و سپس به L2 و در آخر به L1 منتقل میشوند. اگر دادهها در سطح اول کش پیدا نشوند، لایۀ دوم جستوجو میشود و به همین ترتیب لایههای بعدی. اگر پردازنده بتواند آن را در سطح اول کش پیدا کند، به این حالت موفق شدن حافظه نهان (cache hit) گفته میشود.
تفاوت حافظه کش با حافظه اصلی یا RAM چیست؟
حافظه های RAM به عنوان حافظه اصلی شناخته می شوند، که عملیات محاسباتی را بر روی دیتاهایی که از منابع ذخیره سازی دریافت می کنند، انجام می دهند.
از لحاظ هزینه حافظه ی RAM گران قیمتر از حافظه کش است.
هر دو این حافظه ها از نوع حافظه های فرار هستند و می تواند دیتاها را تا زمانی که برق تأمین شود، ذخیره کند.
حافظه کش کوچکتر و سریعتر از حافظه رم است.
حافظه های RAM باید در هر چند هزارم ثانیه به روز شوند. در حالی که حافظه کش نیز به عنوان یک نوع از حافظه با دسترسی تصادفی شناخته می شود، که نیازی به تازه سازی (Refresh) ندارد.
حافظه ی کَش باعث افزایش سرعت دسترسی پردازنده می شود. چون به صورت مستقیم بر روی پردازنده قرار دارد و سبب می شوند که با سریعترین سرعت ممکن پردازنده بتواند به مکان های حافظه دسترسی داشته باشد و در عرض تنها چند نانو ثانیه به دستورالعمل و یا دیتاهای مورد نظر خودش دست پیدا کند. اما RAM سریعتر از یک Hard Disk، فلاپی دیسک، دیسک فشرده یا هر نوع رسانه ی ذخیره سازی ثانویه است.
پس پردازشگر مرکزی یا CPU قبل از خواندن RAM، اطلاعات را از حافظه ی کَش می خواند.
حافظه ی RAM می تواند داخلی و خارجی باشد، اما حافظه ی کَش داخلی است.