حافظه کش چگونه کار میکند ؟


عضو شوید


نام کاربری
رمز عبور

:: فراموشی رمز عبور؟

عضویت سریع

نام کاربری
رمز عبور
تکرار رمز
ایمیل
کد تصویری
براي اطلاع از آپيدت شدن وبلاگ در خبرنامه وبلاگ عضو شويد تا جديدترين مطالب به ايميل شما ارسال شود



آمار وب سایت:  

بازدید امروز : 1
بازدید دیروز : 3
بازدید هفته : 11
بازدید ماه : 164
بازدید کل : 23487
تعداد مطالب : 25
تعداد نظرات : 1
تعداد آنلاین : 1


مقدمه
حافظه کش، یک حافظه سرعت بالای قابل دسترس درون CPU است که برای افزایش سرعت دسترسی به داده ها و دستورالعملهای ذخیره شده درون RAM است. در این مقاله ما میخواهیم با یک زبان ساده توضیح بدهیم که این مدار چگونه کار میکند.

یک کامپیوتر کاملا بی فایده است اگر شما نگویید پردازنده (به عبارت دیگر CPU) چه کاری انجام دهد. این بواسطه یک برنامه انجام میشود، که یک لیست از دستورالعملهایی است که میگوید CPU چه کاری انجام دهد.
CPU برنامه ها را از حافظه RAM واکشی میکند. مشکل با حافظه RAMاینست که با قطع جریان برقش، محتویاتش از بین میرود و این حافظه RAM را مانند یک رسانه فرار طبقه بندی میکند. بنابراین برنامه ها و داده ها باید در یک رسانه غیر فرار ذخیره بشوند (به عبارت دیگر، در جائی محتویات بعد از اینکه شما کامپوتر خودتان را خاموش میکنید از بین نروند) اگر شما بخواهید آنها را بعد از خاموش کردن کامپیوترتان داشته باشید، مثل درایو های هارددیسک، رسانه های نوری مانند CDها و DVDها.
هنگامیکه شما برروی یک آیکون ویندوز برای اجرای برنامه ای دابل کلیک میکنید، برنامه که معمولا برروی هاردیسک ذخیره شده است در حافظه RAM بارگذاری میشود و سپس بواسطه حافظه RAM، CPU برنامه را درون مداری که کنترلر حافظه نامیده میشود بارگذاری میکند، که در پردازنده های Intel درون چیپ ست (چیپ North Bridge) و یا در پردازنده های AMD درون CPU قرار دارد.

Image


CPU نمیتواند داده ها را بطور مستقیم از هارددیسک واکشی کند، چونکه آنها برایش خیلی کم سرعت هستند، حتی اگر شما فکر کنید که سریع ترین هارددیسک را دارید. فقط به شما چند ایده میدهد از چیزی که ما داریم درباره اش صحبت میکنیم، یک هاردیسک SATA-300 سریع ترین هاردیسک قابل دسترس برای کاربران معمولی در حال حاضر میباشد، که نرخ انتقال تئوریک آن 300 MB/s است و یک CPU که با فرکانس داخلی 2 GHz و 64 مسیر داده (Data Path) داخلی کار میکند، نرخ انتقال داده اش 16 GB/s میباشد، که حدود 50 برابر سریعتر است.
این یک محاسبه ناهنجار است، فقط برای اینکه به شما یک ایده داده باشد، زیرا CPU ها دارای چندن مسیر داده مختلف درون خودشان هستند و هریک دارای طول های مختلف هستند.برای مثال در پردازنده های AMD مسیر داده بین حافظه کش L2 حافظه کش L1 128 بیتی است، در صورتیکه این مسیر در CPU های کنونی Intel 256 بیتی است. اما شما نگران نباشید، این فقط برای اینست که توضیح بدهیم عددی که در بالا نوشتیم ثابت نیست، اما در هر حال CPU ها همیشه از هارددیسک ها خیلی سریعتر هستند.
اختلاف در سرعت از این ناشی میشود که هارددیسک ها سیستم های مکانیکی هستند، که کندتر از سیستم های الکترونیکی خالص میباشند، بطوریکه بخش های مکانیکی برای بازیابی شدن اطلاعات مجبورند داده ها را انتقال بدهند (که بمراتب کندتر از انتقال الکترونیکی است). در طرف دیگر حافظه RAM قرار دارد که 100% الکترونیکی است و همچنین از هاردیسک ها سریعتر و در بهترین حالت در حد سرعت CPU است.
در اینجا مشکلی وجود دارد. حتی سریع ترین حافظه های RAM به سرعت CPU نیستند. اگر شما حافظه های DRR-2 800 تهیه کنید، آنها داده را در نرخ 6400 MB/s و در صورت Dual Channel بودن با نرخ 12800 MB/s انتقال میدهند. ولو اینکه این عدد در مثال قبلی 16 GB/s بود، چونکه CPU های کنونی توانایی واکشی داده داده از حافظه کش L2 را در نرخ 128 بیت یا 256 بیت دارند، اگر CPU به طور داخلی در فرکانس 2 GHz کار کند ما داریم در مورد 32 GB/s یا 64 GB/s صحبت میکینم. در این رابطه نگران نباشید چونکه در حال حاضر "حافظه کش L2" وجود دارد، بعدا درباره اش توضیح میدهیم. خواسته ما اینست که شما به این ایده برسید که حافظه RAM از CPU کندتر است.
 ضمنا نرخ های انتقال میتوانند با فرمول زیر محاسبه بشوند (در تمام این مثال ها Data per Clock برابر یک میباشد)
