پارگی (علوم رایانه)
تکهتکه شدن (به انگلیسی: Fragmentation) در ذخیرهسازی رایانهای پدیدهای است که در آن فضای ذخیرهسازی بهطور ناکارآمد استفاده میشود و منجر به کاهش ظرفیت واقعی ذخیرهسازی میشود. همچنین به آن فضای هدر رفته نیز میگویند.
سه شکل متفاوت اما مرتبط از تکهتکه شدن وجود دارد: تکهتکه شدن خارجی، تکهتکه شدن داخلی و تکهتکه شدن داده؛ که میتوانند به تنهایی یا درارتباط با هم بررسی شوند. تکهتکه شدن معمولاً در ازای بهبود سرعت یا سادگی پذیرفته میشود.
مبانی
وقتی یک برنامه رایانهای بلوکهایی از حافظه را از سیستم رایانه درخواست میکند، بلوکهای حافظه به صورت تکهتکه تخصیص مییابند. وقتی کار برنامه رایانهای با یک تکه از حافظه تمام میشود میتواند آن تکه را آزاد کند و به رایانه برگرداند. اندازه هر تکه و مدت زمانی که هر تکه دراختیار یک برنامه باقی میماند متغیر است.
یک برنامه در مدت طول عمر خود میتواند هر تعداد تکه از حافظه را درخواست یا آزاد کند. وقتی یک برنامه شروع به کار میکند، قسمتهای آزاد حافظه طویل و پشت سر هم هستند. در طی زمان و با استفاده برنامهها، آن تکههای طویل و متوالی به تکههای کوچک و کوچکتر تقسیم میشوند. در نهایت ممکن است برای یک برنامه غیرممکن باشد که یک تکه بزرگ از حافظه را درخواست کند.
انواع تکهتکه شدن
تکهتکه شدن داخلی
به دلیل قوانین و قواعد تخصیص حافظه، گاهی حافظه، بیشتر از مقدار مورد نیاز اختصاص مییابد. برای مثال حافظه تنها میتواند به برنامههایی اختصاص یابد که تکههایی قابل تقسیم بر ۴، ۸ یا ۱۶ داشته باشد. در نتیجه، اگر یک برنامه مثلاً ۲۳ بایت درخواست کند، در واقع یک تکهٔ ۲۴ بایتی دریافت میکند.
وقتی این اتفاق رخ میدهد، حافظهٔ اضافی به هدر میرود. در این سناریو، حافظهٔ غیرقابل استفاده حاوی یک ناحیه تخصیص یافته خواهد بود، بنابراین با عنوان تکه شدن داخلی نامگذاری میشود. برخلاف دیگر انواع، تکهتکه شدن داخلی به سختی احیا میشود و به حالت اولیه بازمیگردد، معمولاً بهترین راه برای حذف آن، تغییر طراحی است.
تکهتکه شدن خارجی
تکهتکه شدن خارجی زمانی مطرح میشود که حافظهٔ آزاد به بلوکهای کوچکی تقسیم شود و توسط حافظهٔ تخصیص یافته پراکنده گردد. این اتفاق ضعف برخی الگوریتمهای تخصیص محل ذخیرهسازی است که نمیتوانند بهطور کارآمد به حافظهٔ مورد استفادهٔ برنامهها دستور دهند.
نتیجه این میشود که اگر چه محل ذخیرهسازی آزاد وجود دارد، اما غیرقابل استفاده میماند چرا که به قسمتهایی تقسیم شدهاست که هر کدام زیادی کوچک هستند و نمیتوانند درخواستهای کاربردی را برآورده سازند. واژهٔ خارجی به این منظور بکار برده شدهاست که در اینجا محل ذخیرهسازی غیرقابل استفاده بیرون نواحی تخصیص یافته قرار دارد.
برای مثال حالتی را تصور کنید که در آن سیستم سه بلوک پیوسته از حافظه را به یک برنامه اختصاص میدهد و بلوک میانی را آزاد میکند. تخصیص دهندهٔ حافظه میتواند در آینده از این بلوک آزاد در تخصیص استفاده کند، با این وجود اگر حافظهای که قرار است در آینده در این بلوک آزاد تخصیص یابد بزرگتر از این بلوک باشد، این امکان وجود نخواهد داشت.
تکهتکه شدن خارجی، در سیستمهای فایل هم اتفاق میافتد که در آنها فایلهایی با سایزهای مختلف ساخته میشوند، تغییر سایز میدهند یا پاک میشوند. این تأثیر حتی در شرایطی که یک فایل که به تکههای بسیار کوچکی تقسیم شدهاست پاک میشود، مخرب تر هم ظاهر میشود، چرا که این کار نواحی کوچک مشابه از فضای خالی را بر جای میگذارد.
تکهتکه شدن داده
تکهتکه شدن داده زمانی اتفاق میافتد که مجموعهای از دادهها در حافظه به بخشهایی که چندان به هم مرتبط نیستند تقسیم میشوند. این مسئله بهطور معمول نتیجه تلاش برای درج شیئ ای بزرگ در فضای ذخیرهسازی است که خود تحت تأثیر تکهتکه شدن خارجی قرار گرفتهاست.
برای مثال، فایلها در سیستم فایل معمولاً به وسیلهٔ واحدهایی به نام بلوک یا خوشه مدیریت میشوند. وقتی که یک فایل سیستم ایجاد میشود، فضای ذخیرهسازی آزاد برای ذخیره کردن بلوکها به صورت پشت سرهم به وجود میآید؛ که این خواندن و نوشتن سریع و پی در پی فایلها را امکانپذیر میسازد. با این وجود با اضافه شدن، حذف شدن یا تغییر در حجم فایلها فضای خالی به صورت خارجی تکهتکه میشود و فقط فضاهای کوچکی برای جای دادن دادههای جدید باقی میگذارد. وقتی فایل جدیدی نوشته میشود یا یکی از فایلهای موجود گسترش مییابد، سیستم عامل آن را در بلوکهای غیر متوالی موجود قرار میدهد. بلوکهای دادهای جدید پراکنده میشوند و به همین دلیل زمان دسترسی به آنها افزایش مییابد. به این مسئله تکهتکه شدن سیستم فایل میگویند.
وقتی یک فایل با سایز مشخص نوشته میشود در صورت وجود فضاهای خالی بزرگتر از آن فایل، سیستم عامل با قرار دادن فایل در یکی از آن فضاها از تکهتکه شدن داده جلوگیری میکند.
الگوریتمهای متعددی برای انتخاب این فضاهای خالی وجود دارد. الگوریتم " بهترین جای دهی "، کوچکترین فضایی را که به اندازه کافی بزرگ است انتخاب میکند. الگوریتم "بدترین جای دهی "، بزرگترین فضای ممکن را انتخاب میکند. الگوریتم " اولین جای دهی "، اولین فضایی را که سایز کافی داشته باشد، انتخاب میکند. الگوریتم " جای دهی بعدی "، اولین مکان مناسب بعد از جای دهی قبلی را انتخاب میکند. الگوریتم " جای دهی بعدی " از "اولین جای دهی " سریع تر است که آن هم از " بهترین جای دهی " بهتر است.
همانگونه که با انجام فشردگی میتوان تکهتکه شدن خارجی را برطرف کرد، تکهتکه شدن دادهها را نیز میتوان با باز آرایی فضای ذخیرهسازی برطرف کرد. در نتیجه بخشهای مرتبط دادهای در کنار هم قرار میگیرند. تکهتکه شدن حافظه یکی از سختترین مشکلاتی است که مدیران سیستمها با آن مواجه هستند. این مسئله در طول زمان منجر به کاهش قابلیت اجرای سیستم میشود و در نهایت ممکن است به از دست رفتن همهٔ فضای آزاد حافظه شود.
منابع
مشارکتکنندگان ویکیپدیا. «Fragmentation (computing)». در دانشنامهٔ ویکیپدیای انگلیسی.