نگاشتها در حافظه - نسخهی قابل چاپ |
نگاشتها در حافظه - ابراهیم۱ - ۱۷ دى ۱۳۹۱ ۰۷:۳۴ ب.ظ
با عرض سلام خسته نباشید It 86)) یک حافظه کش دستور با گنجایش ۲۵۶ بایت در نظر بگیرید هر بلوک ان حاوی یک کلمه ۳۲بیتی است فرض کنید یک حلقه حاوی ۶۵ دستور متوالی برای ۳ بار اجرا میشود بافرض خالی بودن کش در ابتدا نرخ برخورد در دودوحالت زیر چند است(هر دستور ۳۲ بیت است) الف)اگر کش از direct mapping استفاده کند ب)اگر کش به صورتfully associative با سیاست جایگزینی lru باشد ۱)الف)۰ ب)۶۵/۴۲ ۲)الف) ۶۵/۴۲ ب)۰ ۳)الف) ۶۵/۴۲ ب)۶۵/۴۲ ۴)الف)۰ ب)۰ اصلاتفاوت این ۳ تا نگاشت گفته شده چیه و این سوال چجوری حل میشه با تشکر |
RE: نگاشتها در حافظه - narges_r - 17 دى ۱۳۹۱ ۰۹:۲۰ ب.ظ
فکر میکنم گزینه ۲ درست باشه برای کش مستقیم داریم: تعداد بلاکهای کش برابر است با: [tex]\frac{256*8}{32}=2^{6}=64[/tex] اما تعداد بلاکهای دستور ۶۵ تا هستند اگر فرض کنیم دستورات از شماره ۰ تا ۶۴ وارد کش میشه پس از بلاک شماره ۰ کش تا بلاک شماره ۶۳ کش کامل پر میشه اما برای بلاک ۶۵ ام (بلاک شماره ۶۴ دستورات) بلاک خالی وجود نداره از اونجایی که در کش مستقیم شماره بلاکهای مشخص در حافظه در بلاکهای یکسان در کش قرار میگیرند میبینیم که بلاک شماره ۶۴ دستورات و بلاک شماره ۱ دستورات باهم در بلاک شماره یک کش قرار میگیرند در دور اول که کش خالی هست همه ۶۵ دسترسی miss میشه اما در دور دوم همه بلاکها در کش قرار دارند فقط بلاک شماره یک موجود نیست پس در دور دوم ۲ تا miss داریم در دور سوم هم همینطور پس در ۳*۶۵ تا دسترسی ۶۵+۲+۲ تا miss داریم پس نرخ برخورد برابر میشه با: [tex]\frac{3*65-69}{3*65}=\frac{42}{65}[/tex] اما برای کش انجمنی: ساختار کش انجمنی این هست که مانند کش مستقیم بلاکهای مشخص در یک بلاک کش قرار نمیگیرن بلکه تعدادی بیت برای اولویت دهی به بلاکها برای خواندن و نوشتن در کش قرار داده شده که بر مبنای اون بیتها در کش نوشته میشه مثلا در اینجا که در کش ۶۴ بلاک داریم برای هر بلاک ۶ بیت در نظر گرفته شده که وقتی در بلاکی در کش نوشته میشه بیتهای اولویت اون بلاک در کش تبدیل به صفر میشه و بقیه بلاکها یکی به بیتهای اولویتشون اضافه میشه و برای خواندن هم به شیوه دیگه ای این تغییر روی بیتهای اولویت بلاکها اعمال میشه عمل نوشتن در بلاکی اعمال میشه که بیتهای اولویت اون بیشترین مقدار دارند. اگر اینجا هم فرض کنیم از دستور شماره ۰ تا دستور شماره ۶۴ وارد کش میشه پس اول که دستور صفر وارد بلاک شماره صفر کش بشه بیتهای اولویت بلاک شماره صفر تبدیل به صفر میشه بعد از اون وقتی دستور شماره یک وارد کش میشه بیتهای الویت بلاک شماره یک ۰ و بیتهای الویت بلاک شماره صفر تبدیل به یک میشه واگر همین کارو ادامه بدیم وقتی به دستور ۶۵ام(دستور شماره ۶۴) میرسیم میبینیم برای نوشتن دستور ۶۵ام باید یکی از دستوراتو از کش خارج کنیم و این دستور جایگزین کنیم که بیتهای اولویت بلاک ۶۳ که دستور شماره ۶۳ را در خود دارد کوچکترین مقدار داره(۰) وبلاک صفر بزرگترین پس دستور ۶۵ام(دستور شماره ۶۴) باید جایگزین دستور شماره صفر در بلاک صفر بشه تا اینجا ما یک دور دستورات اجرا کردیم که ۶۵ miss داشتیم حال وقتی بخواهیم دور دومو اجرا کنیم دستور صفر در کش موجود نیست و مطابق توضیحاتی که برای جایگزینی دستور ۶۵ام دادیم، دستور صفر باید جایگزین دستور شماره یک در بلاک یک بشه چون بلاک شماره یک در کش دارای بیشترین مقدار در بیتهای الویت هست و همین اتفاق برای دستور یک و ... میفته که میبینیم در دور دوم هم ۶۵ miss داریم و در دور سوم هم همینطور پس در اجرای دستورات با این نوع کش همه اجراها دچار miss میشوند و نرخ برخورد ۰ هست. |