حافظه کش چیست و چطور کار میکند؟
کش به زبان ساده یک حافظهی بسیار سریع است که دقیقا درکنار واحدهای منطقی پردازندهی مرکزی قرار میگیرد. البته قطعا حافظهی کش بیش از این تعریف یک خطی در قدرت و سرعت پردازنده کاربرد و تأثیر دارد.
برای درک ابتدایی ساختار و کاربرد کش، یک حافظهی فرضی بدون نقص را در نظر بگیرید. سیستم ذخیرهسازی جادویی ما، بینهایت سریع است و توانایی ذخیرهسازی بینهایت تراکنش داده را دارد. همچنین دادههای موجود در سیستم مذکور، برای همیشه امن هستند. قطعا چنین حافظهای وجود خارجی ندارد، اما اگر این سیستم توسعه پیدا میکرد، طراحی پردازندهها بسیار آسان میشد. پردازندهها در چنین فرضیهای تنها برای انجام فرایندهای ریاضی به واحدهای منطقی نیاز پیدا میکردند. یک سیستم هم برای مدیریت تبادل دادهها مورد استفاده قرار میگرفت. ازآنجاکه سیستم جادویی فرضی، امکان ارسال و دریافت آنی تمامی اعداد را داشت، هیچیک از واحدهای منطقی پردازنده، نیازی به منتظر ماندن برای تبادل دادهها نداشتند.
همانطور که میدانیم، سیستم جادویی فرضیهی بالا وجود ندارد و احتمال توسعهی آن نیز به صفر میل میکند. بهجای سیستم مذکور، درحالحاضر درایوهای حالت جامد را در دست داریم که حتی بهترین نمونهها در میان آنها نیز توانایی مدیریت تمامی تبادلهای دادهای موردنیاز پردازندههای عادی را ندارند.
پیاده سازی و تاریخچه:
ماین فریم ها (رایانه های بزرگ یا Mainframe) اولین رایانه هایی بودند که از حافظ کش استفاده می کردند.، اما فناوری که ما امروز در رایانه های خودمان استفاده می کنید، بر اساس توسعه هایی در میکرو کامپیوترها به وجود آمده اند، توسعه پیدا کرده اند. در رایانه های شخصی ابتدایی، پردازنده ها، سرعتی بسیار بیشتر از سرعت رم ها داشتند و به همین خاطر این اختلاف سرعت تبدیل به یک معضل و گلوگاه در توسعه رایانه های شخصی بود.
در سالهای دهه 1980، این ایده در بین طراحان رایانه ها شکل گرفته که از رم های کوچکتر SRAM (که غالبا گرانتر هم بودند) در رایانه های شخصی استفاده شود. این کار سبب می شد عملکرد با هزینه نه چندان زیادی بهبود پیدا کند، و عملکرد حافظه اصلی رایانه نیز بهتر شود. در ابتدا حافظه های کش، جدای از سامانه های پردازنده ها به کار گرفته می شود. حافظه های کش ابتدایی که در آغاز این فرایند به خدمت گرفته شدند، فضایی برابر با 16 تا 128 کیلوبایت داشتند.
با به دنیا آمدن پردازنده های 486، شرکت اینتل حافظه کش سطح یک (Level 1 یا L1) را به پردازنده های خود اضافه کرد. در ادامه نیز حافظه ای به میزان 256 کیلوبایت به عنوان حافظه کش سطح دوم (Level 2 یا L2) به این سیستم ها اضافه شد. پردازنده های سری پنتیوم، اولین سری از پردازنده هایی بودند که توانستند حافظه های کش دوگانه با ظرفیت 512 کیلوبایت را به دست بیاورند، البته این حافظه های کش در خارج از پردازنده نصب می شدند. آن ها جدا از حافظه های کش داخلی بودند. در این جا یکی از حافظه ها برای دستورالعمل ها و دیگری برای حفظ مقادیر و داده ها به کار گرفته می شده است.
پردازنده های بعدی که بر مبنای ریز معماری اینتل P6 در سال 1995 طراحی شدند، اولین سری از پردازنده هایی بودند که تا سطح دوم حافظه کش را در داخل خود پردازنده جای دادند، تمام حافظه های کش که در این پردازنده ها به خدمت گرفته می شدند، اکنون با فرکانس ساعت یکسان با پردازنده کار می کردند. در ابتدای ارائه پردازنده های 6 Pاز حافظه های کشی استفاده می کردند که سرعت فرکانس آن ها پایین تر از پردازنده بود، این کار سبب می شود که سرعت پردازنده کاهش چشمگیری داشته باشد.
کش کنترلرهای ابتدایی از معماری کش تمام نگارشی (write-through) استفاده می کرند، که در آن داده ها در حافظه کش نوشته می شد، و بلافاصله با استفاده از آن ها داده های RAM بروزرسانی می شدند. این روش می توانست از دست رفتن داده ها را به حداقل برساند، اما موجب کاهش سرعت نیز می شد. بعدها، در رایانه های شخصی که مبتنی بر مدل 486 کار می کردند، معماری برگشت نوشتاری (Write-back) توسعه پیدا کرد، در اینجا نیازی به آنکه RAM رایانه بلافاصله به روز رسانی شود وجود نداشت. در عوض، داده ها، بر روی یک کش ذخیره می شدند و بعد از آن RAM در فاصله های زمانی مشخص و یا در شرایط خاص که در آن امکان از دست دادن داده ها و یا قدیمی شدن آن ها وجود داشت بروز رسانی می شد.
حافظه کش کجا قرار دارد؟
حافظه cache یا همان حافظه پنهان بین رم و پردازنده قرار دارد. مقداری از اطلاعات رم را در خود باقی نگه می دارد و بدین منظور طراحی شده است تا سرعت پردازنده ها را بالاتر ببرند. تا پردازنده ها بتوانند زودتر به اطلاعات دسترسی پیدا کنند. به همین دلیل سرعت حافظه نهان بسیار بالاتر از سرعت رم می باشد. اگرچه پردازنده ها بالاترین سرعت را در قطعات کامپیوتری دارند و با توجه به دستوراتی که از سیستم عامل دریافت میکنند کار میکنند.
کاربرد حافظه کش چیست؟
همانطور که ذکر شد پردازنده ها با دستوراتی که از سیستم عامل می گیرند با بالاترین سرعت شروع به کار می کنند. عملیات با سرعت خیلی سریع قابل اجرا می باشد و هرچقد ظرفیت حافظه نهان بیشتر باشد داده های بیشتری را میتواند در خود ذخیره کند. با توجه به این که همچنان سرعت آن در بالاترین نقطه قرار دارد.و در مقابل چیپست ها که ظرفیت کمتری نسبت به حافظه نهان دارند و قابلیت ذخیره سازی کم تری هم نیز دارند.اما با اینحال سرعت کندتری در مقایسه با حافظه پنهان دارند.هارد که یک قطعه مکانیکی است تمام فایل ها از جمله عکس ها یا فیلم ها و یا نصب نرم افزارها در آن شکل میگیرد.برای اجرای هر کدام از این موارد هارد به تنهایی نمیتواند فایل ها را مدیریت کند و سرعت آن بسیار کند است.
بنابراین وجود یک رم در یک کامپیوتر الزامی است. تا اطلاعاتی که روی هارد هستند را به رم سپس به پردازنده انتقال دهد.اما وجود یک رم بازهم مشکل سرعت پردازنده را نمیتواند برطرف کند. به همین خاطر بین رم و پردازنده این حافظه کش ایجاد شد تا این چنین مشکلات بر طرف شود.همچنین حافظه نهان داده هایی که cpu برای دستکاری نیاز دارد را نیز ذخیره می کند.
مکانیابی در حافظه کش:
این کار حافظه کش را قادر می سازد تا بتوان عملکرد رایانه را مبتنی بر مفهوم مکان یابی ارجاع ها، بهبود دهیم. مکانیابی (Locality) شرایط مختلفی را توضیح می دهد که سبب قابل پیش بینی تر شدن سامانه می شود، بنابراین جایی که یک داده به صورت دائمی ذخیره می شود، تبدیل به یک الگو برای دسترسی بهتر حافظه به آن می شود که حافظه کش بهتر می تواند بر روی آن تکیه کند.
در اینجا ما با چند نوع از مکانیابی روبرو هستیم. دو مورد از کلیدی ترین آنها به عنوان موقت (Temporal) و فضایی (Spatial) شناخته می شود. در مکانیابی موقت، یک مکان موقت مختص به زمانی است که یک منبع به صورت مکرر در یک مدت زمان کوتاه تحت دسترسی قرار میگیرد. مکان یابی فضایی، اشاره به زمانی دارد که داده های گوناگون و یا منابع مختلف، تحت دسترسی قرار می گیرند اما همه آنها در یک فاصله مکانی تقریبا نزدیک به هم قرار گرفته اند.
پیشنهاد مطالعه: معرفی و بررسی وظایف شرکت های هاستینگ
حافظه کش در برابر حافظه اصلی:
حافظه های DRAM به عنوان حافظه اصلی به خدمت گرفته می شوند، که عملیات محاسباتی را بر روی داده هایی که از منابع ذخیره سازی دریافت می کنند، انجام می دهند. هر دو حافظه DRAM و حافظه کش از نوع حافظه های فرار (Volatile Memory) هستند که در زمانی که جریان برق آنها قطع شود، اطلاعات بر روی آن نیز پاک می شود. DRAM، بر روی مادربورد نصب می شود، و CPU از طریق باس با آنها تماس پیدا می کند.
حافظه ها DRAM معمولا سرعتی نصف یا کمتر از حافظه های کش L1 ، L2 و یا حتی L3 دارند، و قیمت نسبتا پایین تری دارند. آن ها می توانند دسترسی سریع تری را نسبت به حافظه های فلاش، هارد دیسک ها (HDD)، و ذخیره سازهای دیگر دارند. تقریبا چند دهه زمان برده است تا بتوان به مکانی برسیم که در آن دسترسی به داده های پر استفاده بهبود قابل توجهی پیدا کند.
حافظه های DRAM باید در هر چند هزارم ثانیه به روز شوند. حافظه کش، نیز به عنوان یک نوع از حافظه با دسترسی تصادفی شناخته می شود، که نیازی به تازه سازی (Refresh) ندارد. آن ها به صورت مستقیم بر روی پردازنده هستند و سبب می شوند که با سریعترین سرعت ممکن پردازنده بتواند به مکان های حافظه دسترسی داشته باشد و در عرض تنها چند نانو ثانیه به دستورالعمل و یا داده های مورد نظر خودش دسترسی پیدا کند. SRAM ها سریعتر از DRAM ها هستند، اما به همان نسبت پیچیدگی بیشتری دارند و همین امر سبب افزایش قیمت آن ها می شود.
حافظه کش و حافظه های مجازی:
رایانه های همیشه دارای محدودیت فضای RAM هستند و این قضیه درباره حافظه های کش نیز صادق است. هنگامی که یک برنامه بزرگ و یا چند برنامه با همدیگر به اجرا در می آیند، این احتمال وجود دارد که تمام فضای RAM اشغال شود. به خاطر آنکه بتوانیم به گونه ای شایسته با این محدودیت فیزیکی در رم ها برخورد کنیم، سیستم های عامل ها می توانند از حافظه های مجازی (Virtual memory) استفاده کنند.
برای انجام این کار، سیستم عامل، به صورت موقف داده های غیرفعال بر روی RAM را بر روی یک منبع ذخیره سازی قرار می دهد، این روش سبب افزایش، فضای مجازی برای آدرس های بیشتر بر روی RAM می شود در عین حال آدرس های غیر فعال نیز بر روی هارد دیسک قرار گرفته اند. در اینجا هم آدرس ها و هم داده ها به صورت مشترک قابل جابجا شدن بین هارد و رم هستند. حافظه های مجازی این اجازه را به رایانه ها می دهند که بتوانند برنامه های سنگین تری و یا چندین برنامه را به صورت همزمان به اجرا در آورند و هر کدام از این برنامه ها نیز منبع بزرگ از رم را در اختیار داشته باشد.
به خاطر آنکه حافظه مجازی به درون یک حافظه فیزیکی کپی می شود، سیستم عامل حافظه را به صفحه های فایل (PageFile) یا فایل های تعویضی (Swap Files) تقسیم می کند که حاوی تعداد آدرس مشخص هستند. این صفحه ها، بر روی هارد دیسک ذخیره می شوند و هنگامی که به آنها نیاز شد، سیستم عامل آن ها را بر روی حافظه بازمی گرداند و در نهایت ان ها را به آدرس های مجازی و یا واقعی تبدیل می کند و از آن ها برای فراخوان فایل استفاده می کند.
پیشنهاد مطالعه: تاثیر هاست بر سئو سایت
انواع حافظه cache:
در گذشته تنها در کامپیوترهای اولیه ، کش لایه اول وجود داشت. اما بعدها به دلیل پایین بودن سرعت این لایه ، لایه های دوم و سوم نیز بوجود آمدند.
» کش لایه یک یا L1
که به عنوان اصلی ترین حافظه کش می باشد و ظرفیت آن بسیار کوچک است.
در صورتی که لایه های دوم و سوم ظرفیت بیشتری دارند. اما دسترسی به آنها زمان بیشتری میبرد و از ۲۵۶ کیلوبایت تا ۱ مگابیت می باشد. بالاترین سرعت را نسبت به مابقی لایه ها دارد. به دلیل اینکه به پردازنده اصلی (CPU) نزدیک تر است. در نتیجه زمان کمتری برای انتقال اطلاعات نیاز دارد.
» کش لایه دو یا L2
که لایه میانی است و بین لایه اول و سوم قرار گرفته است.
هنگامی که داده ها در لایه اول یافت نشوند سیستم سریع در لایه دوم به دنبال آن میگردد. گاهی مواقع L2 بخشی از cpu است اما گاهی یک چیپست جداگانه بین سی پی یو و رم است.این لایه از لایه اول مقداری کندتر است اما از لحاظ اندازه بزرگتر و ظرفیت بیشتری دارد که حجم آن از ۲۵۶ تا ۸ کیلوبایت متغیر می باشد.
» کش لایه سوم L3
این لایه در بین لایه اصلی و لایه سوم و روی مادر برد قرار دارد.
وظیفه آن اینست که اگر داده ای در لایه دوم پیدا نشد در لایه سوم بتوان آن را پیدا کند.همچنین سرعت آن پایین تر و ظرفیت آن بیشتر می باشد که از بوجود آمدن موانع هنگام استفاده و دریافت اطلاعات از رم جلوگیری می کند.ظرفیت این لایه از حافظه نهان از ۴ مگابایت تا ۵۰ مگا بایت می باشد که سی پی یوهای مدرن فضای زیادی را به لایه سوم اختصاص داده اند.