Sistema eragileak: Hiru pieza errazak. 1. zatia: sarrera (itzulpena)

Sistema Eragileen Sarrera

Aupa Habr! Nire ustez, literatura interesgarri baten artikulu-itzulpen sorta bat ekarri nahi dizuet - OSTEP. Material honek unix antzeko sistema eragileen lana sakonki eztabaidatzen du, hots, sistema eragile moderno bat osatzen duten prozesuekin, hainbat programatzailerekin, memoriarekin eta antzeko beste osagaiekin lan egitea. Material guztien jatorrizkoa hemen ikus dezakezu Hemen. Kontuan izan itzulpena modu profesionalik gabe egin dela (nahiko askatasunez), baina espero dut esanahi orokorra mantendu dudala.

Gai honi buruzko laborategiko lanak hemen aurki daitezke:
- jatorrizkoa: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- jatorrizkoa: github.com/remzi-arpacidusseau/ostep-code
- Nire egokitzapen pertsonala: github.com/bykvaadm/OS/tree/master/ostep

Nire kanala ere ikus dezakezu hemen telegrama =)

Programaren funtzionamendua

Zer gertatzen da programa bat martxan dagoenean? Exekutatzen den programa batek gauza sinple bat egiten du: argibideak exekutatzen ditu. Segundo bakoitzean, milioika eta agian milaka milioi instrukzio berreskuratzen ditu prozesadoreak RAMetik, eta, aldi berean, deskodetu egiten ditu (adibidez, argibide hauek zein motatakoak diren ezagutzen du) eta exekutatzen ditu. Hau izan daiteke bi zenbaki gehitzea, memoria atzitzea, baldintza bat egiaztatzea, funtzio batera salto egitea eta abar. Instrukzio bat exekutatu ondoren, prozesadoreak beste bat exekutatzen jarraitzen du. Eta, beraz, instrukzioz instrukzio, programa amaitu arte exekutatzen dira.
Adibide hau sinplifikatutzat jotzen da, hain zuzen ere, prozesadorea bizkortzeko, hardware modernoak argibideak txandaka exekutatzeko aukera ematen du, emaitza posibleak kalkulatzeko, argibideak aldi berean exekutatzeko eta antzeko trikimailuak.

Von Neumann konputazio eredua

Guk deskribatutako lanaren forma sinplifikatua Von Neumann konputazio ereduaren antzekoa da. Von Neumann sistema informatikoen aitzindarietako bat da, jokoen teoriaren egileetako bat ere bada.. Programa martxan dagoen bitartean, beste hainbat gertaera gertatzen dira, beste prozesu asko eta hirugarrenen logikak funtzionatzen dute, eta horien helburu nagusia sistemaren abiaraztea, funtzionamendua eta mantentzea erraztea da.
Programak erraz exekutatzeko (edo aldi berean hainbat programa exekutatzeko aukera emateaz) arduratzen den software multzo bat dago, programak memoria bera partekatzeko eta gailu ezberdinekin komunikatzeko aukera ematen duena. Halako software-multzoari (software) funtsean sistema eragilea deitzen zaio eta bere zereginen artean sistemak behar bezala eta eraginkortasunez funtzionatzen duen kontrolatzea, baita sistema honen kudeaketa erraztea bermatzea ere.

Sistema eragilea

