Sistema eragileak: Hiru pieza errazak. 2. zatia: abstrakzioa: prozesua (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 modernoa 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:

Beste zati batzuk:

Nire kanala ere ikus dezakezu hemen telegrama =)

Ikus dezagun sistema eragileak erabiltzaileei eskaintzen dien abstrakziorik oinarrizkoena: prozesua. Prozesuaren definizioa nahiko erraza da - hala da exekutatzen ari den programa. Programa bera diskoan kokatzen den gauza bizirik gabekoa da; argibide multzo bat da eta, agian, abiarazteko zain dauden datu estatiko batzuk. OSa da byte horiek hartu eta exekutatzen dituena, programa erabilgarria zerbait bihurtuz.
Gehienetan, erabiltzaileek programa bat baino gehiago exekutatu nahi dute aldi berean, adibidez, arakatzailea, joko, multimedia erreproduzitzailea, testu editorea eta antzekoak exekutatu ditzakezu zure ordenagailu eramangarrian. Izan ere, sistema tipiko batek hamarnaka edo ehunka prozesu exekutatu ditzake aldi berean. Izan ere, sistema erabiltzeko errazago egiten du, ez duzu inoiz kezkatu behar CPUa doakoa den ala ez, programak exekutatzen dituzu.

Horrek arazoa planteatzen du: nola eman CPU askoren ilusioa? Nola sor dezake sistema eragileak CPU kopuru ia infinitu baten ilusioa, nahiz eta CPU fisiko bakarra izan?

OSak ilusio hori sortzen du CPU birtualizazioaren bidez. Prozesu bat hasiz, gero geldituz, beste prozesu bat hasiz, eta abar, OSak PUZ birtual asko daudelako ilusioa mantendu dezake, hain zuzen ere prozesadore fisiko bat edo gehiago egongo direnean. Teknika honi deitzen zaio CPU baliabideak denboraren arabera banatzea. Teknika honi esker, erabiltzaileek nahi adina prozesu aldi berean exekutatu ditzakete. Irtenbide honen kostua errendimendua da; izan ere, PUZa hainbat prozesuk partekatzen badute, prozesu bakoitza motelago prozesatuko da.
PUZaren birtualizazioa ezartzeko, eta batez ere ondo egiteko, sistema eragileak maila baxuko zein goi mailako laguntza behar du. Maila baxuko laguntza deitzen zaio mekanismoak funtzionalitatearen behar den zatia ezartzen duten maila baxuko metodoak edo protokoloak dira. Funtzionalitate horren adibide bat testuinguru-aldaketa da, sistema eragileari programa bat geldiarazteko eta prozesadorean beste programa bat exekutatzeko gaitasuna ematen diona. Denbora zatiketa hau sistema eragile moderno guztietan ezartzen da.
Mekanismo hauen gainean OSan logika batzuk daude, "politika" moduan. Politika sistema eragilearen erabakiak hartzeko algoritmo jakin bat da. Horrelako politikak, adibidez, erabakitzen dute zein programa abiarazi behar den (komandoen zerrenda batetik) lehenik. Beraz, adibidez, arazo hau izeneko politika batek konponduko du programatzailea (planifikazio-politika) eta irtenbide bat aukeratzerakoan, datu hauek gidatuko dira: abiaraztearen historia (azken minutuetan zein programa abiarazi den luzeena), prozesu honek zer karga daraman (zer programa mota abiarazi ziren), errendimenduaren neurketak (sistema ala ez. interakzio interaktiborako edo errendimendurako optimizatuta dago) eta abar.

Abstrakzioa: prozesua

Sistema eragileak exekutatutako programa baten abstrakzioa deitzen diogu prozesua. Lehen esan bezala, prozesu bat exekutatzen ari den programa bat besterik ez da, edozein momentutan. Programa honek bere exekuzioan atzitzen edo eragiten dion sistema-baliabide ezberdinetatik laburpen-informazioa lor dezakegun programa.
Prozesuaren osagaiak ulertzeko, sistemaren egoerak ulertu behar dituzu: programak zer irakurri edo alda dezakeen funtzionamenduan zehar. Une bakoitzean, programaren exekuziorako sistemaren zein elementu diren garrantzitsuak ulertu behar dituzu.
Prozesuak barne hartzen duen sistemaren elementu agerikoetako bat da memoria. Argibideak memorian kokatzen dira. Programak irakurtzen edo idazten dituen datuak ere memorian kokatzen dira. Horrela, prozesu batek zuzendu dezakeen memoria (helbide-espazioa deritzona) prozesuaren parte da.
Sistemaren egoeraren parte ere erregistroak dira. Argibide asko erregistroen balioa aldatzera edo haien balioa irakurtzera zuzenduta daude, eta horrela erregistroak ere prozesuaren funtzionamenduaren zati garrantzitsu bihurtzen dira.
Kontuan izan behar da makinaren egoera ere erregistro berezi batzuetatik eratzen dela. Adibidez, IP - instrukzio erakuslea — programak une honetan exekutatzen ari den instrukziorako erakuslea. Badago ere pila erakuslea eta harekin lotuta fotograma erakuslea, hauek kudeatzeko erabiltzen dira: funtzio parametroak, aldagai lokalak eta itzulera helbideak.
Azkenik, programak sarritan sartzen dira ROM (irakurtzeko soilik den memoria). "I/O" (sarrera/irteera) informazio honek prozesuak irekitako fitxategien zerrenda izan beharko luke.

Prozesuaren APIa

Prozesuak nola funtzionatzen duen ulertzeko, azter ditzagun edozein sistema eragileko interfazeetan sartu behar diren sistema-deien adibideak. API hauek forma batean edo bestean daude eskuragarri edozein sistema eragiletan.

Sortu (sorkuntza): OSak prozesu berriak sortzeko aukera ematen duen metodoren bat sartu behar du. Komando bat terminalean sartzen duzunean edo aplikazio bat abiarazten duzunean ikono batean klik bikoitza eginez, dei bat bidaltzen da OSra prozesu berri bat sortzeko eta ondoren zehaztutako programa abiarazteko.
kentzea: Prozesu bat sortzeko interfaze bat dagoenez, OSak prozesu bat kentzera behartzeko gaitasuna ere eman beharko luke. Programa gehienak berez abiarazi eta amaituko dira exekutatzen diren heinean. Bestela erabiltzaileak hiltzea gustatuko litzaioke eta horrela prozesua geldiarazteko interfaze bat erabilgarria izango litzateke.
Itxaron (itxaroten): Batzuetan baliagarria da prozesu bat amaitu arte itxarotea, beraz, itxaroteko gaitasuna ematen duten interfaze batzuk eskaintzen dira.
Misc Kontrola (hainbat kontrol): Prozesua hiltzeaz eta itxaroteaz gain, beste hainbat kontrol metodo ere badaude. Esate baterako, sistema eragile gehienek prozesu bat izoztu (bere exekuzioa epe jakin batean gelditzeko) eta gero berriro hasteko (exekutatzen jarraitu) gaitasuna ematen dute.
Status (egoera): prozesu baten egoerari buruzko informazioa lortzeko hainbat interfaze daude, hala nola, zenbat denbora daraman martxan edo zein egoeratan dagoen.

Sistema eragileak: Hiru pieza errazak. 2. zatia: abstrakzioa: prozesua (itzulpena)

Prozesua sortzea: Xehetasunak

Gauza interesgarrietako bat programak prozesuetan nola eraldatzen diren da. Batez ere, sistema eragileak programa nola hartzen eta exekutatzen duen. Nola sortzen den zehazki prozesua.
Lehenik eta behin, sistema eragileak programaren kodea eta datu estatikoak memorian kargatu behar ditu (prozesuaren helbide-espazioan). Programak disko edo egoera solidoko unitate batean kokatu ohi dira formatu exekutagarri batean. Horrela, programa eta datu estatikoak memorian kargatzeko prozesuak OSak byte horiek diskotik irakurri eta memorian nonbait kokatzeko gai izatea eskatzen du.

Hasierako sistema eragileetan, karga-prozesua gogotsu egiten zen, hau da, kode osoa memorian kargatu zen programa martxan jarri aurretik. Sistema eragile modernoek hori alfer egiten dute, hau da, kode edo datu zatiak kargatzen dituzte programak exekutatzean eskatzen dituenean soilik.

