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
Basa re laboratori panyaya iyi rinogona kuwanikwa pano:
Zvimwe zvikamu:
Unogonawo kutarisa chiteshi changu pa
Alarm! Pane lab yehurukuro iyi! Tarisa
Purogiramu inonzi Process
Ngatitarisei muenzaniso wekugadzira maitiro muUNIX system. Zvinoitika kuburikidza maviri system mafoni forogo () ΠΈ exec ().
Call fork()
Funga nezvechirongwa chinoita fork() kufona. Mhedzisiro yekuitwa kwayo ichava inotevera.
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()
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
exec () kufona
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