Rafitra fandidiana: Telo mora. Fizarana 1: Fampidirana (dika)

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'ny dingana, fandaharam-potoana isan-karazany, fahatsiarovana 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:
- tany am-boalohany: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- tany am-boalohany: github.com/remzi-arpacidusseau/ostep-code
- ny fampifanarahana ahy manokana: github.com/bykvaadm/OS/tree/master/ostep

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

Fampandehanana fandaharana

Inona no mitranga rehefa mandeha ny programa? Ny programa mihazakazaka dia manao zavatra tsotra iray - manatanteraka torolΓ lana. Isaky ny segondra, toromarika an-tapitrisany ary mety ho an'arivony tapitrisa mihitsy aza no alain'ny processeur avy amin'ny RAM, dia mamadika azy ireo (ohatra, mahafantatra ny karazana an'ireo toromarika ireo) ary manatanteraka azy ireo. Mety ho manampy isa roa izany, miditra amin'ny fitadidiana, manamarina fepetra, mitsambikina amin'ny asa iray, sns. Aorian'ny fanatanterahana ny fampianarana iray, ny processeur dia miroso amin'ny fanatanterahana ny iray hafa. Ary noho izany ny fampianarana aorian'ny fampianarana, dia tanterahina mandra-pahatapitry ny fandaharana.
Ity ohatra ity dia heverina ho tsotra - raha ny marina, mba hanafainganana ny processeur, ny fitaovana maoderina dia ahafahanao manatanteraka toromarika avy hatrany, kajy ny vokatra azo atao, manatanteraka toromarika miaraka, ary fika mitovy.

Von Neumann modely kajy

Ny endriky ny asa tsotsotra nofaritanay dia mitovy amin'ny modelin'ny kajy Von Neumann. Von Neumann dia iray amin'ireo mpisava lalana amin'ny rafitra informatika, izy koa dia iray amin'ireo mpanoratra ny teoria lalao. Raha mbola mandeha ny programa dia misy hetsika maro hafa mitranga, dingana maro hafa sy lojika an'ny antoko fahatelo no miasa, ny tena tanjona dia ny hanatsorana ny fandefasana, ny fandidiana ary ny fikojakojana ny rafitra.
Misy andiana rindrambaiko izay tompon'andraikitra amin'ny fampandehanana ny programa ho mora (na mamela programa maromaro handeha amin'ny fotoana iray ihany), izay ahafahan'ny programa mizara fahatsiarovana mitovy, ary mifandray amin'ny fitaovana samihafa. Ny andiana rindrambaiko (rindrambaiko) toy izany dia antsoina amin'ny ankapobeny ny rafitra miasa ary ny asany dia ahitana ny fanaraha-maso fa ny rafitra miasa tsara sy mahomby, ary koa ny fiantohana ny fanamorana ny fitantanana ity rafitra ity.

rafitra fandidiana

Ny rafitra fiasana, hafohezina amin'ny hoe OS, dia andiana programa mifamatotra natao hitantana ireo loharanon-tserasera sy handaminana ny fifandraisan'ny mpampiasa amin'ny solosaina..
Ny OS dia mahatratra ny fahombiazany amin'ny toerana voalohany, amin'ny alΓ lan'ny teknika manan-danja indrindra - ny teknika virtoaly. Ny OS dia mifandray amin'ny loharano ara-batana (processor, fahatsiarovana, kapila, sns.) ary manova azy ho endrika ankapobeny kokoa, mahery kokoa ary mora ampiasaina ho azy. Noho izany, ho an'ny fahatakarana ankapobeny, azonao atao ny mampitaha ny rafitra miasa amin'ny milina virtoaly.
Mba ahafahan'ny mpampiasa manome baiko amin'ny rafitra miasa ary noho izany dia mampiasa ny fahaizan'ny milina virtoaly (toy ny fampandehanana programa, fizarana fahatsiarovana, fidirana rakitra, sy ny sisa), ny rafitra miasa dia manome interface sasany antsoina hoe. API (interface de programme application) ary azonao atao ny miantso (antsoina). Ny rafitra fiasa mahazatra dia mamela antso an-jatony hatao.
Farany, satria ny virtoaly dia ahafahan'ny programa maro mihazakazaka (noho izany mizara ny CPU), ary miaraka amin'ny fidirana amin'ny torolalany sy ny angon-drakitra (noho izany dia mizara fahatsiarovana), ary miditra amin'ny disks (izany hoe mizara fitaovana I/O). ), dia antsoina koa hoe a mpitantana ny loharanon-karena. Ny processeur, ny kapila ary ny fitadidiana tsirairay dia loharanon'ny rafitra, ary noho izany ny iray amin'ireo andraikitry ny rafitra miasa dia lasa andraikitry ny fitantanana ireo loharano ireo, manao izany amim-pahombiazana, am-pahatsorana, na mifamadika amin'izany, miankina amin'ny asan'ity rafitra miasa ity. dia natao.

virtoaly CPU

Diniho ity programa manaraka ity:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

Rafitra fandidiana: Telo mora. Fizarana 1: Fampidirana (dika)

Tsy manao hetsika manokana izy io, raha ny marina, ny hany ataony dia miantso asa namoly(), izay ny asany dia ny mamakivaky ny fizahana ny fotoana ary miverina rehefa tapitra ny iray segondra. Noho izany, dia mamerina amin'ny fotoana tsy voafetra ny tady izay nandalovan'ny mpampiasa ho adihevitra.
Andeha hojerentsika ity programa ity ary ampidiro ny tarehin-tsoratra "A" ho adihevitra. Tsy dia mahaliana loatra ny vokatra - ny rafitra dia manatanteraka programa iray izay mampiseho tsindraindray ny toetra "A".
Andeha isika izao hanandrana ny safidy rehefa misy tranga maro amin'ny programa iray ihany no mandeha, fa mamoaka litera samihafa mba hampahazava kokoa azy. Amin'ity tranga ity, ny vokatra dia ho hafa kely. Na dia eo aza ny hoe manana processeur iray isika, ny programa dia tanterahina miaraka. Ahoana no mitranga? Saingy hita fa ny rafitra miasa, tsy misy ny fanampian'ny fahaiza-manao fitaovana, dia miteraka illusion. Ny fiheverana fa ny rafitra dia manana processeur virtoaly marobe, mamadika processeur ara-batana tokana ho isa tsy manam-petra ara-teorika ary mamela ireo programa toa mandeha miaraka. Ity illusion ity dia antsoina hoe virtoaly CPU.
Mampametra-panontaniana maro ity sary ity, ohatra, raha programa maromaro no te-hivoaka amin'ny fotoana iray, iza no hatomboka? Ny "politika" an'ny OS dia tompon'andraikitra amin'ity fanontaniana ity. Ampiasaina any amin'ny toerana maro ao amin'ny OS ny politika ary mamaly fanontaniana tahaka izao, ary ireo rafitra fototra ampiharin'ny OS. Noho izany ny andraikitry ny OS amin'ny maha mpitantana loharano.

Virtualization fahatsiarovana

Andeha hojerentsika ny fahatsiarovana. Ny modelin'ny fitadidiana ara-batana amin'ny rafitra maoderina dia aseho amin'ny alΓ lan'ny andian-bytes.. Mba hamakiana avy amin'ny fitadidiana dia mila mamaritra ianao adiresin'ny selahidirana azy. Mba hanoratana na hanavao ny angona dia tsy maintsy mamaritra ny angona sy ny adiresin'ny sela hanoratana azy ihany koa ianao.
Ny fitadidiana dia idirana tsy tapaka mandritra ny fanatanterahana ny programa. Ny programa iray dia mitahiry ny firafitry ny angona manontolo ao anaty fitadidiana ary miditra amin'izany amin'ny alalan'ny fanatanterahana toromarika isan-karazany. Ny toromarika, mandritra izany, dia voatahiry ao amin'ny fitadidiana ihany koa, ka azo alaina ihany koa isaky ny fangatahana ny fampianarana manaraka.

malloc() antso

