 بسم اللہ الرحمن الرحیم آج ہم موڈیول number 124 دیسکس کریں گے موڈیول 124 ہے process and thread priority اس کے اندر ہم دیکھیں گے processes کی کیا کیا possible priorities ہو سکتی ہیں اور threads کی کیا کیا possible priorities ہو سکتی ہیں پرارٹی کو سمجھنا ضروری ہے کیونکہ آپ اس طرح سے سمجھ سکتے ہیں کہ ملٹی ٹاسکنگ سسٹم ہے یا ملٹی ٹریڈنگ سسٹم ہے ایک وقت میں number of processes ڈان ہو رہے ہیں اور number of threads ڈان ہو رہے ہیں کئی سارے processes ایسے ہیں جو مختلف رسورس کے لئے کمپیٹ کرے ہیں for example processor کئی سارے processes ایسے ہیں جو computation پرپروم کرنا چاہرے ہیں تو operating system کیسے decided کرے گا کہ اگر ایک وقت میں کئی سارے processes ہیں تو ان میں سے کس process کو یہ رسورس ملے گا یہ decided ہو گا on the basis of priority تو اس لئے priority کو سمجھنا جو ہے وہ بہت ضروری ہے فسلی آپ یہ سمجھیں کہ priority کے لئے صرف وہی threads یا وہی processes کمپیٹ کرے ہیں جو ready ready کیا ہوتے ہیں جو کہ ready for execution ہیں جو نا کے waiting ڈیٹ کے اندر ہیں نا suspended ڈیٹ کے اندر ہیں نا block ڈیٹ کے اندر ہیں نا کسی event کے لئے ویٹ کرے ہیں نا کوئی input output operation perform کرے ہیں جو thread کی priority ہوتی ہے وہ عام طور پہ کیونکہ آپ کو پتا ہے کہ thread ایک independent cheese نہیں ہے thread جو ہوتی ہے وہ ہمیشہاں کسی ایک process کے ساتھ link ہوتی ہے تو جس process کے ساتھ وہ thread linked ہے اس process کی priority ہے عام طور پہ وہی priority جو ہے وہ thread inherit کری ہوتی ہے اس سے correspond کرتی ہے وہ جو اس کی priority ہوگی تقریبا ہی یا اس کے آسباسی thread کی priority ہوگی تو process کی priority کب سیٹ ہوتی ہے جب آپ process create کرتے ہیں create process API ہم نے discuss کی تھی جب بھی آپ create process سے ایک process create کریں گے تو ساتھ ہی ساتھ آپ اس کی priority بھی ساتھ ساتھ SPECIFI کریں گے تو priority کی کیا possible values ہو سکتی ہیں ان values کو ہم Discuss کرتے ہیں just lowest priority ہے that is idle idle lowest priority class ہے جب یعنی کہ اس thread کو صرف تبھی تاہی ملے گا جب system idle ہے جب کسی اور کوئی CPU کی ضرورت نہیں پڑی اور ساریہ کچھ idle پڑا ہوا ہے تو اس thread کی باری آئے گی عام طور پہ جو بھی ایک thread کریٹ کرتے ہیں اس کی priority ہوتی ہے وہ normal ہوتی ہے normal priority ہوتی ہے ایک تپیقل کوئی بھی آپ thread کریں گے اس کی priority ہے that is normal اس سے ہایر جو priority ہے that is high priority اور سب سے جو highest priority ہے that is real time priority یعنی کہ آپ کے پاس ایک normal priority کی thread ہے ایک high priority کی thread ہے اور ایک real time priority کی thread ہے کس کو CPU ملے گا کس کو processor ملے گا real time جب کوئی real time thread نہیں ہے اور آپ کے پاس high اور normal priority کی threads ہے کس کو CPU ملے گا high کو ملے گا اور most of the threads جو ہے وہ normal priority کے ساتھ ران ہو رہی ہیں majority of the threads جو normal priority کے ساتھ یا processes جو ہے اس کس میں ہم process کی priority کی بات کرے ہیں تو processes جو ہے وہ normal priority کے ساتھ ران ہوتے ہیں جب آپ real time priority کو use کرے ہیں تو real time priority کو use کرتے ہیں تھوڑا care full ہونا پڑتا ہے یہ ایک بہت high priority ہے اگر آپ کسی process کو real time priority دیتے ہیں تو اس کس کے اندر آپ کے دوسر process ہیں یا دوسی threads ہے ان کو کبھی بھی turn نہیں مل سکے گی اگر اس کو بار بار cpu کی ضرور پڑی ہے کو ایسا process ہے جس کو بار بار cpu کی ضرور پڑی ہے تو cpu جو ہے وہ اسی کو ہی serve کرتا رہ گا باقی جو آپ کے processes ہیں وہ ایک طرح سے start کریں گے جو priority class ہے وہ کیسے سٹ کی جا سکتے ہیں اس کے لیے آپ دیکھ سکتے ہیں یہاں پہ API is available ہے ایک ہے set priority class اور get priority class already آپ already آپ کے پاس ایک process ہے آپ اس کے دیکھنا چاہتے ہیں کیا priority class ہے ان ساری چاروں priorities میں سے آپ get priority class ہے اس کی priority get کر سکتے ہیں اور set priority class سے آپ اس کی priority کو change بھی کر سکتے ہیں تو یہ جو priority کے change ہونے کا process ہے یہ ایک طرح دینامیک اسم کا process ہے اس کو بھی آگئے تھوڑا سا ہم Discuss کریں گے تو یہ چار ہم نے basic priorities دیکھی ہیں اس کے علاوہ بھی کچھ priority level ہے انہانس priority level ہے ایک priority level ہے above normal ہم نے دیکھا تھا ایک typical process کی priority ہوگی وہ normal ہوگی above normal جو ہے وہ اسے تھوڑی سی higher priority ہے below normal جو ہے وہ normal سے lower priority normal سے lower ہے لیکن idle سے higher above normal جو ہے normal سے higher لیکن high سے lower تو یہ کہہ لیں گے بیچ میں دو median کسم کی priorities ہیں یہ بھی use کی جا سکتے ہیں اور ایک اور class ہے یہ بڑی interesting کسم کی class ہے process mode background begin اس کا میرے ایک normal priority ایک normal priority کیا process ہے جو وہ foreground کے اندر ان کرا ہے تو اس کی priority normalی ہے جب آپ کہتے ہیں process mode background begin تو background کے اندر اس کی priority ہے وہ ایسے ہو جاتی جیسے idle اور جب آپ جاتے ہیں یہ والی situation ختم ہو جائے تو اس کو کیا سائن کر دیتا ہے process mode background and priority کر دی جاتی ہے یہ background والی جو idle priority اس کیا یہ ختم ہو جاتی ہے اور واپس وہ اپنی normal priority کے اوپر چلا جاتا ہے لیکن جب اس کو یہ priority سائن ہوئی ہوتی ہے تو وہ بالکل responsive کسم کا ہوتا ہے کیونکہ وہ foreground کے اندر اس کی priority بالکل normal ہوتی ہے just background operations کیلئے اس کی priority idle کے برانبر ہوتی ہے بالکل اسی طرح سے threads کی priorities ہیں ان کو بھی device کیا جان سکتا ہے thread priority lowest that is the lowest priority وہ بالکل idle کی طرح priority ہے thread priority below normal normal سے کم ہے لیکن idle سے زادہ normal یہ بالکل normal priority ہے above normal سے زادہ ہے لیکن highest سے کم ہے اس سے higher priority ہے جو ہے وہ that is highest priority اس سے بھی higher priority ہے that is time critical جو کہ real time کے equivalent ہے اور اسی طرح سے thread mode background begin and thread mode background اس کی priority جو ہے وہ idle کے برانبر ہوگی idle جو ہے وہ سب سے کم درجہ ہے priority ہے اور جب اس کو end کر دیں گے تو واپس جو اس کی normal priority ہوگے وہ revert ہوگی تو priority کو set کرنے کے لیے آ کے پاس کیا ہوتا ہے آ کے پاس یہ دو API's ہیں set thread priority and get thread priority آپ کو بتایا ہے کہ جو thread ہے اس کی priority کیا سیٹ ہوئی ہوتی ہے اس کی priority وہی سیٹ ہوئی ہوتی ہے جو کہ آپ کے process کی priority ہوتی ہے یا اس سے correspond کرتی ہے یعنی کہ اسے دو سٹپ سوپر ہو سکتی ہے دو سٹپ نیس چیہ ہو سکتی ہے plus minus two steps ہو سکتی ہے جو بھی ایک thread کی priority ہوگی تو یعنی کہ اگر اس کی normal priority ہے تو اسے normal سے دو سٹپ نیچے پرارٹی جا سکتی ہے دو سٹپ اوپر جا سکتی ہے لیکن اس سے higher اس کی priority ہے وہ نہیں جا سکتی ہے تو اگر آپ اس کی priority چینج کرنا چاہتے ہیں تو get thread priority کی API ہے اگر priority get کرنا چاہتے ہیں دیکھنا چاہتے ہیں اس کی کیا priority ہے تو get thread priority کی API ہے اس کے علاوہ windows کے اندر ہم نے دیکھا ہے کہ ایک mechanism ہے priorities کو چینج کرنے گا ایک تو یہ ہے کہ اگر process کی priority چینج ہو جاتی ہے تو thread کی priority بھی چینج ہو جائے گی پھر اسی طرح سے windows اپنے لحاظ سے وہ دیکھے گا کہ کسی وجہ سے ایک thread کی priority انکریز کرنے کی ضرورت ہے یا دیکریز کرنے کی ضرورت ہے تو وہ اپنے طور پہ ہی thread کی priority کام زادہ کر سکتا تو boost کر سکتا ہے ایک thread کی priority یہ ایک thread بڑی دیر سے چال رہی ہے اور اس کی باری نہیں آڑی ایک thread کی priority کو boost کر سکتا تو یہ فیچر آپ enable بھی کر سکتے ہیں disable بھی کر سکتے ہیں اس کے لیے یہ آپ کے پاس API ہے set thread priority boost اس کی مدہ سے یہ جو dynamic priorities ہیں windows جو اپنے لحاظ سے priorities کو کم زادہ کر رہا ہے اس کو آپ چینج کر سکتے ہیں set thread priority boost کی function کو استعمال کر گا