آپريٽنگ سسٽم: ٽي آسان ٽڪرا. حصو 3: پروسيس API (ترجمو)

آپريٽنگ سسٽم جو تعارف

اي حبر! مان توهان جي ڌيان ۾ مضمونن جو هڪ سلسلو آڻڻ چاهيان ٿو - منهنجي خيال ۾ هڪ دلچسپ ادب جو ترجمو - OSTEP. هي مواد يونڪس جهڙو آپريٽنگ سسٽم جي ڪم تي تمام گهڻي بحث ڪري ٿو، يعني، پروسيس سان ڪم، مختلف شيڊولرز، ميموري، ۽ ٻيا ساڳيا حصا جيڪي جديد او ايس ٺاهيندا آهن. توھان ھتي ڏسي سگھوٿا سڀ مواد جو اصل هتي. مهرباني ڪري نوٽ ڪريو ته ترجمو غير پروفيشنل (بلڪل آزاديءَ سان) ڪيو ويو، پر اميد اٿم ته مون عام معنيٰ برقرار رکي.

هن موضوع تي ليبارٽري ڪم هتي ڳولهي سگهجي ٿو:

ٻيا حصا:

توھان پڻ چيڪ ڪري سگھو ٿا منھنجي چينل تي ٽيليگرام =)

الارم! هن ليڪچر لاءِ هڪ ليب آهي! ڏس گيتب

پروسيس API

اچو ته يونڪس سسٽم ۾ پروسيس ٺاهڻ جو هڪ مثال ڏسو. اهو ٻن سسٽم ڪالن ذريعي ٿئي ٿو ڪانٽو () и exec().

ڪال ڪانٽو()

آپريٽنگ سسٽم: ٽي آسان ٽڪرا. حصو 3: پروسيس API (ترجمو)

هڪ پروگرام تي غور ڪريو جيڪو هڪ فورڪ () ڪال ڪري ٿو. ان جي عمل جو نتيجو هن ريت ٿيندو.

آپريٽنگ سسٽم: ٽي آسان ٽڪرا. حصو 3: پروسيس API (ترجمو)

سڀ کان پهريان، اسان داخل ڪيو main() فنڪشن ۽ اسٽرنگ کي اسڪرين تي پرنٽ ڪريو. لڪير ۾ پروسيس جي سڃاڻپ ڪندڙ شامل آهي جنهن کي اصل ۾ سڏيو ويندو آهي PID يا پروسيس جي سڃاڻپ ڪندڙ. هي سڃاڻپ ڪندڙ UNIX ۾ استعمال ڪيو ويندو آهي هڪ عمل ڏانهن اشارو ڪرڻ لاء. ايندڙ حڪم ​​کي سڏيندو فورڪ (). هن نقطي تي، عمل جي تقريبا صحيح ڪاپي ٺاهي وئي آهي. او ايس لاءِ، اهو ڏسڻ ۾ اچي ٿو ته سسٽم تي هلندڙ ساڳئي پروگرام جون 2 ڪاپيون آهن، جنهن جي نتيجي ۾ فورڪ () فنڪشن مان نڪرندو. نئين ٺاهيل ٻار جي عمل (والدين جي عمل جي سلسلي ۾ جيڪا ان کي ٺاهي وئي) هاڻي عمل نه ڪيو ويندو، مکيه () فنڪشن کان شروع ٿيندي. اهو ياد رکڻ گهرجي ته ٻار جو عمل والدين جي عمل جي صحيح ڪاپي نه آهي؛ خاص طور تي، ان جي پنهنجي ايڊريس جي جاء، ان جا پنهنجا رجسٽر، ان جو پنهنجو اشارو آهي قابل عمل هدايتون، وغيره. اھڙيءَ طرح، ڪانٽو () فنڪشن جي ڪالر ڏانھن موٽايل قدر مختلف ھوندو. خاص طور تي، والدين جي عمل کي واپسي جي طور تي ٻار جي عمل جي PID قيمت ملندي، ۽ ٻار کي 0 جي برابر قيمت ملندي. انهن واپسي ڪوڊس کي استعمال ڪندي، توهان پوءِ عمل کي الڳ ڪري سگهو ٿا ۽ انهن مان هر هڪ کي پنهنجو ڪم ڪرڻ تي مجبور ڪري سگهو ٿا. . بهرحال، هن پروگرام جي عمل کي سختي سان بيان نه ڪيو ويو آهي. 2 پروسيس ۾ ورهائڻ کان پوء، او ايس انهن جي نگراني ڪرڻ شروع ڪري ٿو، انهي سان گڏ انهن جي ڪم جي منصوبابندي ڪرڻ. جيڪڏهن هڪ واحد-ڪور پروسيسر تي عمل ڪيو وڃي، پروسيس مان هڪ، انهي صورت ۾، والدين، ڪم جاري رکندو، ۽ پوء ٻار جي عمل کي ڪنٽرول حاصل ڪندو. جڏهن ٻيهر شروع ٿئي ٿي، صورتحال مختلف ٿي سگهي ٿي.

ڪال انتظار ()

آپريٽنگ سسٽم: ٽي آسان ٽڪرا. حصو 3: پروسيس API (ترجمو)

