Rafitra fiasana: Telo mora. Fizarana 2: Famintinana: Dikan-teny

Fampidirana ny Rafitra fiasana

Hey Habr! Te-hitondra ny sainao andian-dahatsoratra aho - fandikana literatiora iray mahaliana araka ny hevitro - OSTEP. Ity fitaovana ity dia miresaka lalina momba ny asan'ny rafitra miasa toy ny unix, izany hoe, miasa miaraka amin'ireo dingana, fandaharam-potoana isan-karazany, fitadidiana ary singa mitovy amin'izany izay mandrafitra OS maoderina. Hitanao eto ny tany am-boalohany amin'ny fitaovana rehetra eto. Azafady, mariho fa ny fandikan-teny dia natao tamin'ny fomba tsy matihanina (tena malalaka), saingy manantena aho fa nitazona ny dikany ankapobeny.

Ny asa laboratoara momba ity lohahevitra ity dia azo jerena eto:

Fizarana hafa:

Azonao atao ihany koa ny mijery ny fantsona ao amin'ny telegrama =)

Andeha hojerentsika ny abstraction fototra indrindra omen'ny OS ho an'ny mpampiasa: ny dingana. Ny famaritana ny dingana dia tena tsotra - izany fandaharana mihazakazaka. Ny programa mihitsy dia zavatra tsy misy aina hita ao amin'ny kapila - toromarika sy mety misy angon-drakitra static miandry havoaka. Ny OS no maka ireo bytes ireo ary mampandeha azy ireo, manova ny programa ho zavatra mahasoa.
Matetika indrindra, ny mpampiasa dia te-hampiasa programa mihoatra ny iray miaraka, ohatra, azonao atao ny mampandeha navigateur, lalao, mpilalao media, mpamoaka lahatsoratra, sy ny toy izany amin'ny solosainao. Raha ny marina, ny rafitra mahazatra dia afaka mihazakazaka dingana am-polony na an-jatony miaraka. Ity zava-misy ity dia manamora ny fampiasana ny rafitra, tsy mila manahy mihitsy ianao raha maimaim-poana ny CPU, mandeha programa fotsiny ianao.

Mampiakatra ny olana izany: ahoana no hanomezana ny illusion amin'ny CPU maro? Ahoana no ahafahan'ny OS mamorona ny fisainan'ny CPU saika tsy manam-petra, na dia manana CPU ara-batana iray ihany aza ianao?

