 بسم اللہ الرحمن الرحیم، آج ہم موڈیول 74 دیسکس کریں گے، موڈیول 74 ہے میپنگ اوپڈیکٹس to پروسس ادرس بیس ہم نے پریوسلی دیسکس کیا تھا کہ اگر آپ فائلز کے اوپر میمری میپنگ اوپڈ پر فرم کرنا چاہتے ہیں تو اس کے لیے آپ کو پہلے ایک میپنگ اوپڈیکٹ بنانا پڑتا اور اس کو ایک فائل کے ساتھ اصوشیٹ کرنا پڑتا اب آپ کو اس سپیس کے اندر اس کو ایک پروسس سپیس کے ساتھ بھی اصوشیٹ کرنا پڑے گا پروسس سپیس کے ساتھ جب آپ اصوشیٹ کرتے ہیں تو آپ اس سپیس کے اوپر ریڈرائٹ اوپریشن پر فرم کر کے درکٹ فائل کی ویلیوز کو ریڈرائٹ کر سکتے ہیں پر فائل کے اندر پڑے ویلیوز کو آپ درکٹلی ایکسیس کر سکتے ہیں پیویس اس سے پہلے جس طرح ہم نے ہیپ کی اوپریشنز دسکتے ہیں اس میں ہم نے ایک ایپیائی دیکھا تھا جو کہ تھا ہیپ کریٹ ہیپ کریٹ بالکل کریٹ فائل میپنگ کی طرح کا اوپریشن ہے وہ ہیپ جسٹ کریٹ کرتا ہے ایک سپیس کریٹ کرتا ہے لیکن اکشل اس میں سے بلوک ایلوکیٹ نہیں ہوتا ہیپ کی ایلوکیٹ فنکشن ہے وہ ہیپ میں سے ایک بلوک ایلوکیٹ کرتا ہے بالکل سیمیلرلی جب آپ ایک میپنگ کریٹ کرتے ہیں تو جسٹ وہ ایک میپنگ کریٹ ہوتی ہے لیکن ابھی آپ اس میں سے کوئی چیز ویو نہیں کر سکتے ہیں اس میں سے کوئی چیز ریڈ یا رائٹ نہیں کر سکتے ہیں اس کے لئے آپ کو کیا بنانا پڑے گا ایک ویو میپ بنانا پڑے گا ایک ویو کو میپ کرنا پڑے گا ایک اس سپیسکی اوپر ایک ویو کو میپ کرنا پڑے گا اس ویو کو میپ کرنے کے لیے جو ای پیٰی اسی میکار میکار ویو برنی سکن گے پہل کے کس پورشن کو آپ نے مپ کیا اور پھر اس پورشن کو آپ درکلی میمری اپریشنز کے طرف ایکسس کر سکیں گے. ابھی تک جو آپ نے مپنگ بنائی ہے اس میں سے آپ درکلی فائل کو ایکسس نہیں کر سکتے لیکن جو آپ اس کے اندر آپ ایک ویو سپیس دیفائن کر دیں گے تو پھر اس ویو سپیس میں آپ درکٹ ریڈ رائٹ اپریشنز کے طرف از اگر آپ میمری میں سے ریڈ رائٹ کر رہے ہیں اپریشنز پر پر پر سکیں گے لیکن ایکشلی وہ فائل کیوں پر ریڈ رائٹ ہو رہا ہوں تو یہ اپیائی دیکھتے ہیں مپ ویو اپ فائل ہماری اپیائی کا نام ہے یہ ایک لونگ پوائنٹر ردن کر رہا ہے اس کو آپ مپنگ اپڑکٹ پاس کریں گے مپنگ اپڑکٹ کو آپ already فائل کے ساتھ جو ہے اسوسیٹ کر چکے میں next جو ہے اس کا ایکسس جو بھی آپ ایکسس رائٹs ڈفائن کرنا چاہتے ہیں پھر اس کے بعد آپ فائل کا off set سپیسفائے کریں گے ہائی اور لو یہ وہ off set ہے جہاں سے آپ فائل کو ایکسس کرنا چاہتے ہیں یہ فائل کے اندر کوئی location ہے جس location سے onwards آپ فائل کو مپ کرنا چاہتے ہیں یہ آپ 0 بھی رکھ سکتے ہیں یا کوئی اور بھی location رکھ سکتے ہیں جو جس location سے بھی آپ ریڈ رائٹ اپریشن پرام کرنا چاہتے ہیں اور اس فائل میں سے کتنے بائٹس آپ نے مپ کرنے یا آپ نے last پرامیٹر کے اندر سپیسفائے کرنا تو age فائل مپنگ اوپجرٹ آپ کو کھاں سے ملے گا یہ create فائل مپنگ میں سے جو آپ کو اوپجرٹ ملے گا وہ یہاں پر use ہونے جو desired access ہے اس کے اندر آپ کے پاس یہ تین عام طور پر options ہے file map write file map read file map all access یعنی کہ جو file map ہے اگر اس میں سے آپ جاتے ہیں فائل مپ ریڈ ہوگا اگر آپ جاتے ہیں write ریڈ نو فائل مپ رائٹ کو use کریں گے اور all access use کریں گے اگر آپ ریڈ بھی کرنا چاہتے ہیں اور write بھی کرنا چاہتے ہیں file offset ہائی اور file offset لو جو ہے یہ starting address of the file ہے یعنی کہ جس جہاں سے آپ نے مپنگ start کرنے ہیں جہاں سے آپ نے read write option پرام کرنا start کرنا یہ اس کی location ہوگی اس کا address ہوگا اور یہ جو value آپ سپیسفائے کرتے ہیں یہ عام طور پہ multiple of 64k کے اندر یہ value ہونی چاہیے اگر آپ نے ان دونوں کو zero رکھا ہے تو اس کس میں بالکل فائل کے start سے مپنگ ہوگی number of bytes to map کہ آپ نے کتنے bytes مپ کرنے ہیں اگر آپ اس کو zero رکھتے ہیں تو پوری کی پوری file مپ ہو جاتی ہے اگر آپ اس کو کوئی اور value سپیسفائے کرتے ہیں سے آپ اس کو 2,000 رکھتے ہیں تو وہ 2,000 bytes جو ہے وہ مپ ہو جائے اس address سے onwards اس offset سے onwards جو آپ already سپیسفائے کرتے ہیں اگر function یہ successful ہو جاتا ہے تو یہ آپ کو address return کرے گا جس address کے طرف آپ اس مپ ریجن کو access کر سکیں گے read write operations perform کر کے اور اگر یہ function fail ہو جاتا ہے تو یہ آپ کو null return تو اس کی جو بھی چیز return ہوتی وہ آپ نے چیک کرنی اگر null نہیں ہے تو اس کا مطلب ہے کہ وہ کوئی address ہے اور وہ address جو ہے اس address کے طرف آپ file کے اوپر directly read write کے operations perform کر سکیں گے once آپ نے اگر map handle کریٹ کیا تو یہ ایک بڑا ایک important resource ہے آپ نے اس کو ultimately close بھی کرنے صحیح طریقے سے close کرنے اگر جتنے زیادہ map handles کریٹ ہوں گے اتنے زیادہ resources بھی of course consume ہو رہے تو آپ نے اس کو optimally use کرنے جب آپ کو اس کی ضرورت نہیں ہے آپ نے اس کو close کر دےنا تو جس طرح ہیب کا case بھی تھا کہ ہیب کے اندر جب آپ ایک block allocate کرتے ہیں تو آپ نے اس block کو ضرور فری کرنا ہوتا تو اسی طرح سے اگر آپ نے ایک mapping کریٹ کیا تو آپ نے اس mapping کو ضرور map کیا تو اس کو ضرور un map کرنے un map کرنے کے لیے جو API use ہو رہی ہے un map view of file un map view of file کو آپ call کریں گے اور جو پہلے map create ہوا تھا اس map کو آپ destroy کریں اس کو use کرنے کے لیے یہ طریقہ کار آپ دیکھ سکتے ہیں اس کے نظر ایک ہی value pass کریں گے address یہ وہ address ہے جب جب آپ نے mapping کی تھی تو آپ کو return ہوا تو ایک address آپ یہاں پر سپیسنفائے کرنے گے اپریڈنگ سسٹم کے پاس اس چیز کا record ہوتا ہے کہ کس address کس mapping object کو assign کیا گیا تو وہ دیکھیں گا اس کے according لی وہ جو mapping object ہے اس mapping object کو destroy کر دے گا invalidate کر دے گا اگر یہ function fail ہوتا ہے تو اس کی return value 0 ہوتی ہے اگر یہ success ہوتا ہے تو اس کی value جو ہے non 0 پھر اسی طرح سے ایک اور operation ہے جو کہ بہت important وہ ہمارے flushing ہے یعنی کہ flushing کا مطلب یہ ہے کہ جب آپ نے read write operations پرحوم کیا ہے view کے اوپر تو وہ operation وہ temporally memory کے اندر پہلے store ہوتا ہے بعد میں جاکے ایک point کے اوپر اس نے disk کے اوپر write کرنا at instances ہو سکتا ہے کیونکہ وہ temporally memory میں store ہو رہے ہیں تو کوئی ایسے circumstances ہو سکتے ہیں کہ اس فایل میں سے اگر information کو access کیا ہے تو older information ملے کیونکہ memory کے اندر جو نہیں information پڑی ہوئے وہ واپس disk کے اندر pass out نہیں ہوئی اگر آپ چاہتے ہیں جو آپ نے read write operations کر کے file کے اندر changes کیا ہے وہ immediately disk پہ pass out ہو جا ہے تو آپ کیا کریں گے view کو flush کرتے ہیں جسے کہ جتنے بھی operations تھے read write کے جو memory کے اندر پڑے میں وہ واپس disk کے اوپر write ہو جائے گے تو اس کے لیے جو api use ہوگی وہ flush view of file جو اس کا view ہے اس کو آپ flush کریں واپس disk کے اوپر write کریں اس کے لئے جتنے بھی changes ہیں وہ disk کے اوپر commit ہو جائے گے اگر for example scenario آپ کو اس طرح سے سمجھے آئے گا کہ اگر for example ایک process ہے اس process نے ایک file کو map کیا اور دوسرا ایک اور process ہے اس file نے اسی file کو map نہیں کیا لیکن read file اور write file کی مدل سے وہ write کرنا جا رہا ہے اب جس نے map کیا ہے اس process کو اس file کو وہ read کا operation perform کرتا ہے کیا کرتا ہے memory کے اندر سے read کرتا ہے یا write کو operation کرتا ہے تو memory کے اندر write کرتا ہے actual physically disk پر وہ later on جا کے آئے گا maybe ایک ایسے point پر جب وہ feasible ہوگا کہ واپس اس کو disk کے اوپر write کرتا ہے تو کچھ بیچ میں delays آئیں گے immediately ایسا نہیں ہوگا کہ جب بھی آپ نے write کیا memory کی اندر تو وہ سیدہ disk کے اوپر جاکے write ہوگا ایک specific point پر جاکے اس نے واپس disk کے اوپر write ہونے ابھی وہ disk کے اوپر write نہیں ہوا لیکن دوسر operation جس نے read اور write file کے through file کو access کیا اس نے اسی location کے اوپر سے read اور write کو operation perform کیا تو اس کو وہ information نہیں ملے گی جو اس program نے وہاں پر write کیا memory کے اندر کیوںکہ ابھی وہ پڑی بھی ابھی وہ واپس disk پر flush نہیں ہوئی اور یہ disk پر سے read کرا تو اس کو وہی information نہیں ملے گے تو اس طرح سے دونوں کے بیچ میں different discrepancy آئے گی دونوں values جویں وہ ضروری نہیں کے بالکل سیم وہ different بھی ہو سکتی values تو اس discrepancy سے بچنے کے لیے best ہے کہ اگر سے آپ file mapping use کرے ہیں تو سارے کے سارے process file mapping use کریں اگر file mapping use ہو رہی ہے تو ایسا نہ ہو کہ کوئی process جو ہے read file اور write file کے through disk کو read write یا file کو read write نہ کرے تو uniform view کیا یہ بڑا important ہے کہ آپ جتنے بھی جتنے بھی process ہے وہ سارے کے سارے file mapping کو use کریں اگر file mapping use ہو رہی ہے کوئی بھی process جو conventional filing کے operations ہے read file write file ان کو use نہ کریں یا پھر اگر لیکن وہاں بھی chances ہیں کہ اگر آپ read write operations perform کرتے ہیں اگر file mapping کے through read write کرتے ہیں تو ساتھ ساتھ ان کو flush کرتے ہیں لیکن اس طرح سے اگر اس کو flush کرتے ہیں تو اس طرح سے جو اس کی user جہاں جو اس کا فیدہ ہے جو اس کی optimality ہے وہ کام ہو جائے گی بار بار disk کو access کرنا پڑے گا تو بالکل ایسی ہو جائے گا جیسے now read file اور write file کو use کریں تو best policy یہ ہی ہو سکتی ہے کہ اگر آپ mapping use کریں تو سارے کے سارے process mapping کیا ہی استعمال کریں یہاں پہ آپ کو ایک flow نظر آ رہا ہے آپ یہ flow کوئی بھی اگر ایک process ہے جو کے file mapping use کر رہا ہے تو اس کے اندر کیا کیا اوپریشنز انوالڈ ہوں گے اس flow کو دیکھ کیا آپ کو سمجھ میں آ جائے گی یعنی کہ سب سے پہلی بات یہ ہے کہ آپ نے جس file کیا اوپریشن پرفارم کرنا ہے اس file کو آپ نے create کیا یا اس کا handle get کیا open handle کیا یا create file سے اس کا handle get کیا آپ نے آ کے پاس file handle آ گیا اب اس file handle کو use کر کے next time اندر آپ دیکھ سکتے ہیں create file mapping کی اور file handle fh specify کیا اب آپ کے پاس ایک mapping handle آ گیا اب mapping handle جو ہے اس کو use کیا جائے گا view بنانے کے لیے view جو ہے وہ ایک نہیں ہو سکتے وہ کئی سارے views ہو سکتے ہیں ایک view یہاں پی record a ہے دوسرا view جو ہے پی record b ہے دونوں کو آپ نے different addresses specify کیا different sizes specify کیا تو وہ جو a ہے وہ ایک different portion of the file کا view آپ کو دے رہا جبکہ b جو ہے وہ ایک different portion of the file کا view دے رہا یہ والا جو map view ہے اس map view کے اندر آپ نے یہ والا point جو ہے یہ specify کیا as the starting address اور یہ جو پورا area ہے یہ جو area یہ area آپ نے specify کیا as the length of the view جبکہ دوسرے والے case کے اندر آپ کیا کرے ہیں دوسرے والے case کے اندر یہ والا جو location ہے اس location کو آپ specify کرے ہیں as the starting address اور یہ portion جو ہے یہ length جو ہے آپ specify کرے ہیں یہ والی length specify کرے ہیں as the size of the view اور آپ پھر اس کے بعد easy لی record a میں سے بھی دیتا ریڈ کر سکتے ہیں record b میں سے بھی دیتا ریڈ کر سکتے ہیں اپس میں ان کو swap کر سکتے ہیں read کر سکتے ہیں write کر سکتے ہیں جو بھی آپ operation پرفوم کرنا چاہئے آپ ازاد ہیں اس کے اندر بشرتے کے کہ آپ کے پاس اس چیز کے سارے excess rights ہیں سارے operations کر لی ہے operations کرنے کے بعد اب آپ کو اس کے پر مزید کو operation کرنے کی زیادت نہیں ہے تو اب آپ کیا کریں گے آپ اس کا view ہے اس کو un map کر دیں گے تو a جو view ہے اس کے لیے address پیریک a تھا b جو view ہے اس کے لیے پیریک b تھا پیریک a کو use کرتے ہوئے آپ نے اس کو un map کر دیا view کو اور پیریک b کو use کرتے ہوئے آپ نے view کو un map کر دیا تو اب یہ views جو ہے invalidate ہو گے وہ دونوں views کتم ہو گے اور اسی طرح سے جو آپ کا mapping handle تھا mh جو یہاں پے کریٹ کیا گیا تھا اس کو یہاں پے close handle کی مدل سے آپ نے destroy کر دیا اور جو file handle یہاں پے کریٹ کیا گیا تھا اس کو اب آپ نے close handle کی مدل سے یہاں پے destroy کر دیا ایک اور یہاں پے example دے ابھی ہم نے بات کی تھی uniform view کی تو uniform view کو understand کرنا بھی important ہے اور uniform view آپ کو تب ہی مل سکتا ہے اگر mapping use ہو رہی ہے اور سارے کے سارے processes mapping ہی use کرے کوئی بھی process جو ہے conventional apis کی طرف file کو access نہیں کرو یہاں پے دیکھیں آپ نے create file کی اور پھر create mapping کی create file hf اور hf کی مدل سے یہاں پے آپ نے map منایا hm اور اب آپ نے اسی map کو یہاں پے use کیا اسی map کو use کیا دوسرے process کے اندر آپ نے اسی map کو use کیا لیکن آپ نے create map نہیں کیا اپنے open file mapping کیا اور آپ نے وہی نام use کیا my map file تو یہاں پے بھی آپ نے وہی نام use کیا my map file جب create کیا تو آپ نے اس کو نام دیا my map file اور یہاں پے آپ وہی نام use کر کے ایک اور یعنی کے reference create کرے اب آپ نے map کیا view کا mvof آپ نے file کو map کیا اس mapping کو use کر پے view آپ کے پاس آگیا ہے یہ view پی ہے پی کے طرف آپ نے file کو access کرنا شروع کر دیا similarly یہاں پے بھی آپ نے پی کے طرف اسی طرف ایک view بنایا اور پی کے طرف file کو access کرنا شروع کر دیا اب آپ دیکھ سکتے ہیں کہ دونوں location دونوں جو ہیں آپ کے مابس آئے جو بیسک چیز جو بیسک چیز جو بیسک چیز شو کی گئی ہے وہ یہی شو کی گئی ہے کہ دونوں جب mapping کے طرف read کرے تو اگر ایکی location کو access کرتے ہیں اس location کے اندر discrepancy کوئی نہیں آئے گے اگر ایک کو اس location پے 3000 ملتا تو دوسرے کو بھی 3000 نہیں ملے گا اگر read write مدد سے read file یا write file کی مدد سے آپ اس کو access کر رہے ہوتے تو آپ کو یہاں پر 3000 نظر نہیں آنا تھا یہاں پریویسلی پڑیوی value پڑیویسلی پڑیوی value وہ نظر آئے گے ابھی لیکن اس کو کیا نظر آ رہا ہے یہاں پر اس نے 3000 write کیا تو اس کو کیا نظر آ رہا ہے اس کو 3000 نظر آ رہا ہے اس کو disc پڑیوی value نہیں نظر آ رہی disc پڑیوی value آپ کیوں نظر آئے گی تب نظر آئے گی جب آپ read file پڑیویسلی پڑیویسلی پڑیویسلی پڑیویسلی پڑیویسلی پڑیویسلی اس file کو access کر file کیا اندر آسا چھبی کیوں کہ چین نہیں آیا یہ لیچینج memory level پہاں اور windows اپنی optimization کیلہاں سے آ کے جا کے کسی point پہ file کیا اندر جا کے یہ چینج کرے گی