حافظه نهان (cache)
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 بايت حافظه اصلی خواهند بود.