کوبیدگی (علوم رایانه)

در علوم کامپیوتر، هنگامی‌که بخش حافظه مجازی کامپیوتر در حالت صفحه‌بندی ثابت قرار دارد، نیاز به انتقال فراوان داده‌ها بین حافظه اصلی و دیسک وجود داشته باشد، کوبیدگی رخ می‌دهد که باعث محرومیت از عملیات وابسته به پردازنده می‌شود. کوبیدگی باعث کاهش عملکرد کامپیوتر یا حتی فروپاشی آن می‌شود. این موقعیت می‌تواند تا یافتن علت آن ادامه پیدا کند.
مروری بر کلیات
اگر یک فرایند تعداد صفحات کافی نداشته باشد، کوبیدگی یک فعالیت صفحه‌بندی شدید است و به طور طبیعی نرخ خطای صفحه بالا خواهد بود. این موقعیت منجر به استفاده حداقلی از پردازنده می‌شود. در کامپیوترهای پیشرفته، کوبیدگی ممکن است در سیستم صفحه‌بندی (اگر حافظه فیزیکی کافی وجود نداشته باشد یا زمان دسترسی به طور کلی طولانی باشد) یا در سیستم ارتباطی (بویژه تداخل در دسترسی به باس درونی) و غیره رخ دهد.
توان عملیاتی و تاخیر یک سیستم با توجه به پیکربندی و الگوریتم‌های موجود در آن، ممکن است است به دلیل تعدد درخواست‌ها تنزل پیدا کنند. کوبیدگی وضعیتی است که عملکرد مولد پردازنده کاهش پیدا کرده و بیشتر عمل جابه‌جایی را انجام می‌دهد. پردازنده بیشتر به جابه‌جایی صفحات مشغول است تا این‌که به درخواست‌های کاربران پاسخ دهد. هم‌چنین کوبیدگی هنگامی اتفاق می‌افتد که صفحات زیادی در حافظه اصلی هستند و هر صفحه به صفحه دیگری اشاره می‌کند. ظرفیت محدود حافظه اصلی برای داشتن تمام صفحات، باعث روی آوردن به حافظه مجازی می‌شود. هنگامی‌که صفحه‌ای که در حافظه اصلی حضور ندارد در طول اجرا مورد نیاز باشد، این صفحه مورد نیاز به صفحه‌ای از حافظه مجازی که در حافظه اصلی حاضر است معاوضه می‌شود. وقتی که پردازنده به شدت مشغول انجام این عملیات شود، کوبیدگی رخ می‌دهد.
دلایل
در سیستم حافظه مجازی کوبیدگی ممکن است معلول برنامه‌ها یا میزان باری باشد که کمبود ارجاعات محلی به‌بار می‌آورد: اگر مجموعه کاری یک برنامه یا میزان کاری‌اش به طور کارآمد توسط حافظه اصلی دربر گرفته نشود و به دنبال آن انتقال اطلاعات داشته باشیم، کوبیدگی ممکن است رخ دهد.
اولین استفاده از صفحه‌بندی در دوران سیستم‌عامل‌های وابسته به نوار مغناطیسی برای توصیف صدای نوارها به کاربرده شد، وقتی که داده‌ها به سرعت از روی آن‌ها نوشته و خوانده می‌شدند. بسیاری از کامپیوترهای اولیه دارای حافظه ناکافی برای استفاده از الگوهای جدید بودند و افزایش مقدار حافظه اصلی اغلب افزایش قابل توجه سرعت عملکرد کامپیوتر را به همراه دارد. این افزایش سرعت منوط به کاهش مقدار مورد نیاز صفحه‌بندی است.
یک مثال از این دسته از وضعیت‌ها در کامپیوترهای مین‌فریم سری ۳۷۰ شرکت آی‌بی‌ام اتفاق افتاد، یک ساختار به خصوص می‌توانست شامل یک دستورالعمل اجرایی باشد که به یک دستورالعمل جابه‌جایی اشاره می‌کرد با این هدف که یک جابه‌جایی اطلاعات از یک منبع که در محدوده یک صفحه بود، به یک مقصد که در آن هم در حوزه یک صفحه بود انجام پذیرد؛ بنابراین تعداد کلی صفحات استفاده شده در این ساختار هشت صفحه بود و همه هشت صفحه باید در حافظه همزمان حاضر می‌بودند. اگر سیستم عامل کمتر از هشت صفحه در حافظه اصلی تخصیص می‌داد، در هنگامی‌که این فرایند اقدام به جابه‌جایی اطلاعات می‌کرد، با نقض صفحه مواجه می‌شد و پدیده کوبیدگی در هر عملیات رخ می‌داد که در نهایت دستورالعمل به انجام نرسیده از سر گرفته می‌شد.
راه حل‌ها
جهت حل مشکل کوبیدگی که باعث صفحه‌بندی بیش‌از حد می‌شود، یک کاربر می‌تواند یکی از راه‌حل‌های زیر را به کار گیرد:
افزایش مقدار حافظه اصلی کامپیوتر
کاهش تعداد برنامه‌های درحال اجرا در کامپیوتر
جایگزینی برنامه‌هایی که به حافظه فراوان نیاز دارند با برنامه‌های معادل که حافظه کمتری مصرف می‌کنند.
نسبت دادن اولویت کارکرد به برنامه‌ها مانند پایین، متوسط و بالا
بهبود spatial locality بوسیله جایگزینی حلقه‌هایی مانند:
// recall that in C, arrays use Row-major order
int m256256;
for (column=0; column<256; column++) {
for (row=0; row<256; row++) {
mrowcolumn = foo();
با:
int m256256;
for (row=0; row<256; row++) {
for (column=0; column<256; column++) {
// consecutive columns reside in adjacent memory locations
mrowcolumn = foo();
استفاده‌های دیگر
از این روش هم‌چنین برای حل فقدان‌های بین سطوح دیگر سلسله‌مراتب حافظه، نه فقط صفحه‌بندی، استفاده می‌شود. وقتی مجموعه کوچکتر از حافظه سریعتر برای سرعت بخشیدن به دسترسی به مجموعه بزرگتر با حافظه کندتر استفاده می‌شود. یک مثال از این مورد کوبیدگی حافظه کش است، جایی که حافظه اصلی با الگویی مورد دستیابی است که منجر به رقابت نقاط مختلف حافظه اصلی برای برای دسترسی به خطوط حافظه کش می‌شود و در نتیجه آن تعداد گزافی خطای کش اتفاق می‌افتد. بزرگترین مسئله برای کش این است که خاصیت انجمنی پایینی داشته باشد. مورد مشابه دیگر کوبیدگی حافظه TLB است، جایی که بافر TLB با درخواست‌هایی بیش از آن‌چه می‌تواند انجام دهد مواجه است.