Ny OS dia mamorona ity illusion ity amin'ny alΓ lan'ny virtoaly CPU. Amin'ny fanombohana dingana iray, avy eo atsahatra izany, manomboka dingana hafa, sy ny sisa, ny OS dia afaka mitazona ny fiheverana fa misy CPU virtoaly maro, raha ny marina dia hisy processeur ara-batana iray na maromaro. Ity teknika ity dia antsoina hoe fizarana ny loharanon'ny CPU amin'ny fotoana. Ity teknika ity dia ahafahan'ny mpampiasa mampandeha dingana maro miaraka araka izay tiany. Ny vidin'ity vahaolana ity dia fampisehoana - satria raha zaraina amin'ny dingana maromaro ny CPU, dia ho mora kokoa ny dingana tsirairay.
Mba hampiharana ny virtoaly CPU, ary indrindra ny hanaovana izany tsara, mila fanohanana ambany sy avo lenta ny OS. Ny fanohanana ambany dia antsoina rafitra dia fomba na protocole ambany izay mampihatra ny ampahany ilaina amin'ny fampiasa. Ohatra iray amin'ny fiasa toy izany dia ny fiovan'ny contexte, izay manome ny OS ny fahafahana manakana ny programa iray ary mampandeha programa hafa amin'ny processeur. Ity fizarana fotoana ity dia ampiharina amin'ny rafitra fiasa maoderina rehetra.
Eo ambonin'ireo mekanika ireo dia misy lojika napetraka ao amin'ny OS, amin'ny endrika "politika". politika dia algorithm fandraisana fanapahan-kevitra ho an'ny rafitra miasa. Ny politika toy izany, ohatra, dia manapa-kevitra hoe inona no programa tokony hatomboka (avy amin'ny lisitry ny baiko) aloha. Noho izany, ohatra, dia ho voavaha amin'ny alΓ lan'ny politika iray antsoina hoe ity olana ity scheduler (politikan'ny fandaharam-potoana) ary rehefa misafidy vahaolana, dia ho tarihin'ny angon-drakitra toy ny: tantaran'ny fanombohana (izay programa natomboka ela indrindra tao anatin'ny minitra farany), inona no enta-mavesatra entin'ity dingana ity (inona no karazana programa natomboka), metrika fampisehoana (na ny rafitra dia optimized ho an'ny interactive interactif na ho an'ny throughput) sy ny sisa.

Abstraction: dingana

Ny abstraction amin'ny programa mihazakazaka tanterahan'ny rafitra miasa no antsoinay dingana. Araka ny voalaza teo aloha, ny dingana dia programa mandeha fotsiny, amin'ny fotoana rehetra. Fandaharana ahafahantsika mahazo fampahalalana famintinana avy amin'ireo loharanon-drafitra isan-karazany idiran'ity programa ity na misy fiantraikany mandritra ny fanatanterahana azy.
Mba hahatakarana ny singa ao amin'ny dingana dia mila mahatakatra ny toetry ny rafitra ianao: inona no azon'ny programa vakiana na ovaina mandritra ny asany. Amin'ny fotoana rehetra dia mila mahatakatra hoe iza amin'ireo singa ao amin'ny rafitra no zava-dehibe amin'ny fanatanterahana ny programa.
Ny iray amin'ireo singa mazava ao amin'ny rafitra milaza fa ny dingana dia ahitana ΠΏΠ°ΠΌΡΡ‚ΡŒ. Ny toromarika dia hita ao amin'ny fitadidiana. Ny angon-drakitra vakian'ny programa na soratana dia hita ao amin'ny fitadidiana ihany koa. Noho izany, ny fahatsiarovana izay azon'ny dingana iray atao (antsoina hoe habaka adiresy) dia ampahany amin'ny dingana.
Anisan'ny fanjakana rafitra ihany koa ny rejisitra. Toromarika maro no mikendry ny hanova ny sandan'ny rejisitra na ny famakiana ny sandany, ary noho izany ny rejisitra dia lasa ampahany manan-danja amin'ny fampandehanana ny dingana.
Tsara homarihina fa ny fanjakana milina dia miforona avy amin'ny rejistra manokana sasany. Ohatra, IP - tondro fampianarana - tondro mankany amin'ny toromarika izay ataon'ny programa amin'izao fotoana izao. Misy koa stack pointer ary mifandray amin’izany fanondro frame, izay ampiasaina amin'ny fitantanana: masontsivana fiasa, fari-piainana eo an-toerana ary adiresy miverina.
Farany, matetika ny programa dia miditra amin'ny ROM (fahatsiarovana vakiana fotsiny). Ity fampahalalana "I/O" (input/output) ity dia tokony ahitana lisitry ny rakitra misokatra amin'izao fotoana izao.

Process API

Mba hanatsarana ny fahatakarantsika ny fomba fiasan'ilay dingana, andeha isika handinika ohatra momba ny antson'ny rafitra izay tokony ho tafiditra ao anatin'ny seha-pifandraisana misy rafitra miasa. Ireo API ireo dia misy amin'ny endrika iray na hafa amin'ny OS rehetra.

● mamorona (famoronana): Ny OS dia tsy maintsy misy fomba ahafahanao mamorona dingana vaovao. Rehefa miditra baiko ao amin'ny terminal ianao na manomboka fampiharana amin'ny fanindriana indroa eo amin'ny kisary, dia misy antso alefa any amin'ny OS mba hamoronana dingana vaovao ary manomboka ny programa voatondro.
● fanesorana: Satria misy interface tsara amin'ny famoronana dingana iray, ny OS dia tokony hanome fahafahana hanery ny fanesorana ny dingana iray ihany koa. Ny ankamaroan'ny programa dia manomboka sy mifarana samirery rehefa mandeha izy ireo. Raha tsy izany dia te ho afaka hamono azy ireo ny mpampiasa ary noho izany dia ilaina ny interface iray hampiato ny dingana.
● miandrasa (miandry): Mahasoa indraindray ny miandry dingana iray ho vita, ka misy interface tsara omena manome fahafahana miandry.
● Misc Control (araha-maso isan-karazany): Ankoatra ny famonoana sy ny fiandrasana ny dingana dia misy ihany koa ny fomba fanaraha-maso isan-karazany. Ohatra, ny ankamaroan'ny rafitra miasa dia manome fahafahana hanamaivana ny dingana iray (atsaharo ny famonoana azy mandritra ny fe-potoana iray) ary avy eo dia manohy izany (tohizo ny famonoana)
● Status (fanjakana): Misy fifandraisana isan-karazany hahazoana fampahalalana momba ny satan'ny dingana iray, toy ny hafiriana no nandehanany na ny fanjakana misy azy amin'izao fotoana izao.

Rafitra fiasana: Telo mora. Fizarana 2: Famintinana: Dikan-teny

Famoronana dingana: Details

Iray amin'ireo zavatra mahaliana ny hoe ahoana marina ny fiovan'ny programa ho dingana. Indrindra fa ny fomba fakana sy fampandehanan'ny OS ny programa. Ahoana marina no namoronana ny dingana.
Voalohany indrindra, ny OS dia tsy maintsy mametraka ny kaody programa sy ny angon-drakitra static ao anaty fitadidiana (ao amin'ny habaka adiresy dingana). Ny programa dia matetika hita ao anaty kapila na solid-state drive amin'ny endrika azo tanterahina. Noho izany, ny dingan'ny famenoana ny programa sy ny angona static ao anaty fitadidiana dia mitaky ny OS afaka mamaky ireo bytes avy amin'ny kapila ary mametraka azy ireo any amin'ny toerana fitadidiana.

Tany am-piandohan'ny rafitra fiasana dia natao tamim-paharisihana ny fizotry ny fampidinana, izay midika fa nampidirina tao amin'ny fitadidiana ny kaody manontolo alohan'ny nanombohana ny programa. Ny rafitra miasa maoderina dia manao izany amin'ny fomba kamo, izany hoe, mametaka sombin-kaody na data raha tsy ilain'ny programa mandritra ny fanatanterahana azy.

Raha vantany vao tafiditra ao amin'ny fitadidiana OS ny kaody sy ny angona static, dia misy zavatra vitsivitsy tokony hatao alohan'ny handehanan'ny dingana. Tsy maintsy atokana ho an'ny stack ny habetsaky ny fitadidiana. Ny programa dia mampiasa ny stack ho an'ny fari-pahalalana eo an-toerana, masontsivana fiasa ary adiresy miverina. Ny OS dia manome an'io fahatsiarovana io ary manome izany amin'ny dingana. Ny stack dia azo omena miaraka amin'ny tohan-kevitra sasany, indrindra fa mameno ny mari-pamantarana ny asa lehibe (), ohatra amin'ny argc sy argv.

Mety hanokana fahatsiarovana sasany ho an'ny antontam-programa ihany koa ny rafitra fandidiana. Ny heap dia ampiasain'ny programa hangataka mazava ny angon-drakitra voatokana. Ny programa dia mangataka ity habaka ity amin'ny fiantsoana ny asa malloc () ary manadio azy mazava amin'ny fiantsoana ny asa maimaim-poana (). Ny antontam dia ilaina amin'ny rafitra data toy ny takelaka mifamatotra, latabatra hash, hazo sy ny hafa. Amin'ny voalohany, kely ny fahatsiarovana atokana ho an'ny heap, fa rehefa mandeha ny fotoana, rehefa mandeha ny programa, ny heap dia afaka mangataka fahatsiarovana bebe kokoa amin'ny alΓ lan'ny tranomboky API miantso malloc(). Ny rafitra miasa dia mandray anjara amin'ny dingan'ny fizarana fahatsiarovana bebe kokoa hanampy amin'ny fanomezana fahafaham-po ireo antso ireo.

Hanatanteraka asa fanombohana ihany koa ny rafitra fandidiana, indrindra ireo mifandraika amin'ny I/O. Ohatra, amin'ny rafitra UNIX, ny dingana tsirairay amin'ny alΓ lan'ny default dia manana mpamoritra rakitra misokatra 3, ho an'ny fampidirana mahazatra, famoahana ary hadisoana. Ireo tΓ nana ireo dia ahafahan'ny programa mamaky ny fidirana avy amin'ny terminal ary koa mampiseho fampahalalana eo amin'ny efijery.

Noho izany, amin'ny alΓ lan'ny fametahana kaody sy angona static ao anaty fitadidiana, mamorona sy manomboka ny stack, ary manao asa hafa mifandraika amin'ny fanatanterahana asa I/O, ny OS dia manomana ny dingana ho amin'ny fanatanterahana ny dingana. Farany, misy asa iray farany tavela: ny fampandehanana ny programa amin'ny alΓ lan'ny fidirana ao aminy, antsoina hoe ny asa lehibe (). Amin'ny fanatanterahana ny asa lehibe (), ny OS dia mamindra ny fanaraha-maso CPU amin'ny dingana vao noforonina, ka manomboka manatanteraka ny programa.

Toetran'ny dingana

Ankehitriny rehefa manana fahatakarana kely momba ny atao hoe dingana iray sy ny fomba namoronana azy isika, dia andao hotanisaintsika ny fizotrany izay mety hisy azy. Amin'ny endriny tsotra indrindra, ny dingana iray dia mety amin'ny iray amin'ireto fanjakana ireto:
● Running. Rehefa mihazakazaka dia mandeha amin'ny processeur ny dingana. Midika izany fa ny toromarika dia tanterahina.
● vonona. Ao amin'ny fanjakana vonona, ny dingana dia vonona ny hihazakazaka, fa noho ny antony sasany ny OS tsy manatanteraka izany amin'ny fotoana voafaritra.
● voasakana. Ao amin'ny fanjakana voasakana, ny dingana iray dia manatanteraka hetsika sasany izay manakana azy tsy ho vonona hanatanteraka mandra-pahatongan'ny hetsika sasany. Ny ohatra iray mahazatra dia rehefa manomboka asa IO ny dingana iray, dia voasakana izany mba ahafahan'ny dingana hafa mampiasa ny processeur.

Rafitra fiasana: Telo mora. Fizarana 2: Famintinana: Dikan-teny

Azonao alaina sary an-tsaina ireo fanjakana ireo amin'ny endrika grafika. Araka ny hitantsika eo amin'ny sary, ny toetry ny dingana dia afaka miova eo anelanelan'ny RUNNING sy READY amin'ny fahamendrehan'ny OS. Rehefa miova ny toetry ny dingana iray avy amin'ny READY ho RUNNING, dia midika izany fa efa voalahatra ny dingana. Amin'ny lafiny mifanohitra - nesorina tamin'ny layout. Amin'izao fotoana izao rehefa lasa BLOCKED ny dingana iray, ohatra, dia manomboka hetsika IO aho, ny OS dia hitazona izany amin'io fanjakana io mandra-pahatongan'ny hetsika sasany, ohatra ny fahavitan'ny IO. amin'izao fotoana izao ny fifindrana mankany amin'ny fanjakana READY ary mety avy hatrany mankany amin'ny fanjakana RUNNING raha toa ka manapa-kevitra izany ny OS.
Andeha hojerentsika ny ohatra iray amin'ny fandehan'ny dingana roa amin'ireo fanjakana ireo. Hanombohana, alao sary an-tsaina fa samy mandeha ny dingana roa, ary ny CPU ihany no ampiasain'ny tsirairay. Amin'ity tranga ity dia ho toy izao ny fanjakan'izy ireo.

Rafitra fiasana: Telo mora. Fizarana 2: Famintinana: Dikan-teny

Amin'ity ohatra manaraka ity, ny dingana voalohany, rehefa afaka kelikely, dia mangataka IO ary miditra amin'ny fanjakana BLOCKED, mamela ny dingana hafa handeha (sary 1.4). Ny OS dia mahita fa ny process 0 dia tsy mampiasa ny CPU ary manomboka ny dingana 1. Raha mandeha ny dingana 1, dia vita ny IO ary ny satan'ny process 0 dia miova ho READY. Farany, vita ny dingana 1, ary rehefa vita ny dingana 0 dia manomboka, manatanteraka ary mamarana ny asany.

Rafitra fiasana: Telo mora. Fizarana 2: Famintinana: Dikan-teny

Rafitra angona

Ny OS mihitsy dia programa, ary sahala amin'ny programa hafa rehetra, manana rafitra angon-drakitra manan-danja izay manara-maso ireo fampahalalana mifandraika amin'izany. Mba hanaraha-maso ny toetry ny dingana tsirairay, ny OS dia hanohana ny sasany lisitry ny dingana ho an'ny dingana rehetra ao amin'ny fanjakana READY sy ny fampahalalana fanampiny sasany hanarahana ny dingana izay mandeha amin'izao fotoana izao. Ary koa, ny OS dia tokony hanara-maso ireo dingana voasakana. Rehefa vita ny IO, ny OS dia tsy maintsy mamoha ny dingana ilaina ary mametraka azy amin'ny fanjakana vonona ny hihazakazaka.

Ohatra, ny OS dia tsy maintsy mitahiry ny toetry ny rejistra processeur. Amin'izao fotoana izao dia mijanona ny dingana, ny toetry ny rejisitra dia voatahiry ao amin'ny habaka adiresin'ny dingana, ary amin'izao fotoana izao dia mitohy ny asany, dia averina amin'ny laoniny ny soatoavin'ny rejisitra ary manohy ny fanatanterahana ity dingana ity.

Ankoatra ny fanjakana vonona, voasakana, mihazakazaka, misy fanjakana hafa. Indraindray, amin'ny fotoana namoronana, dia mety ho ao amin'ny fanjakana INIT ny dingana iray. Farany, azo apetraka ao amin'ny fanjakana FINAL ny dingana iray rehefa vita izany, saingy tsy mbola voavaha ny mombamomba azy. Amin'ny rafitra UNIX dia antsoina io fanjakana io dingana zombie. Ity fanjakana ity dia ilaina amin'ny tranga izay tian'ny ray aman-dreny hahafantatra ny kaody fiverenan'ny zaza iray, ohatra, matetika ny 0 dia manondro fahombiazana ary 1 ny fahadisoana, fa ny mpandrindra dia afaka mamoaka fehezan-dalΓ na fanampiny ho an'ny olana samihafa. Rehefa tapitra ny fizotry ny ray aman-dreny, dia manao antso an-tariby farany izy, toy ny fiandrasana (), mba hiandry ny fizotry ny zaza hifarana ary hanambara amin'ny OS fa afaka manadio izay angon-drakitra mifandraika amin'ny dingana tapaka.

Rafitra fiasana: Telo mora. Fizarana 2: Famintinana: Dikan-teny

Hevi-dehibe amin'ny lahateny:

● dingana - ny tena abstraction ny fandaharana mihazakazaka ao amin'ny OS. Amin'ny fotoana rehetra, ny dingana iray dia azo faritana amin'ny toe-javatra misy azy: ny votoatin'ny fitadidiana ao amin'ny habaka adiresiny, ny votoatin'ny rejistra processeur, ao anatin'izany ny tondro torolalana sy ny stack pointer, ary ny fampahalalana IO, toy ny rakitra misokatra vakiana na nosoratana.
● Process API dia ahitana antso azon'ny programa atao amin'ny fizotrany. Amin'ny ankapobeny dia mamorona, mamafa, na antso hafa.
● Ny dingana dia ao amin'ny iray amin'ireo fanjakana maro, anisan'izany ny mihazakazaka, vonona, voasakana. Ny hetsika isan-karazany toy ny fandaharam-potoana, maningana amin'ny fandaharam-potoana, na ny fiandrasana dia afaka manova ny toetry ny dingana iray mankany amin'ny iray hafa.
● Lisitry ny dingana misy fampahalalana momba ny dingana rehetra ao amin'ny rafitra. Ny fidirana tsirairay ao aminy dia antsoina hoe sakana fanaraha-maso ny dingana, izay raha ny marina dia rafitra misy ny fampahalalana ilaina rehetra momba ny dingana iray manokana. 

Source: www.habr.com

Add a comment