انوع کش و الگوریتم های نوشتن داده ها با کش در سیستم های ذخیره سازی Block-base

انواع کش

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

 

کش عمومی به کاربران اجاز می دهد که میزان درصد کش را برای خواندن و نوشتن مشخص کنند. عموماً برای خواندن درصد کش کم می باشد، اما برای برنامه های کاربردی read-intensive باید افزایش پیدا کند. در پیاده سازی کش عمومی نسبت کش خواندن در مقابل نوشتن بر اساس حجم های کاری بصورت پویا تنظیم می شود.

 

الگوریتم های نوشتن داده ها با کش در سیستم های ذخیره سازی

در نوشتن ترتیبی بسیاری از عملیات های نوشتن کوچکتر با استفاده از کش باهم یکپارچه می شوند و تبدیل به یک عملیات نوشتن بزرگتر بر روی سیستم ذخیره سازی می شوند و باعث بهینه سازی بسیار زیادی در عملیات نوشتن می شود. عملیات نوشتن داده ها با کش به روش های زیر انجام می شود:

 

Write-through cache

داده ها در کش و بلافاصله به سیستم ذخیره سازی منتقل می شوند و سپس تاییدیه (acknowledgement) آن به سیستم محاسباتی ارسال می شود. چون داده ها به محض ورود به کش، به سیستم ذخیره سازی منتقل می شوند، بنابراین ریسک از دست رفتن داده ها پایین است، اما به دلیل عملیات ذخیره سازی، زمان write-response طولانی تر می باشد.

 

 

Write-back cache

 داده ها در کش قرار می گیرند و بلافاصله تاییدیه  (acknowledgement) آن به سیستم محاسباتی فرستاده می شود، سپس از کش به سیستم ذخیره سازی منتقل می شوند. زمان write-response به دلیل اینکه عملیات نوشتن از دستگاه های کند ذخیره سازی مثل هارد دیسک ایزوله می شود، خیلی سریعتر می باشد ولی اگر کش به دلایلی خراب شود، داده های درون آن که هنوز به سیستم ذخیره سازی منتقل نشده اند، ریسک از دست رفتن آن ها بالا می باشد.

 

 

البته کش تحت شرایطی خاصی مانند حجم زیاد I/O نوشتن می تواند bypass یا کنار گذاشته شود. اگر حجم درخواست های I/O از مقدار پیش فرض تعیین شده ای فراتر رودwrite aside size  نامیده می شود و برای جلوگیری از مصرف بیش از اندازه کش، نوشتن مستقماً به سیستم ذخیره سازی فرستاده می شود، و در شرایطی که منابع کش محدود بوده و کش برای I/O های تصادفی کوچک مورد نیاز می باشد، بسیار کاربردی است.