اصول کش: حافظه کوچک و سریع چگونه پیش‌بینی می‌کند بعداً چه چیزی نیاز است

یک کش فقط به این دلیل کار می‌کند که برنامه‌ها تمایل دارند داده یکسان یا نزدیک به هم را به‌طور تکراری دسترسی کنند نه به‌صورت تصادفی. این مقاله اصل محلیت که کش را مؤثر می‌کند را توضیح می‌دهد، یک کش مستقیم‌نگاشت‌شده چگونه داده را با استفاده از یک آدرس مکان‌یابی می‌کند، و در یک hit کش در مقابل یک miss کش چه اتفاقی می‌افتد.

حافظه کشمحلیت مرجکش مستقیم‌نگاشت‌شده

~3 min read · Updated Sep 6, 2026

چرا کش کار می‌کند: اصل محلیت

یک کش فقط به این دلیل مفید است که برنامه‌های واقعی حافظه را به یک الگوی کاملاً تصادفی دسترسی نمی‌کنند. در عوض، آن‌ها 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 که در اینجا معرفی شد بنا می‌شود.

Written & researched by Dr. Shahin Siami

Related Articles

تصورات غلط رایج درباره محاسبات موازی و درس‌های نهایی کتاب

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

Continue

واقعیت‌های عملی: بنچمارک CPU در مقابل GPU و ضرب ماتریس چندپردازنده‌ای

مقایسه منصفانه یک CPU و یک GPU نیازمند مدلی است که هم توان عملیاتی محاسباتی و هم محدودیت‌های پهنای باند حافظه را با هم در نظر بگیرد. این مقاله مدل roofline مورد استفاده برای مقایسه سخت‌افزار واقعی مانند Intel Core i7 و NVIDIA Tesla GPU را معرفی می‌کند، سپس نشان می‌دهد ضرب ماتریس چگونه در سراسر چند پردازنده تسریع می‌شود، به‌عنوان کاربرد عملی نهایی مفاهیم موازی این فصل.

Continue

بنچمارک کردن چندپردازنده‌ها و مدل‌سازی کارایی موازی

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

Continue

شبکه‌سازی کلاستر: ارتباط با دنیای بیرون

یک کلاستر از ماشین‌ها فقط زمانی مفید است که بتواند به‌طور کارآمد هم داخلی و هم با دنیای بیرون ارتباط برقرار کند. این مقاله لایه‌های شبکه‌سازی درگیر در ارتباط کلاستر، مبادلات بین تأخیر و پهنای باند در مقیاس، و اینکه کلاسترها چگونه به شبکه‌های خارجی و کاربران متصل می‌شوند را پوشش می‌دهد.

Continue

کلاسترها، کامپیوترهای در مقیاس انبار، و توپولوژی‌های شبکه

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

Continue

مقدمه‌ای بر GPU: موازی‌سازی عظیم برای بارهای کاری سنگین از نظر داده

یک GPU ایده SIMD که پیش‌تر در این مجموعه پوشش داده شد را به یک مقیاس افراطی می‌برد، و هزاران رشته سبک را به‌طور هم‌زمان اجرا می‌کند تا حجم عظیمی از داده مستقل را پردازش کند. این مقاله توضیح می‌دهد چرا GPU ها از نظر معماری این‌قدر با CPU متفاوت‌اند، مدل اجرای رشته آن‌ها چگونه کار می‌کند، و چه نوع بارهای کاری بیشترین بهره را از این طراحی می‌برند.

Continue