300 likes | 608 Views
معماری سیستم های کامپیوتری. سازمان حافظه. مهدی ایل بیگی دانشگاه پیام نور دماوند. سلسله مراتب حافظه. سلسله مراتب حافظه به خاطر سرعت بخشيدن دسترسي به حافظه با حداقل هزينه بوجود آمده است. در سلسله مراتب حافظه اگر از پائين به بالا حركت كنيم: سرعت دسترسي به حافظه بيشتر ميشود.
E N D
معماری سیستم های کامپیوتری • سازمان حافظه مهدی ایل بیگی دانشگاه پیام نور دماوند
سلسله مراتب حافظه • سلسله مراتب حافظه به خاطر سرعت بخشيدن دسترسي به حافظه با حداقل هزينه بوجود آمده است. • در سلسله مراتب حافظه اگر از پائين به بالا حركت كنيم: • سرعت دسترسي به حافظه بيشتر ميشود. • هزينه سختافزار افزايش پيدا ميكند. • حجم حافظه كاهش پيدا ميكند.
سلسله مراتب حافظه Upper Level faster Larger Lower Level
حافظة اصلي • منظور از حافظه اصلی حافظه هاي RAM و ROM می باشد. در زیر نمونه اي از حافظة RAM و ROM آورده شده:
نگاشت آدرس حافظه • اگر از چندین تراشه حافظه استفاده نماییم نیاز به نگاشت آدرس به هر يك از تراشه های حافظه داریم. • مثال: • نگاشت آدرس 10بیتی برای4 تراشه 128بايتی RAM و یک تراشه 512 بايت ROM:
اتصال حافظه به CPU • تراشههاي RAM و ROM از طريق گذرگاه داده و آدرس به CPU متصل مي شوند. • بيتهاي كمارزش تر در خطوط آدرس بايت هاي درون يك تراشة حافظة وبيت هاي با ارزش بيشتريك تراشه از چندين تراشة حافظه را انتخاب مي كنند.
حافظة انجمني (Associative Memory) • از این حافظه ها برای جستجوی سریع اطلاعات در کاربردهایی که در آن ها زمان جستجو بسیار اهمیت دارد استفاده می شود. دسترسي به اين گونه حافظه ها بر اساس محتواي داده صورت ميگيرد نه آدرس آن. • اين گونه حافظه ها به حافظههاي قابل آدرسدهي با محتوا (Content Addressable Memory (CAM)) هم ناميده مي شوند. • سازماندهي سختافزاري:
عملكرد حافظة انجمني • هركلمه در حافطه انجمنی به طور موازي با محتويات ثبات A(Argument Register) مقايسه ميشود. • اگر A در حافظه انجمنی موجود باشد(word[i] = A) ، آنگاه M[i] = 1. • تمام كلماتي كه مقدارM[i] آن ها برابر یک شود، به صورت ترتيبي از CAM خوانده ميشود. • از ثبات K براي ماسك كردن يك فيلد و يا كليد در ثبات A استفاده مي شود (تنها بيتهايی از ثبات A كه بيت متناظر آن ها در ثبات K یک باشند مورد مقايسه قرار ميگيرند).
سازماندهي CAM • سازماندهي داخلي يك سلول حافظه (Cij) در CAM: • اگر کلمه A در خانه iام حافظه موجود باشد باید هر بیت از آن با بیت متناظر در خانه iام حافظه برابر باشد. در صورت تساوی بیت jام X را یک می کنیم، پس خواهیم داشت: Xj= AjFij + A’jF’ij • اگر به ازاء تمامی بیت های A، Xjها برابر یک شود در نتیجه A در خانه iام حافظه موجود است و باید بیت معادل با آن کلمه در ثیات M (یعنی Mi) برابر یک بشود. پس باید داشته باشیم: Mi = X1 X2 … Xn= (X1+K’1)(X2+K’2)…..(Xn+K’n) • درنتیجه بطور کلی در صورت بافتن یک کلمه در خانه iام حافظه و یک کردن بیت متناظر با خانه مورد نظر در ثبات M خواهیم داشت: Mi=∏( AjFij+ A’jF’ij+ K’j)
سازماندهي CAM • سازماندهي داخلي مدار انطباق(match logic): Mi=∏( AjFij+ A’jF’ij+ K’j)
اصل مراجعات محلي به حافظه (Locality) • طبق اين اصل دسترسي به حافظه در بازه هاي زماني معين اغلب به سلولهاي مجاور حافظه یا سلول های دسترسی شده در گذشته ای نزدیک می باشد. بر همین اساس دو دسته Locality (محلی بودن) وجود دارد. • محلي بودن موقت (Temporal): طبق اين اصل اطلاعاتي كه در آيندة نزديك مورد استفاده قرار ميگيرند، احتمالاً هم اكنون مورد استفاده هستند. این نوع رفتار می تواند از حلقه های برنامه که هم داده و هم دستورالعمل مجدداً استفاده می شوند، انتظار رود. • محلي بودن فيزيكي (Spatial): طبق اين اصل اگر يك كلمه مورد دستيابي قرار گرفت،كلمه هاي مجاور با اين كلمه در آيندة نزديك مورد دستيابي قرار خواهند گرفت. در واقع محل ارجاع برنامه در آینده نزدیک، احتمالاً نزدیک محل ارجاع فعلی است. (به عنوان مثال داده هاي مربوط به هم در يك آرايه پشتسرهم ذخيره ميشوند، و يا دستورات در يك برنامه به ترتيب و اغلب پشت سرهم اجرا ميشوند).
حافظةنهان (Cache) • حافظههاي نهان، حافظههاي سريع و كم حجمي هستند كه اطلاعاتي را كه احتمال دارد به زودي مورد دستيابي قرار گيرند را در خود ذخيره مي كنند. در نتیجه علت استفاده از حافظة نهان دسترسی سریع تر به داده های مورد نیاز با استفاده از اصل محلي بودن مراجعات ميباشد. • ترتيب دسترسي به حافظه: • تمام دسترسيها به حافظه ابتدا به سمت حافظة نهان هدايت ميشوند. • اگر كلمة مورد نظر در حافظة نهان بود، حافظة نهان مورد دستيابي قرار ميگيرد. • اگر كلمة مورد نظر در حافظة نهان نبود بلوكی كه كلمة مورد نظر را در بر دارد، از حافظة اصلي جايگزين يك بلوك در حافظة نهان ميشود.
کارایی حافظةنهان (Cache) • کارایی حافظه کش معمولا بر اساس کمیتی بنام نسبت برد (Hit Ratio) سنجیده می شود. • Hit Ratio: درصدي از كل دسترسي ها به حافظه كه از طريق حافظة نهان برآورده ميشود. (یعنی تعدادی از جستجوها در حافظه Cache که موفقیت آمیز انجام می گیرد) • با فرض اینکه زمان دسترسي به حافظة نهان Tc و زمان دسترسي به حافظة اصلي Tm باشد، برای محاسبه زمان دسترسي به يك كلمه از حافظه در سيستميكه از حافظةنهان استفاده مي كند (Ta) از رابطه زیر استفاده می شود: Ta = Tc + (1 - h) Tm • مقدار h، نسبت برد (Hit Ratio) می باشد. مثلا وقتی h = 85% باشد یعنی 85% از کل دسترسی ها به حافظه برای جستجوی یک کلمه در حافظه نهان، موفقیت آمیز خواهد بود.
کارایی حافظةنهان (Cache) • مثال: اگر زمان دسترسی به حافظه اصلی 100 ns، و زمان دسترسی به حافظه نهان 10 ns باشد. در زمانی که نسبت برد 90درصد است متوسط زمان دسترسی به حافظه را محاسبه کنید: Ta = Tc + (1 - h)Tm =10 + (1 - 0.9)*100 = 10 + 10 = 20ns • نکته: بافرض اینکه دو سطح (Level) حافظه نهان داشته باشیم و یا برای جستجوهایی مجبور به دسترسی به حافظه جانبی بشویم، زمان دسترسی به يك كلمه از حافظه در چنین سيستمي از رابطه زیر محاسبه می گردد: Ta = Tc + (1-H1)Tm1+(1-H1)(1-H2)Tm2 • مثال: اگر برای دسترسی به یک کلمه ابتدا حافظه نهان جستجو شود و در صورت عدم موفقیت به سراغ حافظه اصلی برویم و در آنجا هم کلمه موجود نباشد و در نهایت ناچار به دسترسی به حافظه جانبی بشویم. بافرض اینکه زمان دسترسی به حافظه نهان، اصلی و جانبی بترتیب 10، 100 و 10000 نانو ثانیه باشد و نرخ موفقیت حافظه نهان (H1) و اصلی (H2)، بترتیب 90% و 95% باشد، زمان دسترسی به اطلاعات را در حالت کلی محاسبه نمایید. Ta = 10 + (1 – 0.9)100 + (1 - 0.9)(1 – 0.95)10000 = 70 ns
نگاشت حافظة اصلي و نهان • انتقال داده ها از حافظة اصلي به حافظة نهان فرايند نگاشت ناميده ميشود. • تابع نگاشت: تناظر بين بلوكهاي حافظةاصلي و بلوكهاي حافظة نهان را مشخص ميسازد. • انواع نگاشت: • نگاشت انجمني Associative Mapping • نگاشت مستقيم Direct Mapping • نگاشت انجمني مجموعهايSet-Associative Mapping
نگاشت انجمني • هر بلوك از حافظة نهان ميتواند هر بلوك از حافظة اصلي را ذخيره كند (قابليت انعطاف). • هر کلمه از حافظة نهان، هم آدرس كلمة حافظه و هم محتويات آن را ذخيره ميكند. • برای جستجوی یک کلمه آدرس آن توسط CPU تولید شده و در Argument Register قرار می گیرد و با تمامی آدرس های موجود مقایسه می شود. در صورت عدم وجود یک آدرس در حافظه نهان، آن آدرس و کلمه ذخیره شده در آن از حافظه اصلی به حافظه نهان آورده شده و در صورت پر بودن حافظه نهان روی اولین کلمه ای که وارد حافظه شده نوشته می شود (سیاست FIFO).
نگاشت مستقيم • هر بلوك حافظه تنها در يك مكان از حافظة نهان ميتواند ذخيره شود. • يك آدرس n-بيتي حافظةاصلي، به دو قسمت زير تقسيم ميشوند: • kبيت براي INDEX. • n-kبيت براي TAG. • از آدرس nبيتي براي دسترسي به حافظة اصلي و از kبيت براي دسترسي به حافظة نهان استفاده ميشود. • رابطه بين آدرس حافظه اصلی و حافظه نهان:
عملكرد نگاشت مستقيم • CPU يك آدرس بصورت (TAG:INDEX) توليد ميكند. • سپس از طريق INDEX به حافظة نهان دسترسي پيدا ميكند، يعني به (tag;data) و TAGرا با tag مقايسه ميكند. • اگر TAG = tag پس داده در حافظه نهان موجود است. بنابراين داده ها را از حافظة نهان بازيابي مي كند و به CPU باز ميگرداند. • اگرTAG != tag پس داده در حافظه نهان موجود نیست و بنابراين کلمه مورد نظر باید از حافظه اصلی خوانده شود و جایگزین مقدار قبلی گردد. اگر هر بلاک در حافظه نهان از چندین کلمه تشکیل شده باشد، در زمانی که باخت (Miss) رخ می دهد (داده در حافظه نهان یافت نشود)، باید کل بلاک با بلاکی از حافظه که داده در آن است جایگزین شود. • از معایب نگاشت مستقیم اینست که اگر دو یا چند کلمه که آدرس هایشان دارای قسمت Index مشابه است ولی Tagهای متفاوت است، مرتبا مورد دستیابی قرار بگیرند، میزان نسبت باخت (Miss Rate) بشدت افزایش می یابد. ولی با توجه به این نکته که این آدرس ها با یکدیگر فاصله زیادی دارند، پس دسترسی به آن ها در برنامه بندرت پشت سرهم صورت می گیرد و این مشکل بندرت اتفاق می افتد.
نگاشت مستقيم با بلوك هائي به طول 8كلمه tag block offset Main memory 1220 00000000 000 000 1220 block00 00001110 2340 110 111 00001111 3450 000 block01 110 000 2340 111 000 3450 000 001 4560 4560 00110000 block10 5670 00110110 110 001 5670 111 000 block11 00111101 6710 101 001 6710 110 111
نگاشت انجمني مجموعهاي (Set-Associated) • در این نوع نگاشت، هر كلمهاي در حافظة اصلي داراي مجموعهاي از مكان ها در حافظة نهان است كه مي تواند در آن ها بار شود. نگاشت انجمني مجموعهاي با مجموعه هايي با اندازة 2 بصورت زیر است: • عملكرد نگاشت انجمني مجموعهاي: • CPU يك آدرس بصورت (TAG:INDEX) توليد ميكند. • سپس با استفاده از INDEX به حافظة نهان دسترسي پيدا ميكند. يعني به كلمه هاي حافظة پنهان(tag0,data0) و (tag1,data1) و بترتيب TAGرا با tag0 وtag1 مقايسه مي كند. حال اگر TAG با tag1 یا tag0 برابر بود داده متناظر با آن برچسب به CPU فرستاده می شود. • اگر TAG با tag1 و tag0 برابر نبود، کلمه از حافظه اصلی خوانده می شود و جايگزين يكي از دو كلمة (tag0,data0) یا (tag1,data1) می شود. برای اینکه یکی از کلمات برای جایگزینی انتخاب بشود می توان از الگوریتم های تصادفی، FIFO و LRU می توان استفاده کرد. 1 0 1 0
Two-way Set Associative Cache 1 0 1 0
سؤال؟ • در یک حافظه نهان شرکت پذیر مجموعه ای با دو بلوک در هر مجموعه (two-way set associative) از بلوک های چهارکلمه ای استفاده می شود. این حافظه نهان می تواند در مجموع 2048 کلمه از حافظه اصلی را در خود جای دهد. اندازه حافظه اصلی 128k کلمه است. برچسب (tag) در این حافظه چند بیت است؟ 128k RAM 17 bit address 7 10 tag index Address 17bit: 2-way set associative cache 2048 word 2*1024 word 10 bit address • چون حافظه two-way است و 2048 کلمه گنجایش دارد پس هر قسمت 1024 کلمه گنجایش دارد و برای آدرس دهی آن ها 10 بیت لازم است. 10
Cache Processor RAM Write Buffer نوشتن در حافظه از طريق حافظة نهان • روش کامل نویسی (Write Through): در این روش اگر كلمه اي كه مي نويسيم درون حافظة نهان باشد (Hit رخداده باشد) كلمة مورد نظر را به طور موازي هم در حافظة نهان و هم در حافظة اصلي مي نويسيم. در غیر این صورت فقط کلمه در حافظه اصلی نوشته می شود. در اين روش حافظه هميشه حاوی اطلاعات بهنگام شده است، ولی اين روش به خاطر دسترسي به حافظه،كند است. بدلیل کند بودن حافظه اصلی، برای نوشتن در حافظه، CPU کلمات را در یک بافر FIFO می نویسد و به ادامه کار مشغول می شود و سپس از بافر کلمات در حافظه اصلی نوشته می شوند. • با فرض اینکه Tc, Tm بترتیب زمان دسترسی به حافظه اصلی و Cache، H نمایانگر مقدار Hit-Ratio و W نرخ رخداد عملیات نوشتن باشد (مقداری بین صفر و یک) و سیستم با روش Write Through نوشتن را انجام دهد، زمان دسترسی کل به حافظه در این سیستم از رابطه زیر بدست می آید: Ta = Tc + (1-H)Tm + W(Tm-Tc) • نکته: در صورتی که عمل نوشتن رخ دهد، بدلیل اینکه نوشتن در هر دو حافظه بصورت همزمان صورت می گیرد، پس در فرمول (Tm-Tc) آورده شده زیرا Tc یکبار حساب شده.
نوشتن در حافظه از طريق حافظة نهان • روش پس نویسی (Write-Back):در این روش اگر كلمه اي كه مي نويسيم درون حافظة نهان باشد (Hit)كلمة مورد نظر را فقط درون cache مينويسيم و یک فلگ که نشان دهنده تغییر مقدار این کلمه است را یک می کنیم. • اگر كلمهاي را كه مي نويسيم درون حافظة نهان نبود(Miss) بلوك حاوی کلمه را از حافظه اصلی به حافظة نهان مي آوريم و درون cache مينويسيم. اگر در هنگام خواندن يك Miss اتفاق بيافتد بلوكي كه بايد جايگزين شود در صورتی که بیت پرچم کلمات آن برابر یک بود درون حافظه باز نویسی مي شود. • حافظه در اين روش بهنگام نيست. بدین معنی که تا زمانی که یک بلوک از Cache خارج نشود اطلاعات نوشته شده به حافظه اصلی انتقال نمی یابد. ولی این روش از روش Write Through سریع تر است زیرا دسترسی به حافظه اصلی تا جای ممکن کاهش یافه است. • با فرض اینکه Tc, Tm بترتیب زمان دسترسی به حافظه اصلی و Cache باشد، H نمایانگر مقدار Hit-Ratio و Wb نرخ یک بودن بیت پرچم در کلمات باشد و سیستم با روش Write Back نوشتن را انجام دهد، زمان دسترسی کل به حافظه در این سیستم از رابظه زیر بدست می آید: Ta = Tc + (1-H)Tm + Wb(1-H)Tm • نکته: زمانی که بیت پرچم یک می شود، در زمانی که Miss رخ می دهد علاوه بر زمان دسترسی به حافظه، یک عملیات نوشتن در حافظه اصلی نیز داریم.