Transfer rate = width (number of bits) x clock rate x data per clock / 8
مشکل فقط نرخ انتقال یا به عبارت دیگر سرعت انتقال نیست بلکه تأخیر (Latency) نیز هست. Latency (به Access Time نیز مشهور است) مقدار زمانی است که حافظه در ارجاع داده هایی که CPU درخواست کرده تأخیر می اندازند- این آنی نیست. هنگامیکه CPU برای یک دستورالعمل (یا داده) که در یک آدرس معین ذخیره شده است درخواست میکندحافظه یک زمان تأخیر جزئی برای تحویل این دستورالعمل (یا داده) برگشتی ایجاد میکند. در حافظه های کنونی اگر نوشته باشد که دارای CL ( CAS Latency، تأخیری است که ما درباره اش داریم صحبت میکنیم) 5است، این معنا را میدهد که حافظه داده های درخواستی را بعد از پنج سیکل ساعت حافظه تحویل میدهد- معنی اش اینست که CPU باید منتظر بماند.
انتظار کارایی CPU ار پایین می آورد. اگر CPU بری دریافت دستورالعمل یا داده درخواستی اش 5 سیکل ساعت حافظه منتظر بماند، کارائی اش فقط 1/5 آن عملکردی خواهد بود که اگر از یک حافظه توانا در تحویل فوری داده استفاده میکرد. به عبارت دیگر، در هنگام دسترس بودن یک حافظه DRR-2 800 با CL5، کارایی CPU به همان مقدار کارکرد حافظه در 160 MHz (800 MHz/5) میرسد. در دنیای واقعی کاهش کارایی زیاد نیست چونکه حافظه تحت یک مد، که مد Burst نام دارد کار میکنند در جائیکه داده دوم درخواست میشود، داده میتواند بطور آنی تحویل داده شود اگر درون یک آدرس همجوار ذخیره شده باشد (معمولا دستورالعمل های یک برنامه معین در آدرس های متوالی ذخیره میشوند) این مانند "x-1-1-1" توضیح داده شده است (مثلا "5-1-1-1" برای حافظه مثال ما)، معنایش اینست که که داده اول بعد از پنج سیکل ساعت تحویل داده میشود اما از دومین داده درخواستی، دادها میتوانند تنها د یک سیکل ساعت تحویل داده بشوند- اگر مانند آنچه ما گفتیم در یک آدرس متوالی ذخیره شده باشد.