هيٺ ڏنل پروگرام تي غور ڪريو. هن پروگرام ۾ ڪالھ جي موجودگيءَ سبب انتظار ڪريو() والدين عمل هميشه ٻار جي عمل جي مڪمل ٿيڻ جو انتظار ڪندو. انهي صورت ۾، اسان کي اسڪرين تي سختي سان بيان ڪيل ٽيڪسٽ آئوٽ حاصل ڪنداسين

آپريٽنگ سسٽم: ٽي آسان ٽڪرا. حصو 3: پروسيس API (ترجمو)

exec() ڪال

آپريٽنگ سسٽم: ٽي آسان ٽڪرا. حصو 3: پروسيس API (ترجمو)

چئلينج تي غور ڪريو exec(). هي سسٽم ڪال ڪارائتو آهي جڏهن اسان هڪ مڪمل طور تي مختلف پروگرام هلائڻ چاهيون ٿا. هتي اسان کي سڏينداسين execvp() wc پروگرام کي هلائڻ لاءِ جيڪو لفظن جي ڳڻپ جو پروگرام آهي. ڇا ٿيندو جڏهن exec() سڏيو ويندو آهي؟ هي ڪال قابل عمل فائل جو نالو ۽ دليلن جي طور تي ڪجهه پيٽرولر منظور ڪيو ويو آهي. جنهن کان پوءِ هن ايگزيڪيوٽيبل فائل مان ڪوڊ ۽ اسٽيڪ ڊيٽا لوڊ ڪيو ويندو آهي ۽ ڪوڊ سان گڏ ان جي پنهنجي حصي کي اوور رائٽ ڪيو ويندو آهي. باقي ياداشت وارا علائقا، جهڙوڪ اسٽيڪ ۽ هيپ، ٻيهر شروع ڪيا ويا آهن. جنهن کان پوءِ او ايس صرف پروگرام کي هلائي ٿو، ان کي دليلن جو هڪ سيٽ پاس ڪري ٿو. تنهنڪري اسان ڪو نئون عمل نه ٺاهيو آهي، اسان صرف هن وقت هلندڙ پروگرام کي ٻئي هلندڙ پروگرام ۾ تبديل ڪيو. اولاد ۾ exec() ڪال کي عمل ڪرڻ کان پوء، اهو ظاهر ٿئي ٿو ڄڻ ته اصل پروگرام بلڪل نه هلندو هو.

هي شروعاتي پيچيدگي يونڪس شيل لاءِ مڪمل طور تي عام آهي، ۽ انهي شيل کي ڪال ڪرڻ کان پوءِ ڪوڊ تي عمل ڪرڻ جي اجازت ڏئي ٿي. ڪانٽو ()، پر ڪال کان اڳ exec(). اهڙي ڪوڊ جو هڪ مثال شيل ماحول کي ترتيب ڏئي رهيو آهي پروگرام جي ضرورتن جي مطابق، ان کي شروع ڪرڻ کان پهريان.

شيل - صرف هڪ صارف پروگرام. هوءَ توهان کي دعوت واري لڪير ڏيکاري ٿي ۽ توهان کي ان ۾ ڪجهه لکڻ جو انتظار ڪري ٿي. اڪثر ڪيسن ۾، جيڪڏهن توهان اتي هڪ پروگرام جو نالو لکندا آهيو، شيل ان جي جڳهه کي ڳوليندو، fork() طريقي کي ڪال ڪريو، ۽ پوء نئين پروسيس ٺاهڻ لاء ڪجهه قسم جي exec() کي ڪال ڪريو ۽ ان کي استعمال ڪندي مڪمل ٿيڻ جو انتظار ڪريو. انتظار () ڪال. جڏهن ٻار جو عمل نڪرندو، شيل انتظار () ڪال مان واپس ايندو ۽ پرامٽ ٻيهر پرنٽ ڪيو ۽ ايندڙ حڪم ​​داخل ٿيڻ جو انتظار ڪريو.

فورڪ () ۽ exec () تقسيم شيل کي هيٺين شين کي ڪرڻ جي اجازت ڏئي ٿو، مثال طور:
wc فائل > new_file.

ھن مثال ۾، wc پروگرام جي ٻاھر ھڪڙي فائل ڏانھن منتقل ڪيو ويو آھي. شيل حاصل ڪرڻ جو طريقو بلڪل سادو آهي - ڪال ڪرڻ کان اڳ ٻار جي عمل کي ٺاهيندي exec()، شيل معياري ٻاھر بند ڪري ٿو ۽ فائل کولي ٿو نئين_فائلاهڙيءَ طرح، اڳتي هلندڙ پروگرام مان سڀ آئوٽ wc هڪ اسڪرين جي بدران هڪ فائل ڏانهن منتقل ڪيو ويندو.

يونڪس پائپ ساڳئي طريقي سان لاڳو ڪيا ويا آهن، فرق سان اهي پائپ () ڪال استعمال ڪندا آهن. انهي صورت ۾، پروسيس جو آئوٽ اسٽريم ڪنييل ۾ واقع هڪ پائپ قطار سان ڳنڍيل هوندو، جنهن سان ٻئي پروسيس جو ان پٽ وهڪرو ڳنڍيل هوندو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو