Njira Zogwirira Ntchito: Zidutswa Zitatu Zosavuta. Gawo 3: Process API (kumasulira)

Chiyambi cha Operating Systems

Pa Habr! Ndikufuna kubweretsa kwa inu mndandanda wa zolemba-zomasulira za buku limodzi losangalatsa m'malingaliro anga - OSTEP. Nkhaniyi ikufotokoza mozama za ntchito zamakina ogwiritsira ntchito ngati unix, mwachitsanzo, kugwira ntchito ndi njira, ma scheduler osiyanasiyana, kukumbukira, ndi zina zofananira zomwe zimapanga OS yamakono. Mutha kuwona choyambirira cha zida zonse apa apa. Chonde dziwani kuti kumasuliraku kudapangidwa mopanda ntchito (mwaulere), koma ndikhulupilira kuti ndidasunga tanthauzo lake.

Ntchito ya labu pankhaniyi ikupezeka apa:

Zigawo zina:

Mutha kuyang'ananso njira yanga pa uthengawo =)

Alamu! Pali labu ya maphunzirowa! Penyani! github

Process API

Tiyeni tiwone chitsanzo chopanga njira mu UNIX system. Zimachitika kudzera pama foni awiri adongosolo mphanda () ΠΈ kuchita ().

Itanani foloko ()

Njira Zogwirira Ntchito: Zidutswa Zitatu Zosavuta. Gawo 3: Process API (kumasulira)

Ganizirani pulogalamu yomwe imapanga foloko () kuyitana. Zotsatira za kuphedwa kwake zidzakhala motere.

Njira Zogwirira Ntchito: Zidutswa Zitatu Zosavuta. Gawo 3: Process API (kumasulira)

Choyamba, timalowetsa ntchito yaikulu () ndikusindikiza chingwecho pazenera. Mzerewu uli ndi chizindikiritso cha ndondomeko chomwe poyamba chimatchedwa PID kapena chizindikiritso cha ndondomeko. Chizindikiritsochi chimagwiritsidwa ntchito mu UNIX kutanthauza njira. Lamulo lotsatira lidzayitana foloko (). Panthawiyi, pafupifupi ndondomeko yeniyeni ya ndondomekoyi imapangidwa. Kwa OS, zikuwoneka ngati pali makope a 2 a pulogalamu yomweyi yomwe ikuyenda padongosolo, yomwe imatulukanso mphanda () ntchito. Njira yopangidwa kumene ya mwana (mogwirizana ndi njira ya makolo yomwe idapanga) sidzachitikanso, kuyambira pa main() ntchito. Tiyenera kukumbukira kuti ndondomeko ya mwana si njira yeniyeni ya makolo; makamaka, ili ndi malo ake adiresi, zolembera zake, cholozera chake ku malangizo omwe angathe kuchitidwa, ndi zina zotero. Chifukwa chake, mtengo wobwezeretsedwa kwa woyimba foloko () ntchito idzakhala yosiyana. Makamaka, ndondomeko ya makolo idzalandira mtengo wa PID wa ndondomeko ya mwana monga kubwezera, ndipo mwanayo adzalandira mtengo wofanana ndi 0. Pogwiritsa ntchito zizindikiro zobwererazi, mukhoza kulekanitsa ndondomeko ndikukakamiza aliyense kuti azichita ntchito yake. . Komabe, kuchitidwa kwa pulogalamuyi sikunafotokozedwe bwino. Pambuyo pogawanika mu njira ziwiri, OS imayamba kuwayang'anira, komanso kukonzekera ntchito yawo. Ngati aphedwa pa purosesa imodzi-pachimake, imodzi mwa njira, mu nkhani iyi kholo, adzapitiriza kugwira ntchito, ndiyeno ndondomeko mwana adzalandira ulamuliro. Mukayambiranso, zinthu zitha kukhala zosiyana.

Kuyimbira foni ()

Njira Zogwirira Ntchito: Zidutswa Zitatu Zosavuta. Gawo 3: Process API (kumasulira)

