آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 3: عمل API (ترجمہ)

آپریٹنگ سسٹمز کا تعارف

ارے حبر! میں آپ کی توجہ میں مضامین کی ایک سیریز - میری رائے میں ایک دلچسپ ادب کے تراجم کی طرف لانا چاہتا ہوں - OSTEP۔ یہ مواد یونکس جیسے آپریٹنگ سسٹم کے کام کے بارے میں کافی گہرائی سے بحث کرتا ہے، یعنی پروسیس، مختلف شیڈولرز، میموری، اور اسی طرح کے دوسرے اجزاء کے ساتھ کام جو جدید OS بناتے ہیں۔ آپ یہاں تمام مواد کی اصل دیکھ سکتے ہیں۔ یہاں. براہ کرم نوٹ کریں کہ ترجمہ غیر پیشہ ورانہ طور پر کیا گیا تھا (کافی آزادانہ)، لیکن مجھے امید ہے کہ میں نے عام معنی کو برقرار رکھا ہے۔

اس موضوع پر لیبارٹری کا کام یہاں پایا جا سکتا ہے:

دوسرے حصے:

آپ میرا چینل بھی دیکھ سکتے ہیں۔ ۔ =)

الارم! اس لیکچر کے لیے ایک لیب ہے! دیکھو گیتھب

عمل API

آئیے UNIX سسٹم میں پروسیس بنانے کی ایک مثال دیکھتے ہیں۔ یہ دو سسٹم کالز کے ذریعے ہوتا ہے۔ کانٹا () и exec().

کال فورک()

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 3: عمل API (ترجمہ)

ایک ایسے پروگرام پر غور کریں جو فورک () کال کرتا ہے۔ اس پر عمل درآمد کا نتیجہ حسب ذیل ہوگا۔

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 3: عمل API (ترجمہ)

سب سے پہلے، ہم مین() فنکشن داخل کرتے ہیں اور سٹرنگ کو سکرین پر پرنٹ کرتے ہیں۔ لائن میں پروسیس شناخت کنندہ ہوتا ہے جسے اصل میں کہا جاتا ہے۔ پی آئی ڈی یا عمل کا شناخت کنندہ۔ یہ شناخت کنندہ UNIX میں کسی عمل کا حوالہ دینے کے لیے استعمال ہوتا ہے۔ اگلی کمانڈ فورک () کو کال کرے گی۔ اس مقام پر، عمل کی تقریباً عین مطابق کاپی بنائی جاتی ہے۔ OS کے لیے، ایسا لگتا ہے کہ سسٹم پر ایک ہی پروگرام کی 2 کاپیاں چل رہی ہیں، جو بدلے میں fork() فنکشن سے باہر ہو جائیں گی۔ مین () فنکشن سے شروع ہونے والے نئے بنائے گئے چائلڈ پروسیس (پیرنٹ پروسیس کے سلسلے میں جس نے اسے بنایا ہے) پر عمل درآمد نہیں کیا جائے گا۔ یاد رہے کہ بچوں کا عمل والدین کے عمل کی قطعی نقل نہیں ہے؛ خاص طور پر، اس کی اپنی ایڈریس اسپیس، اس کے اپنے رجسٹر، اس کا اپنا پوائنٹر اور قابل عمل ہدایات ہیں۔ اس طرح، فورک() فنکشن کے کالر کو لوٹائی گئی ویلیو مختلف ہوگی۔ خاص طور پر، والدین کے عمل کو واپسی کے طور پر چائلڈ پروسیس کی PID ویلیو ملے گی، اور بچے کو 0 کے برابر ایک قدر ملے گی۔ ان واپسی کوڈز کا استعمال کرتے ہوئے، آپ پھر عمل کو الگ کر سکتے ہیں اور ان میں سے ہر ایک کو اپنا کام کرنے پر مجبور کر سکتے ہیں۔ . تاہم، اس پروگرام کے نفاذ کی سختی سے وضاحت نہیں کی گئی ہے۔ 2 عملوں میں تقسیم ہونے کے بعد، OS ان کی نگرانی کرنے کے ساتھ ساتھ ان کے کام کی منصوبہ بندی کرنا شروع کر دیتا ہے۔ اگر سنگل کور پروسیسر پر عمل کیا جاتا ہے تو، عمل میں سے ایک، اس صورت میں، والدین کام جاری رکھیں گے، اور پھر چائلڈ پروسیس کو کنٹرول حاصل ہوگا۔ دوبارہ شروع کرتے وقت، صورتحال مختلف ہو سکتی ہے۔

کال انتظار ()

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 3: عمل API (ترجمہ)

