بخشی از پاورپوینت
اسلاید 2 :
مدیریت حافظه
.مقدمه
.عناصری که به حافظه نیاز دارند
.مدیریت حاقظه تحت کنترل برنامه نویس و سیستم
.مراحل مدیریت حافظه
.مدیریت حافطه ایستا
.مدیریت حافظه هرم و مسائل مربوطه
اسلاید 3 :
اغلب زبانها این قابلیت را دارند که حافظه لازم را برای اشیای داده، بطور پویا تخصیص دهند و درصورت عدم نیاز، آن را آزاد کنند.
با اینکه برنامه نویس با مدیریت حافظه سروکار دارد و باید برنامه هایی بنویسد که از حافظه به خوبی استفاده کند احتمالاً کنترل مستقیم او بر حافظه اندک است.
مقدمه
اسلاید 4 :
عناصری که به حافظه نیاز دارند
سگمنت کد برای برنامه ترجمه شده کاربر
برنامه های زمان اجرای سیستم
ثوابت و ساختمان داده های تعریف شده توسط کاربر
نقاط برگشت زیربرنامه ها
محیطهای ارجاع
حافظه های موقت در
ارزیابی عبارات
حافظه های موقت برای انتقال پارامترها
بافرهای ورودی – خروجی
داده های خراب سیستم
عملیات فراخوانی و
برگشت از زیربرنامه
عملیات ایجاد و از بین بردن ساختمان داده ها
عملیات درج و حذف اجزای ساختمان داده ها
سگمنت کد برای برنامه ترجمه شده کاربر
برنامه های زمان اجرای سیستم
ثوابت و ساختمان داده های تعریف شده توسط کاربر
نقاط برگشت زیربرنامه ها
محیطهای ارجاع
حافظه های موقت در ارزیابی عبارات
حافظه های موقت برای انتقال پارامترها
بافرهای ورودی – خروجی
داده های خراب سیستم
عملیات فراخوانی و برگشت از زیربرنامه
عملیات ایجاد و از بین بردن ساختمان داده ها
عملیات درج و حذف اجزای ساختمان داده ها
اسلاید 5 :
مدیریت حافظه تحت کنترل برنامه نویس و سیستم
مشکل کنترل برنامه نویس بر روی مدیریت حافظه
امکان تداخل با مدیریت حافظه
تحت کنترل سیستم
مسئولیت سنگینی متوجه
برنامه نویس می کند
اسلاید 6 :
تخصیص اولیه
مراحل مدیریت حافظه
بازیابی حافظه
فشرده سازی و
استفاده مجدد
اسلاید 7 :
تخصیص حافظه ایستا
ساده ترین شکل تخصیص است.
در زمان ترجمه انجام می شود و در طول اجرا ثابت است.
درپیاده سازی معمولی فرترن، کل حافظه ایستا تخصیص می یابد.
مشکل) برای فراخوانی های زیربرنامه بازگشتی
با ساختمان داده هایی که اندازه آن براساس محاسبات یا داده های
ورودی تعیین می شود و بسیاری دیگر از ویژگی های زبان
سازگاری ندارد.
اسلاید 8 :
مدیریت حافظه ی هرم
هرم یا Heap درحقیقت قسمتی از حافظه است که می توانیم توسط برنامه، بصورت پویا، بلوکهایی از آن را اشغال و بلوکهای دیگر را آزاد کنیم!
هرم یا Heap بلوکی از حافظه است که در آن قطعاتی از حافظه به روش غیر ساخت یافته تخصیص می یابند و آزاد می شوند!
نیاز به حافظه هرم، وقتیست که:
در زمان اجرا، در هر نقطه ای از برنامه بتوان حافظه را
تخصیص داد یا آزاد کرد.
اسلاید 9 :
مدیریت حافظه ی هرم
تکنیک های مدیریت حافظه هرم( بر حسب اندازه تخصیص یافته شده به عناصر):
1. مدیریت حافظه هرم با عناصر طول ثابت
2. مدیریت حافظه هرم با عناصر طول متغیر
اسلاید 10 :
با فرض اینکه هر عنصر با اندازه ی ثابت که از هرم تخصیص یافته و بعداً بازیابی می شود،N کلمه ی حافظه را اشغال کند و با فرض اینکه هرم، بلوک متصلی از حافظه است، آن را از نظر مفهومی به دنباله ای از K عنصر تقسیم می کنیم که طول هر عنصر، N کلمه است.
درنتیجه اندازه هرم برابر است با N*K
مدیریت حافظه هرم با عناصر طول ثابت
برای تخصیص یک عنصر، اولین عنصر لیست فضای آزاد از لیست حذف می شود و اشاره گری به آن عنصر، به عملیات درخواست کننده ی حافظه برگردانده می شود؛ وقتی عنصر آزاد شد، در ابتدای لیست آزاد قرار می گیرد.
اسلاید 11 :
1. برنامه نویس یا سیستم، فضای اشغال شده را برمی گرداند.
بازیابی فضای اشغال شده در روش هرم.
برگشت صریح
ساده ترین تکنیک بازیابی
مثال: فراخوانی free در C
همیشه قابل استفاده نیست و مشکلاتی دارد.
مشکل) 1. زباله ها
2. ارجاع های معلق
اسلاید 12 :
بازیابی فضای اشغال شده در روش هرم.
در مورد هرم:
ارجاع معلق: اشاره گر به عنصری که به لیست فضای آزاد برگردانده شده است.
زباله: عنصری که آماده ی استفاده ی مجدد است اما در لیست فضای آزاد وجود ندارد و غیر قابل دستیابی است.
اسلاید 13 :
بازیابی فضای اشغال شده در روش هرم.
در مورد هرم:
زباله
Int *p , *q;
…
p=malloc(sizeof(int));
p=q;
Int *p , *q;
…
p=malloc(sizeof(int));
q=p;
free(p);
ارجاع معلق
اسلاید 14 :
بازیابی فضای اشغال شده در روش هرم.
2. شمارش ارجاع:
در هر عنصر هرم، فضای اضافی برای شمارنده ارجاع، منظور می شود
وقتی عنصری از لیست فضای آزاد تخصیص می یابد: مقدار ارجاع=1
وقتی اشاره گری از یک عنصر برداشته شود: مقدار شمارنده ارجاع، 1 واحد کم می شود
وقتی شمارنده ی ارجاع، صفر شود: عنصر آزاد شده به
لیست فضای آزاد برمی گردد.
اسلاید 15 :
بازیابی فضای اشغال شده در روش هرم.
مشکل) روش شمارش ارجاع در بازیابی فضای اشغال شده
2 مشکل زباله و ارجاع معلق را حل می کند ولی هزینه ی نگه داری و مدیریت این شمارنده، مشکل است.
P:=Q
1. دستیابی به عنصری که P به آن اشاره می کند و کاهش یک واحد از تعداد ارجاع آن
2. تست تعداد ارجاع حاصل
3. مقدار چپ ذخیره شده در Q در P کپی شود
4. دست یابی به عنصری که Q به آن اشاره می کند و افزایش یک واحد به تعداد ارجاع آن
کاربرد روش شمارش ارجاع: پردازش موازی
اسلاید 16 :
بازیابی فضای اشغال شده در روش هرم.
3. زباله روبی:
اجازه می دهد تا زباله ها تولید شود تا ارجاع معلق شکل نگیرد و سپس وقتی لیست فضای آزاد کاملا خالی شد، محاسبات موقتا به تعویق می افتد و روال زباله روبی اجرا می شود.
با 2 استراتژی:
نشانه گذاری
جارو کردن
اسلاید 17 :
بازیابی فضای اشغال شده در روش هرم.
بخش نشانه گذاری زباله روبی، کار دشواری است.
3 فرضیه راجع به نشانه گذاری:
هرعنصر فعال، باید از طریق زنجیره ای از اشاره گرها، با شروع از خارج از هرم، قابل دستیابی باشد.
باید بتوان اشاره گر های خارج از هرم را که به عنصری در هرم اشاره میکنند، تعیین کرد.
باید بتوان در داخل هر عنصر فعال هرم، فیلدهایی را تعیین کرد که حاوی اشاره گر هایی به عناصر دیگر هرم باشد.
لیسپ از هر سه فرضیه ی فوق، پشتیبانی می کند؛ اگر هرکدام از 3 مورد فوق بر آورده نشود،
فرایند نشانه گذاری برای عناصر فعال، با شکست مواجه خواهد شد.
اسلاید 18 :
تخصیص حافظه پشته و هرم لیسپ
مثال: با فرض اینکه:
حافظه ی حرم حاوی 15 عنصر است که 9 تا از آنها در لیست آزاد هستند
تعاریف زیر را داریم:
(defun f1(x y z) (cons x(f2 y z)))
(defun f2(v w) (cons v w))
اجرای عبارت (f1 ‘a’ (b c) ‘ (d e)) چگونه انجام میگیرد؟
--> (توضیح با شکل.)