حافظه كش (Cache Memory)
حافظه كش يك نوع حافظه با كارايي بسيار بالا مي باشد كه حافظه ايستا (Static Memory) نيز ناميده مي شود. نوعي از حافظه كه در حافظه اصلي RAM رايانه بكار مي رود بنام حافظه پويا (Dynamic Memory) خوانده مي شود. حافظه ايستا داراي مصرف انرژي بالاتر، قيمت بيشتر و از نظر فيزيكي بزرگتر از حافظه پويا مي باشد و البته بسيار سريعتر است. اين نوع حافظه مي تواند با سرعت كلاك داخلي پردازنده كار كند در حالي كه حافظه پويا قادر به اينكار نيست.
هنگامي كه پردازنده احتياج به اطلاعاتي از خارج از پردازنده پيدا مي كند، مجبور مي شود كه سرعت خود را پايين بياورد چرا كه حافظه RAM داراي سرعتي بسيار پايين تر از پردازنده مي باشد. سرعت هاي معمول حافظه هاي RAM موجود بين 400 تا 800 مگاهرتز مي باشد در حالي كه كلاك پردازنده ها به عنوان مثال در پنتيوم 4 به بالاتر از 3200 مگاهرتز مي رسد. براي جلوگيري از اين افت سرعت از تكنيك حافظه كش استفاده مي شود. وقتي كه پردازنده، داده اي را از يك موقعيت مشخص در حافظه بارگيري مي كند، مداري بنام كنترل كننده كش يك بلوك كامل از داده هاي زير داده جاري را به حافظه كش منتقل مي كند. از آنجا كه برنامه ها معمولا بصورت متوالي در حافظه جاري هستند، ممكن است موقعيت بعدي مورد درخواست پردازنده دقيقا زير موقعيتي باشد كه هم اكنون بارگيري كرده است. از آنجا كه كنترل كننده كش در حال حاضر مقادير زيادي داده را در زير اولين داده مورد درخواست پردازنده بارگيري كرده است، داده بعدي هم اكنون درون حافظه كش قرار دارد و بنابراين پردازنده نيازي به مراجعه به خارج براي گرفتن آن نخواهد داشت و با سرعت داخلي خود مي تواند به آن داده دسترسي پيدا كند.
كنترل كننده كش همواره موقعيت داده جاري را شناسايي كرده و داده هاي موجود در چندين موقعيت حافظه پس از آنرا به كش منتقل مي كند. به عنوان مثال اگر پردازنده داده اي را در آدرس 1000 حافظه بارگيري كند، كنترل كننده كش n آدرس پس از آن را در حافظه كش بارگيري مي كند. n صفحه (page) ناميده مي شود. اگر يك پردازنده با صفحات 4 كيلوبايتي كار كند (كه يك مقدار متداول است)، كنترل كننده كش داده هاي تا 4096 آدرس زير موقعيت جاري (1000) را لود مي كند. (مي دانيم 4 كيلوبايت معادل 4*1024=4096 بايت مي باشد). اين مثال در شكل 1 مشخص شده است.
هرچقدر كش پردازنده بزرگتر باشد شانس بيشتري براي وجود اطلاعات مورد نياز پردازنده در آنجا وجود دارد و بنابراين پردازنده نياز كمتري به دسترسي مستقيم به حافظه RAM پيدا مي كند كه نتيجه آن بالا رفتن سرعت كاري سيستم مي باشد. زيرا چنانچه گفته شد هر بار پردازنده نياز به دسترسي به داده اي در RAM پيدا كند مجبور مي شود سرعت خود را تا سرعت كاري RAM پايين آورد.
L1 و L2 به ترتيب به معناي كش سطح 1 و كش سطح 2 مي باشد و اشاره به فاصله آنها از هسته پردازنده يا واحد اجرا (Execution Unit) دارد. سوالي كه در اينجا پيش مي آيد اينست كه چرا بايد سه حافظه كش مجزا داشته باشيم (كش ديتا L1، كش دستورات L1 و كش L2) . با توجه به شكل 2 مشخص مي شود كه كش دستورات L1 به عنوان كش ورودي و كش ديتا L1 به عنوان كش خروجي عمل مي كند. كش دستورات L1 كه معمولا كوچكتر از كش سطح L2 مي باشد بخصوص هنگامي موثر واقع مي شود كه برنامه يك بخش كوچك خود را تكرار كند (حلقه دستوري)، زيرا دستورات مورد نياز واحد واكشي (Fetch Unit) بسيار نزديك به آن خواهند بود.
در توضيح شكل 2 بايد گفت قسمت خط چين شده بدنه پردازنده مي باشد و حافظه RAM خارج از آن قرار دارد. پهناي داده بين RAM و پردازنده بطور معمول 64 بيت مي باشد (در حالت Dual Channel دوبرابر يعني 128 بيت) كه با سرعت حافظه RAM و يا سرعت كلاك خارجي پردازنده، هر كدام كه كمتر باشد، كار مي كند. كل محتويات قسمت خط چين شده با سرعت كلاك داخلي پردازنده كار مي كنند. بسته به نوع پردازنده بعضي از قسمت هاي داخلي حتي با سرعتي بيش از كلاك داخلي كار مي كنند. پهناي داده بين اجزاي داخلي مي تواند بيشتر باشد بعنوان مثال مسير داده بين كش L2 و كش دستورات L1 در پردازنده هاي مدرن معمولا 256 بيت مي باشد. هرچه اين پهنا بيشتر باشد انتقال اطلاعات سريعتر انجام مي شود.
هنگامي كه سيستم روشن مي شود حافظه هاي كش خالي هستند. در شروع لود كردن سيستم عامل، پردازنده شروع به پردازش اطلاعات بارگيري شده از هارد ديسك بر روي RAM مي كند و كنترل كننده كش نيز شروع به پر كردن كش ها مي كند.
واحد واكشي وظيفه يافتن و آوردن دستورات مورد نياز پردازنده را از حافظه دارد. ابتدا اين واحد بدنبال دستور مورد نظر در كش دستورات L1 مي گردد. اگر دستور مورد نظر در آنجا نبود كش L2 را جستجو مي كند و چنانچه در آنجا نيز نبود، آنرا مستقيما از حافظه RAM لود مي كند. پس از اينكه واحد واكشي اطلاعات مورد نظر پردازنده را يافت آنرا به واحد رمز گشايي (Decode Unit) ارسال مي كند. واحد رمز گشايي وظيف كشف دستور خاص مورد نظر را دارد. اين كار بكمك يك حافظه ROM بنام ميكروكد (microcode) كه داخل پردازنده قرار دارد انجام مي گيرد. ميكروكد به پردازنده آموزش مي دهد كه چكار بكند. در واقع ميكروكد مانند يك راهنماي گام به گام براي هر دستور مي باشد. براي مثال چنانچه دستور لود شده، جمع دو پارامتر a+b باشد، ميكروكد به واحد رمزگشا مي گويد كه احتياج به دو پارامتر a و b دارد. سپس واحد رمزگشا از واحد واكشي درخواست مي كند كه داده هاي موجود در دو مكان بعدي حافظه را بياورد كه مقادير a و b مي باشند. پس از آنكه واحد رمزگشا دستور را ترجمه كرد و كل اطلاعات لازم براي اجراي دستور را فراهم نمود، تمام داده ها را بصورت دستورات گام بگام به واحد اجرا مي فرستد. وقتي پردازش داده ها توسط واحد اجرا به پايان رسيد، نتيجه به كش ديتا L1 ارسال مي شود. نتيجه پس از آن مي تواند به حافظه RAM ارسال شود يا به مكاني ديگر مثل كارت گرافيكي و.... ولي اين بستگي به دستور پس از آن دارد كه ممكن است چاپ نتيجه بر روي صفحه نمايش باشد.
منبع:
کد:
http://www.hardwaresecrets.com/article/209/