درج ذیل پروگرام پر غور کریں۔ اس پروگرام میں کال کی موجودگی کی وجہ سے انتظار کرو() والدین کا عمل ہمیشہ بچے کے عمل کے مکمل ہونے کا انتظار کرے گا۔ اس صورت میں، ہمیں اسکرین پر سختی سے بیان کردہ ٹیکسٹ آؤٹ پٹ ملے گا۔

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 3: عمل API (ترجمہ)

exec() کال کریں۔

آپریٹنگ سسٹم: تین آسان ٹکڑے۔ حصہ 3: عمل API (ترجمہ)

چیلنج پر غور کریں۔ exec(). جب ہم بالکل مختلف پروگرام چلانا چاہتے ہیں تو یہ سسٹم کال مفید ہے۔ یہاں ہم کال کریں گے۔ execvp() wc پروگرام کو چلانے کے لیے جو کہ لفظ گنتی کا پروگرام ہے۔ جب exec() کہا جاتا ہے تو کیا ہوتا ہے؟ اس کال کو ایگزیکیوٹیبل فائل کا نام اور کچھ پیرامیٹرز بطور دلیل کے پاس کیا جاتا ہے۔ جس کے بعد اس ایگزیکیوٹیبل فائل سے کوڈ اور سٹیٹک ڈیٹا کو لوڈ کیا جاتا ہے اور کوڈ کے ساتھ اس کا اپنا سیگمنٹ اوور رائٹ ہوجاتا ہے۔ باقی میموری کے علاقے، جیسے اسٹیک اور ہیپ، دوبارہ شروع کیے جاتے ہیں۔ جس کے بعد OS پروگرام کو آسانی سے انجام دیتا ہے، اسے دلائل کا ایک سیٹ پاس کرتا ہے۔ اس لیے ہم نے کوئی نیا عمل نہیں بنایا، ہم نے صرف اس وقت چلنے والے پروگرام کو ایک اور چلانے والے پروگرام میں تبدیل کیا۔ ڈیسنڈنٹ میں exec() کال پر عمل کرنے کے بعد، ایسا لگتا ہے جیسے اصل پروگرام بالکل نہیں چلا۔

یہ سٹارٹ اپ پیچیدگی یونکس شیل کے لیے بالکل نارمل ہے، اور اس شیل کو کال کرنے کے بعد کوڈ پر عمل کرنے کی اجازت دیتا ہے۔ کانٹا ()، لیکن کال سے پہلے exec(). اس طرح کے کوڈ کی ایک مثال شیل ماحول کو پروگرام شروع کرنے سے پہلے اس کی ضروریات کے مطابق ایڈجسٹ کرنا ہے۔

شیل - صرف ایک صارف پروگرام۔ وہ آپ کو دعوت نامہ دکھاتی ہے اور انتظار کرتی ہے کہ آپ اس میں کچھ لکھیں۔ زیادہ تر معاملات میں، اگر آپ وہاں کسی پروگرام کا نام لکھتے ہیں، تو شیل اس کا مقام تلاش کرے گا، فورک () طریقہ کو کال کرے گا، اور پھر ایک نیا عمل بنانے کے لیے کسی قسم کے exec() کو کال کرے گا اور اس کے مکمل ہونے کا انتظار کرے گا۔ انتظار () کال کریں۔ جب چائلڈ پروسیس ختم ہوجاتا ہے، تو شیل wait() کال سے واپس آجائے گا اور پرامپٹ کو دوبارہ پرنٹ کرے گا اور اگلی کمانڈ داخل ہونے کا انتظار کرے گا۔

فورک() اور exec() اسپلٹ شیل کو درج ذیل کام کرنے کی اجازت دیتا ہے، مثال کے طور پر:
wc فائل> new_file.

اس مثال میں، wc پروگرام کے آؤٹ پٹ کو فائل میں ری ڈائریکٹ کیا جاتا ہے۔ جس طرح سے شیل اسے حاصل کرتا ہے وہ بہت آسان ہے - کال کرنے سے پہلے چائلڈ پروسیس بنا کر exec()، شیل معیاری آؤٹ پٹ کو بند کرتا ہے اور فائل کو کھولتا ہے۔ نئی_فائلاس طرح، مزید چلنے والے پروگرام سے تمام آؤٹ پٹ wc اسکرین کے بجائے فائل پر بھیج دیا جائے گا۔

یونکس پائپ اسی طرح لاگو کیا جاتا ہے، اس فرق کے ساتھ کہ وہ پائپ() کال استعمال کرتے ہیں۔ اس صورت میں، عمل کا آؤٹ پٹ سٹریم دانا میں واقع پائپ کی قطار سے منسلک ہو جائے گا، جس سے دوسرے عمل کا ان پٹ سٹریم منسلک ہو جائے گا۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں