 بسم اللہ الرحمن الرحیم آج ہم موڈیول 87 دسکس کریں گے موڈیول 87 ہے about windows processes and threads اس میں ہم پہلے windows operating system کو دیکھتے ہیں کہ وہ processes کو کس طرح سے تریٹ کرتا first leave windows operating system جو آپ کو پتہ ہوگا کہ ایک multi-tasking system ہے multi-tasking system کم اپتہ بھی ہوتا ہے کہ ایک وقت میں multiple processes یا multiple tasks وہ exist کر سکتے ہیں کئی processes ران ہو رہے ہیں، ہر processes کے اپنی کچھ رسورسز کی requirement ہے، ہرے کو CPU چاہیے، ہرے کو memory چاہیے ہرے کو input-output devices چاہیے، تو کئی processes at a time ران ہو رہے ہیں وہ ان رسورسز کو use بھی کریں اور windows ان رسورسز کے بیچ میں arbitrate کر رہا ہے windows take care کر رہا ہے کہ وہ سارے رسورسز صحیح تری کیسے، fair تری کیسے اور ایسے تری کیسے کہ کوئی conflict نہ آئے، تمام processes کے بیچ میں arbitrate ہوں اور کوئی کسی کسم کے conflict نہ create ہوں اور process بھی صحیح تری کیسے ران ہوں تو جتنے بھی رسورسز ہیں ان کو manage کرنا اور arbitrate کرنا among multiple processes یہ windows کا کام ہے تو multi-tasking یہ uniprocessor کے اندر بھی ہو سکتی ہے اگر ایک CPU ہے ایک processor لگا ہوئے تو اس کیس میں بھی multi-tasking وہ possible ہے ایسا نہیں ہوتا ہے کہ multi-tasking کے لئے آپ کو multiple processors چاہے ہیں دوسرا case ہے کہ multi-processor سسٹم، windows جو ہے وہ multi-processor سسٹم بھی ہے multi-processor کا مطلب یہ ہے کہ اگر ایک processor نہیں ایک سے زیادہ processors ہیں کوئی ایسا سسٹم ہے جن کے اندر دو processors ہیں، چارت processors ہیں، اٹh processors ہیں ایک سے زیادہ processors لگے میں تو windows جو ہے وہ multiple processors کو بھی handle کر لاتی ہے یعنی کہ اس کے اندر جتنے بھی processors ڈان ہو رہے ہیں multiple processors کا جو time میں ان کو arbitrate کر سکتی ہے among all the processors اگر سے 20 processors ڈان ہو رہے ہیں اور اس کے پاس 4 processors ہیں تو 4 processors کے بیچ میں وہ those 20 processors processors کی execution جو ہے اس کو distribute کرے گی arbitrate کرے گی ان چاروں processors کو وہ use کر سکتی ہے تو multiple processors کو بھی windows جو ہے وہ handle کر سکتی ہے پھر جو ایک process ہوتا ہے وہ process کیا ہوتا ہے process جو ہے وہ basically ایک active entity ہے یعنی کہ جب آپ ایک application مراتے ہیں تو آپ کے پاس ایک image آ جاتا ہے ایک executable file آ جاتی ہے وہ image جو ہے وہ disk کے پر پڑا ہوئے تو وہ ایک program ہے وہ ایک passive entity ہے وہ اپنی execution نہیں کر سکتا کب تک execution نہیں کر سکتا جب تک اس program کو آپ memory کے اندر load نہیں کر داتا ہے memory کے اندر load کرتے ہیں اب وہ اپنی execution perform کر سکتا ہے وہ cpu کو use کر سکتا ہے IO resources کو use کر سکتا ہے اب وہ process کلائے گا وہ ایک active entity مان گیا اور پھر کی ایسے operating system جو ہیں کچھ multi-threaded ہوتے ہیں کچھ single-threaded ہوتا ہے اگر single-threaded ہے تو ایک process کے اندر آپ کو ایک flow of execution ہوتا ہے اور اگر multi-threaded ہے تو آپ کو ایک process کے اندر multiple flows of execution ہوتا ہے آپ کو لگے گا کہ multiple codes ران ہو رہنے ہیں multiple flow of execution رہے ہیں آپ کی program code کے لگے گا کہ ایک وقت میں دو functions یا تین functions یا multiple functions جو ہے وہ execute ہو رہے ہیں تو وہ multi-threaded کلائے گا تو threat جو ہے یہ ایک چھوٹی entity ہے process سے چھوٹی entity process is a bigger entity اس کے اندر threads ہیں اور thread basically is a unit of execution اب ایک process کو processes اور thread میں کیا difference ہے یہ ایک بڑی لمبی discussion ہم اس discussion میں نہیں جا رہے ہم صرف اپنے point of view سے اپنے perspective سے دیکھ رہے ہیں اب اگر ہم programmer کے perspective سے دیکھیں تو اس programmer کے لیے process کیوں different ہے اور thread کیوں different ہے ہم یہ چیز دیسکا سکہ رہے ہیں تو processes میں کیا ہوتا ہے processes کے اندر multiple threads ہوتی ہیں ایک سے زادہ threads ہوسکتی ہیں اور پھر process کی اپنی ایک memory space ہوتی ہے ایک virtual memory space ہوتی ہے اس کی ایک memory space defined ہے اگر آپ نے multiple processes کھولیں ہر ایک اپنی اپنی ایک memory space ہوگی virtual memory space ہوگی اگر بالکل ایک جیسے processes بھی کھولیں دو windows ہیں بالکل same windows ہیں دونوں windows کی memory space ہوگی virtual memory space different ہوگی تو دو processes جو ہے ان کی اپنی اپنی identity ہے اپنی اپنی individual memory space ہے پھر اس memory space کے اندر کیا ہوگا? code segment ہوگا code segment کے اندر ساری code پڑی بھی ہے اور code segment کے اندر dls بھی include ہو سکتی ہیں اور of course processes جو ہے ان کی اپنی اپنی memory space ہوتی ہے لیکن ان کی کچھ sheared space بھی ہوتی ہے اس memory space سے بار جس طرح dls ہیں کچھ ایسی memory space ہوتی ہے جس کو کہ وہ share بھی کر سکتا پھر data segment ہوگا data segment کے اندر اس کے سارے variables بگہرہ پڑے ہوں گے global variables یا static variables پڑے ہوں گے اور more importantly environment block ہوگا environment block جو ہے اس کے اندر process کی environment سے relevant information ہوگی جیسے کے current directory or command line parameters or whatever اب اسی طرح سے اگر ہم threads کے resources کو دیکھیں thread ایک smaller unit ہے within the process اور thread کی اگر ہم resources کو دیکھیں thread جو ہے first individually نہیں exist کر سکتا تو thread کا اپنا لیکن ہمیں ایک stack maintain کرنا پڑے گا stack you maintain کرنا پڑے گا کیونکہ procedure calls ہو رہنے ہیں interrupts call ہو رہنے ہیں within the thread جب procedure call ہو رہنے ہیں and procedure within procedure call ہوتے تو آپ کو stack maintain کرنا پڑتا یہ دہنے کے لیے کہ پہلے کس procedure نے return کرنا پڑتا ہے تو اس کے بعد کس نے return کرنا پڑتا ہے جب کیونکہ استعمال ہو رہا ہے اس کے لیے بھی stack چاہیے ہوتا ہے interrupt calls کیلئے آپ کو stack چاہیے ہوتا ہے exception handling کیلئے آپ کو stack چاہیے ہوتا ہے اور auto variables کیلئے آپ کو stack چاہیے ہوتا ہے یہ ساری چیزیں جو ہے thread کے اندر موجود ہیں تو اس لیے ہر thread کی اپنی اپنی stack ہوگی ہر thread کے اندر اس چیز کا status different ہوگا جو persecution call ہوئی میکن ہے ان کا status areک کے اندر different ہے intra call ہوری ہیں جو exception handling ہوری ہے ہر thread کے اندر اس کا status different ہے اس کی ہر thread کی اپنی اپنی stack ہوگی پھر ایک thread local storage ہوگی thread local storage وہ just ایک array ہے اس کے اندر pointaz ہو سکتے ہیں اور few storage area ہو سکتے ہیں جو کہ اس کی unique data environment ہے دیتا انوارمنٹ ہے یعنی کہ تھریڈ سے رالیوانٹ جو بھی دیتا ہوگا وہ سارا تھریڈ لوکل سٹوریج کے اندر آئے گا اور پھر ایک یونیک آرگومنٹ ہو سکتا ہے within the stack جو کہ اس تھریڈ کو identity کیا رہا اور سب سے importantly operating system کے point of view سے ہر تھریڈ کا اپنا ایک کانٹیکسٹ ہوگا یعنی کہ ایک process کو جب time ملتا ہے تو وہ تھریڈز کے بیچ میں Multiplex ہوتا ہے تو جب ایک تھریڈز سے switching ہو کے دوسری تھریڈ پہ جا رہی ہے تو اس تھریڈ کا کانٹیکسٹ سیو ہوتا ہے اور دوسری کا restorer ہوتا ہے اس کی اس سے switching ہو کے تیسری پہ جائے گی تو اس کا کانٹیکسٹ سیو ہو جائے گا اگلی کا restorer ہو جائے گا and so on اس طرح کانٹیکسٹ کے سیو ہونے سے اور restorer ہونے سے تھریڈز کے امانگ switching ہو رہی ہے اور context itself کیا چیز ہے context جو ہے وہ بیسکلی processor کا status ہوتا ہے processor کے انڈر جتے ہیں انڈر جیسٹرز کی values ہوتی ہیں یہاں پہ ہمارے پاس یہ ایک diagram ہے اس diagram کو اسی چیز کو ہم مزید elaborate کر سکتے ہیں کہ ایک process ہے یہ پورا جس آپ کو یہاں پہ ریکٹنگل نظر آ رہا ہے یہ ایک process ہے اور اس process کے اندر کیا چیز ہے quote ہے process کی اس کے variables آ جائے گے اس کی اپنی heap آ جائے گی اس کے دوسرے resources آ جائے گے جیسے کہ جو اس نے files open کینے ہیں جو اس نے heap open کینے ہے جتنے بھی resources اس process نے اپنے لئے allocate کیا ہے اور اس کا جو environment block پھر کچھ اس کے اندر ایسی space ہے جان پہ تھریڈز کو manage کیا جا رہا ہے یہاں پہ ایک thread one ہے اور ایک thread two ہے thread and so on کئی ساری threads ملٹپل threads ہو سکتے ہیں ہر thread جو ہے وہ ایک unit of execution ہے اس thread کے اندر کہیں پر execution ہو رہی ہے code کی اور اس thread کے اندر ایک stack بھی مینٹین ہو رہا ہے اور ایک thread local storage بھی مینٹین جب بھی ایک thread جو اس process کے ساتھ اٹائچ ہو رہی ہے تو اس کے لیے ایک stack بھی مینٹین ہو گا اور ایک thread local storage بھی مینٹین ہو گی اور multiple threads اس طرح سے associate ہو سکتے ہیں ہر thread جو ہے that is a unit of execution یعنی کہ اس thread کے اندر ایک flow of execution چال رہا ہے اسی دوران دوسی thread کے اندر بھی ایک flow of execution چال رہا ہے tc کے اندر بھی چال رہا ہے and so on ہر thread کے اندر کنکرینڈ لی کوئی نا کوئی flow of execution چال رہا ہے اور دیکھ رہے والے کو multiple اگر وہ کسی طرح سے output کی form کے اندر آپ کو پتہ لگ رہا ہے کہ کیا operations perform ہو رہے ہیں تو دیکھنے والے کو لگے کہ multiple operations perform ہو رہے ہیں ملٹپل flow of executions چاہت نہیں ہیں