Diniho ity programa manaraka ity, izay manome faritra fitadidiana mampiasa ny antso malloc () (https://youtu.be/jnlKRnoT1m0):

Rafitra fandidiana: Telo mora. Fizarana 1: Fampidirana (dika)

Ny programa dia manao zavatra maromaro. Voalohany, manome fahatsiarovana sasany (andalana 7), avy eo manonta ny adiresin'ny sela voatokana (andalana 9), manoratra aotra amin'ny slot voalohany amin'ny fahatsiarovana nomena. Manaraka izany, ny programa dia miditra amin'ny loop iray izay mampitombo ny sanda voatahiry ao amin'ny fitadidiana amin'ny adiresy ao amin'ny fari-pitsipika "p". Izy io koa dia manonta ny ID ny fizotrany. Ny ID dingana dia miavaka ho an'ny dingana mandeha tsirairay. Rehefa namoaka kopia maromaro isika dia hahita vokatra mahaliana: Amin'ny tranga voalohany, raha tsy manao na inona na inona ianao ary mandefa kopia maromaro, dia ho hafa ny adiresy. Saingy tsy tafiditra ao anatin'ny teoriantsika izany! Marina, satria ny fizarana maoderina dia manana famandrihana fahatsiarovana azo atao amin'ny alΓ lan'ny default. Raha toa ka kilemaina dia mahazo ny vokatra andrasana isika - ny adiresin'ny fitadidiana ny programa roa miara-miasa dia hifanaraka.

Rafitra fandidiana: Telo mora. Fizarana 1: Fampidirana (dika)

Vokatr'izany dia hita fa ny programa mahaleo tena roa dia miasa miaraka amin'ny toerana misy ny adiresiny manokana, izay voasariky ny rafitra miasa amin'ny fitadidiana ara-batana.. Noho izany, ny fampiasana adiresy fitadidiana ao anatin'ny programa iray dia tsy hisy fiantraikany amin'ny hafa amin'ny fomba rehetra, ary toa ny programa tsirairay dia manana ny fahatsiarovana ara-batana azy manokana, nomena azy tanteraka. Ny zava-misy anefa dia ny fitadidiana ara-batana dia loharano iombonana tantanin'ny rafitra miasa.

tapaka

Iray amin'ireo lohahevitra manan-danja ao anatin'ny rafitra fandidiana ny βˆ’ tapaka. Ity teny ity dia ampiasaina rehefa miresaka olana amin'ny rafitra izay mety hitranga rehefa miasa amin'ny zavatra maro miaraka amin'ny programa iray ihany. Mipoitra ny olana tsy miovaova na dia ao anatin'ny rafitra fiasana aza. Ao amin'ny fahatsiarovana teo aloha sy ny processeur virtoaly ohatra, dia nahatsapa fa ny OS mitantana zavatra maro amin'ny fotoana iray ihany - dia manomboka ny dingana voalohany, avy eo ny faharoa, sy ny sisa. Araka ny hita, io fihetsika io dia mety hiteraka olana sasany. Noho izany, ohatra, ny programa maoderina misy kofehy maromaro dia miatrika olana toy izany.

Diniho ity programa manaraka ity:

Rafitra fandidiana: Telo mora. Fizarana 1: Fampidirana (dika)

Ny fandaharana ao amin'ny asa lehibe dia mamorona kofehy roa mampiasa ny antso pthread_create(). Amin'ity ohatra ity, ny kofehy iray dia azo raisina ho toy ny fiasa mandeha amin'ny habaka fitadidiana mitovy miaraka amin'ny fiasa hafa, miaraka amin'ny fiasa mihoatra ny iray mandeha amin'ny fotoana mitovy. Amin'ity ohatra ity, ny kofehy tsirairay dia manomboka sy manatanteraka ny asa worker() izay mampitombo fotsiny ny fari-piainana,.

Andeha hataontsika ity programa ity miaraka amin'ny tohan-kevitra 1000. Araka ny efa noeritreretinao, ny valiny dia tokony ho 2000 satria ny kofehy tsirairay dia nampitombo in-1000 ny variable. Na izany aza, tsy dia tsotra ny zava-drehetra. Andeha isika hanandrana ny fandaharana miaraka amin'ny filaharan'ny famerimberenana bebe kokoa.

Rafitra fandidiana: Telo mora. Fizarana 1: Fampidirana (dika)

Amin'ny fampidirana isa, ohatra, 100000, dia manantena ny hahita ny vokatra ho toy ny isa 200000 isika. Na izany aza, raha mihazakazaka imbetsaka ny isa 100000 isika, dia tsy hahita ny valiny marina fotsiny, fa hahazo valiny diso hafa koa. Ny valiny dia miankina amin'ny zava-misy fa ny fampitomboana ny isa dia mila fandidiana telo - manala ny isa avy amin'ny fitadidiana, mampitombo, ary avy eo manoratra ny isa indray. Koa satria ireo toromarika rehetra ireo dia tsy tanterahina amin'ny fomba atomika (miaraka amin'ny fotoana iray ihany), mety hitranga ny zavatra hafahafa tahaka izao. Ity olana ity dia antsoina hoe programa toetry ny hazakazaka. Rehefa misy hery tsy fantatra amin'ny fotoana tsy fantatra dia mety hisy fiantraikany amin'ny fanatanterahana ny asanao rehetra.

Source: www.habr.com

Add a comment