Amasistimu Okusebenza: Izingcezu Ezintathu Ezilula. Ingxenye 3: I-Process API (ukuhumusha)

Isingeniso Sezinhlelo Zokusebenza

Sawubona Habr! Ngingathanda ukukukhumbuza uchungechunge lwezihloko-ukuhumusha kwencwadi eyodwa ethokozisayo ngokombono wami - i-OSTEP. Le nto idingida ngokujulile umsebenzi wezinhlelo zokusebenza ezifana ne-unix, okungukuthi, ukusebenza ngezinqubo, abahleli abahlukahlukene, inkumbulo, nezinye izakhi ezifanayo ezakha i-OS yesimanje. Ungabona okwangempela kwazo zonke izinto lapha lapha. Sicela uqaphele ukuthi ukuhumusha kwenziwe ngokungafanele (ngokukhululekile impela), kodwa ngithemba ukuthi ngiyigcinile incazelo evamile.

Umsebenzi walebhu ngale ndaba ungatholakala lapha:

Ezinye izingxenye:

Futhi ungabheka isiteshi sami ku yocingo =)

I-alamu! Kukhona ilebhu yalesi sifundo! Bheka github

I-Process API

Ake sibheke isibonelo sokwenza inqubo ohlelweni lwe-UNIX. Kwenzeka ngezingcingo ezimbili zesistimu imfoloko() ΠΈ exec().

Shayela imfoloko()

Amasistimu Okusebenza: Izingcezu Ezintathu Ezilula. Ingxenye 3: I-Process API (ukuhumusha)

Cabangela uhlelo olwenza ucingo lwe-fork(). Umphumela wokwenziwa kwayo uzoba kanje.

Amasistimu Okusebenza: Izingcezu Ezintathu Ezilula. Ingxenye 3: I-Process API (ukuhumusha)

Okokuqala, sifaka umsebenzi oyinhloko () bese siphrinta intambo esikrinini. Ulayini uqukethe isihlonzi senqubo esibizwa ngesoqobo PID noma isihlonzi senqubo. Lesi sihlonzi sisetshenziswa ku-UNIX ukuze kubhekiselwe kunqubo. Umyalo olandelayo uzobiza ifork(). Kuleli qophelo, ikhophi ecishe iqonde ngqo yenqubo yenziwa. Ku-OS, kubukeka sengathi kunamakhophi angu-2 ohlelo olufanayo olusebenza ohlelweni, lona oluzophuma emsebenzini we-fork(). Inqubo yengane esanda kwakhiwa (ngokuhlobene nenqubo yomzali eyidalile) ngeke isasetshenziswa, kusukela kumsebenzi oyinhloko(). Kufanele kukhunjulwe ukuthi inqubo yengane ayiyona ikhophi eqondile yenqubo yomzali; ikakhulukazi, inendawo yayo yekheli, amarejista ayo, isikhombisi sayo semiyalo esebenzisekayo, nokunye okunjalo. Ngakho, inani elibuyiselwe kumshayi ucingo lomsebenzi wefork() lizohluka. Ikakhulukazi, inqubo yomzali izothola inani le-PID lenqubo yengane njengembuyiselo, futhi ingane izothola inani elilingana no-0. Usebenzisa lawa makhodi okubuyisela, ungakwazi ke ukuhlukanisa izinqubo futhi uphoqelele ngayinye yazo ukuba yenze umsebenzi wayo. . Nokho, ukwenziwa kwalolu hlelo akuchazwanga ngokuqinile. Ngemva kokuhlukanisa izinqubo ezi-2, i-OS iqala ukubaqapha, futhi ihlele umsebenzi wabo. Uma ifakwe ku-single-core processor, enye yezinqubo, kulokhu umzali, izoqhubeka nokusebenza, bese inqubo yengane izothola ukulawula. Lapho uqala kabusha, isimo singase sihluke.

Call wait()

Amasistimu Okusebenza: Izingcezu Ezintathu Ezilula. Ingxenye 3: I-Process API (ukuhumusha)

