Region-based memory management
کمپیوٹر سائنس میں، خطے پر مبنی میموری مینجمنٹ میموری مینجمنٹ کی ایک قسم ہے جس میں ہر مختص کردہ شے کو کسی خطے میں تفویض کیا جاتا ہے۔ ایک خطہ، جسے زون، میدان، علاقہ، یا میموری سیاق و سباق بھی کہا جاتا ہے، مختص شدہ اشیاء کا مجموعہ ہے جسے مؤثر طریقے سے دوبارہ مختص کیا جا سکتا ہے یا ایک ہی وقت میں الگ کیا جا سکتا ہے۔ اسٹیک الاٹمنٹ کی طرح، علاقے کم اوور ہیڈ کے ساتھ میموری کی الاٹمنٹ اور ڈیلاکیشن میں سہولت فراہم کرتے ہیں۔ لیکن وہ زیادہ لچکدار ہوتے ہیں، جس سے اشیاء کو اسٹیک فریم سے زیادہ دیر تک زندہ رہنے کی اجازت ملتی ہے جس میں انہیں مختص کیا گیا تھا۔ عام نفاذ میں، کسی خطے میں تمام اشیاء کو میموری پتے کی ایک ہی ملحقہ رینج میں مختص کیا جاتا ہے، اسی طرح جیسے اسٹیک فریم عام طور پر مختص کیے جاتے ہیں۔ مثال کے طور پر، مندرجہ ذیل سی کوڈ پر غور کریں جو منسلک فہرست کے ڈیٹا ڈھانچے کو مختص کرتا ہے اور پھر اسے حذف کر دیتا ہے: ریجن * r = کریئٹ ریجن () ؛ لسٹ نوڈ * ہیڈ = این یو ایل ایل ؛ (انٹی i = 1 ؛ i <= 1000 ؛ i + +) کے لیے (لسٹ نوڈ * نیو نوڈ = الاکیٹ فرام ریجن (r، سائز آف (لسٹ نوڈ)) ؛ نیو نوڈ-> نیکسٹ = ہیڈ ؛ ہیڈ = نیو نوڈ ؛}///(یہاں فہرست استعمال کریں)//۔ ڈسٹرو ریجن (r) ؛ اگرچہ اس میں منسلک فہرست کی تعمیر کے لیے بہت سی کارروائیوں کی ضرورت ہوتی ہے، لیکن اس میں خطے کو تباہ کر کے اسے فوری طور پر ایک ہی آپریشن میں الگ کیا جا سکتا ہے۔ فہرست کو عبور کرنے کی ضرورت نہیں ہے۔ عمل درآمد سادہ واضح علاقوں کو نافذ کرنا سیدھا ہے ؛ درج ذیل تفصیل ہینسن کے کام پر مبنی ہے۔ ہر خطے کو میموری کے بڑے بلاکس کی منسلک فہرست کے طور پر لاگو کیا جاتا ہے۔ ہر بلاک اتنا بڑا ہونا چاہیے کہ بہت سے الاٹمنٹ کو پورا کر سکے۔ موجودہ بلاک بلاک میں اگلی فری پوزیشن کے لیے ایک پوائنٹر برقرار رکھتا ہے، اور اگر بلاک بھرا ہوا ہے، تو ایک نیا مختص کیا جاتا ہے اور فہرست میں شامل کیا جاتا ہے۔ جب خطہ مختص کیا جاتا ہے، تو اگلے فری پوزیشن پوائنٹر کو پہلے بلاک کے آغاز پر دوبارہ ترتیب دیا جاتا ہے، اور بلاکس کی فہرست کو اگلے مختص علاقے کے لیے دوبارہ استعمال کیا جا سکتا ہے۔ متبادل طور پر، جب کسی علاقے کو الگ کر دیا جاتا ہے، تو اس کے بلاکس کی فہرست کو عالمی فری لسٹ کے ساتھ جوڑا جا سکتا ہے جس سے دوسرے علاقے بعد میں نئے بلاکس مختص کر سکتے ہیں۔ اس سادہ اسکیم کے دونوں صورتوں میں، علاقوں میں انفرادی اشیاء کو الگ کرنا ممکن نہیں ہے۔ اس اسکیم کے مختص کردہ بائٹ کی مجموعی لاگت بہت کم ہے۔ تقریبا تمام مختص میں صرف ایک موازنہ اور اگلے فری پوزیشن پوائنٹر کی تازہ کاری شامل ہے۔ کسی علاقے کو الگ کرنا ایک مستقل وقت کا عمل ہے، اور یہ شاذ و نادر ہی کیا جاتا ہے۔ عام کچرا اکٹھا کرنے کے نظام کے برعکس، ڈیٹا کو اس کی قسم کے ساتھ ٹیگ کرنے کی ضرورت نہیں ہے۔ تاریخ اور تصورات خطوں کا بنیادی تصور بہت پرانا ہے، جو سب سے پہلے 1967 کے اوائل میں ڈگلس ٹی راس کے اے ای ڈی فری اسٹوریج پیکیج میں ظاہر ہوا تھا، جس میں میموری کو زونوں کے درجہ بندی میں تقسیم کیا گیا تھا۔ ہر زون کا اپنا الاکیٹر تھا، اور ایک زون کو ایک بار میں آزاد کیا جا سکتا تھا، جس سے زونز کو خطوں کے طور پر قابل استعمال بنایا جا سکتا تھا۔ 1976 میں، پی ایل/آئی معیار میں اے آر ای اے ڈیٹا ٹائپ شامل تھا۔ 1990 میں، ہینسن نے مظاہرہ کیا کہ سی میں واضح علاقے (جسے وہ ایریناس کہتے ہیں) وقت کی کارکردگی فی مختص بائٹ حاصل کر سکتے ہیں جو کہ سب سے تیز معروف ڈھیر مختص کرنے کے طریقہ کار سے بھی بہتر ہے۔ واضح علاقوں نے کچھ ابتدائی سی پر مبنی سافٹ ویئر پروجیکٹس کے ڈیزائن میں اہم کردار ادا کیا، بشمول اپاچی ایچ ٹی ٹی پی سرور، جو انہیں پولز کہتا ہے، اور پوسٹگری ایس کیو ایل ڈیٹا بیس مینجمنٹ سسٹم، جو انہیں میموری سیاق و سباق کہتا ہے۔ روایتی ڈھیر مختص کرنے کی طرح، یہ اسکیمیں میموری کی حفاظت فراہم نہیں کرتی ہیں۔ کسی پروگرامر کے لیے یہ ممکن ہے کہ وہ لٹکتے ہوئے پوائنٹر کے ذریعے ڈی لوکیٹ ہونے کے بعد کسی علاقے تک رسائی حاصل کرے، یا کسی علاقے کو ڈی لوکیٹ کرنا بھول جائے، جس کی وجہ سے میموری لیک ہو۔ 1988 میں، محققین نے ریجن انفریشن کے تصور کو متعارف کراتے ہوئے محفوظ میموری الاٹمنٹ کے لیے علاقوں کو استعمال کرنے کے طریقے کی تحقیقات شروع کی، جہاں علاقوں کی تخلیق اور ڈیلاکیشن کے ساتھ ساتھ مخصوص علاقوں میں انفرادی جامد الاٹمنٹ کے تاثرات کی تفویض کو مرتب کرنے والے کے ذریعے مرتب کیا جاتا ہے۔ مرتب کرنے والا ایسا اس طرح کرنے کے قابل ہے کہ وہ اس بات کی ضمانت دے سکتا ہے کہ لٹکتے ہوئے اشارے اور رساو نہ ہوں۔ رگگیری اور مرتغ کے ابتدائی کام میں، ہر فنکشن کے آغاز میں ایک خطہ بنایا جاتا ہے اور آخر میں اسے الگ کر دیا جاتا ہے۔ اس کے بعد وہ اعداد و شمار کے بہاؤ کے تجزیے کا استعمال کرتے ہوئے ہر جامد الاٹمنٹ کے اظہار کے لیے زندگی کا تعین کرتے ہیں، اور اسے سب سے کم عمر کے علاقے کو تفویض کرتے ہیں جس میں اس کی پوری زندگی ہوتی ہے۔ 1994 میں، اس کام کو ٹوفٹے اور ٹالپین کے ایک بنیادی کام میں عام کیا گیا تھا تاکہ معیاری ایم ایل میں ٹائپ پولیمرفزم اور اعلی درجے کے افعال کی حمایت کی جا سکے، جو ایک فنکشنل پروگرامنگ زبان ہے، جس میں ٹائپ انفریشن اور پولیمرفک ریجن ٹائپز اور ریجن کیلکولس کے نظریاتی تصورات پر مبنی ایک مختلف الگورتھم کا استعمال کیا گیا تھا۔ ان کے کام نے خطوں سمیت لیمبڈا کیلکولس کی توسیع متعارف کروائی، جس میں دو تعمیرات کا اضافہ کیا گیا: ρ پر e1: اظہار e1 کے نتیجے کا حساب لگائیں اور اسے خطے ρ میں ذخیرہ کریں ؛ e2 کے آخر میں خطہ ρ: ایک خطہ بنائیں اور اسے ρ سے باندھ دیں ؛ e2 کا اندازہ کریں ؛ پھر خطہ کو الگ کریں۔ اس نحو ساخت کی وجہ سے، خطوں کو گھونسلہ بنایا جاتا ہے، جس کا مطلب ہے کہ اگر r2 کو r1 کے بعد بنایا گیا ہے، تو اسے r1 سے پہلے بھی الگ کیا جانا چاہیے ؛ نتیجہ خطوں کا ایک ڈھیر ہے۔ مزید برآں، خطوں کو اسی فنکشن میں الگ کیا جانا چاہیے جس میں وہ بنائے گئے ہیں۔ ان پابندیوں میں ایکین اور دیگر نے نرمی کی تھی۔ اس توسیعی لیمبڈا کیلکولس کا مقصد معیاری ایم ایل پروگراموں کو مشین کوڈ میں مرتب کرنے کے لیے میموری سے محفوظ انٹرمیڈیٹ نمائندگی کے طور پر کام کرنا تھا، لیکن ایک ایسا مترجم بنانا جو بڑے پروگراموں پر اچھے نتائج پیدا کرے جس کو متعدد عملی حدود کا سامنا کرنا پڑا جن کو نئے تجزیے کے ساتھ حل کرنا پڑا، بشمول ریکرسو کالز، ٹیل کالز سے نمٹنا، اور ان علاقوں کو ختم کرنا جن میں صرف ایک ہی قدر تھی۔ یہ کام 1995 میں مکمل ہوا اور اسے ایم ایل کٹ میں ضم کیا گیا، جو کہ ایم ایل کا ایک ورژن ہے جو کچرا اکٹھا کرنے کی جگہ علاقائی الاٹمنٹ پر مبنی ہے۔ اس نے درمیانے درجے کے ٹیسٹ پروگراموں پر دونوں کے درمیان براہ راست موازنہ کرنے کی اجازت دی، جس سے وسیع پیمانے پر مختلف نتائج برآمد ہوئے ("10 گنا تیز اور چار گنا سست" کے درمیان) اس بات پر منحصر ہے کہ پروگرام کتنا "خطے کے موافق" تھا ؛ تاہم، مرتب کرنے کا وقت منٹ کی ترتیب پر تھا۔ ایم ایل کٹ کو بالآخر دو اضافے کے ساتھ بڑے ایپلی کیشنز تک بڑھایا گیا: ماڈیولز کی علیحدہ تالیف کے لیے ایک اسکیم، اور ایک ہائبرڈ تکنیک جو کچرا اکٹھا کرنے کا سراغ لگانے کے ساتھ خطے کے تخمینے کو یکجا کرتی ہے۔ ایم ایل کٹ کی ترقی کے بعد، خطوں کو دیگر زبان کے ماحول میں عام کیا جانے لگا: سی پروگرامنگ زبان میں مختلف توسیعات: محفوظ سی بولی سائیکلون، جو بہت سی دیگر خصوصیات کے درمیان واضح خطوں کے لیے حمایت کا اضافہ کرتی ہے، اور موجودہ سی ایپلی کیشنز کو ان کے استعمال کے لیے منتقل کرنے کے اثرات کا اندازہ کرتی ہے۔ سی کے لیے ایک توسیع جسے آر سی کہا جاتا ہے نافذ کیا گیا تھا جو واضح طور پر منظم علاقوں کا استعمال کرتا ہے، لیکن اس بات کو یقینی بناتے ہوئے کہ کوئی بھی خطہ قبل از وقت آزاد نہ ہو، میموری کی حفاظت کی ضمانت کے لیے خطوں پر حوالہ شمار کا بھی استعمال کرتا ہے۔ علاقے حوالہ جات کی گنتی کے اوور ہیڈ کو کم کر دیتے ہیں، کیونکہ علاقوں کے اندرونی حوالہ جات میں ترمیم ہونے پر گنتی کو اپ ڈیٹ کرنے کی ضرورت نہیں ہوتی ہے۔ آر سی میں خطوں کے لیے ایک واضح جامد قسم کا نظام شامل ہے جو حوالہ شمار کی کچھ اپ ڈیٹس کو ختم کرنے کی اجازت دیتا ہے۔ کنٹرول-سی نامی سی کی پابندی میموری کی حفاظت کو مستحکم طور پر یقینی بنانے کے لیے اس کے ڈیزائن کے حصے کے طور پر علاقوں (اور ایک وقت میں صرف ایک خطے) کو استعمال کرنے کے لیے پروگراموں کو محدود کرتی ہے۔ علاقوں کو جاوا کے ذیلی سیٹ کے لیے لاگو کیا گیا، اور یہ ریئل ٹائم جاوا میں میموری مینجمنٹ کا ایک اہم جزو بن گیا، جو انہیں ملکیت کی اقسام کے ساتھ جوڑتا ہے تاکہ آبجیکٹ ان کیپسولشن کا مظاہرہ کیا جا سکے اور ریجن ڈی لوکیشن پر رن ٹائم چیک کو ختم کیا جا سکے۔ حال ہی میں، سرایت شدہ ریئل ٹائم جاوا ایپلی کیشنز میں خطوں کا اندازہ لگانے کے لیے ایک نیم خودکار نظام تجویز کیا گیا تھا، جس میں ایک مرتب وقت جامد تجزیہ، ایک رن ٹائم ریجن الاٹمنٹ پالیسی، اور پروگرامر اشارے شامل تھے۔ ریجنز ریئل ٹائم کمپیوٹنگ کے لیے موزوں ہیں کیونکہ ان کے اوور ہیڈ کا وقت مستحکم طور پر پیش گوئی کے قابل ہے، بغیر اضافی کچرا جمع کرنے کی پیچیدگی کے۔ انہیں منطق پروگرامنگ زبانوں پرولاگ اور مرکری کے لیے ٹوفٹے اور ٹالپین کے ریجن انفریشن ماڈل کو بڑھا کر لاگو کیا گیا تاکہ بیک ٹریکنگ اور کٹ کی حمایت کی جا سکے۔ خطے پر مبنی اسٹوریج مینجمنٹ متوازی پروگرامنگ زبان پیرا سیل میں استعمال ہوتا ہے۔ پیرا سیل میں واضح نکات کی کمی کی وجہ سے حوالہ شمار کرنے کی ضرورت نہیں ہے۔ نقصانات خطوں کو استعمال کرنے والے نظام ایسے مسائل کا سامنا کر سکتے ہیں جہاں خطوں کو الگ کرنے سے پہلے بہت بڑے ہو جاتے ہیں اور ان میں ڈیڈ ڈیٹا کا ایک بڑا تناسب ہوتا ہے۔ انہیں عام طور پر "لیک" کہا جاتا ہے (حالانکہ وہ آخر کار آزاد ہو جاتے ہیں)۔ رساو کو ختم کرنے میں پروگرام کی تنظیم نو شامل ہو سکتی ہے، عام طور پر نئے، کم عمر والے علاقوں کو متعارف کروا کر۔ خطے کے تخمینے کا استعمال کرنے والے نظاموں میں اس قسم کے مسئلے کو ڈیبگ کرنا خاص طور پر مشکل ہے، جہاں پروگرامر کو بنیادی تخمینہ الگورتھم کو سمجھنا چاہیے، یا مسئلے کی تشخیص کے لیے وربوس انٹرمیڈیٹ نمائندگی کا جائزہ لینا چاہیے۔ کچرا جمع کرنے والوں کا سراغ لگانا پروگرام میں تبدیلیوں کے بغیر بروقت انداز میں اس قسم کے ڈیٹا کو مختص کرنے میں زیادہ موثر ہے۔ یہ ہائبرڈ ریجن/جی سی سسٹمز کے لیے ایک جواز تھا۔ دوسری طرف، کچرا جمع کرنے والوں کا سراغ لگانا ٹھیک ٹھیک رساو بھی ظاہر کر سکتا ہے، اگر حوالہ جات کو ڈیٹا کے ساتھ برقرار رکھا جائے جو دوبارہ کبھی استعمال نہیں کیا جائے گا۔ خطے پر مبنی میموری مینجمنٹ اس وقت بہترین کام کرتا ہے جب خطوں کی تعداد نسبتا کم ہو اور ہر ایک میں بہت سی اشیاء ہوں۔ ایسے پروگرام جن میں بہت سے کم خطوں پر مشتمل ہوں وہ اندرونی ٹکڑے ٹکڑے کی نمائش کریں گے، جس کی وجہ سے میموری ضائع ہو جاتی ہے اور خطے کے انتظام کے لیے ٹائم اوور ہیڈ ہوتا ہے۔ ایک بار پھر، علاقائی تخمینے کی موجودگی میں اس مسئلے کی تشخیص کرنا زیادہ مشکل ہو سکتا ہے۔ ہائبرڈ طریقے جیسا کہ اوپر ذکر کیا گیا ہے، آر سی خطوں اور حوالہ جات کی گنتی کا ایک ہائبرڈ استعمال کرتا ہے، حوالہ جات کی گنتی کے اوور ہیڈ کو محدود کرتا ہے کیونکہ خطوں کے اندرونی حوالوں میں تبدیل ہونے پر گنتی کو اپ ڈیٹ کرنے کی ضرورت نہیں ہوتی ہے۔ اسی طرح، کچھ مارک ریجن ہائبرڈ طریقے خطوں کے ساتھ کچرا اکٹھا کرنے کا سراغ لگانے کو یکجا کرتے ہیں۔ یہ کام ڈھیر کو خطوں میں تقسیم کرکے، مارک سویپ پاس انجام دیتے ہیں جس میں زندہ اشیاء پر مشتمل کسی بھی علاقے کو نشان زد کیا جاتا ہے، اور پھر کسی بھی غیر نشان زدہ علاقے کو آزاد کیا جاتا ہے۔ ان کو موثر رہنے کے لیے مسلسل ڈیفریگمینٹیشن کی ضرورت ہوتی ہے۔ حوالہ جات میموری مینجمنٹ