Sistema eragilea, OS gisa laburtua, elkarren artean erlazionatutako programa multzo bat da, baliabide informatikoak kudeatzeko eta erabiltzaileen interakzioa ordenagailu batekin antolatzeko diseinatua..
OSak bere eraginkortasuna lortzen du lehenik eta behin, teknika garrantzitsuenaren bidez - teknika birtualizazioa. Sistema eragileak baliabide fisiko batekin (prozesadorea, memoria, diskoa, etab.) elkarreraginean jarduten du eta forma orokor, indartsuago eta erabilerrazago batean bihurtzen du. Horregatik, orokorrean ulertzeko, sistema eragilea makina birtual batekin alderatu dezakezu gutxi gorabehera.
Erabiltzaileek sistema eragileari komandoak emateko eta, horrela, makina birtualaren gaitasunak erabiltzeko (adibidez, programa bat exekutatzea, memoria esleitzea, fitxategi bat atzitzea eta abar), sistema eragileak interfaze bat eskaintzen du. API (aplikazioak programatzeko interfazea) eta hari deiak egin ditzakezu (deitu). Sistema eragile tipiko batek ehunka sistema dei egiteko aukera ematen du.
Azkenik, birtualizazioak hainbat programa exekutatzea ahalbidetzen duenez (horrela PUZa partekatuz), eta aldi berean haien argibide eta datuetara sartzeko (horrela memoria partekatuz) eta diskoetara sartzeko (horrela, I/O gailuak partekatuz), sistema eragileari ere deitzen zaio. baliabideen kudeatzailea. Prozesadore, disko eta memoria bakoitza sistemaren baliabide bat da, eta, horrela, sistema eragilearen eginkizunetako bat baliabide horiek kudeatzeko zeregina bilakatzen da, eraginkortasunez, zintzotasunez edo alderantziz eginez, sistema eragile honek duen zereginaren arabera. diseinatuta dago.

CPU birtualizazioa

Kontuan izan honako programa hau:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

Sistema eragileak: Hiru pieza errazak. 1. zatia: sarrera (itzulpena)

Ez du ekintza berezirik egiten, izan ere, funtzio bati deitzea besterik ez du egiten spin(), zeinaren zeregina denbora egiaztatzea eta segundo bat igaro ondoren itzultzea da. Horrela, erabiltzaileak argumentu gisa pasatzen duen katea behin betiko errepikatzen du.
Exekutatu dezagun programa hau eta pasa diezaiogun "A" karakterea argumentu gisa. Emaitza ez da bereziki interesgarria - sistemak aldian-aldian "A" karakterea bistaratzen duen programa bat besterik ez du exekutatzen.
Orain proba dezagun aukera programa beraren instantzia asko exekutatzen ari direnean, baina letra desberdinak ateratzen argiago izateko. Kasu honetan, emaitza zertxobait desberdina izango da. Prozesadore bat izan arren, programa aldi berean exekutatzen da. Nola gertatzen da? Baina bihurtzen da sistema eragileak, ez hardware gaitasunen laguntzarik gabe, ilusio bat sortzen duela. Sistemak prozesadore birtual anitz dituelako ilusioa, prozesadore fisiko bakar bat teorikoki infinitu zenbaki bihurtuz eta, ondorioz, itxuraz programak aldi berean exekutatzeko aukera ematen du. Ilusio horri deitzen zaio CPU birtualizazioa.
Irudi honek galdera asko sortzen ditu, adibidez, hainbat programa aldi berean exekutatu nahi badira, zein abiaraziko da? OSaren "politikak" dira galdera honen erantzuleak. Politikak OSan leku askotan erabiltzen dira eta honelako galderei erantzuten diete, eta OSak ezartzen dituen oinarrizko mekanismoak dira. Hortik dator sistema eragilearen papera baliabideen kudeatzaile gisa.

Memoria birtualizazioa

Ikus dezagun orain memoria. Sistema modernoetako memoria-eredu fisikoa byte-matrize gisa irudikatzen da.. Memoriatik irakurtzeko, zehaztu behar duzu zelula helbideabertara sartzeko. Datuak idazteko edo eguneratzeko, idatzi beharreko datuak eta gelaxkaren helbidea ere zehaztu behar dituzu.
Memoria etengabe sartzen da programaren exekuzioan zehar. Programa batek bere datu-egitura osoa memorian gordetzen du eta hainbat instrukzio exekutatzen ditu bertara. Argibideak, berriz, memorian ere gordetzen dira, beraz, hurrengo instrukziorako eskaera bakoitzerako ere sartzen da.

malloc() deitu