Kodea eta datu estatikoak OS memorian kargatzen direnean, prozesua exekutatu aurretik egin beharreko gauza batzuk egin behar dira. Memoria kopuru bat esleitu behar da pilarako. Programek pila erabiltzen dute aldagai lokaletarako, funtzio-parametroetarako eta itzulera-helbideetarako. Sistema eragileak memoria hori esleitzen du eta prozesuari ematen dio. Pila argumentu batzuekin ere esleitu daiteke, zehazki main() funtzioaren parametroak betetzen ditu, adibidez argc eta argv array batekin.

Sistema eragileak memoriaren bat ere eslei dezake programaren pilara. Heap-a programek erabiltzen dute dinamikoki esleitutako datuak esplizituki eskatzeko. Programek espazio hori eskatzen dute funtzioari deituz malloc () eta esplizituki garbitzen du funtzioari deituz doan (). Heap behar da datu-egituretarako, hala nola estekatutako orriak, hash-taulak, zuhaitzak eta beste. Hasieran, memoria kopuru txiki bat esleitzen zaio pilara, baina denborarekin, programa exekutatzen den heinean, memoria gehiago eska dezake liburutegiko APIaren malloc() deiaren bidez. Sistema eragileak memoria gehiago esleitzeko prozesuan parte hartzen du dei hauek asetzen laguntzeko.

Sistema eragileak hasierako lanak ere egingo ditu, batez ere I/O-rekin lotutakoak. Adibidez, UNIX sistemetan, prozesu bakoitzak berez 3 fitxategi deskribatzaile ireki ditu, sarrera, irteera eta errore estandaretarako. Helduleku horiei esker, programek terminaleko sarrera irakur dezakete, baita informazioa pantailan bistaratzeko ere.

Horrela, kodea eta datu estatikoak memorian kargatuz, pila sortuz eta hasieratuz eta I/O zereginak egitearekin lotutako beste lan batzuk eginez, OSak prozesua exekutatzeko etapa prestatzen du. Azkenik, azken zeregin bat geratzen da: programa bere sarrera puntutik exekutatu, main() funtzioa izenekoa. Main() funtzioa exekutatuz, sistema eragileak CPUren kontrola transferitzen dio sortu berri den prozesura, eta horrela programa exekutatzen hasten da.

Prozesuaren egoera

Orain prozesu bat zer den eta nola sortzen den ulertzen dugunean, zerrenda ditzagun prozesuen egoerak. Forma sinpleenean, prozesu bat egoera hauetako batean egon daiteke:
carrera. Exekutatzen denean, prozesua prozesadorean exekutatzen da. Horrek esan nahi du argibideak exekutatzen ari direla.
Ready. Prest egoeran, prozesua exekutatzeko prest dago, baina arrazoiren batengatik OSak ez du zehaztutako unean exekutatzen.
Blokeatutako. Blokeatutako egoeran, prozesu batek gertaeraren bat gertatu arte exekutatzeko prest egotea eragozten duten eragiketa batzuk egiten ditu. Adibide arrunt bat prozesu batek IO eragiketa bat hasten duenean blokeatzen da, beste prozesuren batek prozesadorea erabil dezan.

Sistema eragileak: Hiru pieza errazak. 2. zatia: abstrakzioa: prozesua (itzulpena)

Egoera hauek grafiko moduan imajina ditzakezu. Irudian ikus dezakegunez, prozesuaren egoera RUNNING eta READY artean alda daiteke OS sistemaren erabakiz. Prozesu baten egoera PREST izatetik ERABILTZEN izatera aldatzen denean, prozesua programatu dela esan nahi du. Kontrako norabidean - diseinutik kenduta. Prozesu bat BLOKEATZEN den momentuan, adibidez, IO eragiketa bat hasten dudanean, OSak egoera horretan mantenduko du gertaeraren bat gertatu arte, adibidez IOa amaitzean. une honetan PREST egoerara pasatzea eta, beharbada, berehala RUNNING egoerara, OSak hala erabakitzen badu.
Ikus dezagun bi prozesu egoera hauetan zehar nola mugitzen diren erakusten duen adibide bat. Hasteko, pentsa dezagun bi prozesuak exekutatzen ari direla, eta bakoitzak CPUa soilik erabiltzen duela. Kasu honetan, haien egoerak honelakoak izango dira.

Sistema eragileak: Hiru pieza errazak. 2. zatia: abstrakzioa: prozesua (itzulpena)

Hurrengo adibidean, lehen prozesuak, denbora pixka bat exekutatu ondoren, IOa eskatzen du eta BLOKEATUA egoeran sartzen da, beste prozesu bat exekutatzen utziz (1.4 IRUDIA). OS-ak 0 prozesua ez duela CPUa erabiltzen ikusten du eta 1. prozesua abiarazten du. 1. prozesua exekutatzen ari den bitartean, IO amaitu da eta 0 prozesuaren egoera PREST bihurtzen da. Azkenik, 1. prozesua amaitu da, eta amaitutakoan, 0 prozesuak bere lana hasi, exekutatu eta amaitzen du.

Sistema eragileak: Hiru pieza errazak. 2. zatia: abstrakzioa: prozesua (itzulpena)

Datuen egitura

OS bera programa bat da, eta beste edozein programak bezala, hainbat informazio garrantzitsuren jarraipena egiten duten funtsezko datu-egiturak ditu. Prozesu bakoitzaren egoera jarraitzeko, OS batzuk onartzen ditu prozesu-zerrenda PREST egoeran dauden prozesu guztientzat eta informazio gehigarriren bat une honetan exekutatzen ari diren prozesuen jarraipena egiteko. Gainera, sistema eragileak blokeatutako prozesuak kontrolatu behar ditu. IO amaitu ondoren, OSak beharrezko prozesua piztu eta exekutatzeko prest dagoen egoera batean jarri behar du.

Adibidez, OSak prozesadore-erregistroen egoera gorde behar du. Prozesua gelditzen den unean, erregistroen egoera prozesuaren helbide-espazioan gordetzen da, eta funtzionamenduan jarraitzen duen unean, erregistroen balioak leheneratzen dira eta horrela prozesu honen exekuzioan jarraitzen dute.

Prest, blokeatu eta martxan dauden estatuez gain, badira beste egoera batzuk. Batzuetan, sortzeko unean, prozesu bat INIT egoeran egon daiteke. Azkenik, prozesu bat AMAIERAKO egoeran jar daiteke dagoeneko amaituta dagoenean, baina bere informazioa oraindik garbitu gabe dagoenean. UNIX sistemetan egoera honi deitzen zaio zonbi prozesua. Egoera hau erabilgarria da guraso-prozesu batek ume baten itzulera-kodea ezagutu nahi duen kasuetarako, adibidez, normalean 0-k arrakasta bat adierazten du eta 1-ak errore bat adierazten du, baina programatzaileek irteera-kode gehigarriak eman ditzakete arazo desberdinak seinaleztatzeko. Prozesu nagusia amaitzen denean, sistemaren azken deia egiten du, hala nola wait(), haurraren prozesua amaitzen den arte itxaron eta amaitutako prozesuarekin lotutako edozein datu garbitu ditzakeela adieraziko dio OSari.

Sistema eragileak: Hiru pieza errazak. 2. zatia: abstrakzioa: prozesua (itzulpena)

Hitzaldiaren gakoak:

Prozesu — OSan martxan dagoen programa baten abstrakzio nagusia. Une bakoitzean, prozesu bat bere egoeraren arabera deskriba daiteke: memoriaren edukia bere helbide-espazioan, prozesadore-erregistroen edukia, instrukzio-erakuslea eta pila-erakuslea barne, eta IO informazioa, irakurtzen edo idazten ari diren fitxategi irekiak adibidez.
Prozesuaren APIa programek prozesuetara egin ditzaketen deiez osatuta dago. Normalean hauek sortu, ezabatu edo bestelako deiak izaten dira.
● Prozesua hainbat egoeratan dago, exekutatzen, prest, blokeatuta. Hainbat gertaerek, hala nola, programazioa, programazioaren salbuespenak edo itxaronaldiak prozesu baten egoera alda dezakete batetik bestera.
Prozesuen zerrenda sistemako prozesu guztiei buruzko informazioa dauka. Bertan dagoen sarrera bakoitzari prozesuen kontrol-blokea deitzen zaio, errealitatean prozesu zehatz bati buruzko beharrezko informazio guztia biltzen duen egitura bat dena. 

Iturria: www.habr.com

Gehitu iruzkin berria