Mekhoa ea ho sebetsa: Likotoana tse tharo tse bonolo. Karolo ea 3: Ts'ebetso ea API (phetolelo)

Kenyelletso ea Litsamaiso tsa Ts'ebetso

Hey Habr! Ke kopa ho u hlokomelisa letoto la lihlooho-liphetolelo tsa lingoliloeng tse thahasellisang ka maikutlo a ka - OSTEP. Sengoliloeng sena se tšohla ka botebo mosebetsi oa lits'ebetso tse ts'oanang tsa unix, e leng, ts'ebetso ka lits'ebetso, li-schedule tse fapaneng, memori le likarolo tse ling tse tšoanang tse etsang OS ea sejoale-joale. U ka bona ea mantlha ea lisebelisoa tsohle mona mona. Ka kopo hlokomela hore phetolelo e entsoe ka mokhoa o sa sebetseng (ka bolokolohi), empa ke tšepa hore ke bolokile moelelo o akaretsang.

Mosebetsi oa Lab tabeng ena o ka fumanoa mona:

Likarolo tse ling:

U ka boela ua sheba mocha oa ka ho thelekramo =)

Alamo! Ho na le lab bakeng sa thuto ena! Sheba github

Process API

Ha re shebeng mohlala oa ho theha ts'ebetso ho sistimi ea UNIX. E etsahala ka mehala e 'meli ea sistimi fereko () и phetha ().

Letsetsa fork()

Mekhoa ea ho sebetsa: Likotoana tse tharo tse bonolo. Karolo ea 3: Ts'ebetso ea API (phetolelo)

Nahana ka lenaneo le etsang mohala oa fork(). Phello ea ho phethahatsoa ha eona e tla ba ka tsela e latelang.

Mekhoa ea ho sebetsa: Likotoana tse tharo tse bonolo. Karolo ea 3: Ts'ebetso ea API (phetolelo)

Pele ho tsohle, re kenya ts'ebetso e kholo () ebe re hatisa khoele skrineng. Mohala o na le sekhetho sa tšebetso seo qalong se bitsoang PID kapa sekhetho sa tšebetso. Sekhetho sena se sebelisoa ho UNIX ho bolela ts'ebetso. Taelo e latelang e tla bitsa fereko (). Mothating ona, kopi e batlang e nepahetse ea ts'ebetso e etsoa. Bakeng sa OS, ho bonahala eka ho na le likopi tse 2 tsa lenaneo le le leng le sebetsang tsamaisong, eo le eona e tla tsoa mosebetsing oa fereko (). Ts'ebetso ea ngoana e sa tsoa etsoa (e amanang le ts'ebetso ea motsoali e e entseng) ha e sa tla hlola e etsoa, ​​​​ho qala ho main() mosebetsi. Ho lokela ho hopoloa hore ts'ebetso ea ngoana ha se kopi e nepahetseng ea ts'ebetso ea motsoali; haholo-holo, e na le sebaka sa eona sa aterese, lirekoto tsa eona, sesupo sa eona sa litaelo tse ka phethoang, joalo-joalo. Kahoo, boleng bo khutliselitsoeng ho motho ea letselitseng fork() mosebetsi o tla fapana. Haholo-holo, ts'ebetso ea motsoali e tla fumana boleng ba PID ea ts'ebetso ea ngoana e le puseletso, 'me ngoana o tla fumana boleng bo lekanang le 0. U sebelisa mekhoa ena ea ho khutlisa, joale u ka arola mekhoa le ho qobella e mong le e mong oa bona ho etsa mosebetsi oa hae. . Leha ho le joalo, ho phethahatsoa ha lenaneo lena ha hoa hlalosoa ka thata. Kamora ho arola lits'ebetso tse 2, OS e qala ho li beha leihlo, hammoho le ho rera mosebetsi oa tsona. Haeba e etsoa ho processor e le 'ngoe, e' ngoe ea lits'ebetso, tabeng ena motsoali, e tla tsoela pele ho sebetsa, ebe ts'ebetso ea ngoana e tla fumana taolo. Ha u qala bocha, boemo bo ka 'na ba fapana.

Ho emela mohala()

Mekhoa ea ho sebetsa: Likotoana tse tharo tse bonolo. Karolo ea 3: Ts'ebetso ea API (phetolelo)

Nahana ka lenaneo le latelang. Lenaneong lena, ka lebaka la ho ba teng ha pitso ema() Ts'ebetso ea motsoali e tla lula e emetse hore ts'ebetso ea ngoana e phethe. Tabeng ena, re tla fumana tlhahiso ea mongolo e hlalositsoeng ka thata skrineng

Mekhoa ea ho sebetsa: Likotoana tse tharo tse bonolo. Karolo ea 3: Ts'ebetso ea API (phetolelo)

exec() letsetsa

Mekhoa ea ho sebetsa: Likotoana tse tharo tse bonolo. Karolo ea 3: Ts'ebetso ea API (phetolelo)

Nahana ka phephetso phetha (). Mohala ona oa sistimi o na le thuso ha re batla ho tsamaisa lenaneo le fapaneng ka ho felletseng. Mona re tla bitsa execvp () ho tsamaisa lenaneo la wc eleng lenaneo la ho bala mantsoe. Ho etsahalang ha exec() e bitsoa? Pitso ena e fetisetsoa lebitso la faele e sebetsang le li-parameter tse ling e le likhang. Ka mor'a moo khoutu le data e tsitsitseng e tsoang faeleng ena e sebetsang e kenngoa 'me karolo ea eona e nang le khoutu e ngotsoe holimo. Libaka tse setseng tsa memori, joalo ka stack le qubu, li tla tsosolosoa. Ka mor'a moo OS e mpa e phethahatsa lenaneo, e fetisa likhang tse ngata. Kahoo ha rea ​​theha ts'ebetso e ncha, re fetotse lenaneo le ntseng le sebetsa hona joale ho le etsa lenaneo le leng le sebetsang. Kamora ho etsa mohala oa exec() ho setloholo, ho bonahala eka lenaneo la mantlha le ne le sa sebetse ho hang.

Bothata bona ba ho qala bo tloaelehile ka ho feletseng bakeng sa khetla ea Unix, 'me e lumella khetla hore e phethe khoutu ka mor'a ho letsetsa fereko (), empa pele ho pitso phetha (). Mohlala oa khoutu e joalo e ka ba ho lokisa tikoloho ea likhetla ho latela litlhoko tsa lenaneo le qalisoang, pele le qala.

Shell - lenaneo la mosebedisi feela. O u bontša mohala oa memo mme o emetse hore u ngole ho hong ho ona. Maemong a mangata, haeba u ngola lebitso la lenaneo moo, khetla e tla fumana sebaka sa eona, letsetsa fereko () mokhoa, ebe o bitsa mofuta o mong oa exec () ho theha ts'ebetso e ncha ebe o emela hore e phethe. wait() letsetsa. Ha ts'ebetso ea ngoana e tsoa, ​​khetla e tla khutla ho tsoa ho let() call ebe e hatisa molaetsa hape ebe o emela hore taelo e latelang e kenngoe.

The fork() & exec() split e lumella khetla ho etsa lintho tse latelang, mohlala:
wc file > new_file.

Mohlala ona, tlhahiso ea lenaneo la wc e fetisetsoa faeleng. Tsela eo khetla e fihlelang sena ka eona e bonolo haholo - ka ho theha ts'ebetso ea ngoana pele e letsa phetha (), khetla e koala tlhahiso e tloaelehileng ebe e bula faele new_file, ka hona, tsohle li hlahisoa ho tsoa lenaneong le tsoelang pele le sebetsang wc e tla fetisetsoa faeleng sebakeng sa skrineng.

Unix pipe li kengoa ts'ebetsong ka tsela e ts'oanang, ka phapang ea hore li sebelisa mohala oa pipe(). Tabeng ena, phallo ea phallo ea ts'ebetso e tla hokahanngoa le mokoloko oa liphaephe tse ka har'a kernel, moo phallo e kenang ea ts'ebetso e 'ngoe e tla kopanngoa.

Source: www.habr.com

Eketsa ka tlhaloso