Dynamic RAM در مقابل Static RAM
دو نوع حافظه وجود دارد: دینامیک یا پویا (DRAM) و استاتیک (SRAM). RAM استفاده شده در PC از نوع دینامیک میباشد. در این نوع حافظه هر بیت از داده ها درون تراشه حافظه در یک خازن بسیار ریز ذخیره میشود. خازن ها اجزای خیلی کوچکی هستند، به این معنی که میلیون ها از آن میتواند در یک فضای خیلی کوچک ساخته بشود. این چگالی عالی یا High Density نام دارد. از طرف دیگر خازن ها بعد از مدتی شارژشان را از دست میدهند، بنابراین حافظه های دینامیک به یک عمل که نو سازی یا Refresh نام دارد، احتیاج دارند، که این هر چند وقت یکبار اتفاق می افتد. در طی این مدت داده ها نمیتوانند خوانده یا نوشته بشوند. حافظه های دینامیک از حافظه استاتیک ارزانتر نیز میباشند و همچنین نیروی برق به مراتب کمتری استفاده میکنند، اما همانطور که ما گفتیم در RAM دینامیک داده ها به آسانی در دسترس نیستند و نمیتواند به سرعت CPU کار کند.
از طرف دیگر حافظه استاتیک میتواند با سرعت CPU کار کند، زیرا هر بیت داده در یک مدار که فلیپ فلاپ نام دارد ذخیره میشود، که همچنین میتواند داده ها را با تأخیر صفر یا خیلی کوچک تحویل دهد، زیرا فلیپ فلاپ ها به Refresh نیازی ندارند. مشکل اینجاست که فلیپ فلاپ ها برای ساخته شدن به چندین ترانزیستور نیاز دارند، به عبارت دیگر آنها از یک خازن خیلی بزرگتر هستند. این به این معناست که در همان فضایی که در یک حافظه استاتیک یک فلیپ فلاپ وجود دارد، در یک حافظه دینامیک صدها خازن وجود دارد. بنابراین حافظه های های استاتیک یک چگالی پائین را فراهم میکنند- تراشه ها دارای ظرفیت کمی هستند. دو مشکل دیگر با حافظه های استاتیک: خیلی گران هستند و مصرف برق زیادی دارند- بنابراین حرارت بیشتری تولید میکنند.
.
Image 

