عملیاتي سیسټمونه: درې اسانه ټوټې. دریمه برخه: پروسس API (ژباړه)

د عملیاتي سیسټمونو پیژندنه

سلام، حبر! زه غواړم ستاسو پام ته د مقالو لړۍ وړاندې کړم - د یو ادب ژباړې چې زما په نظر په زړه پوري دي - OSTEP. دا مواد د یونیکس په څیر عملیاتي سیسټمونو کار په ژوره توګه معاینه کوي، د بیلګې په توګه، د پروسو سره کار، مختلف شیډولر، حافظه او نور ورته اجزا چې عصري OS جوړوي. تاسو کولی شئ دلته د ټولو موادو اصلي بڼه وګورئ دلته. مهرباني وکړئ په یاد ولرئ چې ژباړه په غیر مسلکي ډول (په آزاده توګه) شوې وه، مګر زه هیله لرم چې ما عمومي معنی ساتلی وي.

په دې موضوع کې د لابراتوار کار دلته موندلی شئ:

نورې برخې:

تاسو کولی شئ زما چینل هم وګورئ ټیلیګرام =)

الارم! د دې لیکچر لپاره لابراتوار شتون لري! وګوره github

پروسس API

راځئ چې په یونیکس سیسټم کې د پروسې رامینځته کولو مثال وګورو. دا د دوه سیسټم تلیفونونو له لارې پیښیږي فورک () и اجراییه().

کال فورک()

عملیاتي سیسټمونه: درې اسانه ټوټې. دریمه برخه: پروسس API (ژباړه)

یو برنامه په پام کې ونیسئ چې فورک () زنګ وهي. د هغې د اجرا کولو پایله به په لاندې ډول وي.

عملیاتي سیسټمونه: درې اسانه ټوټې. دریمه برخه: پروسس API (ژباړه)

تر ټولو لومړی، موږ اصلي () فنکشن ته ننوځو او پرده ته تار چاپ کوو. کرښه د پروسې پیژندونکی لري کوم چې په اصل کې ورته ویل کیږي PID یا د پروسې پیژندونکی. دا پیژندونکی په UNIX کې د پروسې ته راجع کولو لپاره کارول کیږي. راتلونکی کمانډ به فورک (). پدې مرحله کې، د پروسې نږدې دقیق کاپي رامینځته کیږي. د OS لپاره ، داسې ښکاري چې په سیسټم کې د ورته برنامې 2 کاپي شتون لري ، کوم چې په پایله کې به د فورک () فنکشن څخه وځي. د ماشوم نوې رامینځته شوې پروسه (د مور او پلار پروسې پورې اړه لري چې دا یې رامینځته کړې) به نور نه اجرا کیږي ، د اصلي () فنکشن څخه پیل کیږي. دا باید په یاد ولرئ چې د ماشوم پروسه د والدین پروسې دقیق کاپي نه ده؛ په ځانګړې توګه، دا د خپل پته ځای لري، خپل راجسترونه، د اجرا وړ لارښوونو ته خپل اشاره، او داسې نور. پدې توګه ، د فورک () فنکشن زنګ وهونکي ته بیرته راستون شوی ارزښت به توپیر ولري. په ځانګړې توګه، د مور او پلار پروسه به د بیرته ستنیدو په توګه د ماشوم پروسې PID ارزښت ترلاسه کړي، او ماشوم به د 0 سره مساوي ارزښت ترلاسه کړي. د دې بیرته ستنیدو کوډونو په کارولو سره، تاسو بیا کولی شئ پروسې جلا کړئ او هر یو یې خپل کار کولو ته مجبور کړئ. . په هرصورت، د دې پروګرام اجرا کول په کلکه تعریف شوي ندي. په 2 پروسو ویشلو وروسته، OS د دوی څارنه پیل کوي، او همدارنګه د دوی کار پالن کوي. که چیرې په یو واحد کور پروسیسر کې اجرا شي، یو له پروسې څخه، پدې حالت کې مور او پلار به کار ته دوام ورکړي، او بیا به د ماشوم پروسه کنټرول ترلاسه کړي. کله چې بیا پیل شي، وضعیت ممکن توپیر ولري.

زنګ ووهئ انتظار()

