چرا کش کار میکند: اصل محلیت
یک کش فقط به این دلیل مفید است که برنامههای واقعی حافظه را به یک الگوی کاملاً تصادفی دسترسی نمیکنند. در عوض، آنها Locality of Reference را نشان میدهند، که به دو شکل مرتبط میآید: Temporal Locality، به این معنا که یک مکان حافظه که اخیراً دسترسی داشته، احتمالاً بهزودی دوباره دسترسی خواهد داشت، و Spatial Locality، به این معنا که مکانهای حافظه نزدیک به یک مکان اخیراً دسترسیشده نیز احتمالاً بهزودی دسترسی خواهند داشت، مانند عناصر بعدی در یک آرایه.
یک کش واقعاً چه چیزی ذخیره میکند
یک Cache یک حافظه کوچک و سریع است که کپیهایی از داده اخیراً استفادهشده از حافظه اصلی را نگه میدارد، که بین پردازنده و حافظه اصلی در سلسلهمراتب که پیشتر در این مجموعه بحث شد قرار دارد. وقتی پردازنده دادهای را درخواست میکند که از قبل در کش حاضر است، میتواند بسیار سریعتر از واکشی آن از حافظه اصلی بازیابی شود.
مکانیابی داده: کش مستقیمنگاشتشده
سادهترین سازمان کش، Direct-Mapped Cache نامیده میشود، جایی که هر آدرس حافظه دقیقاً به یک مکان مشخص در کش نگاشت میشود، که با بخشی از بیتهای آدرس تعیین میشود.
آدرس حافظه شکستهشده به فیلدها:
[ Tag | Index | Block Offset ]- بیتهای
Indexمشخص میکنند کدام مکان کش بررسی شود. - بیتهای
Tagهمراه با داده ذخیره میشوند و با آدرس درخواستشده مقایسه میشوند تا تأیید کنند داده درست حاضر است، چون چند آدرس حافظه مختلف میتوانند به همان index نگاشت شوند. - بیتهای
Block Offsetبایت خاصی درون یک بلوک ذخیرهشده بزرگتر را انتخاب میکنند، چون کشها معمولاً داده را در قطعات با اندازه ثابت ذخیره میکنند نه بایتهای تکی.
Cache Hit و Cache Miss
وقتی پردازنده دادهای را درخواست میکند و آن را از قبل در کش با یک tag منطبق پیدا میکند، این Cache Hit نامیده میشود، و داده بهسرعت بازگردانده میشود. وقتی داده درخواستشده پیدا نمیشود، این Cache Miss نامیده میشود، و پردازنده باید داده را از یک سطح کندتر سلسلهمراتب حافظه بازیابی کند، سپس یک کپی را در کش برای استفاده احتمالی آینده ذخیره کند.
در یک cache hit:
داده بلافاصله از کش بازگردانده میشود
در یک cache miss:
داده از حافظه اصلی واکشی میشود
یک کپی در کش ذخیره میشود
داده به پردازنده بازگردانده میشودچرا اندازه بلوک اهمیت دارد
بهدلیل محلیت مکانی، کشها فقط یک بایت تکی درخواستی را در یک miss ذخیره نمیکنند؛ آنها یک Block کامل (که Cache Line نیز نامیده میشود) از حافظه نزدیک را یکجا بازیابی و ذخیره میکنند، با پیشبینی اینکه داده مجاور احتمالاً بهزودی مورد نیاز خواهد بود. انتخاب اندازه بلوک مناسب شامل یک مبادله است: بلوکهای بزرگتر محلیت مکانی را مؤثرتر بهرهبرداری میکنند اما زمان بیشتری برای انتقال در یک miss میگیرند و اگر داده اضافه واقعاً استفاده نشود میتوانند فضای کش را هدر دهند.
چرا درک این اصول اهمیت دارد
هر موضوع پیشرفتهتر کشی که بعداً در این مجموعه بحث میشود — سنجش و بهبود کارایی کش، استراتژیهای نگاشت انعطافپذیرتر، و سلسلهمراتب کش چندسطحی — مستقیماً روی این مفاهیم اصلی محلیت، نگاشت مستقیم، و تمایز hit/miss که در اینجا معرفی شد بنا میشود.