Cabangela lolu hlelo olulandelayo. Kulolu hlelo, ngenxa yokuba khona kocingo linda() Inqubo yomzali izohlala ilindele ukuthi inqubo yengane iqede. Kulokhu, sizothola umbhalo ophumayo ochazwe ngokuqinile esikrinini

Amasistimu Okusebenza: Izingcezu Ezintathu Ezilula. Ingxenye 3: I-Process API (ukuhumusha)

exec() ucingo

Amasistimu Okusebenza: Izingcezu Ezintathu Ezilula. Ingxenye 3: I-Process API (ukuhumusha)

Cabangela inselele exec(). Lolu cingo lwesistimu luwusizo uma sifuna ukusebenzisa uhlelo oluhluke ngokuphelele. Lapha sizofona execvp() ukusebenzisa uhlelo lwe-wc okuwuhlelo lokubala amagama. Kwenzekani uma i-exec() ibizwa? Le kholi idluliswa igama lefayela elisebenzisekayo namanye amapharamitha njengama-agumenti. Ngemuva kwalokho ikhodi nedatha emile evela kuleli fayela elisebenzisekayo iyalayishwa futhi ingxenye yayo enekhodi ibhalwe ngaphezulu. Izindawo zenkumbulo ezisele, njengesitaki nenqwaba, ziyaqaliswa kabusha. Ngemuva kwalokho i-OS ivele isebenzise uhlelo, iludlulisele isethi yezimpikiswano. Ngakho-ke asizange sidale inqubo entsha, simane siguqule uhlelo olusebenzayo lwaba olunye uhlelo olusebenzayo. Ngemva kokwenza ucingo lwe-exec() esizukulwaneni, kubonakala sengathi uhlelo lwangempela alusebenzanga nhlobo.

Le nkinga yokuqalisa ijwayelekile ngokuphelele kugobolondo le-Unix, futhi ivumela lelo gobolondo ukuthi lisebenzise ikhodi ngemva kokushaya ucingo imfoloko(), kodwa ngaphambi kocingo exec(). Isibonelo sekhodi enjalo kungaba ukulungisa indawo yegobolondo ezidingweni zohlelo oluqalwayo, ngaphambi kokuluqalisa.

shell - uhlelo lomsebenzisi nje. Ukukhombisa ulayini wesimemo futhi ulinde ukuthi ubhale okuthile kuwo. Ezimweni eziningi, uma ubhala igama lohlelo lapho, igobolondo lizothola indawo yalo, shayela imfoloko() indlela, bese ubiza uhlobo oluthile lwe-exec() ukuze udale inqubo entsha bese ulinda ukuthi iqedele usebenzisa i- wait() shayela. Lapho inqubo yengane iphuma, igobolondo lizobuya ocingweni lokulinda() bese liphrinta ukwaziswa futhi bese lilinda ukuthi kufakwe umyalo olandelayo.

I-fork() & exec() split ivumela igobolondo ukuthi lenze izinto ezilandelayo, isibonelo:
wc ifayela > new_file.

Kulesi sibonelo, okukhiphayo kohlelo lwe-wc kuqondiswe kabusha kufayela. Indlela igobolondo elifinyelela ngayo lokhu ilula kakhulu - ngokwenza inqubo yengane ngaphambi kokushaya ucingo exec(), igobolondo livala okukhiphayo okujwayelekile bese livula ifayela new_file, ngakho, konke okukhiphayo kusukela kuhlelo oluqhubekayo olusebenzayo wc izoqondiswa kabusha kufayela esikhundleni sesikrini.

Ipayipi le-Unix zenziwa ngendlela efanayo, ngomehluko wokuthi zisebenzisa ipayipi() call. Kulokhu, ukusakaza kwenqubo okuphumayo kuzoxhunywa kumugqa wamapayipi otholakala ku-kernel, lapho ukusakaza okokufaka kwenye inqubo kuzoxhunywa khona.

Source: www.habr.com

Engeza amazwana