cache یا حافظه نهان کامپیوتر شما، یکی از فرآیندهای مهم در علم کامپیوتر است. به عبارت دیگر Cache یک مفهوم کامپیوتری است که بر روی هر نوع کامپیوتر با یک شکل خاص وجود دارد. در این ترفند که بیشتر به یک مقاله شبیه است قصد داریم اصطلاح Cache را به طور کامل برای شما بازگو نموده و آن را با چندین مثال جالب مطرح کنیم.
اگر تاکنون یک کامپیوتر شخصی خریده باشید قطعا اصطلاح کاشه (Cache) را شنیده اید. کامپیوتر های مدرن دارای هر دو نوع کاشه های L1 و L2 حتی L3 هستند همچنین ممکن است از مقدار آن (سلرون، سلرون دی، فول) چیزهایی شنیده باشید این موضوع نشان میدهد که حافظه نهان یک فرایند مهم در علم کامپیوتر است که بروی هر کامپیوتری ظاهر می شود.
کاشه سازی یک فناوری مبتنی بر زیر سیستم حافظه کامپیوتر شما است. هدف اصلی یک کاشه شتاب دهی کامپیوتر شما و در عین حال پایین نگه داشتن قیمت آن است. کاشه سازی به شما امکان می دهد تا وظایف کامپیوتر خود را با سرعت بیشتری انجام دهید. برای درک ایده اصلی موجود در پشت یک سیستم کاشه اجازه دهید کار را با یک مثال فوق العاده ساده آغاز کنیم که برای نشان دادن مفاهیم کاشه سازی از یک کتابدار (پردازنده) استفاده می کند. اجازه بدهید یک کتابدار (پردازنده) را در پشت میزش تصور کنیم.او آنجا نشسته است تا کتبی که میخواهید.
را در اختیار شما قرار دهد برای ساده تر کردن وضعیت اجازه بدهید فرض کنیم که شما خودتان (کاربر پشت کامپیوتر) نمی توانید کتاب مورد نظر را بردارید شما باید کتاب مورد نظر خود برای مطالعه را از کتابدار (پردازنده) بخواهید تا وی آن را از یک مجموعه قفسه (یعنی بخش های مختلف پردازنده اعداد صفر و یک را ترجمه کند که این اعداد در RAM هستند) در سالن نگهداری کتابها (RAM) برای شما بیاورد ابتدا اجازه بدهید کار را با یک کتابدار فاقد کاشه آغاز کنیم.
اولین مشتری (اولین برنامه ایی که شما اجرا کرده اید) از راه میرسد او کتاب موبی دیک (یک برنامه مثل فتو شاپ) را در خواست میکند کتابدار (پردازنده) به سالن نگهداری کتاب (RAM) رفته و کتاب مورد نظر را برداشته به بخش مراجعه برگشته (یعنی ترجمه می کند و به مانیتور میفرستد) و کتاب را به مشتری می دهد بعدا مشتری برای باز گرداندن کتاب به کتابخانه بر می گردد (برنامه را می بندد) کتاب دار (پردازنده) کتاب مورد نظر را گرفته و آن را به سالن نگهداری بر می گرداند.
سپس کتابدار به بخش مراجعه باز گشته (یعنی منتظر اجرای فرمانهای بعدی شماست (حتی حرکت موس) و منتظر مشتری بعدی میماند فرض کنیم مشتری بعدی نیز کتاب موبی دیک را در خواست کند(یعنی دوباره برنامه فتوشاپ را اجرا کنیم) به این ترتیب کتابدار باید به سالن نگهداری(RAM) برگردد تا کتابی را که اخیرا با آن سرو کار داشته است را برداشته و به مشتری (کاربر) تحویل دهد.
در این مدل کتابدار (پردازنده) ناچار است برای آوردن هر کتاب (اجرای یک برنامه) یک چرخه کامل را طی نماید حتی کتاب های مشهوری که به دفعات در خواست شده است (یعنی برنامه هایی که به دفعات اجرا می شوند و بسته می شوند).
اجازه دهید یک کوله پشتی (حافظه نهان) را در اختیار کتابدار قرار دهیم تا بتواند 10 کتاب را در آن ذخیره کند (یعنی کتابدار دارای یک کاشه 10 کتابی است) او در این کوله پشتی حداکثر 10 عدد از کتابهایی را نگهداری می کند که مشتریان برگردانده اند اجازه دهید از مثال قبلی استفاده کنیم اما اینبار با کتابداری که به کاشه سازی جدید و بهبود یافته مجهز شده است.
روز آغاز میشود کوله پشتی کتابدار خالی است اولین مشتری از راه میرسد و موبی دیک را در خواست می کند جای تعجب نیست که کتابدار برای آوردن کتاب ناچار است به سالن نگهداری مراجعه کند او کتاب را به مشتری میدهد بعدا مشتری بازگشته و کتاب را به کتابدار می دهد کتابدار بجای مراجعه به سالن به سالن نگهداری کتاب را در کوله پشتی خود قرار میدهد یک مشتری از راه میرسد و باز هم کتاب موبی دیک را در خواست می کند کتابدار پیش از انکه به سالن نگهدار مراجعه کند بررسی می کند که آیا کتاب مورد نظر در کوله پشتی وی قرار دارد یا نه.
او کتاب مورد نظر را می یابد و تمام کاری که باید انجام دهد این است که آن را از کوله پشتی در آورد و به مشتری بدهد و کار به پایان می رسد.
اگر تا کنون برای خود کامپیوتری تهیه کرده باشید، واژه "Cache" برای شما آشنا خواهد بود. کامپیوترهای جدید دارای Cache از نوع L1 و L2 می باشند. شاید در هنگام خرید یک کامپیوتر از طرف دوستانتان توصیه هائی به شما شده باشد مثلأ: "سعی کن از تراشه های Celeron استفاده نکنی چون دارای Cache نمی باشند!"
Cache یک مفهوم کامپیوتری است که بر روی هر نوع کامپیوتر با یک شکل خاص وجود دارد. حافظه های Cache، نرم افزارهای با قابلیت Cache هارد دیسک و صفحات Cache همه بنوعی از مفهوم Caching استفاده می نمایند. حافظه مجازی که توسط سیستم های عامل ارائه می گردد نیز از مفهوم فوق استفاده می نماید.
مبانی Caching
Caching یک تکنولوژی استفاده شده برای زیر سیستم های حافظه، در کامپیوتر است. مهمترین هدف یک Cache افزایش سرعت و عملکرد کامپیوتر بدون تحمیل هزینه های اضافی برای تهیه سیستم است. با استفاده از Cache عملیات کاربران با سرعت بیشتری انجام خواهد شد.
حافظه Cache چیست؟
فرض کنیم که شما هر روز به رستوران می روید. هر روز راس ساعت 5 بعد از ظهر سفارش غذا می دهید. هر روز 4 نوع غذا را به ترتیب خاص سفارش می دهید. راس ساعت 5 همبرگر سفارش می دهید، گارسون سفارش شما رو بررسی می کند، به آشپزخونه میرود، بعد از 1 دقیقه همبرگر را برای شما می آورد، شما همبرگر را خورده و سفارش سوسیس می دهید. مجددأ سفارش توسط گارسون به آشپزخانه منتقل شده و بعد از یک دقیقه غذا آماده می شود. به همین ترتیب شما سه غذای دیگه را سفارش داده و برای هر غذا 1 دقیقه معطل میشوید. خوب شما هروز همین غذاها را سفارش داده و برای آماده شدن هر غذا 1 دقیقه معطل می شوید. گارسون با خودش فکر می کند که برای اینکه هم خودش کمتر کار کند و هم شما کمتر معطل شوید، 1 میز دیگر آماده از غذاهای شما را تهیه کند و بلافاصله بعد از سفارش شما غذا را روی میزتان قرار دهد. در اینجا گارسون "باس"، آشپزخانه "رم"، و میز آماده "کش" در نظر گرفته می شوند. بعد از چند روز شما همبرگر را میخورید، طبق عادت گارسون برای شما سوسیس می آورد، اما شما میگویید که امروز پیتزا می خواهم! اینجا گارسون مجددا مجبور میشود که 1 دقیقه شما را در انتظار نگه دارد تا پیتزا را برایتان بیاورد. در اینجا گارسون میز دومی را تهیه می کند که بر اساس انتخاب های دوم شما چیده شده است. بدین ترتیب شما اگر غذایی را سفارش دهید که در میز اول نباشد، اما در میز دوم باشد بلافاصله غذا را میل می کنید و معطل نمی شوید. میز دوم در اینجا کش سطح دو یا "Cache L2" است. اصطلاحی که امروزه در رابطه با فول کش یا هالف کش گفته میشود همین کش سطح 2 است. اصول کار پردازنده بدین صورت که پیش بینی دستورات بعدی را کرده و جواب دستورات را در حافظه ی نهان یا همون کش قرار میدهد. جالب است که بدانید پردازنده 90% دستورات بعدی را درست حدس میزند و اگر حدس پردازنده غلط از کار در بیاد مجبور است که به حافظه ی رم مراجعه نماید که همین مراجعه باعث تاخیر زیادی در کار پردازنده میشود. نکته قابل گفتن این است که این حافظه بسیار گران قیمت است و به صرفه نیست که برای بالا بردن سرعت کامپیوتر حافظه کش تهیه کنید (مجبورید پردازنده را هم عوض کنید!).
کتابداری را در نظر بگیرید که در یک کتابخانه مسئول تحویل کتاب به متقاضیان است. فرض کنید در سیستم فوق (درخواست و تحویل کتاب) از مفهوم Cache استفاده نمی گردد. اولین متقاصی کتابی را درخواست می نماید(فرض شده است که متقاضی خود نمی تواند مستقیما" کتاب مورد نظر را از قفسه مربوطه،بردارد)، کتابدار، کتاب مورد نظر را از قفسه مربوطه پیدا و در ادامه آن را تحویل متقاضی می نماید. متقاضی پس از ساعاتی مراجعه و کتاب را تحویل می دهد. کتابدار، کتاب تحویلی را مجددا" در قفسه مربوطه قرار می دهد. پس از لحظاتی یک متقاضی دیگر مراجعه و همان کتاب قبلی را درخواست می نماید، کتابدار مجددا" می بایست به بخش مربوطه در کتابخانه مراجعه و پس از بازیابی کتاب، آن را در اختیار متقاضی دوم قرار دهد.همانگونه که ملاحظه می گردد، کتابدار مکلف است برای تحویل هر کتاب (ولو کتاب هائی که فرکانس استفاده از آنان توسط متقاضیان زیاد باشد) به بخش مربوطه مراجعه و پس از یافتن کتاب آن را در اختیار متقاضیان قرار دهد. آیا روشی وجود دارد که با استناد به آن بتوان عملکرد و کارآئی کتابدار را بهبود بخشید ؟
در پاسخ به سوال فوق می توان با ایجاد یک سیستم Cache برای کتابدار، کارآئی آن را افزایش داد. فرض کنید بخشی را با ظرفیت حداکثر ده کتاب در مجاورت (نزدیکی) کتابدار آماده نمائیم. کتاب هائی که توسط متقاضیان برگردانده می شود، در بخش فوق ذخیره خواهند شد. مثال فوق را با در نظر گرفتن سیستم Cache ایجاد شده برای کتابدار مجددا" دنبال می نمائیم. در ابتدای فعالیت روزانه، بخش Cache خالی بوده و هنوز در آن کتابی قرار نگرفته است. اولین متفقاصی مراجعه و کتابی را درخواست می نماید. کتابدار می بایست به بخش مربوطه مراجعه و کتاب را از قفسه مربوطه براشته و در اختیار متقاضی قرار دهد. متقاضی پس از تحویل کتاب، چند ساعت بعد مراجعه و کتاب را تجویل کتابدار خواهد داد. کتابدار، کتاب تحویلی را در بخش پیش بینی شده (ترفندستان) برای Cache قرار می دهد. لحظاتی بعد متقاضی دیگر مراجعه و درخواست همان کتاب را می نماید.کتابدار در ابتدا بخش مربوط به Cache را جستجو و در صورت یافتن کتاب، آن را به متقاضی تحویل خواهد داد. در این حالت ضرورتی به مراجعه کتابدار به بخش و قفسه های مربوطه نخواهد بود. در روش فوق زمان تحویل کتاب به متقاضی بهبود چشمگیری پیدا خواهد کرد. در صورتیکه کتاب درخواستی توسط متقاضی در بخش Cache کتابخانه نباشد، چه اتفاقی خواهد افتاد؟ در ابتدا مدت زمانی صرف خواهد شد که کتابدار به این اطمینان برسد که کتاب درخواستی در بخش Cache موجود نمی باشد (جستجو) یکی از چالش های اصلی در رابطه با طراحی Cache به حداقل رساندن زمان جستجو در Cache است.سخت افزارهای جدید، زمان فوق را به صفر نزدیک کرده اند. پس از حصول اطمینان از عدم وجود کتاب در بخش Cache، کتابدار می بایست با مراجعه به بخش مربوطه آن را انتخاب و در ادامه در اختیار متقاضی قرار دهد.
با توجه به دو مثال فوق، چندین نکته مهم در رابطه با Cache استنباط می گردد:
- تکنولوژی Cache، استفاده از حافظه های سریع ولی کوچک، بمنظور افزایش سرعت یک حافظه کند ولی با حجم بالا است
- زمانیکه از Cache استفاده می گردد، در ابتدا می بایست محتویات آن بمنظور یافتن اطلاعات مورد نظر بررسی گردد. فرآیند فوق را Cache hit می گویند. در صورتیکه اطلاعات مورد نظر در Cache موجود نباشند (Cache miss)، کامپیوتر می بایست در انتظار تامین داده های خود از حافظه اصلی سیستم باشد (حافظه ای کند ولی با حجم بالا)
- اندازه Cache محدود بوده وسعی می گردد که ظرفیت فوق حتی المقدور زیاد باشد، ولی بهرحال اندازه آن نسبت به رسانه های ذخیره سازی دیگر بسیار کم است.
- این امکان وجود خواهد داشت که از چندین لایه Cache استفاده گردد.
Cache در کامپیوتر
کامپیوتر، ماشینی است که زمان انجام کارها توسط آن با واحدهای خیلی کوچک اندازه گیری می گردد.زمانیکه ریزپردازنده قصد دستیابی به حافظه اصلی را داشته باشد، می بایست مدت زمانی معادل 60 نانوثانیه را برای این کار در نظر بگیرد. سرعت فوق بسیار بالا است ولی سرعت ریزپردازنده بمراتب بیشتر است. ریزپردازنده قادر به داشتن سیکل هائی به اندازه دو نانوثانیه است. تفاوت سرعت بین پردازنده و حافظه کاملا" مشهود بوده و قطعا" رضایت پردازنده در این خصوص کسب نخواهد شد. پردازنده می بایست تاوان کند بودن حافظه را خود بپردازد. انتظار پردازنده و هرز رفتن زمان مفید وی کوچکترین تاوانی است که می بایست پردازنده پذیرای آن باشد.
بمنظور حل مشکل فوق، فرض کنید از یک نوع حاص حافظه، با ظرفیت کم ولی با سرعت بالا (30 نانوثانیه)، استفاده گردد. سرعت دستیابی به حافظه فوق دو مرتبه سریعتر نسبت به حافظه اصلی است.این نوع حافظه راL2 Cache می نامند. فرض کنید از یک حافظه بمراتب سریعتر ولی با حجم کمتر استفاده و آن را مستقیما" با پردازنده اصلی درگیر نمود. سرعت دستیابی به حافظه فوق می بایست در حد و اندازه سرعت پردازنده باشد.این نوع حافظه ها را L1 Cache می گویند.
در کامپیوتر از زیرسیستمهای متفاوتی استفاده می گردد.از Cache می توان در رابطه با اکثر زیر سیستمهای فوق استفاده تا کارآئی آنان افزایش یابد.
تکنولوژی Cache
یکی از سوالاتی که ممکن است در ذهن خواننده این بخش خطور پیدا کند این است که "چرا تمام حافظه کامپیوترها از نوع L1 Cache نمی باشند تا دیگر ضرورتی به استفاده از Cache وجود نداشته باشد؟" در پاسخ می بایست گفت که اشکالی ندارد و همه چیز هم بخوبی کار خواهد کرد ولی قیمت کامپیوتر بطرز قابل ملاحظه ای افزایش خواهد یافت. ایده Cache، استفاده از یک مقدار کم حافظه ولی با سرعت بالا (قیمت بالا) برای افزایش سرعت و کارآئی میزان زیادی حافظه ولی با سرعت پایین (قیمت ارزان) است.
در طراحی یک کامپیوتر هدف فراهم کردن شرایط لازم برای فعالیت پردازنده با حداکثر توان و در سریعترین زمان است. یک تراشه 500 مگاهرتزی، در یک ثانیه پانصد میلیون مرتبه سیکل خود را خواهد داشت (هر سیکل در دونانوثانیه). بدون استفاده از L1 و L2 Cache، دستیابی به حافظه حدودا" 60 نانوثانیه طول خواهد کشید. بهرحال استفاده از Cache اثرات مثبت خود را بدنبال داشته و باعث بهبود کارآئی پردازنده می گردد.اگر مقدار L2 Cache معادل 256 کیلو بایت و ظرفیت حافظه اصلی معادل 64 مگابایت باشد، 256000 بایت مربوط به Cache با استفاده از روش های موجود قادر به Cache نمودن 64000000 بایت حافظه اصلی خواهند بود.

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

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

فراخوانی اطلاعات از سمت کش نیز میتواند حالتهای
مختلفی داشته باشد. در یکی از این حالتها تنها در یک مسیر اطلاعات روی کش
کپی میشوند که مزیتهایی مثل آدرسدهی بهتر اطلاعات روی رم را دارد اما
در مقابل چندین مسیر برای کپی کردن اطلاعات روی رم بکارگرفته میشوند که
این روش هم مزایا و معایبی دارد. مزیت آن در این است که اطلاعات روی کش
بازنویسی نمیشوند و زمان دسترسی به دادههای رم کوتاهتر خواهد بود اما از
طرف دیگر مقایسه اطلاعات انتقال داده شده روی کش با رم باعث افزایش زمان
تاخیر رم میشود. امروزه مشخص شده که استفاده از چند مسیر انعطاف بیشتری
را برای پردازنده ایجاد میکند و کارایی بهتری دارد. اینتل در پردازندههای
جدید خود مثل Core i7 و i5 در سطح L1 از هشت مسیر برای انتقال
دستورالعملها و از 4 مسیر برای انتقال دادهها استفاده میکند که در سطح
L2نیز تقریبا همینطور است و 8 مسیر برای انتقال اطلاعات استفاده میشوند
در حالی که در لایه سوم 16 مسیر برای ارتباط گذاشته شده است.
اما در AMD شیوه متفاوتی به کار گرفته شده که از
مهمترین دلایل اختلاف این نوع پردازندهها با اینتل است. در فنومهای
چهارهستهای برای لایه اول تنها 2 مسیر ایجاد شده که باعث کاهش زمان تاخیر
میشود اما در کنار آن ظرفیت لایه L1 افزایش داده شده و 64 کیلوبایت برای
دستورالعملها و 64 کیلوبایت نیز برای دادهها است. AMD در لایههای بعدی
تهاجمیتر عمل میکند بطوریکه در لایه دوم همان هشت مسیر را استفاده کرده
که مشابه اینتل است ولی در لایه سوم 48 مسیر برای انتقال اطلاعات فراهم شده
است.

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

کش در لایه دوم تا مدتها به صورت مستقل برای هر هسته
بود و حتی پیش از آن هم فقط AMD از این لایه درون CPU استفاده میکرد و در
اینتل کش لایه دوم با هستهها روی یک سطح نبودند. در واقع پس از معرفی
فناوری ساخت 180 نانومتری کش لایه دوم به سطح سیلیکونی CPU اضافه شد. با
ورود پردازندههای Core 2 Due کش مشترک در اینتل خلق شد و لایه دوم بطور
مشترک بین دو هسته مورد استفاده قرار گرفت و این روش در چهار هستهای های
اینتل هم ادامه پیدا کرد تا جایی که در چهار هستهای دو کش L2 دیده میشد.
زیرا این مدلها چهار هستهای واقعی نبودند و از اتصال دو سطح سیلیکونی هر
یک با دو هسته تشکیل شدند. البته دلیل اینتل برای این شیوه مسائل اقتصادی و
صرفه این مدلها مطرح شد با این حال AMD ساختار جدید را در فنومها پیاده
کرد که همراه با کش لایه سوم بود.

کش لایه سوم سالها پیش ایجاد شد و البته مشکلات خاص
خود را داشت بطوریکه بعد از استفاده IBM در سال 1995 این سطح حافظه چندان
مورد توجه قرار نگرفت تا اینکه اینتل این لایهها را در سال 2003 به رده
حرفهای محصولات خود اضافه کرد. نتیجه این شد که ایتانیوم و پنتیوم 4
اکستریم صاحب L3 شدند و نسل فنومهای AMD نیز از همان ابتدا با L3 همراه
شدند هر چند که مدلهای اولیه تنها 2 مگابایت حافظه L3 داشتند و در مدلهای
بعدی هم بطور متوسط از 6 مگابایت حافظه استفاده شد. در این مرحله اینتل
توانست سطح بالاتری از کش را در لایه سوم ارائه دهد.
اگر از اساس کار حافظه کامپیوتر
اطلاع داشته باشید، در مییابیدکه این کار میتواند سرعت کامپیوتر را
افزایش دهد. به این ترتیب که با ذخیره کردناطلاعاتی که بیشتر مورد استفاده
قرار میگیرد میتوان زمان مورد نیاز برای جستجو درتمام اطلاعات حافظه را
از بین برد.
حال فرض کنید که مسئول کتابخانه از یک الگوریتم استفاده
میکند. به این ترتیب که وقتی کسی برای دریافت کتاب مراجعه میکند، او
باید ابتدا درون قفسهرا نگاه کند و اگر کتاب مورد نظر آنجا نباشد به مخزن
مراجعه کند. زمانی که مسئولصرف میکند تا داخل قفسه را بگردد و سپس به مخزن
برود، ممکن است نظرتان را برایقرار دادن آن قفسه عوض کند و از خیر خریدن
قفسه بگذرید.
مهمترین قسمت ساختن Cache همین است. این که چگونه
میتوان باوجود Cache و با وجود این زمان اضافی، به بهترین نحو و به صورت
بهینه از این سیستماستفاده کرد.
در کامپیوتر زمان در مقیاس نانو ثانیه و شاید کمتر از
آن سنجیدهمیشود. پردازشگر فقط ۶۰ نانو ثانیه زمان میخواهد که به اطلاعات
داخل RAM دسترسیپیدا کند. ولی با وجود Cache این زمان تنها ۲ نانوثانیه طول
میکشد. به همین دلیل۶۰نانو ثانیه خیلی طولانی به نظر میرسد.
اگر یک حافظه کوچک بین RAM و پردازشگر قراربگیرد و کار
Caching را انجام دهد و دسترسی به اطلاعات آن با سرعت انجام شود، این کار
به نظر خوبمیرسد.
اگر فقط ۳۰نانوثانیه طول بکشد، یعنی نصف زمان لازم برای دسترسیمستقیم پردازشگر به RAM. این همان L۲یا Level ۲ Cache است.
اگر این حافظه را داخل پردازشگر قرار دهیم زمان دسترسی
به اینحافظه مساوی زمانی است که پردازشگر صرف میکند تا اطلاعات را پردازش
کند. این همان L۱یا Level ۱ Cache است. این نوع Cache در یک پردازشگر
پنتیوم ۲۲۳ مگاهرتزی با۳.۵برابر L۲کار میکند که آن هم ۲ برابر سریعتر از
دسترسی بدون Cache به RAM است.
بعضی از پردازشگرها هر دو Cache را در داخل خود دارد.
این Cache که بین پردازشگر و RAM قرار داده میشود و از اجزای Motherboard
است، L۳نامیده میشود.
زمان اتصال به اینترنت، کمترین سرعت در سرعتهای موجود
در کاربا کامپیوتر است. هربار که از اینترنت استفاده میکنید، مرورگر
اطلاعات صفحه وب رادر فایلی ذخیره میکند و در صورتی که دوباره به همان
صفحه بروید (Back) به جایاتصال به سرور مستقیماً به فایل ذخیره شده میرود و
زمان کمتری صرف میشود.
Cache تنها در پردازشگر وجود ندارد و میتوان آن را در
داخلاجزای دیگر قرار داد. برای مثال هارد دیسک شما دارای Cache بسیار سریع
است. هر بارکه اطلاعات خوانده میشود در Cache هارد دیسک نیز ذخیره میشود.
CD Drive دستگاهشما نیز دارای Cache است.
سالهاست که فلاپی دیسک دیگر کاربرد ندارد. ولی اگر هنوز
هم ازفلاپی دیسکهایی قدیمی خود دارید، میتوانید با انجام یک عملیات ساده
کار Cache رادقیقاً در فلاپی ببینید.
یک فایل متن به فرض مثال به بزرگی ۳۰۰کیلوبایت را روی
فلاپیبریزید. یک بار کامپیوترتان را خاموش و روشن کنید. فایل را از روی
فلاپی اجرا کنید. چراغ فلاپی درایو روشن میشود و شروع به خواندن فایل
میکند. یک بار دیگر فایل رااز روی فلاپی باز کنید. مشاهده خواهید کرد که
دیگر فلاپی درایو کار نمیکند و فایلبه سرعت اجرا میشود. این همان ذخیره
اطلاعات روی Cache است.
سوال معمولی که در ذهن همه میتواند باشد این است که
چرا تمامحافظهها را آنقدر پر سرعت نمیسازند که دیگر نیازی Cache نباشد.
در جواب باید گفتکه این کار کاملاً عملی است ولی قیمت کامپیوتر به شدت زیاد
میشود. هدف اصلیاستفاده از تمام این قطعات این است که کاری را که میتوان
با یک قطعه گران انجامداد با تعداد بیشتری قطعه ارزان انجام داد.
در معماری کامپیوتر هدف این است که پردازشگر با تمام
سرعت خودکار کند. برای مثال یک پردازشگر ۵۰۰ مگاهرتزی، ۵۰۰ میلیون بار در
یک ثانیه یکپردازش را انجام میدهد. که به عبارتی یک پردازش را در ۲ نانو
ثانیه انجام میدهد. بدون Cache هر بار دسترسی به RAM ۶۰نانوثانیه طول
میکشد. این امر به این معنی استکه برای هر بار دسترسی به RAM ،۳۰نوبت
پردازش به تا?خیر میافتد.
این که چطور اطلاعات هر برنامه Cache (ذخیره) میشود،
به قسمتیاز علوم کامپیوتر برمیگردد که Locality Of Reference نام دارد.
این روش یا بهتربگوییم، تئوری، بیان میکند که فقط بخش بسیار کوچکی از هر
برنامه؛ عامل اصلی اجراشدن تمام برنامه است. به همین دلیل فقط همین قسمت
کوچک است که در Cache ذخیرهمیشود. توضیح این تئوری و اینکه دقیقاً چطور از
این تئوری در Caching استفادهمیشود از بحث ما خارج است.
حال بهتر در مییابید که چرا استفاده از حافظههای سریع
درکامپیوتر به صرفه نیست و با استفاده از همین سیستمهای کوچک و ارزان
میتوان به سرعت مطلوب نزدیک شد
كش cpu یه حافظه با ظرفیت محدود ولی باسرعت بسیار بالاست كه درون cpu قرار دارد.
cpu برای پردازش دیتاهایی كه از رم دریافت می كنه نیاز به اطلاعتی در مورد
اونها داره. پردازنده میاد این اطلاعات یا احیانا خود dataهارو كه قرار
برای مدت مشخصی پردازش بشن رو از رم به حافظه موقتی خودش (cash) انتقال
میده و جون سرعت این حافظه به مراتب از رم سریع تره تو سرعت پردازش خیلی
تاثیر داره.
cpuها بسته به مدلشون معمولا چند ردیف cash دارن كه L1 ، L2 و L3 نام گذاری میشن.
سی پی یو های اینتل core2duo كه در حال حاضر تو بازار موجوده فقط L1 , L2 دارن ولیnehalem از L3 هم بهره میبره.
در Core2douها L1 با حافظه 128 یا 256Kb به هر هسته اختصاص داده میشه ولی
L2 با حافظه بالاتری مثلا 6MB بین تمام هسته ها به اشتراك گذاشته میشه.
البته مبحث Cache مبحث خیلی پیچیدهای در CPU هست ولی کاری که انجام میده خیلی ساده هست.
ببین CPU اطلاعت رو از رم و هارد تامین میکنه درسته ولی یه مشکلی وجود داره
این وسط فکر کنید Ram یه تامین کننده اطلاعات باشه و CPU یک مصرف کننده
اطلاعات مسئلهای که وجو داره اینه که CPU ها میتونن خیلی بیشتر از اون
چیزی که رم برای اونها تامین میکنه مصرف کنن و این یه مشکل بزرگ ایجاد
میکنه چون با هر افزایش سرعت کلاک CPU، سیکل های زمانیه CPU از رم و باس
کوتاه تر میشه برای همین CPU بعضاً باید تعداد زیادی سیکل زمانی الکی
بگذرونه تا رم بتونه درخواستی که CPU ارجاع داده رو انجام بده و اطلاعات
بفرسته حالا با هر افزایش کلاکی همینطور رم از CPU عقب میفته و کاملا یه گپ
سرعت این وسط به وجو میاد که اصلا جالب نیست.
اینو معمولا با مثال ساده و قابل فهم برای همه کارگاه نجاری و مخزن الوار
تشریح میکنن فکر کن CPU یک نجاریه و Ram هم مخزن الواره حالا فکر کن این
مخزن الوار همینطور از نجاری دور تر و دورتر بشه، زمان بیشتری طول میکشه تا
الوار به نجاری برسه یه راه اینه که بیای از کامیونهای بزرگتر و بیشتر
استفاده کنی با این حال بازم مشکلی که وجود داره اینه که بازم یه گپ زمانی
بین وقتی که نجاری سفارش الوار رو میده تا وقتی بخواد سفارشش به الواری
برسه طول میشه.
خوب یه راه دیگهای که وجود داره اینه که بیایم یه انبار کوچیکتر الوار بقل
همین کارگاه نجاری درست کنیم و آخرین درخواستهایی که نجاری فرستاده رو
داخل این انبار الوار داشته باشیم؛ این انبار رو میتونیم به کش تشبیه کنیم
بدون شک یه انبار کوچیک و نزدیک خیلی میتونه کار ساز باشه و سریع میتونی
درخواست الوار رو از داخلش برداری تا زمانی که نوع الواری که میخوای دیگه
در داخل انبار کوچیک موجود نباشه اونقت مجبوری به انبار بزرگه که فاصله
زیادی هم از کارگاه داره بری و این خیلی بده چون باید کارگاه رو هوا همین
طور بمونه تا کامیون ها برن و الوار ها رو بیارن.
این انبار کوچیک رو میتونی کش L1 در نظر بگیری یه حافظه بسیار سریع و البته
گرون قیمت (از نظر ساخت نسبت به Ram) که در خوده CPU هم قرار داره و به
سرعت CPU میتونه اطلاعات لازم رو از توش بگیره.
ولی خیلی وقتا اطلاعاتی که میخوای داخل کش L1 موجود نیست و باید بری از Ram
بیگری، این اطلاعات رو اصطلاحا بهش Cache Miss میگن و خوب برای گرفتن
اطلاعات از رم تاخیر و لتنسی مجددی وجود داره که قابل توجه هم هست.
خوب میان چیکار میکنن، دوباره میگن ما بازم کش اضافه کنیم، البته میشه
بجایه اینکار کش L1 رو بزرگتر کرد ولی این کار صرفه اقتصادی نداره و هزینه
زیادی داره در مثال کارگاه نجاری میشه گفت هزینه اجاره یا خرید انباری در
شهر نزدیک به کارگاه بسیار زیاده ولی میشه در فاصله دورتر و حتی خارج شهر
انبار دیگه ای با هزینه کمتر فراهم کرد که همون کش L2 هست، کش L2 در اصل
همون اطلاعات داخل کش L1 رو داره به اضافه یسری اطلاعات اضافی کلا این
حافظهها با هم رابطه سلسله مراتبی دارن و ... خوب تاخیر و زمان دسترسی
بیشتری نسبت به L1 داره ولی در عوض بزرگتره.
من مسائل رو خیلی ساده شده میگم چون اگر بخواین خیلی دقیق واردش بشین خیلی
مسائل سخت و پیچیده هست و از دانش منم خارج خیلی چیزارو هم یادم نمیاد اگر
خیلی از این چیزها خوشت میاد برو VLSI بخون یا فوق، معماری کامپیوتر، همش
از همین چیزاست ولی خوب خیلی علمیتر و دقیقتر و البته کلی مزخرفات دیگه.
کلا در مینبورد چه اینتل چه AMD این باسها هستن که اطلاعات گنده رو منتقل میکنن، اینو تو ذهنتون داشته باشن تا ادامه رو بگم.
تو اینتل (و معماریهای قدیمیتره AMD و کلا معماریهای قدیمتر) اطلاعات از
CPU توسط FSB به NorthBridge مینبورد میره در NorthBridge مموری کنترلر
وجود داره (البته در معماری های اینتل تا الان) بعد از طریق Bus مموری به
NorthBridge، اطلاعات به مموری میره همین اتفاق برعکسشم میفته یعنی دو
طرفست؛ یک BUS دیگه هم وجود داره از NorthBridge که به کارت گرافیک میره و
یه باس داخلی هم وجود از NorthBridge به SouthBridge و ... در اصل تو
معماری اینتل چه اطلاعات مموری و چه I/O از طریق FSB منتقل میشه و حتما
میدونی که FSB رابطه مستقیم با فرکانس CPU داره در اصل فرکانس CPU از ضرب
FSB در یه مضربی که همون Multi باشه بدست میاد که FSB هم رابطه مستقیمی با
Bus رم داره؛ قبلاها این Bus رم باید با FSB پردازنده یکی یا متناسب میبود
ولی الان دیگه میتونه متناسب هم نباشه یعنی مثلا تناسب 3/4 داشته باشه این
نوع سیستمها رو نا هماهنگ یا غیرهم زمان میگن.
ولی تو معماری AMD یک Bus مستقیم به Memory متصل هست چون مموری کنترلر در
AMD در داخل CPU هست و دیگه برای دسترسی به مموری نیازی به مراجعه به
NorthBridge نیست و یه Bus دیگه به NorthBridge متصله که اون باس رو
HyperTransport میگن (که در اصل یک تکنولوژِی است که توسط یه کنسرسیوم
ساخته شده برای دسترسی سریع و نقطه به نقطه بین اجزا در کامپیوتر هاست که
البته مربوط به AMD نمیشه فقط در اصل یه تکنولوژِی هست که توسط خیلی شرکت
ها استفاده میشه و استفاده های زیادی داره که حالا بحث در موردش زیاده) در
اصل HyperTransport تو معماری AMD کار نقل انتقالات I/O رو بعهده داره که
ورژنهای مختلفی هم داره تا 3.1 مثل اینکه داره که هر کدوم سرعت بهتر شده
و...
اینکه چرا در اینتل مموری کنترلر رویه CPU نیست (که البته اینتلم دیگه از
Nehalem مموری کنترل رو اورده داخل) و در NorthBridge ولی در AMD هست،
دلایلی داره. خوب مموری کنترلر در NorthBridge باعث تاخیر دسترسی به مموری
میشه، که در معماری AMD خیلی خیلی کمتره این تاخیر. ولی از دلایل مموری
کنترلر خارجی اینه که خوب وقتی مموری کنترلر داخل CPU باشه اگر مموری با
تکنولوژی جدیدتر و سریعتر بیاد شما باید معماری CPU رو تغییراتی بدی ولی
اگر رو مینبورد باشه شما فقط NorthBridge رو تو مینبورد تغییر میدی این یه
دلیلش هست (برای همینه که AMD هر زمان نوع مموری جدیدی مثل DDR3 میاد دهنش
صاف میشه و باید تقریباً یه معماری جدید بده). یه دلیل دیگش اینه که اینتل
مقدار زیادی کش تو CPU میزاره که نیاز به مموری کنترل داخلی رو کم میکنه و
دلیل دیگش که شاید مهمترین دلیل باشه محدودیت تکنولوژیکی بوده گذاشتن مموری
کنترلر تو CPU با تکنولوژی های ساخت CPU امروزی (دیروزی در اصل) مثلا 65
نانومتر یا 95 باعث بزرگتر شدن CPU میشد و این یعنی استفاده از سیلیکن
بیشتر و تولید کمتر CPU که جالب نیست ولی خوب الان با تکنولوژِی 45
نانومتری مثل اینکه اینتل تونسته این مشکل رو هم رفع کنه برای همین تصمیم
داره مموری کنترل از نوع DDR3 رو تو پردازندهای Nehalem بزاره.
این سوال اولتون تا جایی که حسش بود سعی کردم خیلی کلی و کامل باشه سوال
دومتون رو هم بعد حسش بیاد جواب میدم فقط اینو بگم کش از حافظههایی نوع
Static Ram ساخته میشن که سلولها در Static Ram از 6 ترانزیستور ساخته شدن
در حالی که تو Dram (رمهای معمولی) 2 تا هست (البته اینو شک دارم دقیقا
یادم نیست الان)؛ که اینجوری یعنی شما اگر بخواین 4 کیلوبایت اطلاعات داشته
باشین 4*1024*6*8 تا ترانزیستور نیاز دارین و یه تعدادی هم برای گیت های
لاجیک میخواین تازه، که همین قیمت تموم شده این نوع رمها رو زیاد میکنه.
اینم یادم رفت اضافه کنم که، Static Ram ها خاصیتی که دارن اینه که مثل
Dram ها Refresh نمیشن.
ولی خیلی ساده میشه گفت که cpu اطلاعات را بسته به این که چه اهمیتی داشته
باشند تقسیم بندی میکنه ، البته سی پی یو که نه بلکه برنامه نویسی یک
برنامه خاص با استفاده از فایل های سیستم عامل با سخت افزار ارتباط برقرار
میکنه و بر این اساس میتونه پردازش خودش را انجام بده ، در کل از کند ترین
به سریع ترین حافظه میشه رده بندی زیر را داشت :
هارد دیسک ( Page file)
رم
کش l3
کش L2
کش L1
البته به نظرم این موضوع اومد که بعضی از نرم افزار ها بسیاری از اعمال
محاسباتی را به صورتی انجام میدهند که نیاز به کش بالا هست و البته بعضی از
نرم افزار ها نیاز به رم بالا تری دارند ، مثل یک نرم افزار واحد مثل مایا
، در حالت رندر نیاز به رم بالایی داره ولی در حالت کار و ساخت تصویر کش
بالا تاثیر بالایی در کارکرد اون ایجاد میکنه و دلیل اون محاسبات ریاضی
زیادی که در این حالت پیش میاد ولی در حالت رندر چون محاسبات انجام شده و
نیاز به ساخت تصاویر میره و ابته هر تصویر ابتدا در رم ساخته میشه و بعد به
هارد دیسک انتقال پیدا میکنه پس کش به اندازه محیط کاری مفید نیست ،
در معماری های قدیمی ، نرم افزار باید منتظر پر شدن کش و خالی شدن ان در یک
سیکل داده میموند و این برای سی پی یو مثل 3.2 2m باعث میشد که حتی در نرم
افزار های کوچیک این پردازنده که در زمان خودش خیلی قوی بود کند عمل کنه
ولی در حال حاضر پردازنده میتونه با اختصاص کش مورد نیاز هر برنامه سرعت
اجرای اون برنامه را بالا ببره و البته یا باقی کش را خاموش کنه ( برای هدر
نرفتن انرژی ) و یا با اختصاص به برنامه های دیگه انجام کارهای مختلف را
به راحتی امکان پذیر کنه
http://www.iranjoman.com/thread-3313.html