ProHoster > Blogs > interneta ziÅas > OperÄtÄjsistÄmas: trÄ«s vienkÄrÅ”as daļas. 2. daļa: Abstrakcija: process (tulkoÅ”ana)
OperÄtÄjsistÄmas: trÄ«s vienkÄrÅ”as daļas. 2. daļa: Abstrakcija: process (tulkoÅ”ana)
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 Å”eit. LÅ«dzu, Åemiet vÄrÄ, ka tulkojums tika veikts neprofesionÄli (diezgan brÄ«vi), bet es ceru, ka es saglabÄju vispÄrÄjo nozÄ«mi.
Laboratorijas darbus par Å”o tÄmu var atrast Å”eit:
Varat arÄ« apskatÄ«t manu kanÄlu vietnÄ telegramma =)
ApskatÄ«sim vissvarÄ«gÄko abstrakciju, ko OS nodroÅ”ina lietotÄjiem: procesu. Procesa definÄ«cija ir pavisam vienkÄrÅ”a - tÄ ir darbojas programma. Pati programma ir nedzÄ«va lieta, kas atrodas diskÄ - tÄ ir instrukciju kopa un, iespÄjams, daži statiski dati, kas gaida palaiÅ”anu. TÄ ir operÄtÄjsistÄma, kas Åem Å”os baitus un palaiž tos, pÄrveidojot programmu par kaut ko noderÄ«gu.
VisbiežÄk lietotÄji vÄlas vienlaikus palaist vairÄk nekÄ vienu programmu, piemÄram, savÄ klÄpjdatorÄ varat palaist pÄrlÅ«kprogrammu, spÄli, multivides atskaÅotÄju, teksta redaktoru un tamlÄ«dzÄ«gi. Faktiski tipiska sistÄma var vienlaikus palaist desmitiem vai simtiem procesu. Å is fakts padara sistÄmu vieglÄk lietojamu, jums nekad nav jÄuztraucas par to, vai centrÄlais procesors ir brÄ«vs, jÅ«s vienkÄrÅ”i palaižat programmas.
Tas rada problÄmu: kÄ nodroÅ”inÄt ilÅ«ziju par daudziem CPU? KÄ OS var radÄ«t ilÅ«ziju par gandrÄ«z bezgalÄ«gu CPU skaitu, pat ja jums ir tikai viens fiziskais CPU?
OS rada Å”o ilÅ«ziju, izmantojot CPU virtualizÄciju. UzsÄkot vienu procesu, pÄc tam to apturot, uzsÄkot citu procesu un tÄ tÄlÄk, OS var uzturÄt ilÅ«ziju, ka ir daudz virtuÄlo CPU, lai gan patiesÄ«bÄ bÅ«s viens vai vairÄki fiziski procesori. Å o tehniku āāsauc CPU resursu sadalÄ«jums pÄc laika. Å Ä« metode ļauj lietotÄjiem palaist tik daudz vienlaicÄ«gu procesu, cik viÅi vÄlas. Å Ä« risinÄjuma izmaksas ir veiktspÄja ā tÄ kÄ, ja CPU tiek koplietots vairÄkiem procesiem, katrs process tiks apstrÄdÄts lÄnÄk.
Lai ieviestu CPU virtualizÄciju un jo Ä«paÅ”i, lai to izdarÄ«tu labi, OS ir nepiecieÅ”ams gan zema, gan augsta lÄ«meÅa atbalsts. Tiek izsaukts zema lÄ«meÅa atbalsts mehÄnismi ir zema lÄ«meÅa metodes vai protokoli, kas ievieÅ” nepiecieÅ”amo funkcionalitÄtes daļu. Å Ädas funkcionalitÄtes piemÄrs ir konteksta pÄrslÄgÅ”ana, kas dod OS iespÄju apturÄt vienu programmu un palaist citu programmu procesorÄ. Å is laika dalÄ«jums ir ieviests visÄs mÅ«sdienu operÄtÄjsistÄmÄs.
Papildus Å”iem mehÄnismiem OS ir iebÅ«vÄta loÄ£ika āpolitikuā veidÄ. Politika ir noteikts lÄmumu pieÅemÅ”anas algoritms operÄtÄjsistÄmai. Å Ädas politikas, piemÄram, izlemj, kura programma ir jÄpalaiž (no komandu saraksta) vispirms. TÄ, piemÄram, Å”o problÄmu atrisinÄs politika ar nosaukumu plÄnotÄjs (plÄnoÅ”anas politika) un izvÄloties risinÄjumu, tas tiks vadÄ«ts pÄc tÄdiem datiem kÄ: startÄÅ”anas vÄsture (kura programma pÄdÄjÄs minÅ«tÄs tika palaista visilgÄk), kÄdu slodzi nes Å”is process (kÄda veida programmas tika palaists), veiktspÄjas rÄdÄ«tÄji (vai sistÄma ir optimizÄts interaktÄ«vai mijiedarbÄ«bai vai caurlaidspÄjai ) un tÄ tÄlÄk.
Abstrakcija: process
MÄs saucam par operÄtÄjsistÄmas izpildÄ«tÄs programmas abstrakciju process. KÄ minÄts iepriekÅ”, process ir vienkÄrÅ”i palaista programma jebkurÄ momentÄnÄ. Programma, ar kuru mÄs varam iegÅ«t apkopojoÅ”u informÄciju no dažÄdiem sistÄmas resursiem, kuriem Ŕī programma piekļūst vai ietekmÄ tÄs izpildes laikÄ.
Lai saprastu procesa sastÄvdaļas, ir jÄsaprot sistÄmas stÄvokļi: ko programma var nolasÄ«t vai mainÄ«t tÄs darbÄ«bas laikÄ. JebkurÄ brÄ«dÄ« jums ir jÄsaprot, kuri sistÄmas elementi ir svarÄ«gi programmas izpildei.
Viens no acÄ«mredzamajiem sistÄmas elementiem, ko process ietver, ir atmiÅa. Instrukcijas atrodas atmiÅÄ. Dati, ko programma nolasa vai raksta, arÄ« atrodas atmiÅÄ. TÄdÄjÄdi atmiÅa, ko process var risinÄt (ko sauc par adreÅ”u telpu), ir procesa daļa.
ArÄ« daļa no sistÄmas stÄvokļa ir reÄ£istri. Daudzu instrukciju mÄrÄ·is ir mainÄ«t reÄ£istru vÄrtÄ«bu vai nolasÄ«t to vÄrtÄ«bu, un tÄdÄjÄdi arÄ« reÄ£istri kļūst par svarÄ«gu procesa darbÄ«bas sastÄvdaļu.
JÄpiebilst, ka arÄ« maŔīnas stÄvoklis veidojas no dažiem Ä«paÅ”iem reÄ£istriem. PiemÄram, IP - instrukciju rÄdÄ«tÄjs ā norÄde uz instrukciju, ko programma paÅ”laik izpilda. Ir arÄ« kaudzes rÄdÄ«tÄjs un ar to saistÄ«ti rÄmja rÄdÄ«tÄjs, ko izmanto, lai pÄrvaldÄ«tu: funkciju parametrus, lokÄlos mainÄ«gos un atgrieÅ”anas adreses.
Visbeidzot, programmas bieži piekļūst ROM (tikai lasÄmatmiÅai). Å ajÄ āI/Oā (ievades/izvades) informÄcijÄ jÄiekļauj to failu saraksts, kas paÅ”laik tiek atvÄrti procesa laikÄ.
Procesa API
Lai uzlabotu mÅ«su izpratni par procesa darbÄ«bu, izpÄtÄ«sim sistÄmas izsaukumu piemÄrus, kas jÄiekļauj jebkurÄ operÄtÄjsistÄmas saskarnÄ. Å Ä«s API ir pieejamas vienÄ vai otrÄ veidÄ jebkurÄ OS.
ā izveidot (izveide): OS ir jÄiekļauj kÄda metode, kas ļauj izveidot jaunus procesus. Ievadot komandu terminÄlÄ« vai palaižot lietojumprogrammu, veicot dubultklikŔķi uz ikonas, OS tiek nosÅ«tÄ«ts zvans, lai izveidotu jaunu procesu un pÄc tam palaistu norÄdÄ«to programmu.
ā PÄrcelÅ”anÄs: TÄ kÄ procesa izveidei ir interfeiss, OS ir jÄnodroÅ”ina arÄ« iespÄja piespiedu kÄrtÄ noÅemt procesu. LielÄkÄ daļa programmu, protams, sÄksies un beigsies paÅ”as, kad tÄs darbojas. PretÄjÄ gadÄ«jumÄ lietotÄjs vÄlÄtos tos nogalinÄt, un tÄdÄjÄdi bÅ«tu noderÄ«gs interfeiss procesa apturÄÅ”anai.
ā Pagaidiet (gaida): dažreiz ir lietderÄ«gi gaidÄ«t, lÄ«dz process tiks pabeigts, tÄpÄc tiek nodroÅ”inÄtas dažas saskarnes, kas nodroÅ”ina iespÄju gaidÄ«t.
ā DažÄda kontrole (dažÄda kontrole): Papildus nogalinÄÅ”anai un procesa gaidÄ«Å”anai ir arÄ« citas dažÄdas kontroles metodes. PiemÄram, lielÄkÄ daļa operÄtÄjsistÄmu nodroÅ”ina iespÄju iesaldÄt procesu (pÄrtraukt tÄ izpildi uz noteiktu laiku) un pÄc tam to atsÄkt (turpinÄt izpildi).
ā Status (stÄvoklis): ir dažÄdas saskarnes, lai iegÅ«tu informÄciju par procesa statusu, piemÄram, cik ilgi tas darbojas vai kÄdÄ stÄvoklÄ« tas paÅ”laik ir.
Procesa izveide: detaļas
Viena no interesantajÄm lietÄm ir tas, kÄ tieÅ”i programmas tiek pÄrveidotas par procesiem. ÄŖpaÅ”i tas, kÄ OS uztver un palaiž programmu. KÄ tieÅ”i process tiek izveidots.
PirmkÄrt, OS jÄielÄdÄ programmas kods un statiskie dati atmiÅÄ (procesa adreÅ”u telpÄ). Programmas parasti atrodas diskÄ vai cietvielu diskdzinÄ« kÄdÄ izpildÄmÄ formÄtÄ. TÄdÄjÄdi, lai ielÄdÄtu programmu un statiskos datus atmiÅÄ, operÄtÄjsistÄmai ir jÄspÄj nolasÄ«t Å”os baitus no diska un ievietot tos kaut kur atmiÅÄ.
AgrÄ«nÄs operÄtÄjsistÄmÄs ielÄdes process tika veikts ar nepacietÄ«bu, kas nozÄ«mÄ, ka viss kods tika ielÄdÄts atmiÅÄ pirms programmas palaiÅ”anas. MÅ«sdienu operÄtÄjsistÄmas to dara slinki, tas ir, ielÄdÄ koda vai datu gabalus tikai tad, kad programma to pieprasa izpildes laikÄ.
Kad kods un statiskie dati ir ielÄdÄti operÄtÄjsistÄmas atmiÅÄ, ir jÄveic vÄl dažas darbÄ«bas, lai process varÄtu darboties. KaudzÄ«tei ir jÄpieŔķir zinÄms atmiÅas apjoms. Programmas izmanto steku vietÄjiem mainÄ«gajiem, funkciju parametriem un atgrieÅ”anas adresÄm. OS pieŔķir Å”o atmiÅu un pieŔķir procesam. KaudzÄ«ti var pieŔķirt arÄ« ar dažiem argumentiem, jo āāÄ«paÅ”i tas aizpilda funkcijas main() parametrus, piemÄram, ar argc un argv masÄ«vu.
OperÄtÄjsistÄma var arÄ« pieŔķirt daļu atmiÅas programmu kaudzei. Programmas izmanto kaudzi, lai tieÅ”i pieprasÄ«tu dinamiski pieŔķirtos datus. Programmas pieprasa Å”o vietu, izsaucot funkciju malloc () un skaidri to notÄ«ra, izsaucot funkciju bezmaksas (). Kaudze ir nepiecieÅ”ama datu struktÅ«rÄm, piemÄram, saistÄ«tÄm lapÄm, hash tabulÄm, kokiem un citÄm. SÄkumÄ kaudzÄ«tei tiek atvÄlÄts neliels atmiÅas apjoms, taÄu laika gaitÄ, programmai darbojoties, kaudze var pieprasÄ«t vairÄk atmiÅas, izmantojot bibliotÄkas API zvanu malloc(). OperÄtÄjsistÄma ir iesaistÄ«ta vairÄk atmiÅas pieŔķirÅ”anas procesÄ, lai palÄ«dzÄtu apmierinÄt Å”os zvanus.
OperÄtÄjsistÄma veiks arÄ« inicializÄcijas uzdevumus, Ä«paÅ”i tos, kas saistÄ«ti ar I/O. PiemÄram, UNIX sistÄmÄs katram procesam pÄc noklusÄjuma ir 3 atvÄrto failu deskriptori standarta ievadei, izvadei un kļūdai. Å ie rokturi ļauj programmÄm nolasÄ«t ievadi no terminÄļa, kÄ arÄ« parÄdÄ«t informÄciju ekrÄnÄ.
TÄdÄjÄdi, ielÄdÄjot kodu un statiskos datus atmiÅÄ, izveidojot un inicializÄjot steku un veicot citus darbus, kas saistÄ«ti ar I/O uzdevumu veikÅ”anu, OS sagatavo posmu procesa izpildei. Visbeidzot, ir atlicis pÄdÄjais uzdevums: programmas palaiÅ”ana caur tÄs ieejas punktu, ko sauc par galveno () funkciju. Izpildot funkciju main(), OS nodod CPU vadÄ«bu jaunizveidotajam procesam, lÄ«dz ar to programma sÄk darboties.
Procesa stÄvoklis
Tagad, kad mums ir zinÄma izpratne par to, kas ir process un kÄ tas tiek izveidots, uzskaitÄ«sim procesa stÄvokļus, kuros tas var bÅ«t. VienkÄrÅ”ÄkajÄ formÄ process var bÅ«t vienÄ no Å”iem stÄvokļiem:
ā EkspluatÄcijas. Palaižot, process darbojas procesorÄ. Tas nozÄ«mÄ, ka tiek izpildÄ«tas instrukcijas.
ā Gatavs. GatavÄ«bas stÄvoklÄ« process ir gatavs palaiÅ”anai, taÄu kÄda iemesla dÄļ OS to neizpilda norÄdÄ«tajÄ laikÄ.
ā BloÄ·Äts. BloÄ·ÄtÄ stÄvoklÄ« process veic dažas darbÄ«bas, kas neļauj tam bÅ«t gatavam izpildei, lÄ«dz notiek kÄds notikums. Viens izplatÄ«ts piemÄrs ir, kad process uzsÄk IO darbÄ«bu, tas tiek bloÄ·Äts, lai kÄds cits process varÄtu izmantot procesoru.
JÅ«s varat iedomÄties Å”os stÄvokļus grafika veidÄ. KÄ redzams attÄlÄ, pÄc OS ieskatiem procesa stÄvoklis var mainÄ«ties no RUNING un READY. Ja procesa statuss mainÄs no READY uz RUNING, tas nozÄ«mÄ, ka process ir ieplÄnots. PretÄjÄ virzienÄ - izÅemts no izkÄrtojuma. BrÄ«dÄ«, kad process kļūst BLOĶÄTS, piemÄram, es ierosinu IO darbÄ«bu, OS saglabÄs to Å”ÄdÄ stÄvoklÄ«, lÄ«dz notiks kÄds notikums, piemÄram, IO pabeigÅ”ana. Å”ajÄ brÄ«dÄ« pÄreja uz READY stÄvokli un, iespÄjams, uzreiz uz RUNNING stÄvokli, ja OS nolemj.
ApskatÄ«sim piemÄru, kÄ divi procesi pÄrvietojas pa Å”iem stÄvokļiem. SÄkumÄ iedomÄsimies, ka abi procesi darbojas un katrs izmanto tikai centrÄlo procesoru. Å ajÄ gadÄ«jumÄ viÅu Å”tati izskatÄ«sies Å”Ädi.
NÄkamajÄ piemÄrÄ pirmais process, pÄc kÄda laika palaižot, pieprasa IO un pÄriet stÄvoklÄ« BLOKÄTS, ļaujot darboties citam procesam (1.4. attÄls). OS redz, ka process 0 neizmanto centrÄlo procesoru, un sÄk procesu 1. KamÄr process 1 darbojas, IO ir pabeigts un procesa 0 statuss mainÄs uz READY. Visbeidzot, process 1 ir pabeigts, un pÄc pabeigÅ”anas process 0 sÄkas, izpilda un pabeidz savu darbu.
Datu struktūra
Pati operÄtÄjsistÄma ir programma, un, tÄpat kÄ jebkurai citai programmai, tai ir dažas galvenÄs datu struktÅ«ras, kas seko lÄ«dzi dažÄdai bÅ«tiskai informÄcijai. Lai izsekotu katra procesa stÄvoklim, OS atbalstÄ«s dažus procesu saraksts visiem procesiem, kas atrodas stÄvoklÄ« READY, un papildu informÄciju, lai izsekotu procesiem, kas paÅ”laik darbojas. ArÄ« OS jÄuzrauga bloÄ·Ätie procesi. Kad IO ir pabeigts, operÄtÄjsistÄmai ir jÄpamodina nepiecieÅ”amais process un jÄiestata darbÄ«bai gatavÄ stÄvoklÄ«.
PiemÄram, OS ir jÄsaglabÄ procesora reÄ£istru stÄvoklis. BrÄ«dÄ«, kad process apstÄjas, procesa adreÅ”u telpÄ tiek saglabÄts reÄ£istru stÄvoklis, un brÄ«dÄ«, kad tÄ darbÄ«ba turpinÄs, tiek atjaunotas reÄ£istru vÄrtÄ«bas un tÄdÄjÄdi tiek turpinÄta Ŕī procesa izpilde.
Papildus gataviem, bloÄ·Ätiem, darba stÄvokļiem ir daži citi stÄvokļi. Dažreiz izveides laikÄ process var bÅ«t INIT stÄvoklÄ«. Visbeidzot, procesu var ievietot GALÄŖGÄ stÄvoklÄ«, kad tas jau ir pabeigts, bet tÄ informÄcija vÄl nav notÄ«rÄ«ta. UNIX sistÄmÄs Å”o stÄvokli sauc zombiju process. Å is stÄvoklis ir noderÄ«gs gadÄ«jumos, kad vecÄku process vÄlas uzzinÄt bÄrna atgrieÅ”anas kodu, piemÄram, parasti 0 signalizÄ par veiksmi un 1 par kļūdu, bet programmÄtÄji var izdot papildu izvades kodus, lai signalizÄtu par dažÄdÄm problÄmÄm. Kad vecÄkprocess tiek pÄrtraukts, tas veic pÄdÄjo sistÄmas izsaukumu, piemÄram, gaidiet (), lai gaidÄ«tu, lÄ«dz tiek pÄrtraukts pakÄrtotais process, un signalizÄ OS, ka tÄ var notÄ«rÄ«t visus ar pÄrtraukto procesu saistÄ«tos datus.
Lekcijas galvenie punkti:
ā process ā galvenÄ darbÄ«gÄs programmas abstrakcija operÄtÄjsistÄmÄ. JebkurÄ laikÄ procesu var aprakstÄ«t pÄc tÄ stÄvokļa: atmiÅas saturs tÄ adreÅ”u telpÄ, procesora reÄ£istru saturs, ieskaitot instrukciju rÄdÄ«tÄju un steka rÄdÄ«tÄju, un IO informÄcija, piemÄram, atvÄrtie faili, kas tiek lasÄ«ti vai rakstÄ«ti.
ā Procesa API sastÄv no izsaukumiem, ko programmas var veikt procesiem. Parasti tie ir izveides, dzÄÅ”anas vai citi zvani.
ā Process ir vienÄ no daudzajiem stÄvokļiem, tostarp darbojas, gatavs, bloÄ·Äts. DažÄdi notikumi, piemÄram, plÄnoÅ”ana, izÅÄmumi no plÄnoÅ”anas vai gaidÄ«Å”anas, var mainÄ«t procesa stÄvokli no viena uz otru.
ā Procesu saraksts satur informÄciju par visiem sistÄmÄ notiekoÅ”ajiem procesiem. Katrs ieraksts tajÄ tiek saukts par procesa vadÄ«bas bloku, kas patiesÄ«bÄ ir struktÅ«ra, kas satur visu nepiecieÅ”amo informÄciju par konkrÄto procesu.ā