Ievads operÄtÄjsistÄmÄs
Äau Habr! Es vÄlos vÄrst jÅ«su uzmanÄ«bu uz vienas, manuprÄt, interesantas literatÅ«ras - OSTEP - rakstu sÄriju-tulkojumiem. Å ajÄ materiÄlÄ diezgan dziļi aplÅ«kots unix lÄ«dzÄ«gu operÄtÄjsistÄmu darbs, proti, darbs ar procesiem, dažÄdiem plÄnotÄjiem, atmiÅu un citiem lÄ«dzÄ«giem komponentiem, kas veido modernu OS. Visu materiÄlu oriÄ£inÄlus varat apskatÄ«t Å”eit
Laboratorijas darbus par Å”o tÄmu var atrast Å”eit:
- oriÄ£inÄls:
- oriÄ£inÄls:
- mana personÄ«gÄ adaptÄcija:
Varat arÄ« apskatÄ«t manu kanÄlu vietnÄ
Programmas darbība
Kas notiek, kad programma darbojas? DarbojoÅ”a programma veic vienu vienkÄrÅ”u lietu - tÄ izpilda instrukcijas. Katru sekundi procesors no operatÄ«vÄs atmiÅas izgÅ«st miljoniem un pat, iespÄjams, miljardus instrukciju, savukÄrt tÄs atkodÄ (piemÄram, atpazÄ«st, kÄdam tipam Ŕīs instrukcijas pieder) un izpilda. Tas varÄtu bÅ«t divu skaitļu pievienoÅ”ana, piekļūŔana atmiÅai, stÄvokļa pÄrbaude, pÄreja uz funkciju un tÄ tÄlÄk. PÄc vienas instrukcijas izpildes procesors pÄriet uz citas instrukcijas izpildi. Un tÄ instrukcija pÄc instrukcijas tiek izpildÄ«ta lÄ«dz programmas beigÄm.
Å is piemÄrs, protams, tiek uzskatÄ«ts par vienkÄrÅ”otu ā patiesÄ«bÄ, lai paÄtrinÄtu procesoru, modernÄ aparatÅ«ra ļauj izpildÄ«t instrukcijas Ärpus kÄrtas, aprÄÄ·inÄt iespÄjamos rezultÄtus, izpildÄ«t instrukcijas vienlaicÄ«gi un tamlÄ«dzÄ«gus trikus.
Fon Neimana aprÄÄ·inu modelis
MÅ«su aprakstÄ«tÄ vienkÄrÅ”otÄ darba forma ir lÄ«dzÄ«ga fon NeimaÅa aprÄÄ·inu modelim. Fon Noimans ir viens no datorsistÄmu pionieriem, viÅÅ” ir arÄ« viens no spÄļu teorijas autoriem. KamÄr programma darbojas, notiek virkne citu notikumu, daudzi citi procesi un treÅ”Äs puses loÄ£ikas darbs, kuru galvenais mÄrÄ·is ir vienkÄrÅ”ot sistÄmas palaiÅ”anu, darbÄ«bu un apkopi.
Ir programmatÅ«ras komplekts, kas ir atbildÄ«gs par programmu vieglu palaiÅ”anu (vai pat ļauj vairÄkÄm programmÄm darboties vienlaikus), kas ļauj programmÄm koplietot to paÅ”u atmiÅu un sazinÄties ar dažÄdÄm ierÄ«cÄm. Å Äds programmatÅ«ras komplekts (programmatÅ«ra) pÄc bÅ«tÄ«bas tiek saukts par operÄtÄjsistÄmu un tÄs uzdevumi ietver uzraudzÄ«bu, lai sistÄma darbotos pareizi un efektÄ«vi, kÄ arÄ« Ŕīs sistÄmas vadÄ«bas viegluma nodroÅ”inÄÅ”ana.
OperÄtÄjsistÄmas
OperÄtÄjsistÄma, saÄ«sinÄti kÄ OS, ir savstarpÄji saistÄ«tu programmu kopums, kas paredzÄts datora resursu pÄrvaldÄ«bai un lietotÄja mijiedarbÄ«bas ar datoru organizÄÅ”anai..
OS sasniedz savu efektivitÄti, pirmkÄrt, izmantojot vissvarÄ«gÄko tehniku āā- tehniku virtualizÄcija. OS mijiedarbojas ar fizisko resursu (procesoru, atmiÅu, disku utt.) un pÄrveido to vispÄrÄ«gÄkÄ, jaudÄ«gÄkÄ un vieglÄk lietojamÄ formÄ. TÄpÄc vispÄrÄjai izpratnei jÅ«s varat ļoti aptuveni salÄ«dzinÄt operÄtÄjsistÄmu ar virtuÄlo maŔīnu.
Lai ļautu lietotÄjiem dot komandas operÄtÄjsistÄmai un tÄdÄjÄdi izmantot virtuÄlÄs maŔīnas iespÄjas (piemÄram, palaist programmu, pieŔķirt atmiÅu, piekļūt failam un tÄ tÄlÄk), operÄtÄjsistÄma nodroÅ”ina kÄdu interfeisu, ko sauc. API (lietojumprogrammu interfeiss) un uz kuru var veikt zvanus (zvans). Tipiska operÄtÄjsistÄma ļauj veikt simtiem sistÄmas zvanu.
Visbeidzot, tÄ kÄ virtualizÄcija ļauj darboties vairÄkÄm programmÄm (tÄdÄjÄdi dalot centrÄlo procesoru) un vienlaikus piekļūt to norÄdÄ«jumiem un datiem (tÄdÄjÄdi koplietot atmiÅu) un piekļūt diskiem (tÄdÄjÄdi koplietot I/O ierÄ«ces). ), operÄtÄjsistÄmu sauc arÄ« par resursu pÄrvaldnieks. Katrs procesors, disks un atmiÅa ir sistÄmas resurss, un lÄ«dz ar to viena no operÄtÄjsistÄmas lomÄm kļūst par Å”o resursu pÄrvaldÄ«bu, veicot to efektÄ«vi, godÄ«gi vai otrÄdi, atkarÄ«bÄ no uzdevuma, kuram Ŕī operÄtÄjsistÄma. ir izstrÄdÄts.
CPU virtualizÄcija
Apsveriet Å”Ädu programmu:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)
Tas neveic nekÄdas Ä«paÅ”as darbÄ«bas, patiesÄ«bÄ viss, ko tas dara, ir izsaukt funkciju grieÅ”anÄs(), kura uzdevums ir iziet cauri laika pÄrbaudei un atgriezties pÄc vienas sekundes. TÄdÄjÄdi tas neierobežoti atkÄrto virkni, ko lietotÄjs nodeva kÄ argumentu.
PalaidÄ«sim Å”o programmu un nodosim tai rakstzÄ«mi "A" kÄ argumentu. RezultÄts nav Ä«paÅ”i interesants - sistÄma vienkÄrÅ”i izpilda programmu, kas periodiski parÄda rakstzÄ«mi "A".
Tagad izmÄÄ£inÄsim iespÄju, kad darbojas daudzas vienas un tÄs paÅ”as programmas gadÄ«jumi, bet tiek izvadÄ«ti dažÄdi burti, lai padarÄ«tu to skaidrÄku. Å ajÄ gadÄ«jumÄ rezultÄts bÅ«s nedaudz atŔķirÄ«gs. Neskatoties uz to, ka mums ir viens procesors, programma tiek izpildÄ«ta vienlaicÄ«gi. KÄ tas notiek? TaÄu izrÄdÄs, ka operÄtÄjsistÄma ne bez aparatÅ«ras iespÄju palÄ«dzÄ«bas rada ilÅ«ziju. IlÅ«zija, ka sistÄmai ir vairÄki virtuÄlie procesori, pÄrvÄrÅ”ot vienu fizisko procesoru par teorÄtiski bezgalÄ«gu skaitu un tÄdÄjÄdi ļaujot Ŕķietami programmÄm darboties vienlaicÄ«gi. Å o ilÅ«ziju sauc CPU virtualizÄcija.
Å is attÄls rada daudz jautÄjumu, piemÄram, ja vairÄkas programmas vÄlas darboties vienlaikus, kura tiks palaista? Par Å”o jautÄjumu ir atbildÄ«ga OS āpolitikaā. Politikas tiek izmantotas daudzÄs OS vietÄs, un tÄs atbild uz Å”Ädiem jautÄjumiem, un tÄs ir pamata mehÄnismi, ko OS ievieÅ”. LÄ«dz ar to OS kÄ resursu pÄrvaldnieka loma.
AtmiÅas virtualizÄcija
Tagad apskatÄ«sim atmiÅu. AtmiÅas fiziskais modelis mÅ«sdienu sistÄmÄs tiek attÄlots kÄ baitu masÄ«vs.. Lai lasÄ«tu no atmiÅas, jÄnorÄda Ŕūnas adreselai tai piekļūtu. Lai rakstÄ«tu vai atjauninÄtu datus, jÄnorÄda arÄ« dati un Ŕūnas adrese, kur tos rakstÄ«t.
Programmas izpildes laikÄ atmiÅai tiek piekļūts pastÄvÄ«gi. Programma saglabÄ visu savu datu struktÅ«ru atmiÅÄ un piekļūst tai, izpildot dažÄdas instrukcijas. TikmÄr instrukcijas tiek saglabÄtas arÄ« atmiÅÄ, tÄpÄc tai tiek piekļūts arÄ« katram nÄkamÄs instrukcijas pieprasÄ«jumam.
malloc() izsaukums
Apsveriet Å”Ädu programmu, kas, izmantojot zvanu, pieŔķir atmiÅas reÄ£ionu malloc () (https://youtu.be/jnlKRnoT1m0):
Programma veic vairÄkas darbÄ«bas. PirmkÄrt, tas pieŔķir daļu atmiÅas (7. rinda), pÄc tam izdrukÄ pieŔķirtÄs Ŕūnas adresi (9. rinda), ieraksta nulli pirmajÄ pieŔķirtÄs atmiÅas slotÄ. PÄc tam programma ievada cilpu, kurÄ tÄ palielina atmiÅÄ saglabÄto vÄrtÄ«bu mainÄ«gÄ āpā adresÄ. Tas arÄ« izdrukÄ sava procesa ID. Procesa ID ir unikÄls katram darbÄ«bas procesam. PÄc vairÄku eksemplÄru izlaiÅ”anas mÄs nonÄksim pie interesanta rezultÄta: pirmajÄ gadÄ«jumÄ, ja jÅ«s neko nedarÄ«sit un tikai palaižat vairÄkas kopijas, adreses bÅ«s atŔķirÄ«gas. Bet tas neietilpst mÅ«su teorijÄ! Pareizi, jo mÅ«sdienu izplatÄ«jumos pÄc noklusÄjuma ir iespÄjota atmiÅas nejauÅ”inÄÅ”ana. Ja to izslÄdzat, mÄs iegÅ«stam gaidÄ«to rezultÄtu - divu vienlaikus darbojoÅ”os programmu atmiÅas adreses sakritÄ«s.
RezultÄtÄ izrÄdÄs, ka divas neatkarÄ«gas programmas strÄdÄ ar savÄm privÄtajÄm adreÅ”u telpÄm, kuras savukÄrt kartÄ operÄtÄjsistÄma fiziskajÄ atmiÅÄ.. TÄpÄc atmiÅas adreÅ”u izmantoÅ”ana vienas programmas ietvaros nekÄdÄ veidÄ neietekmÄs citas, un katrai programmai Ŕķiet, ka tai ir sava fiziskÄs atmiÅas daļa, kas tai ir pilnÄ«bÄ atvÄlÄta. TomÄr realitÄte ir tÄda, ka fiziskÄ atmiÅa ir kopÄ«gs resurss, ko pÄrvalda operÄtÄjsistÄma.
Konsekvence
VÄl viena no svarÄ«gÄkajÄm tÄmÄm operÄtÄjsistÄmÄs ir ā konsekvenci. Å o terminu lieto, runÄjot par problÄmÄm sistÄmÄ, kas var rasties, strÄdÄjot ar daudzÄm lietÄm vienlaikus vienas programmas ietvaros. Konsekvences problÄmas rodas pat paÅ”Ä operÄtÄjsistÄmÄ. IepriekÅ”Äjos atmiÅas un procesora virtualizÄcijas piemÄros mÄs sapratÄm, ka OS vienlaikus pÄrvalda daudzas lietas - tÄ sÄk pirmo procesu, pÄc tam otro un tÄ tÄlÄk. KÄ izrÄdÄ«jÄs, Å”Äda uzvedÄ«ba var radÄ«t dažas problÄmas. TÄ, piemÄram, mÅ«sdienu daudzpavedienu programmas saskaras ar Å”ÄdÄm grÅ«tÄ«bÄm.
Apsveriet Å”Ädu programmu:
Programma galvenajÄ funkcijÄ, izmantojot zvanu, izveido divus pavedienus pthread_create(). Å ajÄ piemÄrÄ pavedienu var uzskatÄ«t par funkciju, kas darbojas tajÄ paÅ”Ä atmiÅas telpÄ lÄ«dzÄs citÄm funkcijÄm, un nepÄrprotami vienlaikus darbojas vairÄkas funkcijas. Å ajÄ piemÄrÄ katrs pavediens sÄk un izpilda funkciju worker (), kas savukÄrt vienkÄrÅ”i palielina mainÄ«go,.
PalaidÄ«sim Å”o programmu ar argumentu 1000. KÄ jau varÄja uzminÄt, rezultÄtam jÄbÅ«t 2000, jo katrs pavediens palielinÄja mainÄ«go 1000 reizes. TomÄr viss nav tik vienkÄrÅ”i. MÄÄ£inÄsim palaist programmu ar lielu skaitu vairÄk atkÄrtojumu.
Ievadot skaitli, piemÄram, 100000, mÄs sagaidÄm, ka izvadÄ tiks parÄdÄ«ts skaitlis 200000. TaÄu, ja mÄs vairÄkas reizes izpildÄ«sim skaitli 100000, mÄs ne tikai neredzÄsim pareizo atbildi, bet arÄ« saÅemsim dažÄdas nepareizas atbildes. Atbilde slÄpjas faktÄ, ka, lai palielinÄtu skaitli, ir nepiecieÅ”amas trÄ«s darbÄ«bas - skaitļa izÅemÅ”ana no atmiÅas, palielinÄÅ”ana un pÄc tam skaitļa ierakstÄ«Å”ana. TÄ kÄ visas Ŕīs instrukcijas netiek izpildÄ«tas atomiski (visas vienlaikus), var notikt tÄdas dÄ«vainas lietas. Å o problÄmu sauc par programmÄÅ”anu sacensÄ«bu stÄvoklis. Kad nezinÄmi spÄki nezinÄmÄ brÄ«dÄ« var ietekmÄt jebkuras jÅ«su darbÄ«bas izpildi.
Avots: www.habr.com