در اغلب موارد ما حافظه را به شکل ساختارهای تک سطحی فرض میکنیم. یعنی بلافاصله پس از حافظه، پردازنده سیستم قرار دارد.

اما در حقیقت، سیستم حافظه در کامپیوترهای پیشرفته امروزی، به صورت سلسله مراتبی و متشکل از چند بخش مختلف جهت افزایش کارایی و سرعت پردازش ها می باشد.

سلسله مراتب حافظه در کامپیوتر

 

دلیل اصلی این مسئله که سیستم های حافظه به شکل سلسله مراتبی ساخته میشوند این است که هزینه بیت فناوری حافظه عموماً با سرعت رشد فناوری متناسب است.

حافظه های سریع مانند SRAM (یا Static RAM) در هر بیت هزینه های بالایی دارند؛ بنابراین ساخت یک کامپیوتر به طور کامل از چنین حافظه هایی، به جز در موارد خاص، مقرون به صرفه نمی باشد.

فناوری های کندتر مانند DRAM (یا Dynamic RAM) کم هزینه تر بوده و عملاً برای ساخت حافظه های بزرگتر به کار میروند.

 

در سلسه مراتب حافظه، سطول نزدیک تر به پردازنده، مانند Cache که در تصویر زیر نیز نمایش داده شده است، به دلیل دارا بودن ظرفیت کمتر و نیاز به سرعت بیشتر جهت دستیابی به حافظه، از فناوری های سریع حافظه ساخته میشوند.

هرم سلسله مراتب حافظه

 

با رفتن از بالا به پایین در سلسله مراتب حافظه، حافظه ای با ظرفیت بیشتر، هزینه کمتر و سرعت دستیابی کمتر خواهیم داشت.

هدف اصلی از سلسله مراتب حافظه آن است که داده هایی که غالباً توسط برنامه ها مورد استفاده قرار میگیرند در سطوح بالایی از سلسله مراتب حافظه نگهداری شوند و اغلب درخواست ها به حافظه توسط همین سطوح بالاتر، مورد پردازش قرار گیرند.

این ویژگی سبب میشود که میانگین زمان دستیابی به سیستم حافظه، به زمان دستیابی سریع ترین سطح نزدیک شود در حالی که میانگین هزینه در بیت با پایین ترین سطح مشابه باشد.

به طور کلی میتوان گفت با این کار در نظر داریم بیشترین سرعت را با کمترین هزینه داشته باشیم.

 

در حالت کلی پیش بینی این مسئله که کدام بخش یا بخش هایی از حافظه بیشتر مورد دستیابی قرار میگیرند امکان پذیر نیست؛ بنابراین کامپیوترها از سیستم مبتنی بر درخواست (demand-based) برای تعیین این که کدام داده در بالاترین سطوح از سلسله مراتب حافظه باشد، استفاده میکنند.

هنگامی که درخواست رجوع به حافظه برای سلسله مراتب ارسال میگردد، بالاترین سطح برای وجود آدرس بررسی میشود.

در صورت وجود آدرس، درخواست برآورده میگردد و در غیراینصورت، سطح پایینی بعدی بررسی خواهد شد. این عمل تا یافتن داده در یک سطح یا رسیدن به آخرین سطح که تضمین کننده وجود داده خواهد بود، ادامه پیدا میکند.

 

در صورتی که درخواست رجوع به حافظه نتواند توسط سطوح بالایی برآورده شود، بلوکی از مکان های متوالی که در بردارنده آدرس مورد مراجعه است از اولین سطح، در هر سطحی که بالای آن قرار دارد کپی خواهد شد.

این امر به دو دلیل صورت میگیرد؛ اول اینکه بسیای از فناوری های ذخیره سازی مانند Hard Disk ها اجازه میدهند که چندین کلمه متوالی از داده ها در زمانی کمتر از همین تعداد داده تصادفی، خوانده یا نوشته شوند. این امر سبب میگردد آوردن یک بلوک چند بایتی از داده ها به سطوح بالاتر سلسله مراتب، از واکشی هر یک از بایت های بلوک به شکل مستقل و تصادفی سریعتر انجام پذیرد.