Taonani pulogalamu yotsatirayi. Mu pulogalamuyi, chifukwa cha kupezeka kwa foni dikirani() Ndondomeko ya makolo nthawi zonse imadikirira kuti mwana amalize. Pankhaniyi, tidzapeza zomveka bwino lemba linanena bungwe pa zenera

Njira Zogwirira Ntchito: Zidutswa Zitatu Zosavuta. Gawo 3: Process API (kumasulira)

exec () kuitana

Njira Zogwirira Ntchito: Zidutswa Zitatu Zosavuta. Gawo 3: Process API (kumasulira)

Taganizirani vutolo kuchita (). Kuyimba kwadongosolo kumeneku kumakhala kothandiza tikafuna kuyendetsa pulogalamu yosiyana kotheratu. Apa tiitana execvp () kuyendetsa pulogalamu ya wc yomwe ndi pulogalamu yowerengera mawu. Kodi chimachitika ndi chiyani pamene exec () imatchedwa? Kuitana uku kumaperekedwa ndi dzina la fayilo yomwe ingagwiritsidwe ntchito ndi magawo ena ngati mikangano. Pambuyo pake code ndi deta yosasunthika kuchokera ku fayilo yothekayi imakwezedwa ndipo gawo lake lomwe lili ndi code limalembedwa. Malo otsala okumbukira, monga stack ndi mulu, amayambiranso. Pambuyo pake, OS imangoyendetsa pulogalamuyi, ndikuyiyika mikangano. Chifukwa chake sitinapange njira yatsopano, tidangosintha pulogalamu yomwe ikuyenda pano kukhala pulogalamu ina. Pambuyo pochita kuyimba () mu mbadwa, zikuwoneka ngati pulogalamu yoyambirira sinayende konse.

Kuvuta koyambitsaku ndikwachilendo kwa chipolopolo cha Unix, ndipo chimalola kuti chipolopolocho chipereke code pambuyo poyimba mphanda (), koma asanaitane kuchita (). Chitsanzo cha kachidindo koterechi chingakhale kusintha chilengedwe cha zipolopolo ku zosowa za pulogalamu yomwe ikuyambitsidwa, isanayambe.

Nkhono - pulogalamu ya ogwiritsa ntchito basi. Amakuwonetsani mzere woyitanira ndikudikirira kuti mulembepo kanthu. Nthawi zambiri, ngati mulemba dzina la pulogalamu pamenepo, chipolopolocho chidzapeza malo ake, imbani foloko () njira, ndiyeno muyitane mtundu wina wa exec () kuti mupange njira yatsopano ndikudikirira kuti ithe. wait () kuyitana. Mwanayo akachoka, chipolopolocho chidzabwerera kuchokera ku wait() kuyitana ndikusindikizanso mwamsanga ndikudikirira kuti lamulo lotsatira lilowe.

Kugawanika kwa foloko () & exec () kumalola chipolopolo kuchita zinthu zotsatirazi, mwachitsanzo:
wc file> new_file.

Mu chitsanzo ichi, zotsatira za pulogalamu ya wc zimatumizidwa ku fayilo. Momwe chipolopolo chimakwaniritsira izi ndizosavuta - popanga njira yamwana musanayitane kuchita (), chipolopolocho chimatseka zotuluka zokhazikika ndikutsegula fayilo new_file, chifukwa chake, zotuluka zonse kuchokera ku pulogalamu yowonjezera wc idzatumizidwa ku fayilo m'malo mwa chinsalu.

Unix pipe Amagwiritsidwa ntchito mofananamo, mosiyana ndi momwe amagwiritsira ntchito chitoliro () kuyitana. Pachifukwa ichi, mtsinje wotuluka mu ndondomekoyi udzalumikizidwa ndi mzere wa chitoliro womwe uli mu kernel, kumene mtsinje wolowera wa ndondomeko ina udzalumikizidwa.

Source: www.habr.com

Kuwonjezera ndemanga