Remove ads
From Wikipedia, the free encyclopedia
حافظه نهان[1] (/kæʃ/ kash ,[2] یا /ˈkeɪʃ/ kaysh در AUE[3]) در رایانش، سختافزار یا نرمافزاری است که اطلاعات را ذخیره میکند به طوری که درخواستهای آینده برای دادهای میتواند سریع تر انجام شود؛ داده ذخیره شده در حافظه نهان ممکن است نتیجه محاسبات قبلی یا یک کپی از اطلاعات ذخیره شده در جای دیگر باشد. یک عملیات موفق در حافظه نهان هنگامی رخ میدهد که اطلاعات درخواست شده در حافظه موقت موجود باشد، در حالی که اگر آن اطلاعات در حافظه یافت نشود عملیات ناموفق است. عملیات موفق در حافظه پنهان برای خواندن داده از این حافظه به کار گرفته میشود، که سریع تر از جمعآوری یک نتیجه یا خواندن از یک حافظه کندتر است؛ بنابراین، درخواستهای بیشتری که توسط حافظه پنهان ارائه پاسخ داده شود، باعث بالا رفتن سرعت سیستم عامل میشود.
برای مقرون به صرفه بودن و برای استفاده کارآمد از داده، حافظههای نهان باید نسبتاً کوچک باشند. با این وجود، حافظههای پنهان خود را در بسیاری از زمینههای محاسبات نشان دادهاند، زیرا نرمافزارهای کاربردی رایج به مقادیر بالایی از داده با مرجع محلی دسترسی دارند. چنین روشهای دسترسی نشان دهنده موقعیت مکانی زمانی است، که در آن دادههایی درخواست شدهاست که اخیراً درخواست شدهاست، و آدرس حافظه، جایی که اطلاعات درخواست شدهاست به صورت فیزیکی نزدیک به دادههایی که قبلاً درخواست شدهاند، ذخیره شدهاست.
یک همبستگی ذاتی بین اندازه و سرعت وجود دارد (با توجه به این که یک منبع بزرگتر فضاهای فیزیکی بیشتری را فراهم میکند) اما همچنین یک تعادل بین تکنولوژیهای گرانقیمت (مانند SRAM) با کالاهای ارزان تری که به راحتی تولید انبوه میشوند (مانند DRAM یا سخت دیسکها)وجود دارد.
بافر ارائه شده توسط یک حافظه پنهان مزایای پهنای باند و تاخیر فراهم:
یک منبع بزرگتر، تاخیر قابل ملاحظه ای برای دسترسی به اطلاعات دارد؛ مثلاً در پردازنده مدرن با فرکانس GHz 4، صدها چرخه ساعت برای رسیدن به DRAM طول میکشد. این امر با خواندن در بخشهای بزرگ، با امید به آن که خواندن در آینده از نقاط نزدیک به آن باشد، کاهش یابد. پیشبینی یا پیشفرض صریح نیز ممکن است باعث شود که بتوان حدس زد در آینده چیزی که خوانده میشود از کجا میآید و در زمانهای پیش رو به درخواستها جواب داده شود؛ اگر به درستی انجام شود، تأخیر بهطور کامل از بین میرود.
استفاده از حافظه پنهان همچنین باعث میشود تا میزان تولید بیشتر از منابع زیرزمینی، با جمعآوری چندین انتقال fine grain به درخواستهای بزرگتر و کارآمد تر انجام شود. در مورد مدارات DRAM، ممکن است با داشتن یک خط انتقال داده وسیع تر باشد. برای مثال، یک برنامه که به بایتها را در یک فضای آدرس ۳۲ بیتی دسترسی دارد را در نظر بگیرید، اما توسط یک خط انتقال داده ۱۲۸ بیت بیرون از تراشه استفاده میشود؛ دسترسیهای ذخیره نشده در حافظه پنهان اجازه میدهد تا ۱/۱۶ از کل پهنای باند مورد استفاده قرار گیرد، و ۸۰٪ از عملیات انتقال دادهها، به جای خود دادهها، مربوط به آدرسهای حافظه خواهد بود. خواندن تکههای بزرگتر، کسری از پهنای باند مورد نیاز برای ارسال اطلاعات آدرس را کاهش میدهد.
سختافزار پیادهسازی حافظه نهان به عنوان یک بلوک از حافظه برای ذخیرهسازی موقت دادهای که احتمال استفاده مجدد از آن وجود دارد قرار گیرد. واحد پردازش مرکزی (CPU) و هارد دیسک (هارد دیسک) اغلب از حافظه پنهان استفاده میکنند، همانند مرورگرهای وب و سرورهای وب.
یک حافظه پنهانی از مجموعه ای از ورودیها ساخته شدهاست. هر ورودی مربوط به دادهاست، که یک کپی از دادههای مشابه در برخی از فضاهای پشتیبان است. هر ورودی همچنین یک تگ دارد که هویت دادهها را در فضای پشتیبان تعیین میکند و مشخص میکند که کدام ورودی یک کپی است.
هنگامی که یک درخواست دهنده به حافظه پنهان (یک پردازنده، مرورگر وب، سیستم عامل) نیاز به دسترسی به دادههایی دارد که در فضای پشتیبان وجود داشته باشد، ابتدا حافظه پنهان را بررسی میکند. اگر یک ورودی با یک تگ متناظر با داده مورد نظر پیدا شود، دادهها در ورود به جای آن استفاده میشود. این وضعیت به عنوان عملیات موفق حافظه پنهان شناخته شدهاست. به عنوان مثال، یک برنامه مرورگر وب ممکن است حافظه محلی خود را بر روی دیسک بررسی کند تا ببینید آیا یک کپی محلی از محتویات یک صفحه وب در یک URL مشخص دارد. در این مثال، URL برچسب است و محتوای صفحه وب، دادهها هستند. درصد دسترسیهای موفق در حافظه نهان، به عنوان میزان ضربه یا نسبت ضربه کش شناخته میشود.
وضعیت دیگر، زمانی رخ می ذهد که حافظه پنهان بررسی میشود و حاوی هیچ ورودی با برچسب مورد نظر نیست، که این رویداد به عنوان عملیات ناموفق حافظه پنهان شناخته میشود. در این مواقع به دسترسی گرانتر از دادهها از فضای پشتیبان نیاز است. هنگامی که اطلاعات درخواست شده بازیابی میشود، بهطور معمول در حافظه پنهان کپی میشود، که برای دسترسی بعدی آماده است.
در طول عملیات ناموفق حافظه پنهان، برخی دیگر از موجودی حافظه پنهان قبلاً حذف شدهاند تا اطلاعات جدید را بازیابی کند. الگوریتم جستجوی کاشف که برای انتخاب جایگزینی انتخاب شدهاست به عنوان سیاست جایگزینی شناخته میشود. یکی از سیاستهای جایگزین محبوب «که اخیراً استفاده شده» (LRU) قدیمیترین ورودی را جایگزین میکند است، ورودی که اخیراً نسبت به ورودیهای دیگر دسترسی کمتری به آن شدهاست (به الگوریتم cache مراجعه کنید). الگوریتمهای کارآمد تر ذخیرهسازی، فرکانس عملیات موفق در حافظه پنهان در مقابل اندازه محتویات ذخیره شده، و همچنین تأخیر و کارایی برای هر دو حافظه پنهان و فضای پشتیبان را محاسبه میکنند. این عملیات برای مقادیر بالای داده، تاخیرهای طولانیتر و کارایی کندتر مانند کار با دیسکهای سخت و شبکهها خوب کار میکند، اما برای استفاده در یک حافظه CPU کارآمد نیست. [نیازمند منبع]
هنگامی که یک سیستم اطلاعات را در حافظه پنهان مینویسد، باید در بعضی نقاط این اطلاعات را در فضای پشتیبان نیز بنویسد. زمانبندی این نوشتن توسط آنچه که به عنوان سیاست نوشتن شناخته میشود کنترل میشود. دو رویکرد نوشتن اساسی وجود دارد:
یک حافظه نهان با استفاده از معماری write-back برای پیادهسازی پیچیدهتر است، زیرا ردیابی هر یک از مکانهایی که در آن نوشته شدهاست لازم است و آنها را به عنوان dirty برای نوشتن در فضای پشتیبانی نشان دهد. دادهها در این مکانها فقط در زمانی که آنها از حافظه پنهان خارج شدهاند، به فضای پشتیبان بازگردانده میشوند، اثری که به عنوان lazy write اشاره شدهاست. به همین دلیل، عملیات خواندن ناموفق در حافظه پنهان از نوع write-back (که نیاز به جایگزینی یک بلوک با بلوک دیگر را دارد)، اغلب نیاز به دو دسترسی حافظه برای سرویس دهی دارد: یکی برای نوشتن دادههای جایگزین از حافظه پنهان در فضای پشتیبان، و دیگری برای بازیابی اطلاعات مورد نیاز است.
سیاستهای دیگر ممکن است باعث نوشتن اطلاعات نیز شوند. درخواست دهنده ممکن است تغییرات زیادی در دادهها در حافظه پنهان ایجاد کند و سپس به حافظه پنهان برای نوشتن دادهها به صورت صریح اطلاع میدهد.
از آنجاییکه هیچ اطلاعاتی در مورد عملیات نوشتن برای درخواستکننده بازگردانده نشدهاست، باید تصمیمگیری در مورد نوشتن ناموفق اتخاذ شود، چه دادهها در حافظه پنهان قرار بگیرند یا نگیرند. این عملیات توسط این دو رویکرد تعریف شدهاست:
هر دو سیاست write-through و write-back میتوانند از هر یک از این سیاستهای write-miss استفاده کنند، اما معمولاً به این ترتیب به یکدیگر متصل میشوند:[4]
واحدهای دیگر غیر از حافظه پنهان ممکن است دادهها را در حافظههای پشتیبانی تغییر دهند، به این صورت که کپی داده در حافظه پنهان ممکن است از تاریخ گذشته یا کهنه شود. در عوض، هنگامی که درخواستکننده دادهها را در حافظه پنهان به روز میکند، کپی آن دادهها در سایر حافظههای پنهان منقضی میشود. پروتکلهای ارتباطی بین مدیران حافظه پنهان که دادههای سازگار را حفظ میکنند، به عنوان پروتکلهای هماهنگی شناخته میشوند.
حافظههای کوچک در CPU یا نزدیک آن میتوانند سریعتر از حافظه اصلی که بزرگتر هستند، عمل کنند. اکثر پردازندهها از دهه ۱۹۸۰ تا الان از یک یا چند حافظه پنهان استفاده میکنند، گاهی اوقات در سطوح آبشار؛ بالا پایان مدرن تعبیه شده، دسکتاپ و سرور ریزپردازنده ممکن است هر شش نوع از حافظه پنهان (بین سطوح و توابع) را داشته باشند،[5] نمونههایی از حافظههای پنهان با یک تابع خاص، D-cache و I-cache و بافر translation lookaside برای MMU هستند.
واحدهای پردازش گرافیک (GPUs) در گذشته اغلب محدودیتهای فقط خواندنی(texture caches) را داشتند و با توجه به اینکه بافتهای swizelled textures را برای بهبود دوبعدی در حافظه پنهان قرار داده بودند، معرفی شدند. ناپدید شدن حافظه پنهان به شدت بر عملکرد تأثیر میگذارد، به عنوان مثال اگر Mipmapping استفاده نشد. ذخیرهسازی برای انتقال دادههای ۳۲ بیتی (و گستردهتر) برای دادههای بافت بسیار مهم بود که اغلب کمی کمتر از ۴ بیت در هر پیکسل بود، نشان داده شده در الگوهای پیچیده با مختصات UV خودسرانه و تبدیل چشمانداز در نقشهبرداری بافت معکوس.
به عنوان GPUهای پیشرفته (به ویژه با GPGPU محاسبه سایهها) آنها بهطور مداوم گسترش مییابند و حافظههای پنهان را بیشتر میکنند، از جمله حافظه نهان پردازنده برای سایه زن، به نمایش گذاشتن عملکرد افزایشی مشترک با حافظه CPU.[6] به عنوان مثال، GPUهای معماری GT200 دارای حافظه نهان L2 نیستند، در حالی که GPU Fermi دارای ۷۶۸ بایت حافظه پنهان در سطح بالا میباشد، GPU Kepler دارای ۱۵۳۶ بایت حافظه پنهان در سطح بالا میباشد،[6] و GPU ماکسول دارای ۲۰۴۸ بایت حافظه نهان در سطح بالا میباشد. این حافظههای نهان برای پردازش اولیه بین رشتهها و عملیات اتمی، و رابط با یک MMU پردازنده ای انجام شدهاست.
پردازندههای سیگنال دیجیتال در طول سالها بهطور کلی تعمیم داده شدهاند. در طرحهای اولیه از حافظههای Scratchpad که در آنها DMA وجود دارد، استفاده میکنند، اما DSPهای مدرن مانند Qualcomm Hexagon اغلب مجموعه ای بسیار مشابه از حافظههای پنهان را در CPU (مانند معماری هاروارد اصلاح شده با L2 مشترک، تقسیم L1 I-cache و D-cache)شامل میشوند.[7]
یک واحد مدیریت حافظه (MMU) که ورودیهای جدول صفحه را از حافظه اصلی دریافت میکند، دارای حافظه نهان ویژه ای است که برای ثبت نتایج ترجمه آدرس مجازی به آدرسهای فیزیکی استفاده میشود. این حافظه نهان ویژه، یک Buffer Lookaside)TLB) نامیده میشود.[8]
در حالی که حافظههای نهان CPU بهطور کلی توسط سختافزار مدیریت میشود، نرمافزارهای مختلفی سایر حافظههای پنهان را مدیریت میکنند. صفحه حافظه نهان در حافظه اصلی، که نمونه ای از حافظه پنهان دیسک است، توسط هسته سیستم عامل مدیریت میشود.
در حالی که بافر دیسک، که بخشی یکپارچه از درایو هارد دیسک است، که گاهی به صورت گمراهکننده به عنوان «حافظه نهان دیسک» به آن اشاره میشود، توابع اصلی آن نوشتن ترتیبی و خواندن پیش فرض است. با توجه به اندازه کوچک بافر در مقایسه با ظرفیت درایو، عملیات تکراری موفق در حافظه نهان نسبتاً نادر هستند. با این حال، کنترلرهای دیسک سطح بالا اغلب دارای حافظه نهان درونی در بلوک دادههای هارد دیسک خود هستند.
در نهایت، یک هارد دیسک محلی سریع، همچنین میتواند اطلاعات ذخیره شده بر روی دستگاههای ذخیرهسازی اطلاعات با سرعتهای پایینتر از قبیل سرورهای از راه دور (حافظه داخلی وب) یا درایوهای نوار محلی یا دستگاههای جیبی نوری را ذخیره کند؛ این طرح مفهوم اصلی مدیریت ذخیرهسازی سلسله مراتبی است. همچنین، درایوهای حالت جامد فوری (SSD) سریع، میتواند به عنوان حافظههای نهان برای هارد دیسکهای رسانه ای کوچکتر در حال چرخش استفاده شود، که به عنوان درایوهای ترکیبی یا درایوهای هیبریدی حالت جامد (SSHD) کار میکنند.
مرورگرهای وب و سرورهای پروکسی وب از حافظه نهان در وب برای ذخیره پاسخهای قبلی از سرورهای وب مانند صفحات وب و تصاویر استفاده میکنند. حافظه نهان در وب میزان اطلاعاتی را که باید در سراسر شبکه منتقل شود را کاهش میدهد، زیرا اطلاعاتی که قبلاً در حافظه پنهان ذخیره شدهاست، اغلب میتوانند دوباره استفاده شوند. این کار باعث کاهش پهنای باند و پردازشهای الزامای وب سرور میشود و به بهبود پاسخگویی برای کاربران وب کمک میکند.[9]
مرورگرهای وب یک درج حافظه داخلی را استفاده میکنند، اما برخی از ارائه دهندگان خدمات اینترنتی (ISPها) یا سازمانها نیز از یک پروکسی سرور ذخیرهسازی استفاده میکنند که یک حافظهٔ وب است که بین همه کاربران آن شبکه به اشتراک گذاشته شدهاست.
یکی دیگر از انواع حافظه پنهان، حافظه نهان از نوع P2P است، جایی که فایلهای مورد نظر توسط برنامههای peer to peer در حافظه نهان یک ISP ذخیره میشوند تا سرعت انتقال P2P را افزایش دهند. بهطور مشابه، معادلات غیر متمرکز وجود دارد که اجازه میدهد مجموعهها یک کار مشابه برای ترافیک P2P انجام دهند، به عنوان مثال، Corelli.[10]
یک حافظه پنهان میتواند دادهها را که بر اساس تقاضا محاسبه میشود ذخیره کند تا از یک حافظه پشتیبان بازیابی شود. Memoization یک تکنیک بهینهسازی است که نتایج رویههای منابع مصرفی را در یک جدول جستجو ذخیره میکند، اجازه میدهد تا درخواستهای بعدی از نتایج ذخیره شده مجدداً استفاده کنند و از محاسبات تکراری جلوگیری میکند. این تکنیک مربوط به روش طراحی الگوریتم برنامهریزی پویا است که میتواند به عنوان یک روش ذخیرهسازی نیز مورد توجه قرار گیرد.
BIND DNS daemon یک نگاشت از نام دامنه به آدرسهای IP را ذخیره میکند، مانند یک کتابخانه حلکننده عمل میکند.
عملیات Write-through در هنگام استفاده از شبکههای غیرقابل اعتماد (مثل شبکه اترنت) رایج است، زیرا پیچیدگی بسیار زیاد پروتکل انسجام بین تعدادی از حافظههای نهان از نوع write-back که ارتباطشان نامعتبر است، مورد نیاز است. به عنوان مثال، حافظههای نهان صفحه وب و سمت سرویس گیرنده سیستم فایل شبکه (مانند حافظههایی که در NFS یا SMB هستند) معمولاً فقط خواندنی یا بهطور ویژه write-through هستند که پروتکل شبکه را ساده و قابل اعتماد نگه میدارد.
موتورهای جستجو نیز غالباً صفحات وب خود را از طریق حافظه پنهان خود نشان میدهند. به عنوان مثال، Google یک پیوند "Cached" در کنار هر نتیجه جستجو ایجاد میکند. زمانی که صفحات وب از یک سرور وب به صورت موقت یا دائمی غیرقابل دسترسی هستند، این کار میتواند مفید باشد.
نوع دیگری از ذخیرهسازی، ذخیره نتایج محاسبه شدهاست که به احتمال زیاد دوباره مورد نیاز است یا برای memoization استفاده میشود. به عنوان مثال، cacache یک برنامه است که خروجی اجرای برنامه را مخفی میکند تا سرعت اجرا شدن را کم کند.
ذخیرهسازی پایگاه داده میتواند بهطور قابل ملاحظه ای توانایی گسترش برنامههای پایگاه داده را بهبود بخشد، به عنوان مثال در پردازش شاخصها، لغات دادهها و زیر مجموعههای متداول از دادهها، میتواند مفید باشد.
حافظههای نهان توزیع شده[11] از میزبانهای شبکه برای فراهم کردن مقیاس پذیری، قابلیت اطمینان و کارایی اسفاده میکنند.[12] میزبانها میتوانند در مناطق مختلف جغرافیایی قرار بگیرند.
معانی «بافر» و «حافظه نهان» کاملاً متفاوت نیستند؛ حتی در این میان، بین فرایند ذخیرهسازی و فرایند قرار دادن در بافر تفاوتهای اساسی وجود دارد.
اساساً، ذخیرهسازی، عملکرد را برای انتقال دادهها که بارها منتقل میشوند، را افزایش میدهند. در حالی که یک سیستم ذخیرهسازی ممکن است افزایش کارایی پس از انتقال اولیه (بهطور معمول نوشتن) یک آیتم داده را متوجه شود، این افزایش عملکرد به دلیل قرار دادن در بافر هنگام ذخیرهسازی میباشد.
در خواندن از حافظه نهان، یک آیتم داده باید از محلی که در آنجا قرار دارد حداقل یک بار دریافت شده باشد تا در دفعات بعدی که این داده خوانده میشود، افزایش عملکرد به دلیل توانایی بارگیری از حافظه نهان (سریع تر) میانی به جای محل سکونت دادهها تحقق یابد. با استفاده از نوشتن در حافظه نهان، افزایش عملکرد درنوشتن یک آیتم داده را داریم، که ممکن است پس از نوشتن اولین آیتم داده بلافاصله در ذخیرهسازی میانی، تحویل داده شود، و انتقال داده را به محل اقامت آن منتقل میکند و همچنین یک مرحله بعد یا مرحله دیگری به عنوان فرایند پس زمینه رخ میدهد. برخلاف قرار دادن دقیق در بافر، یک فرایند ذخیرهسازی در حافظه نهان باید به یک پروتکل انطباق پنهان (بهطور بالقوه توزیع شده) پایبند باشد تا حفظ یکپارچگی بین حافظه میان مدت حافظه پنهان و محل ذخیرهسازی دادهها برقرار شود. قرار دادن در بافر، از سوی دیگر:
با اجرای پیوسته بهطور معمول، یک آیتم داده که برای اولین بار خوانده یا نوشته شدهاست، بهطور مؤثری در بافر قرار میگیرد؛ و در مورد نوشتن، اغلب افزایش عملکرد برای برنامه از جایی که نوشته شدهاست منجر شد. علاوه بر این، بخشی از یک پروتکل ذخیرهسازی که هر فرد مینویسد که به یک دسته از نوشتارها تعلق میگیرد، یک نوع عملیات قرار دادن در بافر است. بخشی از یک پروتکل ذخیرهسازی که خواندن آن را به مجموعه ای از خواندنها عوض میکند نیز یک شکل از بافر است، اگرچه این رویه میتواند بر عملکرد حداقلی از نشانههای اولیه تأثیر منفی داشته باشد (حتی اگر تأثیر مثبت بر عملکرد مجموع فرد خواند) در عمل، ذخیرهسازی تقریباً همیشه شامل برخی از انواع بافر است، در حالی که سختگیرانه قرار دادن در بافر شامل ذخیرهسازی نیست.
بافر یک مکان حافظه موقت است که بهطور سنتی مورد استفاده قرار میگیرد، زیرا دستورات پردازنده نمیتواند بهطور مستقیم اطلاعات ذخیره شده در دستگاههای جانبی را پردازش کند؛ بنابراین، حافظه آدرس پذیر به عنوان یک مرحله میانی استفاده میشود. علاوه بر این، بافر ممکن است هنگامی که یک بلوک بزرگ از دادهها جمعآوری یا جدا (به عنوان مورد نیاز توسط یک دستگاه ذخیرهسازی) شد، یا زمانی که دادهها ممکن است در یک سفارش متفاوت از آنچه که در آن تولید میشود تحویل داده. همچنین یک بافر کامل اطلاعات معمولاً به ترتیب (به عنوان مثال به هارد دیسک) منتقل میشود، به طوری که بافر خود گاهی اوقات عملکرد انتقال را افزایش میدهد یا تنوع یا تکان دهندگی از زمان تأخیر انتقال را کاهش میدهد به عنوان مخالف ذخیرهسازی که در آن قصد کاهش دادن تأخیر است. این مزایا وجود دارد حتی اگر دادههای بافر در یک بافر نوشته شده و یک بار از آن بخوانند.
یک حافظه پنهانی نیز عملکرد انتقال را افزایش میدهد. بخشی از افزایش بهطور مشابه به این احتمال است که چندین انتقال کوچک به یک بلوک بزرگ ترکیب شود. اما عملکرد اصلی به دست میآید به این دلیل که شانس خوبی وجود دارد که دادههای یکسان از چندین بار از حافظه پنهان خوانده شود یا اینکه دادههای نوشته شده به زودی خوانده خواهند شد. یک هدف کش تنها هدف کاهش دسترسی به ذخیرهسازی آهستهتر است. Cache همچنین معمولاً یک لایه انتزاعی است که طراحی شده از نظر لایه همسایه نامرئی است.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.