دوم اینکه بسیاری از برنامه ها دارای خاصیتی به نام محلی بودن ارجاع (Locality of Reference) هستند.

 

تحلیل تعدادی از برنامه های متداول نشان میدهد که ارجاعات به حافظه در فاصله زمانی مشخص، تمایل به محدود بودن در نواحی محلی حافظه دارد. دلیل آن هم این است که طبیعت برنامه های کامپیوتری ترتیبی است، یعنی حلقه های برنامه و زیرروال ها به صورت متناوب و به آدرس های ترتیبی رجوع میکنند.

هنگامی که یک loop اجرا میشود، CPU مکرراً به مجموعه ای از دستورهای حافظه رجوع میکند و هر زمان که زیر روالی فراخوانی میگردد، مجموعه دستورالعمل های آن از حافظه واکشی میشوند. بنابراین حلقه ها و فراخوانی زیرروال ها به محلی کردن ارجاعات به حافظه برای واکشی دستورهایشان تمایل دارند.

 

پس هر چقدر احتمال اینکه به آدرسی درون بلوک رجوع شود بیشتر باشد، استفاده از بلوک های چند بایتی میانگین دستیابی را کاهش خواهد داد؛ زیرا واکشی بلوک در مقایسه با واکشی جداگانه هر کلمه از بلوک، به زمان کمتری نیاز دارد.

سطوح مختلف در سلسله مراتب حافظه اغلب دارای بلوک هایی با اندازه های مختلف هستند؛ البته این مسئله به مشخصات سطوح زیر آنها در سلسله مراتب حافظه نیز بستگی دارد.

برای مثال، Cache ها تمایل به داشتن بلوک هایی با اندازه تقریبی 64 بایت دارند، در حالی که حافظه های اصلی عموماً دارای بلوک هایی به اندازه 4KB هستند زیرا زمان لازم برای واکشی بلوک بزرگی از داده ها از حافظه مجازی، تنها اندکی از مان لازم برای واکشی یک بایت بیشتر می باشد!

همچنین زمان مورد نیاز برای واکشی بلوکی از داده ها از حافظه اصلی به Cache به زمان واکشی هر بایت به شکل مستقل، بسیار نزدیک است.

 

 

سطوح در سلسله مراتب حافظه

در سلسله مراتب حافظه که در تصویر فوق نشان داده شده است، سطوح مختلف حافظه دارای نام های مشخص می باشند و این مسئله به این نکته اشاره دارد که سطوح مختلف سلسله مراتب حافظه به پیاده سازی مختلفی متمایل هستند و به همین دلیل معماران کامپیوتر از واژه های مختلفی برای متمایز ساختن آنها استفاده کرده اند.

یکی از بالاترین سطوح پس از ثبات های CPU، حافظه Cache نام دارد.

Cache ها عموماً از فناوری SRAM ساخته میشوند و اغلب کامپیوترهای پیشرفته امروزی حداقل دارای دو سطح Cache در سلسله مراتب حافظه خود هستند.

Cache ها دارای سخت افزاری برای دنبال کردن رد آدرس هایی هستند که در خود ذخیره میکنند و متمایل به اندازه هایی کوچک با بلوک هایی به ظرفیت 32 تا 128 بایت هستند.

حافظه اصلی کامپیوتر که RAM هم نامیده میشود، معمولاً از جنس DRAM است و از روش نرم افزاری برای حفظ رد آدرس هایی که در خود دارد استفاده میکند. حافظه های اصلی دارای بلوک هایی با اندازه بزرگ، غالباً تا چندین کیلوبایت هستند.

حافظه مجازی معمولاً به وسیله دیسک ها پیاده سازی میشوند و شامل تمامی داده ها در سیستم حافظه است.