حافظه پنهان CPU چگونه کار می کند؟
متن خبر
تاکنون بارها نام حافظه یا Cache را شنیده اید، در این گزارش قصد بررسی نکات عمیق تر، فنی تر و تکنیکی تر را در رابطه با این حافظه داریم.
به گزارش سیتنا، تاکنون بارها نام حافظه یا Cache را شنیده اید. فرضا می گویند فلان CPU دارای یک مگابایت کش می باشد. در عین حال در این مجال قصد داریم تا پس از بیان یک مقدمه کلی در این رابطه و برای دوستانی که جدیداً با این مبحث آشنا می شوند، تا حد امکان، نکاتی عمیق تر، فنی تر و تکنیکی تر را در رابطه با این حافظه تشریح نماییم. بخصوص برای دوستانی که مایلند این مبحث و در واقع فناوری را بیشتر و عمیق تر درک کنند و با نحوه عملکرد آن به طور دقیق تری آشنا شوند.
معرفی CPU L2 Cache
حافظه پنهان یک حافظه با سرعت بالاست که در داخل پردازنده قرار گرفته است، تا سرعت دستیابی به داده و دستورات را افزایش دهد. باید در نظر گرفت که یک کامپیوتر کاملا بلااستفاده است، تا زمانیکه شما به پردازنده نگوئید که چه کار انجام دهد. در حقیقت پردازنده، برنامه ها را از حافظه اصلی (RAM) دریافت می کند. اما مشکل حافظه اصلی این است که با قطع جریان برق، محتویات آن از بین می رود. این نوع حافظه، حافظه فرار (RAM) نامیده می شود. بنابراین برنامه و داده باید در رسانه غیر فرار ذخیره شوند (یعنی هنگامی که شما کامپیوتر خود را خاموش می کنید محتویات آن از بین نرود).
رسانه هایی مثل دیسک سخت یا رسانه های نوری مثل CD و DVD.
همچنین هنگامی که شما برای اجرای یک برنامه بر روی آیکن آن در ویندوز کلیک می کنید، برنامه که معمولا بر روی هارددیسک ذخیره شده، به حافظه اصلی آورده می شود. سپس بوسیله مداری که کنترل کننده حافظه اصلی نامیده می شود و در داخل چیپ ست پل شمالی واقع شده، از حافظه اصلی (LOAD) می شود (لازم به ذکر است این مدار در پردازنده های AMD در داخل خود پردازنده واقع شده است)
بنابراین در شکل زیر برای سی پی یو های AMD چیپ ست را حذف کنید.
در نظر داشته باشید، CPU نمی تواند بطور مستقیم داده ها را از دیسک سخت دریافت کند، چون سرعت آنها بسیار پایین است (حتی اگر شما یک دیسک سخت با سرعت بسیار بالا را در نظر بگیرید).
در واقع برای اینکه منظور خود را بتوانیم بیان کنیم، فرض کنید که یک دیسک سخت Sata 300 که سریعترین دیسک سخت فراهم شده برای یک کاربر معمولی است، دارای بالاترین نرخ انتقال اسمی در حدود 300 مگابایت بر ثانیه است و این در حالیست که یک CPU می تواند دستورات را با سرعت داخلی 2GHz و با 64Bit مسیر داده (Data Path) که می تواند داده ها را با سرعت 16GB/s انتقال دهد، در حدود 50 بار از سریعترین دیسک سخت سریعتر است.
در شکل زیر شما می توانید یک دیاگرامی از پردازنده های رایج تک هسته ای را مشاهده نمایید. البته بلوک دیاگرام واقعی، بستگی به CPU دارد و شما می توانید مطالب ما را برای هر مدل بخواهید و سپس به بلوک دیاگرام واقعی آن نگاه کنید.
در شکل بالا نقاط نقطه چین در تصویر فوق، بدنه و ساختار داخلی CPU را نشان می دهد و حافظه RAM در بیرون از CPU واقع شده است؛ بنابراین در خارج از این نقطه چین قرار دارد. همچنین مسیر داده بین حافظه RAM و CPU به طور معمول 64 بیتی است (یا 128 بیتی، در صورتیکه حافظه به صورت دوگانه (Dual) پیکربندی شده باشد).
همه مدارهایی که داخل ناحیه نقطه چین واقع شده اند با کلاک داخلی CPU اجرا می شوند. ضمنا بسته به نوع CPU، قسمت های کمی از نواحی داخلی، حتی می توانند بالاتر از این کلاک اجرا شوند. بنابراین مسیر داده بین قسمت های CPU می تواند عریض تر باشد. یعنی انتقال بیت ها در هر کلاک می تواند بیشتر از 64 یا 128 باشد. برای مثال، مسیر داده بین حافظه پنهان L2 و حافظه پنهان دستوری L1 در CPUهای مدرن، معمولاً 256 بیتی است.
در عین حال مسیر داده بین حافظه پنهان دستوری L1 و واحد دریافت کننده (Fetch)، بسته به مدل CPU متفاوت است. اما غالبا 128 بیتی، متداول می باشد.
اما در هر صورت برای اینکه بیشترین تعداد بیت در هر کلاک مبادله شود، نیازمند انجام سریعترین مبادله نیز می باشد. یعنی نرخ مبادله هم باید بالا باشد. لازم است در اینجا کمی دقیق شویم و به همین خاطر اشاره می کنیم که بطور خلاصه همه سی پی یو های مدرن، دارای سه حافظه پنهان هستند:
L2 که بزرگترین آنها بوده و بین حافظه RAM و حافظه پنهان دستوری قرار دارد و می تواند دستورالعمل و داده را نگهداری کند.
حافظه پنهان دستوری L1 که برای ذخیره دستورالعمل هایی که توسط CPU اجرا شده اند بکار می رود.
حافظه پنهان داده L1 که برای ذخیره داده هایی که دوباره در حافظه RAM نوشته شده اند بکار می رود.
دقت شود که L1 و L2 به معنی سطح 1 و سطح 2 می باشد، که به ترتیب به فاصله آنها از هسته (Core) واحد اجرایی دلالت می کند.
بی تردید ایجاد تأخیر در حد صفر، برای حافظه استاتیک، بزرگترین مسئله است. مخصوصا با CPUهایی که با کلاک بسیار بالایی کار می کنند. از این رو ساختن حافظه های استاتیک با تأخیر در حد صفر، بسیار پر هزینه است.
بنابراین سازندگان از این نوع حافظه، فقط در حافظه پنهان L1 استفاده می کنند و حافظه پنهان L2 از حافظه استاتیک با سرعت برابر با آنچه در حافظه پنهان L1 است، استفاده نمی کند و همین مسئله کمی تأخیر ایجاد می کند. بنابراین به صورت جزئی از حافظه پنهان، L1 کندتر است.
باز هم نظر شما را به شکل بالا جلب می کنیم که در آن مشاهده می کنید که حافظه پنهان دستوری L1، به عنوان حافظه ورودی عمل می کند. در حالیکه حافظه پنهان داده L1، به عنوان حافظه پنهان خروجی عمل می کند. به عبارتی حافظه پنهان دستوری L1 که اغلب کوچکتر از حافظه کش L2 است، در مواقعی که برنامه شروع به تکرار قسمت هایی از خود می کند، به صورت جزئی موثر است. زیرا دستورات لازم، باید به واحد Fetch نزدیکتر باشند.
حافظه پنهان در پردازنده های چند هسته ای
در پردازنده هایی که هسته آنها بیش از یکی است، معماری حافظه پنهان L2، بسیار متنوع است. در پردازنده های Dual Core، هر هسته CPU برای خود حافظه پنهان L2 دارد. بنابراین به صورت یک CPU مستقل است. همچنین در پردازنده های 2 هسته ای اینتل، یک حافظه پنهان L2 وجود دارد که بین 2 هسته به اشتراک گذاشته شده است.
ضمنا در CPUهای Core 2 Duo که 4MB حافظه پنهان L2 دارند، بر خلاف تقسیم ثابت 50% که در CPUهای Dual Core (دو هسته ای) وجود دارد، یک هسته ممکن است از 3.5 مگابایت آن استفاده کند و هسته دیگر 512 کیلوبایت آن را مورد استفاده قرار دهد. از طرف دیگر CPUهای متداول چهار هسته ای مثل: Core 2 Extreme یا و Core 2 Quad، از دو تراشه 2 هسته ای استفاده می کنند و آن بدین معنی است که عمل به اشتراک گذاری بین هسته های 1و2و3و4 اتفاق می افتد. در آینده اینتل قصد دارد CPUهای 4 هسته ای را که از یک تراشه استفاده می کنند، متداول کند. در شکل پایین، مقایسه بین سه حافظه پنهان نشان داده شده است.
لازم به ذکر است، پردازنده های AMD مبتنی بر معماری K10، حافظه پنهان اشتراکی L3 دارند که با دوتای دیگر ترکیب خواهد شد. این در شکل پایین نمایش داده شده است. اندازه این حافظه پنهان بستگی به مدل CPU دارد. و خیلی شبیه به آنچه در اندازه حافظه پنهان L2 اتفاق افتاد، می باشد.
حافظه پنهان چگونه کار می کند؟
واحد Fetch با دریافت کننده، به دنبال دستورالعمل بعدی که قرار است در حافظه پنهان L1 اجرا شود می گردد. اگر آنجا نباشد، به دنبال آن در حافظه نهان L2 می گردد. سپس اگر در آنجا نبود، برای اجرای دستورالعمل بعدی، به حافظه RAM سر خواهد زد. در اصطلاح هنگامی که CPU داده یا دستورالعمل لازم را از حافظه پنهان دریافت کرد، ما آن را "موفقیت" می نامیم و هنگامی که داده یا دستورالعمل را به طور مستقیم از حافظه اصلی دریافت کند، شکست می نامیم. البته هنگامی که شما کامپیوتر خود را روشن می کنید، حافظه پنهان خالی است، بنابراین دستیابی به حافظه اصلی لازم است، و این فقدان حافظه پنهان، اجتناب ناپذیر است. اما پس از اینکه اولین دستور العمل آورده شد، شروع خود را نشان می دهد.
به عبارتی هنگامی که پردازنده، دستورالعمل را از محل معین حافظه اصلی (Load) کرد، مداری که کنترل کننده حافظه پنهان نامیده می شود، بلوک کوچکی از داده ها را که در محل قبلی داده فعلی که پردازنده بارگذاری کرده است را به حافظه پنهان می آورد. از آنجائیکه برنامه ها همیشه به صورت ترتیبی روند اجرایی دارند، محل بعدی حافظه اصلی که پردازنده آن را درخواست خواهد کرد، شاید آن محلی باشد که بلافاصله قبل از محلی باشد که قبلاً بار شده است. از اینرو کنترل کننده حافظه پنهان، مقداری داده قبل از اولین محل حافظه اصلی را که توسط پردازنده خوانده شده، بار می کند، و داده بعدی شاید در حافظه پنهان باشد. بنابراین پردازنده نیازی ندارد برای دریافت داده ها به بیرون مراجعه کند. چون آن از قبل به داخل حافظه پنهان که در داخل CPU تعبیه شده است، آورده شده است که می تواند آن را با همان میزان کلاک CPU دریافت کند. این مقدار داده، یک خط (Line) نامیده می شود، و آن معمولا 64 بایت طول دارد.
سازمان دهی حافظه پنهان
حافظه پنهان به طور داخلی به خطوطی تقسیم می شود که هر کدام می تواند 16 تا 128 بایت را نگهداری کند که البته به نوع CPU هم بستگی دارد. در اکثر CPUهای امروزی، حافظه پنهان به صورت خطوط 64 بایتی (512 بیت) سازماندهی شده است.
لازم به ذکر است، جزئیات در رابطه با حافظه پنهان بسیار گسترده تر و فنی تر از آن چیزی است که در این فرصت توضیح داده شد، اما از آنجایی که این جزئیات خارج از حوصله بسیاری از خوانندگان است، ما به همین مقدار بسنده می کنیم و امیدواریم همین مقدار نیز درک نسبتا عمیق و روشنی در رابطه با عملکرد حافظه پنهان، انواع آن و سایر مطالب مربوطه در اختیار شما قرار داده باشد.
منبع: صبحانه
افزودن دیدگاه جدید