مدیریت حافظه دوستانه
به عنوان تمرین

شرح ذیل یک مثالی است در رابطه با اینکه وقتی یک برنامه‌ای در خواست حافظه می‌کند چه اتفاقی می‌افتد.
بیایید در رابطه با این سیستم صحبت کنیم. اندازهٔ کوچکترین بلاک ممکن ۶۴ کیلو بایت هست، محدودهٔ بالایی برای مرتبهٔ ۴ هست، که بزرگترین تخصیص بلاک ممکن را نتیجه می‌دهد. در اندازهٔ ۲ به توان ۴ تا 64k برابر با 1024k می‌شود.
در ذیل یک حالت ممکن از سیستم پس از در خواست‌های حافظهٔ گوناگون نمایش داده می‌شود:
| Step | 64K | 64K | 64K | 64K | 64K | 64K | 64K | 64K | 64K | 64K | 64K | 64K | 64K | 64K | 64K | 64K |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
۱: 24
۲٫۱: 23
| ۲٫۲ | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۲٫۳ | 21 | 21 | 21 | 21 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۲٫۴ | 20 | 20 | 21 | 21 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۲٫۵ | A: 20 | 20 | 21 | 21 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۳ | A: 20 | 20 | B: 21 | B: 21 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۴ | A: 20 | C: 20 | B: 21 | B: 21 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۵٫۱ | A: 20 | C: 20 | B: 21 | B: 21 | 21 | 21 | 21 | 21 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۵٫۲ | A: 20 | C: 20 | B: 21 | B: 21 | D: 21 | D: 21 | 21 | 21 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۶ | A: 20 | C: 20 | 21 | 21 | D: 21 | D: 21 | 21 | 21 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۷٫۱ | A: 20 | C: 20 | 21 | 21 | 21 | 21 | 21 | 21 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۷٫۲ | A: 20 | C: 20 | 21 | 21 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۸ | 20 | C: 20 | 21 | 21 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۹٫۱ | 20 | 20 | 21 | 21 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۹٫۲ | 21 | 21 | 21 | 21 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
| ۹٫۳ | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 22 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 |
۹٫۴: 23
۹٫۵: 24
این تخصیص می‌تواند به طریقهٔ زیر اتفاق بیفتد:
موقعیت آغازین
برنامهٔ A حافظهٔ 34 k را در خواست می‌کند (در مرتبهٔ ۰)
هیج بلاک مرتبهٔ ۰ ای در دسترس نیست، بنابراین بلاک مرتبهٔ ۴ دو نیم می‌شود و دو بلاک مرتبهٔ ۳ می‌سازد.
هنوز بلاک مرتبه ی۰ در دسترس نیست، بنابراین اولین بلاک مرتبهٔ ۳ به دو نیم می‌شود و دو بلاک با مرتبهٔ ۲می‌سازد.
هنوز بلاک مرتبهٔ ۰ در دسترس نیست، بنابراین اولین بلاک مرتبهٔ ۲ به دو نیم می‌شود و دو بلاک با مرتبهٔ ۱ می‌سازد.
هنوز بلاک مرتبهٔ ۰ در دسترس نیست، بنابراین اولین بلاک مرتبه ی۱ به دو نیم می‌شود و دو بلاک با مرتبهٔ ۰ می‌سازد.
در حال حاضر بلاک مرتبهٔ ۰ در دسترس است پس به A تخصیص می‌یابد.
برنامه یBدر خواست حافظهٔ 66k را می‌کند (مرتبه ی۱), یک بلاک مرتبهٔ ۱ در دسترس است بنابراین به Bتخصیص می‌یابد.
برنامهٔ Cدر خواست حافظهٔ 35kرامی‌کند (مرتبهٔ ۰), یک بلاک مرتبهٔ ۰ در دسترس است، بنابراین به C تخصیص می‌یابد.
برنامهٔ D , 67k حافظه را در خواست می‌کند. (مرتبهٔ ۱)
هیچ بلاک مرتبهٔ ۱ ای در دسترس نیست بنابراین بلاک مرتبهٔ ۲ به دو نیم می‌شود و ۲ بلاک مرتبهٔ ۱ می‌سازد.
در حال حاضر بلاک مرتبهٔ ۱ در دسترس است پس به D تخصیص می‌یابد.
برنامهٔ Bحافظه اش را آزاد می‌کند، یک بلاک مرتبهٔ ۱ آزاد می‌شود.
برنامه یDحافظه اش را آزاد می‌کند.
یک بلاک مرتبهٔ ۱ آزاد شده‌است.
از آنجایی که بلاک رفیق بلاک تازه آزاد شده، آزاد است ۲ بلاک از مرتبهٔ ۱ به یک بلاک از مرتبهٔ ۲ ترکیب می‌شوند.
برنامهٔ A حافظه اش را آزا د می‌کند، یک بلاک مرتبهٔ ۰ آزاد می‌شود.
برنامهٔ C حافظه اش را آزاد می‌کند.
یک بلاک مرتبهٔ ۰ آزاد می‌شود.
از آنجایی که بلاک رفیق بلاک تازه آزاد شده، آزاد است ۲ بلاک از مرتبه ی۰ به یک بلاک از مرتبهٔ ۱ ترکیب می‌شوند.
از آنجایی که بلاک رفیق بلاک تازه آزاد شده، آزاد است ۲ بلاک از مرتبهٔ ۱ به یک بلاک از مرتبهٔ ۲ ترکیب می‌شوند.
از آنجایی که بلاک رفیق بلاک تازه آزاد شده، آزاد است ۲ بلاک از مرتبهٔ ۲ به یک بلاک از مرتبهٔ ۳ ترکیب می‌شوند.
از آنجایی که بلاک رفیق بلاک تازه آزاد شده، آزاد است ۲ بلاک از مرتبهٔ ۳ به یک بلاک از مرتبهٔ ۴ ترکیب می‌شوند.
همانطوری که می‌بینید، در پی در خواست حافظه به مانند زیر چه اتفاقی می‌افتد.
اگر حافظه اختصاص داده شده باشد:
دنبال بخش با اندازهٔ مناسب از حافظه (حداقل ۲ به توان kبلاک که بزرگتر یا مساوی با حافظهٔ در خواستی است) می‌گردد.
اگرپیدا شد، به برنامه تخصیص می‌یابد.
اگر پیدا نشد، تلاش می‌کند تا بخش مناسبی از حافظه را بسازد. سیستم به صورت زیر تلاش می‌کند:
بخش حافظهٔ آزاد بزرگتر از حافظهٔ در خواستی را به دو نیم می‌کند.
اگر محدودهٔ پایین‌تر دستیابی شد، آنگاه مقدار حافظه را تخصیص می‌دهد.
به گام اول بر می‌گردد. (به دنبال بخش حافظه‌ای با اندازهٔ مناسب می‌گردد)
این فرایند را تکرار می‌کند تا بخش حافظه‌ای مناسب را پیدا کند.
اگر حافظه آزاد شده باشد:
بلاک حافظه را آزاد می‌کند.
دنبال بلاک همسایه می‌گردد (که آیا آزاد هست یا نه)
اگرآزاد است ۲ بلاک را به یک بلاک ترکیب می‌کند و به گام دوم برمیگردد و این فرایند را تکرا رمی‌کند تا محدودهٔ بالایی دستیابی شود. (همهٔ حافظه آزاد شود) یا با هیچ همسایه‌ای با بلاک آزاد برخورد نکند.