Operating Systems: Zvidimbu Zvitatu Zviri Nyore. Chikamu 3: Purogiramu Yekuita (shanduro)

Nhanganyaya kune Operating Systems

Mhoro, Habr! Ndinoda kukupa pfungwa dzako nhevedzano yezvinyorwa-shanduro yeimwe bhuku inonakidza mumaonero angu - OSTEP. Ichi chinyorwa chinoongorora zvakadzama basa reunix-senge masisitimu anoshanda, anoti, kushanda nematanho, akasiyana marongero, ndangariro uye zvimwe zvakafanana zvinoumba OS yemazuva ano. Iwe unogona kuona yepakutanga yezvinhu zvese pano pano. Ndapota cherechedza kuti shanduro yakaitwa zvisina basa (zvakasununguka), asi ndinovimba kuti ndakachengeta zvazvinoreva.

Basa re laboratori panyaya iyi rinogona kuwanikwa pano:

Zvimwe zvikamu:

Unogonawo kutarisa chiteshi changu pa teregiramu =)

Alarm! Pane lab yehurukuro iyi! Tarisa github

Purogiramu inonzi Process

Ngatitarisei muenzaniso wekugadzira maitiro muUNIX system. Zvinoitika kuburikidza maviri system mafoni forogo () ΠΈ exec ().

Call fork()

Operating Systems: Zvidimbu Zvitatu Zviri Nyore. Chikamu 3: Purogiramu Yekuita (shanduro)

Funga nezvechirongwa chinoita fork() kufona. Mhedzisiro yekuitwa kwayo ichava inotevera.

Operating Systems: Zvidimbu Zvitatu Zviri Nyore. Chikamu 3: Purogiramu Yekuita (shanduro)

Chokutanga pane zvose, tinopinda chikuru () basa uye kudhinda tambo kuhwindo. Mutsetse une chiziviso chemaitiro icho mune yepakutanga chinonzi PID kana process identifier. Chiziviso ichi chinoshandiswa muUNIX kureva maitiro. Murairo unotevera uchadaidza fork (). Panguva ino, inenge kopi chaiyo yemaitiro inogadzirwa. Kune OS, zvinoita sekunge kune makopi maviri echirongwa chimwe chete chiri kushanda pane system, iyo inozobuda iyo fork () basa. Iyo ichangobva kugadzirwa yemwana maitiro (maererano nemaitiro emubereki akaigadzira) haichazoitwa, kutanga kubva kune main () basa. Izvo zvinofanirwa kuyeukwa kuti muitiro wemwana hausi kopi chaiyo yemaitiro evabereki; kunyanya, ine yayo kero nzvimbo, marejista ayo, chinongedzo chayo kumirairo inoitwa, nezvimwe zvakadaro. Saka, kukosha kwakadzoserwa kune akafona weforogo () basa richave rakasiyana. Kunyanya, maitiro emubereki achagamuchira kukosha kwePID yemaitiro emwana sekudzoka, uye mwana achawana kukosha kwakaenzana ne2. Uchishandisa aya makodhi ekudzoka, unogona kubva waparadzanisa maitiro uye kumanikidza mumwe nomumwe wavo kuita basa rake pachake. . Zvisinei, kuitwa kwechirongwa ichi hakuna kunyatsotsanangurwa. Mushure mekuparadzanisa kuita 0 maitiro, OS inotanga kuvatarisa, pamwe nekuronga basa ravo. Kana ikaurayiwa pane imwechete-core processor, imwe yemaitiro, mune iyi nyaya mubereki, acharamba achishanda, uye ipapo maitiro emwana achagamuchira kutonga. Paunotangazve, mamiriro ezvinhu anogona kunge akasiyana.

Call wait()

Operating Systems: Zvidimbu Zvitatu Zviri Nyore. Chikamu 3: Purogiramu Yekuita (shanduro)

Funga nezvepurogiramu inotevera. Muchirongwa ichi, nekuda kwekuvapo kwekufona kumirira () Maitiro emubereki anogara akamirira kuti mwana apedze. Mune ino kesi, isu tichawana yakanyatso kutsanangurwa mameseji kubuda pachiratidziro

Operating Systems: Zvidimbu Zvitatu Zviri Nyore. Chikamu 3: Purogiramu Yekuita (shanduro)

exec () kufona

Operating Systems: Zvidimbu Zvitatu Zviri Nyore. Chikamu 3: Purogiramu Yekuita (shanduro)

Funga nezvedambudziko racho exec (). Iyi sisitimu yekufona inobatsira kana tichida kuita chirongwa chakasiyana zvachose. Pano tichafona execvp () kumhanyisa wc chirongwa chinova chirongwa chekuverenga mazwi. Chii chinoitika kana exec () ichinzi? Kufona uku kunopfuudzwa zita refaira rinoitwa uye mamwe ma paramita senharo. Mushure meiyo iyo kodhi uye static data kubva kune ino faira faira inotakurwa uye chikamu chayo chine kodhi inonyorwa. Nzvimbo dzendangariro dzakasara, senge stack uye murwi, dzinotangazve. Mushure meizvozvo iyo OS inongoita chirongwa ichi, ichichipfuudza seti yenharo. Saka isu hatina kugadzira hurongwa hutsva, takangoshandura chirongwa chirikuitika kuita chimwe chirongwa chiri kuita. Mushure mekuita iyo exec () kufona mumuzukuru, zvinoita sekunge chirongwa chepakutanga hachina kumhanya zvachose.

Uku kuomarara kwekutanga kwakajairwa kuUnix shell, uye inobvumira iyo shell kuti iite kodhi mushure mekufona forogo (), asi tisati tadanwa exec (). Muenzaniso wekodhi yakadai unenge uchigadzirisa nharaunda yegomba kune zvinodiwa zvechirongwa chiri kutangwa, isati yatanga.

Shell - chirongwa chemushandisi chete. Anokuratidza mutsara wekukoka uye anomirira iwe kuti unyore chimwe chinhu mairi. Kazhinji, kana iwe ukanyora zita rechirongwa ipapo, goko rinowana nzvimbo yaro, fonera fork () nzira, uye wofonera imwe mhando ye exec () kugadzira hurongwa hutsva uye kumirira kuti ipedze uchishandisa a. wait() kufona. Kana maitiro emwana abuda, goko rinodzoka kubva kumirira () kufona uye kudhinda kukurumidza zvakare uye kumirira kuti unotevera upinde.

Iyo forogo () & exec () split inobvumira goko kuita zvinotevera zvinhu, semuenzaniso:
wc faira > new_file.

Mumuenzaniso uyu, kuburitswa kwechirongwa chewc kunotungamirwa kune faira. Nzira iyo goko rinowana nayo izvi iri nyore - nekugadzira maitiro emwana asati afona exec (), goko rinovhara zvakajairika uye rinovhura faira new_file, saka, zvese zvinobuda kubva kune imwezve inomhanya chirongwa wc ichadzoserwa kune faira pane skrini.

Unix pombi dzinoitwa nenzira yakafanana, nemusiyano wekuti vanoshandisa pombi() kufona. Muchiitiko ichi, iyo nzira yekubuda kwerukova ichabatanidzwa kune pombi mutsara iri mu kernel, iyo iyo yekupinza rwizi rweimwe nzira ichabatanidzwa.

Source: www.habr.com

Voeg