Tsarukan Aiki: Guda Sau Uku. Sashe na 3: API Tsari (fassara)

Gabatarwa zuwa Tsarukan Ayyuka

Hai Habr! Ina so in kawo muku jerin labarai-fassarar wallafe-wallafe guda ɗaya mai ban sha'awa a ra'ayina - OSTEP. Wannan abu yayi magana sosai game da aikin tsarin aiki-kamar unix, wato, aiki tare da matakai, masu tsarawa daban-daban, ƙwaƙwalwar ajiya, da sauran abubuwa makamantan waɗanda suka haɗa da OS na zamani. Kuna iya ganin asalin duk kayan anan a nan. Da fatan za a lura cewa fassarar an yi ta ne ba da ƙwararru ba (da yardar rai), amma ina fata na riƙe ma'anar gaba ɗaya.

Ana iya samun aikin Lab akan wannan batu a nan:

Sauran sassa:

Hakanan zaka iya duba tashar ta a sakon waya =)

Ƙararrawa! Akwai lab don wannan lacca! Duba github

API ɗin tsari

Bari mu kalli misali na ƙirƙirar tsari a cikin tsarin UNIX. Yana faruwa ta hanyar kiran tsarin guda biyu cokali mai yatsu () и exec().

Kira cokali mai yatsa ()

Tsarukan Aiki: Guda Sau Uku. Sashe na 3: API Tsari (fassara)

Yi la'akari da shirin da ke yin kira () cokali mai yatsa. Sakamakon aiwatar da shi zai kasance kamar haka.

Tsarukan Aiki: Guda Sau Uku. Sashe na 3: API Tsari (fassara)

Da farko, muna shigar da babban aikin () kuma mu buga kirtani zuwa allon. Layin yana ƙunshe da mai gano tsari wanda a cikin asali ake kira PID ko mai gano tsari. Ana amfani da wannan mai ganowa a cikin UNIX don komawa ga tsari. Umurni na gaba zai kira cokali mai yatsa(). A wannan gaba, an ƙirƙiri kusan ainihin kwafin tsarin. Ga OS, da alama akwai kwafi guda 2 na wannan shirin da ke gudana akan tsarin, wanda hakan zai fita daga aikin cokali mai yatsa (). Sabuwar tsarin yaro da aka ƙirƙira (dangane da tsarin iyaye waɗanda suka ƙirƙira shi) ba za a ƙara aiwatar da shi ba, farawa daga babban aikin (). Ya kamata a tuna cewa tsarin yaro ba ainihin kwafin tsarin iyaye ba ne, musamman ma, yana da nasa adireshin adireshin, rajista, nasa mai nuni ga umarnin aiwatarwa, da makamantansu. Don haka, ƙimar da aka mayar wa mai kiran aikin cokali mai yatsa () zai bambanta. Musamman ma, tsarin iyaye zai karbi ƙimar PID na tsarin yaro a matsayin dawowa, kuma yaron zai sami darajar daidai da 0. Yin amfani da waɗannan lambobin dawowa, za ku iya raba matakai kuma ku tilasta kowannensu ya yi aikinsa. . Duk da haka, ba a bayyana aiwatar da wannan shirin ba. Bayan da aka rarraba zuwa matakai 2, OS ya fara kula da su, da kuma tsara aikin su. Idan an kashe shi a kan na'ura mai mahimmanci guda ɗaya, ɗaya daga cikin matakai, a cikin wannan yanayin iyaye, za su ci gaba da aiki, sa'an nan kuma tsarin yaron zai sami iko. Lokacin sake farawa, yanayin zai iya bambanta.

Jiran kira()

Tsarukan Aiki: Guda Sau Uku. Sashe na 3: API Tsari (fassara)

Yi la'akari da shirin mai zuwa. A cikin wannan shirin, saboda kasancewar kira jira() Tsarin iyaye koyaushe zai jira tsarin yaron ya cika. A wannan yanayin, za mu sami takamaiman fitowar rubutu akan allon

Tsarukan Aiki: Guda Sau Uku. Sashe na 3: API Tsari (fassara)

exec() kira

Tsarukan Aiki: Guda Sau Uku. Sashe na 3: API Tsari (fassara)

Yi la'akari da ƙalubalen exec(). Wannan kiran tsarin yana da amfani lokacin da muke son gudanar da wani shiri na daban. Anan zamu kira execvp() don gudanar da shirin wc wanda shine shirin kirga kalmomi. Me zai faru idan aka kira exec()? Ana wuce wannan kiran sunan fayil ɗin da za a iya aiwatarwa da wasu sigogi azaman mahawara. Bayan haka an ɗora lambar da bayanan tsaye daga wannan fayil ɗin da za a iya aiwatarwa kuma an sake rubuta sashin nasa tare da lambar. Sauran wuraren ƙwaƙwalwar ajiya, kamar tari da tsibi, an sake kunna su. Bayan haka OS ɗin yana aiwatar da shirin kawai, yana ba shi jerin muhawara. Don haka ba mu ƙirƙiro wani sabon tsari ba, kawai mun canza tsarin da ke gudana a halin yanzu zuwa wani shirin mai gudana. Bayan aiwatar da kiran exec() a cikin zuriyar, yana bayyana kamar ainihin shirin bai gudana ba kwata-kwata.

Wannan rikicewar farawa gaba ɗaya al'ada ce ga harsashi na Unix, kuma yana ba da damar wannan harsashi don aiwatar da lamba bayan kira cokali mai yatsu (), amma kafin a kira exec(). Misalin irin wannan lambar zai kasance daidaita yanayin harsashi da bukatun shirin da ake kaddamarwa, kafin kaddamar da shi.

Shell - kawai shirin mai amfani. Ta nuna maka layin gayyata kuma tana jiran ka rubuta wani abu a ciki. A mafi yawan lokuta, idan ka rubuta sunan shirin a can, harsashi zai sami wurinsa, kira hanyar cokali mai yatsa () sannan ka kira wani nau'in exec() don ƙirƙirar sabon tsari kuma jira shi ya kammala ta amfani da jira () call. Lokacin da aikin yaron ya fita, harsashi zai dawo daga jiran () kira kuma sake buga saurin kuma jira don shigar da umarni na gaba.

Rage cokali mai yatsu () & exec() yana ba harsashi damar yin abubuwa masu zuwa, misali:
wc fayil> new_file.

A cikin wannan misali, ana tura fitarwa na shirin wc zuwa fayil. Hanyar da harsashi ya cimma wannan abu ne mai sauƙi - ta hanyar ƙirƙirar tsarin yaro kafin kira exec(), harsashi yana rufe daidaitaccen fitarwa kuma yana buɗe fayil ɗin sabon_fayil, don haka, duk fitarwa daga shirin ci gaba mai gudana wc za a tura shi zuwa fayil maimakon allo.

Unix bututu ana aiwatar da su ta irin wannan hanya, tare da bambancin cewa suna amfani da kiran bututu (). A wannan yanayin, za a haɗa rafin fitarwa na tsarin zuwa layin bututun da ke cikin kernel, wanda za a haɗa rafin shigar da wani tsari.

source: www.habr.com

Add a comment