Demagun honako programa hau, memoria-eskualde bat esleitzen duena deia erabiliz malloc () (https://youtu.be/jnlKRnoT1m0):

Sistema eragileak: Hiru pieza errazak. 1. zatia: sarrera (itzulpena)

Programak hainbat gauza egiten ditu. Lehenik eta behin, memoria batzuk esleitzen ditu (7. lerroa), gero esleitutako gelaxkaren helbidea inprimatzen du (9. lerroa), zero idazten du esleitutako memoriaren lehen zirrikituan. Ondoren, programak begizta batean sartzen du eta bertan memorian gordetako balioa handitzen du "p" aldagaiko helbidean. Prozesuaren IDa ere inprimatzen du. Prozesuaren ID bakarra da martxan dagoen prozesu bakoitzeko. Hainbat kopia kaleratu ondoren, emaitza interesgarri batekin topo egingo dugu: lehenengo kasuan, ezer egiten ez baduzu eta hainbat kopia besterik ez baduzu, helbideak desberdinak izango dira. Baina hau ez dago gure teoriaren menpe! Zuzena, banaketa modernoek memoria ausazkotasuna gaituta baitute lehenespenez. Desgaituta badago, espero den emaitza lortuko dugu: aldi berean martxan dauden bi programen memoria helbideak bat egingo dute.

Sistema eragileak: Hiru pieza errazak. 1. zatia: sarrera (itzulpena)

Ondorioz, bi programa independentek beren helbide-espazio pribatuekin funtzionatzen dute, sistema eragileak memoria fisikoan mapatzen dituena.. Beraz, programa baten barruan memoria helbideak erabiltzeak ez die besteei inola ere eragingo, eta programa bakoitzak bere memoria fisikoaren zati propioa duela iruditzen zaio, oso-osorik emana. Errealitatea, ordea, memoria fisikoa sistema eragileak kudeatzen duen baliabide partekatua da.

Koherentzia

Sistema eragileen barruko beste gai garrantzitsuetako bat βˆ’ da koherentzia. Termino hau programa beraren barruan gauza askorekin aldi berean lan egitean gerta daitezkeen sistemaren arazoei buruz hitz egiteko erabiltzen da. Koherentzia arazoak sortzen dira sistema eragilearen barruan ere. Aurreko memoria eta prozesadorearen birtualizazio adibideetan konturatu ginen sistema eragileak gauza asko kudeatzen dituela aldi berean: lehenengo prozesua hasten du, gero bigarrena, eta abar. Ikusten denez, jokabide honek arazo batzuk sor ditzake. Beraz, adibidez, hari anitzeko programa modernoek halako zailtasunak dituzte.

Kontuan izan honako programa hau:

Sistema eragileak: Hiru pieza errazak. 1. zatia: sarrera (itzulpena)

Funtzio nagusiko programak bi hari sortzen ditu deia erabiliz pthread_create(). Adibide honetan, hari bat memoria-espazio berean exekutatzen den funtzio gisa pentsa daiteke, beste funtzio batzuekin batera, funtzio bat baino gehiago aldi berean exekutatzen direla argi eta garbi. Adibide honetan, hari bakoitzak funtzioa abiarazten eta exekutatzen du worker() eta horrek aldagaia handitzen du,.

Exekutatu dezagun programa hau 1000 argumentu batekin. Asmatuko zenuten bezala, emaitzak 2000 izan beharko luke, hari bakoitzak aldagaia 1000 aldiz handitu duelako. Hala ere, dena ez da hain erraza. Saia gaitezen programa errepikapen handi batekin exekutatzen.

Sistema eragileak: Hiru pieza errazak. 1. zatia: sarrera (itzulpena)

Zenbaki bat sartuz, adibidez, 100000, irteera 200000 zenbakia bezala ikustea espero dugu. Hala ere, 100000 zenbakia hainbat aldiz exekutatzen badugu, erantzun zuzena ez ikusteaz gain, erantzun okerrak ere lortuko ditugu. Erantzuna kopurua handitzeko hiru eragiketa behar direla datza: zenbakia memoriatik ateratzea, gehitzea eta, ondoren, zenbakia berriro idaztea. Argibide hauek guztiak atomikoki exekutatzen ez direnez (denak aldi berean), horrelako gauza arraroak gerta daitezke. Arazo honi programazioan deitzen zaio lasterketa-egoera. Momentu ezezagun batean indar ezezagunak zure eragiketen errendimenduan eragina izan dezakeenean.

Iturria: www.habr.com

Gehitu iruzkin berria