با اینکه RAM استاتیک سریعتر از RAM دینامیک است، ولی شرایط نامساعدش از استفاده شدن آن در مدارهای اصلی RAM جلوگیری میکند. 
راه حل موجود برای کاهش اثر استفاده از حافظه RAM که کندتر از CPU است، استفاده از مقدار کمی RAM استاتیک مابین CPU و حافظه RAM بود. این روش حافظه کش نام دارد و امروزه این مقدار کم از حافظه استاتیک درون CPU قرار دارد.
حافظه کش اغلب داده هایی را که به تازگی مورد دسترسی RAM بودهاند ار به حافظه استاتیک کپی میکند و سعی میکن حدس بزند چه داده هایی را CPU بعدا درخواست میکن و آنها را در حافظه استاتیک بارگذاری می نماید قبل از اینکه CPU در عمل به آنها نیاز داشته باشد. هدف از ایجاد دسترسی CPU به حافظه کش در عوض دسترسی مستقیم CPU به RAM است، چونکه میتواند داده را فورا یا تقریبا فورااز حافظه کش بازیابی کند، در صورتیکه، هنگامی که داده های مورد دسترسی در RAM قرار داشته باشند باید منتظر بماند. بیشتر CPU به جای RAM به حافظه کش دسترسی دارد، چونکه سیستم سریعتر خواهد بود. ما بطور صحیح فقط در یک دقیقه توضیح دادیم که حافظه کش چگونه کار میکند.
ضمنا، در اینجا ما داریم از واژه های "داده " و "دستورالعمل" قابل تعویض را استفاده میکنیم، زیرا هرچیزی که درون هر آدرس حافظه ذخیره میشود هیچ تغیییری در حافظه ایجاد نمیکند.
تاریخچه حافظه کش در کامپوترهای شخصی
این بخش فقط برای آنهایی است که به وجه گذشته حافظه کش علاقه دارندریال اگر شما به این بخش علاقه ندارد میتوانید به بخش بعدی بروید.
حافظه کش اولین بار در کامپیوترهای 386DX استفاده شد. ولو اینکه CPU حافظه کشی درون خودش نداشت، آنرا بصورت مداراتی پشتیبانی میکرد، بهعبارت دیگر چیپ ست یک کنترلر حافظه کش داشت. پس در آن زمان حافظه کش خارج از CPU قرار داشت. بنابراین انتخابی بود و یا به نحوی دیگر میتوان گفت که سازنده مادربورد میتوانست آنرا اضافه کند یا نه. اگر شما یک مادربورد بدون حافظه کش داشتید کامپوترتان از کامپوتر دارای این مدار خیلی کندتر می بود.
مقدار حافظه کش قابل دسترس متفاوت بود و بعلاوه به مدل مادربورد وابسته بود و نوع قیمتها، برای زمانیکه 64 کیلوبایتی و 128 کیلو بایتی بودند. در این هنگام کنترلر حافظه کش از یک معماری، معروف به “write-through” برای عملیات نوشتن استفاده میکرد- به عبارت دیگر هنگامیکه CPU میخواست داده ها را حافظه ذخیره کند- کنترلر حافظه فورا حافظه RAM را آپدیت میکرد.
با پردازنده های 486DX اینتل یک مقدار کوچک (8KB) از حافظه کش را درون CPU اضافه کرد. این حافظه کش داخلی L1 (Level 1) یا توکار نامیده شد. در صورتیکه حافظه کش خارجی L2 (Level 2) یا خارجی نامیده شد.مقدار و موجودیت کش خارجی به مدل مادربورد وابسته بود. انواع مقادیری که در آن زمان موجود بود، 128 کیلو بایتی و 256 کیلو بایتی. بعد از مدل 486 معماری کش “write back” اضافه شد، که حتی تا امروزه نیز استفاده میشود، به طوریکه برای عملیات های نوشتن، حافظه RAM فورا آپدیت نمیشود، CPU داده ها را در حافظه کش ذخیره میکند و کنترلر حافظه فقط هنگامیکه حافظه RAM را آپدیت میکند که یک کمبود کش اتفاق بیافتد.
پس زا آن Intel در اولین پردازنده های پنتیوم، دو حافظه کش توکار مجزا ایجاد نمود، یکی برای دستورالعمل و یکی برای داده (در آن زمان هر کدام 8 کیلو بایت بودند). این معماری هنوز تا امروزه استفاده میشود و این که چرا شما بعضی اوقات می بینید که حافظه کش L1 به صورت 64KB+64KB نمایش داده میشود، چونکه یک کش دستورالعمل L1 64 کیلوبایتی و یک کش داده L1 64 کیلو بایتی وجود دارد. البت ما بعدا توضیح میدهیم که چرا مابین این دو تفاوت وجود دارد. در آن هنگام حافظه کش L2 در مادربورد جای داشت، پس بنابراین مقدار و موجودیتش به مدل مادربورد وابسته بود، البته داشتن ک سستم بدون حافظه کش دیوانگی بود. انواع موجود در آن زمان 256KB و 512KB بودند.
در پردازنده های AMD نسل K5، K6 و K6-2 از همین معماری استفاده شده اس، بعلاوه K6-III دارای یک حافظه کش سوم (L3, Level 3) میباشد.
مشکل حافظه کش L2 است که با یک نرخ کلاک پایین تر مورد دسترسی قرار میگیرد، چونکه در 486DX نرخ کلاک داخلی CPU از نرخ کلاک خارجی متفاوت است. بطوریکه برای مثال یک Pentium-200 با سرعت 200MHz کار میکندو به حافظه کش خود با سرعت 66MHz دسترسی دارد.
سپس Intel با معماری P6 حافظه کش را از مادربورد به داخل CPU انتقال داد، که اجازه میداد CPU به آن با نرخ کلاک داخلی خود دسترسی پیدا کند، به جز Pentium II که حافظه کش درون CPU قرارنداشت ولی در همان مدار چاپی که CPU بود لحیم شده بود (این مدار چاپی درون یک کارتریج قرار داشت) تا در نصف کلاک داخلی CPU کار کند، در Celeron-266 و Celeron-300 هیچ کدام حافظه کش L2 نداشتند (بنابراین آنها بد عملکردترین CPU ها در تاریخ کامپیوترهای شخصی هستند).
این معماری حتی تا امروزه مورد استفاده است: هردوی حافظه های کش L1 و L2 درون CPU قرار دارندو با نرخ کلاک داخلی CPU کار میکنند، بنابراین مقدار حافظه کشی که شما میتوانید داشته باشید به مدل CPU ای که دارید وابسته است.هیچ راهی برای افزایش مقدار حافظه کش بدون تعویض CPU وجود ندارد

 منبع

http://bios.mihanblog.com




:: بازدید از این مطلب : 1649
|
امتیاز مطلب : 9
|
تعداد امتیازدهندگان : 2
|
مجموع امتیاز : 2
ن : [cb:post_author_name]
ت : [cb:post_create_date]
مطالب مرتبط با این پست
می توانید دیدگاه خود را بنویسید


نام
آدرس ایمیل
وب سایت/بلاگ
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

آپلود عکس دلخواه:








تبادل لینک هوشمند
برای تبادل لینک  ابتدا ما را با عنوان مقالات دانشجویی و آدرس mohammad.javad.ahmadi.LXB.i r لینک نمایید سپس مشخصات لینک خود را در زیر نوشته . در صورت وجود لینک ما در سایت شما لینکتان به طور خودکار در سایت ما قرار میگیرد.






RSS

Powered By
loxblog.Com