عملیاتي سیسټمونه: درې اسانه ټوټې. دریمه برخه: پروسس API (ژباړه)

لاندې پروګرام ته پام وکړئ. په دې خپرونه کې د زنګ د شتون له امله انتظار() د مور او پلار پروسه به تل د ماشوم پروسې بشپړیدو ته انتظار باسي. په دې حالت کې، موږ به په سکرین کې په کلکه تعریف شوي متن محصول ترلاسه کړو

عملیاتي سیسټمونه: درې اسانه ټوټې. دریمه برخه: پروسس API (ژباړه)

exec() زنګ ووهئ

عملیاتي سیسټمونه: درې اسانه ټوټې. دریمه برخه: پروسس API (ژباړه)

ننګونې ته پام وکړئ اجراییه(). دا سیسټم زنګ ګټور دی کله چې موږ غواړو یو بشپړ مختلف برنامه پرمخ وړو. دلته به غږ وکړو execvp() د wc پروګرام چلولو لپاره کوم چې د کلمو شمیرلو پروګرام دی. څه پیښیږي کله چې exec() ویل کیږي؟ دا زنګ د اجرا وړ فایل نوم او ځینې پیرامیټونه د دلیلونو په توګه لیږدول کیږي. وروسته له دې چې د دې اجرا وړ فایل څخه کوډ او جامد ډیټا پورته کیږي او د کوډ سره خپله برخه له سره لیکل کیږي. د حافظې پاتې برخې، لکه سټک او هپ، بیا پیل کیږي. وروسته له دې چې OS په ساده ډول برنامه اجرا کوي ، دا د دلیلونو سیټ تیروي. نو موږ کومه نوې پروسه نه ده جوړه کړې، موږ په ساده ډول اوسني روان پروګرام په بل چلونکي پروګرام بدل کړ. په نسل کې د exec() زنګ اجرا کولو وروسته، داسې ښکاري چې اصلي برنامه په بشپړ ډول نه وه روانه.

د پیل کولو دا پیچلتیا د یونیکس شیل لپاره په بشپړ ډول عادي ده، او دا شیل ته اجازه ورکوي چې د زنګ وهلو وروسته کوډ اجرا کړي فورک ()خو د زنګ نه مخکې اجراییه(). د دې کوډ یوه بیلګه به د پیل کولو دمخه د برنامه پیل کولو اړتیاو سره د شیل چاپیریال تنظیم کول وي.

Shell - یوازې یو کارن برنامه. هغه تاسو ته د بلنې کرښه ښیې او انتظار کوي چې تاسو په دې کې یو څه ولیکئ. په ډیری مواردو کې، که تاسو هلته د پروګرام نوم ولیکئ، شیل به خپل موقعیت ومومي، د فورک() میتود ته زنګ ووهئ، او بیا یو ډول exec() ته زنګ ووهئ ترڅو نوې پروسې رامینځته کړي او د بشپړیدو لپاره یې انتظار وباسي. انتظار () زنګ ووهئ. کله چې د ماشوم پروسه پای ته ورسیږي، شیل به د انتظار () کال څخه بیرته راستانه شي او بیا پرامپټ چاپ کړي او د راتلونکي کمانډ داخلیدو ته انتظار وکړي.

د فورک() او exec() ویشل شیل ته اجازه ورکوي چې لاندې شیان ترسره کړي، د بیلګې په توګه:
wc فایل> نوی_فایل.

په دې مثال کې، د wc پروګرام محصول یو فایل ته لیږدول کیږي. هغه لاره چې شیل دا ترلاسه کوي خورا ساده دي - د زنګ وهلو دمخه د ماشوم پروسې رامینځته کولو سره اجراییه()، شیل معیاري محصول بندوي او فایل خلاصوي نوې_دوتنهپه دې توګه، د نور روان پروګرام څخه ټول محصول wc د سکرین پرځای به فایل ته واستول شي.

د یونیکس پایپ په ورته ډول پلي کیږي، د توپیر سره چې دوی د پایپ() کال کاروي. په دې حالت کې، د پروسې د محصول جریان به د پایپ کتار سره وصل شي چې په کرنل کې موقعیت لري، کوم چې د بل پروسې ان پټ جریان به وصل شي.

سرچینه: www.habr.com

Add a comment