Konteksti dhe trajtimi i procesit. Koncepti i procesit. Nënsistemi i sistemit operativ të menaxhimit të procesit. Gjendjet e procesit. Nënsistemi i menaxhimit të procesit të kontekstit dhe përshkruesit të procesit

Sistemi i menaxhimit të detyrave siguron kalimin e tyre përmes kompjuterit. Në varësi të gjendjes së procesit, ai duhet të ndajë një ose një burim tjetër. Për shembull, një proces i ri duhet të vendoset në memorie duke i caktuar atij hapësirë ​​adresash; përfshijë në listën e detyrave që konkurrojnë për kohën e procesorit.

Një nga nënsistemet kryesore të një OS multiprogrami që ndikon drejtpërdrejt në funksionimin e një kompjuteri është nënsistemi i menaxhimit të procesit dhe fijeve. Merret me krijimin dhe shkatërrimin e tyre, dhe gjithashtu shpërndan kohën e procesorit midis proceseve dhe fijeve ekzistuese në të njëjtën kohë në sistem.

Kur shumë detyra janë duke ekzekutuar njëkohësisht në një sistem, megjithëse thread-et krijohen dhe ekzekutohen në mënyrë asinkrone, ato mund të kenë nevojë të ndërveprojnë, për shembull, kur shkëmbejnë të dhëna. Prandaj, sinkronizimi i fijeve është një nga funksionet e rëndësishme të nënsistemit të menaxhimit të procesit dhe fijeve.

Komunikimi ndërmjet proceseve kryhet duke përdorur variabla të përbashkëta dhe operacione të veçanta themelore të quajtura primitivëve.

Nënsistemi i menaxhimit të procesit dhe fijeve ka aftësinë të kryejë operacionet e mëposhtme në procese:

– krijimi (pjellja)/shkatërrimi i një procesi;

– ndaloni/rifilloni procesin;

– bllokimi/zgjimi i procesit;

– filloni procesin;

– ndryshimi i prioritetit të procesit;

Nënsistemi i menaxhimit të procesit dhe fijeve është përgjegjës për sigurimin e proceseve me burimet e nevojshme. Sistemi operativ ruan struktura të veçanta informacioni në memorie, në të cilat regjistron se cilat burime i ndahen secilit proces. Një burim mund t'i caktohet një procesi për përdorim të vetëm ose për përdorim të përbashkët me procese të tjera. Disa nga burimet i ndahen një procesi kur ai krijohet, dhe disa ndahen në mënyrë dinamike bazuar në kërkesat në kohën e ekzekutimit. Burimet mund t'i caktohen një procesi gjatë gjithë jetës së tij ose vetëm për një periudhë të caktuar. Gjatë kryerjes së këtyre funksioneve, nënsistemi i menaxhimit të procesit ndërvepron me nënsistemet e tjera të OS përgjegjës për menaxhimin e burimeve, të tilla si nënsistemi i menaxhimit të kujtesës, nënsistemi hyrës/dalës dhe sistemi i skedarëve.

1. Krijimi dhe fshirja e proceseve dhe thread-eve

Të krijosh një proces do të thotë para së gjithash të krijosh doreza e procesit, e cila është një ose më shumë struktura informacioni që përmbajnë të gjithë informacionin rreth procesit të nevojshëm që sistemi operativ ta menaxhojë atë. Kjo çështje u diskutua në detaje më herët, tani thjesht kujtojmë se një informacion i tillë mund të përfshijë, për shembull, një identifikues procesi, të dhëna për vendndodhjen e modulit të ekzekutueshëm në memorie, shkallën e privilegjit të procesit (përparësia dhe të drejtat e aksesit), etj.

Krijimi i një procesi përfshin ngarkimin e kodeve dhe të dhënave të programit të ekzekutueshëm të procesit nga disku në RAM. Në këtë rast, nënsistemi i menaxhimit të procesit ndërvepron me nënsistemin e menaxhimit të kujtesës dhe sistemin e skedarëve. Në një sistem me shumë fije, kur krijohet një proces, OS krijon të paktën një fije ekzekutimi për çdo proces. Kur krijoni një thread, ashtu si kur krijoni një proces, OS gjeneron një strukturë të veçantë informacioni - një përshkrues thread, i cili përmban identifikuesin e thread-it, të dhënat mbi të drejtat dhe përparësinë e aksesit, gjendjen e thread, etj. Pasi të krijohet, një fill (ose proces) është në gjendje gatishmërie për ekzekutim (ose në gjendje të papunë në rastin e një OS me qëllim të veçantë).

Detyrat krijohen dhe fshihen bazuar në kërkesat e duhura nga përdoruesit ose detyra të tjera. Një detyrë mund të krijojë një detyrë të re - në shumë sisteme, një fije mund të kontaktojë OS me një kërkesë për të krijuar një të ashtuquajtur. prurjet e fëmijëve. Detyra gjeneruese quhet "paraardhësi" ose "prindi", dhe detyra e fëmijës quhet "pasardhës" ose "detyrë fëmijë". Një "paraardhës" mund të pezullojë ose fshijë detyrën e tij të fëmijës, ndërsa një "fëmijë" nuk mund të menaxhojë "paraardhësin".

Sisteme të ndryshme operative e strukturojnë ndryshe marrëdhënien midis fijeve të fëmijëve dhe prindërve të tyre. Në disa sisteme operative, ekzekutimi i tyre është i sinkronizuar (pas përfundimit të fillit prind, të gjithë fëmijët e tij hiqen nga ekzekutimi), në të tjera, fëmijët ekzekutohen në mënyrë asinkrone në lidhje me fillin prind.

Pas përfundimit të procesit, OS "pastron gjurmët" e pranisë së tij në sistem - mbyll të gjithë skedarët me të cilët ka punuar procesi, çliron zonat e RAM-it të alokuara për kodet, të dhënat dhe strukturat e informacionit të sistemit të procesit. Radhët e OS dhe listat e burimeve që përmbanin referenca për procesin që përfundon janë korrigjuar.

2. Planifikimi dhe dispeçimi i proceseve dhe thread-eve

Strategjia e planifikimit përcakton se cilat procese zgjidhen për t'u ekzekutuar për të arritur qëllimin. Strategjitë mund të jenë të ndryshme, për shembull:

– nëse është e mundur, përfundoni llogaritjet në të njëjtin rend në të cilin ato filluan;

– jepni përparësi proceseve më të shkurtra;

– siguroni të gjithë përdoruesit (detyrat e përdoruesit) të njëjtat shërbime, duke përfshirë të njëjtën kohë pritjeje.

Gjatë jetës së një procesi, ekzekutimi i thread-eve të tij mund të ndërpritet dhe të vazhdohet shumë herë.

Kalimi nga ekzekutimi i një filli në tjetrin kryhet si rezultat i planifikimi Dhe dërgimin.

Planifikimi thread-et zbatohen në bazë të informacionit të ruajtur në përshkruesit e procesit dhe thread-it. Gjatë planifikimit, mund të merren parasysh prioriteti i thread-eve, koha që ata presin në radhë, koha e akumuluar e ekzekutimit, intensiteti i aksesit në I/O dhe faktorë të tjerë. OS planifikon thread-ët për t'u ekzekutuar pavarësisht nëse i përkasin të njëjtit ose proceseve të ndryshme. Planifikimi kuptohet si detyra e përzgjedhjes së një grupi të tillë procesesh në mënyrë që ato të konfliktohen sa më pak gjatë ekzekutimit dhe të përdorin sistemin kompjuterik në mënyrë sa më efikase.

Në burime të ndryshme informacioni ka interpretime të ndryshme të koncepteve të "planifikimit" dhe "shpërndarjes". Kështu, disa autorë e ndajnë planifikimin në afatgjatë (global) dhe afatshkurtër (dinamik, d.m.th. shpërndarja aktuale më efikase), dhe kjo e fundit quhet dispeçing. Sipas burimeve të tjera, dispeçimi kuptohet si zbatimi i një vendimi të marrë në fazën e planifikimit. Ne do t'i përmbahemi këtij opsioni.

Planifikimi përfshin zgjidhjen e dy problemeve:

përcaktimi i momentit të kohës për ndryshimin e fillit aktiv;

zgjedhjen e një thread për të ekzekutuar nga një radhë e thread-eve të gatshme.

Ka shumë algoritme planifikimi që i zgjidhin këto probleme në mënyra të ndryshme. Janë veçoritë e planifikimit që përcaktojnë specifikat e sistemit operativ. Le t'i shohim ato pak më vonë.

Në shumicën e sistemeve operative, planifikimi kryhet në mënyrë dinamike, d.m.th. vendimet merren gjatë punës bazuar në një analizë të situatës aktuale. Fijet dhe proceset shfaqen në kohë të rastësishme dhe përfundojnë në mënyrë të paparashikueshme.

Statike lloji i planifikimit mund të përdoret në sisteme të specializuara në të cilat i gjithë grupi i detyrave që ekzekutohen në të njëjtën kohë është i përcaktuar paraprakisht (sistemet në kohë reale). Planifikuesi krijon një orar bazuar në njohuritë për karakteristikat e një grupi detyrash. Ky orar më pas përdoret nga sistemi operativ për planifikim.

Dispeçimi konsiston në zbatimin e zgjidhjes së gjetur si rezultat i planifikimit, d.m.th. në kalimin e një procesi në tjetrin. Dispeçimi zbret në sa vijon:

duke ruajtur kontekstin e fillit aktual që duhet ndryshuar;

nisja e një filli të ri për ekzekutim.

Konteksti i fillit pasqyron, së pari, gjendjen e harduerit të kompjuterit në kohën e ndërprerjes (vlera e numëruesit të programit, përmbajtja e regjistrave për qëllime të përgjithshme, mënyra e funksionimit të procesorit, flamujt, maskat e ndërprerjes dhe parametra të tjerë ), dhe së dyti, parametrat e mjedisit operativ (lidhjet me skedarët e hapur, të dhënat për operacionet e papërfunduara I/O, kodet e gabimit të ekzekutuar nga një fije e caktuar thirrjesh sistemi, etj.).

Në kontekstin e një thread, ne mund të dallojmë një pjesë që është e përbashkët për të gjitha thread-et e një procesi të caktuar (lidhjet për skedarët e hapur) dhe një pjesë që lidhet vetëm me një thread të caktuar (përmbajtja e regjistrave, numëruesi i programit, modaliteti i procesorit). Për shembull, në mjedisin NetWare ekzistojnë tre lloje të konteksteve - konteksti global (konteksti i procesit), konteksti i grupit të fijeve dhe konteksti i fijeve individuale. Marrëdhënia midis të dhënave të këtyre konteksteve është e ngjashme me marrëdhënien midis variablave globale dhe lokale në një program. Organizimi hierarkik i konteksteve përshpejton ndërrimin e fijeve: kur kaloni nga një fill i një grupi në një fill të një grupi tjetër brenda të njëjtit proces, konteksti global nuk ndryshon, por ndryshon vetëm konteksti i grupit. Ndërrimi i kontekstit global ndodh vetëm kur kalohet nga filli i një procesi në fillin e një procesi tjetër.

3. Algoritmet e planifikimit

Nga pikëpamja e zgjidhjes së problemit të parë të planifikimit (zgjedhja e momentit të kohës për të ndryshuar fillin aktiv), algoritmet e planifikimit ndahen në dy klasa të mëdha - algoritme parandaluese dhe jo parandaluese:

jo represive– thread-i aktiv mund të ekzekutohet derisa ai vetë të transferojë kontrollin në sistem në mënyrë që të zgjedhë një thread tjetër të gatshëm nga radha;

duke zhvendosur– sistemi operativ vendos të ndryshojë detyrën që po kryhet dhe e kalon procesorin në një thread tjetër.

Dallimi kryesor midis këtyre algoritmeve të planifikimit është shkalla e centralizimit të mekanizmit të planifikimit të fijeve. Le të shqyrtojmë karakteristikat kryesore, avantazhet dhe disavantazhet e secilës klasë të algoritmeve.

Algoritme jo parandaluese. Programi i aplikimit, pasi ka marrë kontrollin nga OS, ai vetë përcakton momentin e përfundimit të ciklit të ardhshëm të ekzekutimit të tij dhe vetëm atëherë transferon kontrollin në OS duke përdorur një thirrje sistemi. Si pasojë, kontrolli i përdoruesit mbi aplikacionin humbet për një periudhë arbitrare kohore. Zhvilluesit duhet ta marrin parasysh këtë dhe të krijojnë aplikacione në mënyrë që ata të punojnë "në pjesë", duke ndërprerë dhe transferuar periodikisht kontrollin në sistem, d.m.th. Gjatë zhvillimit kryhen edhe funksionet e një planifikuesi.

Përparësitë kjo qasje:

– përjashtohet ndërprerja e rrjedhës në një moment të papërshtatshëm;

– zgjidhet problemi i përdorimit të njëkohshëm të të dhënave, sepse gjatë çdo cikli ekzekutimi, detyra i përdor ato ekskluzivisht dhe është i sigurt se askush tjetër nuk mund t'i ndryshojë ato;

– shpejtësi më e lartë e kalimit nga rryma në rrjedhë.

Disavantazhet janë zhvillimi i vështirë i programit dhe rritja e kërkesave për kualifikimet e programuesit, si dhe mundësia që një thread të marrë përsipër procesorin nëse aksidentalisht ose qëllimisht lakohet.

Algoritmet parandaluese– një lloj planifikimi ciklik ose rrethor, në të cilin vetë sistemi operativ vendos nëse do të ndërpresë aplikacionin aktiv dhe e kalon procesorin nga një detyrë në tjetrën në përputhje me një ose një kriter tjetër. Në një sistem me algoritme të tilla, programuesi nuk duhet të shqetësohet për faktin se aplikacioni i tij do të ekzekutohet njëkohësisht me detyra të tjera. Shembujt përfshijnë sistemet operative UNIX, Windows NT/2000, OS/2. Algoritmet e kësaj klase fokusohen në ekzekutimin me performancë të lartë të aplikacioneve.

Algoritmet parandaluese mund të bazohen në konceptin e kuantizimit ose në një mekanizëm prioritar.

Algoritme të bazuara në kuantizimin. Çdo thread i jepet një pjesë e kufizuar e vazhdueshme e kohës së procesorit (vlera e tij nuk duhet të jetë më e vogël se 1 ms - zakonisht disa dhjetëra ms). Një fije zhvendoset nga një gjendje funksionimi në një gjendje gatishmërie nëse kuanti është shteruar. Kuantat mund të jenë të njëjta për të gjitha rrjedhat ose të ndryshme.

Gjatë ndarjes së kuanteve në një fill, mund të përdoren parime të ndryshme: këto kuanta mund të kenë një vlerë fikse ose të ndryshojnë gjatë periudhave të ndryshme të jetës së fillit. Për shembull, për një rrjedhë specifike, kuanti i parë mund të jetë mjaft i madh dhe çdo kuant i mëpasshëm i alokuar mund të ketë një kohëzgjatje më të shkurtër (reduktim në kufijtë e specifikuar). Kjo krijon një avantazh për fijet më të shkurtra dhe detyrat e gjata kalojnë në sfond. Një parim tjetër bazohet në faktin se proceset që kryejnë shpesh operacione I/O nuk i shfrytëzojnë plotësisht pjesët kohore të alokuara për to. Për të kompensuar këtë padrejtësi, nga procese të tilla mund të krijohet një radhë e veçantë, e cila ka privilegje ndaj fijeve të tjera. Gjatë zgjedhjes së thread-it të ardhshëm për ekzekutim, kjo radhë skanohet fillimisht dhe vetëm nëse është bosh, zgjidhet një thread nga radha e përgjithshme gati për ekzekutim.

Këto algoritme nuk përdorin asnjë informacion paraprak për detyrat. Diferencimi i shërbimit në në këtë rast bazohet në “historinë e ekzistencës” së rrjedhës në sistem.

Nga pikëpamja e problemit të dytë të planifikimit (parimi i zgjedhjes për të ekzekutuar fillin tjetër), algoritmet gjithashtu mund të ndahen me kusht në klasa: algoritme jo prioritare dhe prioritare. Me mirëmbajtjen jo prioritare, detyra e radhës zgjidhet në një rend të caktuar të paracaktuar pa marrë parasysh rëndësinë e tyre relative dhe kohën e mirëmbajtjes. Gjatë zbatimit të disiplinave prioritare, disa detyrave u jepet përparësi për të hyrë në gjendjen e ekzekutimit.

Tani le të shohim disa nga disiplinat më të zakonshme të planifikimit.


Shërbimi i pari vjen, shërbimi i parë. Procesori ndahet duke përdorur parimin FIFO (First In First Out), d.m.th. sipas radhës së pranimit të kërkesave për shërbim. Kjo qasje ju lejon të zbatoni strategjinë e "përfundimit të llogaritjeve sipas renditjes që ato shfaqen kur është e mundur". Ato detyra që u bllokuan gjatë ekzekutimit, pasi hyjnë në gjendje gatishmërie, vihen në radhë para atyre detyrave që ende nuk janë ekzekutuar. Kështu krijohen dy radhë: njëra e detyrave që ende nuk janë ekzekutuar dhe tjetra e detyrave që kanë kaluar nga gjendja në pritje.

Kjo disiplinë zbatohet si jo parandaluese kur detyrat e lëshojnë procesorin vullnetarisht.

Dinjiteti Ky algoritëm është i lehtë për t'u zbatuar. Disavantazhi– Nën ngarkesë të madhe, detyrat e shkurtra detyrohen të presin në sistem për një kohë të gjatë. Qasja e mëposhtme eliminon këtë pengesë.

Së pari shërbehet procesi më i shkurtër. Sipas këtij algoritmi, filli me kohën minimale të parashikuar për të përfunduar punën e tij caktohet pranë ekzekutimit. Këtu, përparësi u jepet temave që kanë pak kohë para se të përfundojnë. Kjo zvogëlon numrin e detyrave në pritje në sistem. Disavantazhiështë nevoja për të njohur kohët e parashikuara paraprakisht, gjë që nuk është gjithmonë e mundur. Si një përafrim i përafërt, në disa raste mund të përdorni kohën që thread e kaloi për marrjen e kontrollit të fundit.

Algoritmi i përket kategorisë së jo-preemptive, pa prioritet.

Algoritmet e emërtuara mund të përdoren për mënyrat e funksionimit në grup, kur përdoruesi nuk pret që sistemi të përgjigjet. Për llogaritjen interaktive, është e nevojshme para së gjithash të sigurohet koha e pranueshme e përgjigjes dhe shërbimi i barabartë për sistemet multi-terminale. Për sistemet me një përdorues, është e dëshirueshme që ato programe me të cilat punohet drejtpërdrejt të kenë kohë më të mira përgjigjeje sesa punët në sfond. Për më tepër, disa aplikacione, ndërkohë që funksionojnë pa ndërveprim të drejtpërdrejtë të përdoruesit, duhet të garantohet që të marrin pjesën e tyre të kohës së procesorit (për shembull, një program e-mail). Për të zgjidhur probleme të tilla, përdoren metodat e shërbimit prioritar dhe koncepti i kuantizimit.


Disiplina e karuselit, ose rrethoreR.R.(Round Robin). Kjo disiplinë i referohet algoritmeve parandaluese dhe bazohet në kuantizimin. Çdo detyrë merr kohën e procesorit në pjesë - kuante. Pas përfundimit të kuantumit kohor, detyra hiqet nga procesori dhe vendoset në fund të radhës së proceseve gati për ekzekutim, dhe detyra e radhës pranohet për servisim nga procesori. Për funksionimin optimal të sistemit, është e nevojshme të zgjidhet saktë ligji sipas të cilit pjesët kohore u ndahen detyrave.

Vlera kuantike zgjidhet si një kompromis midis kohës së pranueshme të përgjigjes së sistemit ndaj kërkesave të përdoruesve (në mënyrë që kërkesat e tyre më të thjeshta të mos shkaktojnë pritje të gjata) dhe kostove të përgjithshme të detyrave që ndryshojnë shpesh. Kur ndërpritet, OS duhet të ruajë një sasi mjaft të madhe informacioni rreth procesit aktual, të vendosë dorezën e detyrës së anuluar në një radhë dhe të ngarkojë kontekstin e detyrës së re. Me një pjesë të vogël kohore dhe ndërrime të shpeshta, pjesa relative e shpenzimeve të tilla do të bëhet e madhe dhe kjo do të degradojë performancën e sistemit në tërësi. Nëse pjesa kohore është e madhe dhe radha e detyrave të gatshme rritet, përgjigja e sistemit do të bëhet e dobët.

Në disa sisteme operative, është e mundur që në mënyrë eksplicite të specifikohet vlera e një pjese kohore ose diapazoni i lejuar i vlerave të tij. Për shembull, në OS/2, skedari CONFIG.SYS përdor operatorin TIMESLICE për të specifikuar vlerat minimale dhe maksimale për një pjesë kohore: TIMESLICE=32.256 tregon se pjesa kohore mund të ndryshohet nga 32 në 256 milisekonda.

Kjo disiplinë shërbimi është një nga më të zakonshmet. Në disa raste, kur sistemi operativ nuk e mbështet në mënyrë të qartë disiplinën e planifikimit të rrumbullakët, një mirëmbajtje e tillë mund të organizohet artificialisht. Për shembull, disa RTOS përdorin planifikimin me prioritete absolute dhe kur prioritetet janë të barabarta, zbatohet parimi i radhës. Kjo do të thotë, vetëm një detyrë me një prioritet më të lartë mund të heqë një detyrë nga ekzekutimi. Nëse është e nevojshme, organizoni shërbimin në mënyrë të barabartë dhe të barabartë, d.m.th. Për të siguruar që të gjitha punët të marrin të njëjtat pjesë kohore, operatori i sistemit mund ta zbatojë vetë një shërbim të tillë. Për ta bërë këtë, mjafton të caktoni të njëjtat prioritete për të gjitha detyrat e përdoruesit dhe të krijoni një detyrë me prioritet të lartë, e cila nuk duhet të bëjë asgjë tjetër përveçse të planifikohet për ekzekutim në një kohëmatës në intervale të caktuara kohore. Kjo detyrë vetëm do të heqë aplikacionin aktual nga ekzekutimi, ai do të zhvendoset në fund të radhës dhe vetë detyra do të largohet menjëherë nga procesori dhe do t'ia japë procesit tjetër në radhë.

Në zbatimin e saj më të thjeshtë, disiplina e shërbimit karusel supozon se të gjitha punët kanë të njëjtin prioritet. Nëse është e nevojshme të futet një mekanizëm shërbimi me përparësi, zakonisht organizohen disa radhë, në varësi të prioriteteve, dhe shërbimi i një radhe me prioritet më të ulët kryhet vetëm kur radha me prioritet më të lartë është bosh. Ky algoritëm përdoret për të planifikuar në sistemet OS/2 dhe Windows NT.

Planifikimi sipas prioriteteve.

Një koncept i rëndësishëm që qëndron në themel të shumë algoritmeve parandaluese është shërbimi parandalues. Algoritme të tilla përdorin informacionin që gjendet në përshkruesin e rrjedhës - prioriteti i tij. Sisteme të ndryshme e përcaktojnë përparësinë ndryshe. Në disa sisteme, vlera e prioritetit më të lartë mund të konsiderohet numerikisht vlerën më të lartë, në të tjerat, përkundrazi, prioriteti më i lartë konsiderohet zero.

Në mënyrë tipike, prioriteti i një thread lidhet drejtpërdrejt me prioritetin e procesit brenda të cilit thread po funksionon. Prioriteti i procesit caktohet nga sistemi operativ kur krijohet, duke marrë parasysh nëse procesi është sistemi ose aplikacioni, cili është statusi i përdoruesit që ka nisur procesin dhe nëse ka pasur një udhëzim të qartë të përdoruesit për të caktuar një prioritet të caktuar ndaj procesit. Vlera e përparësisë përfshihet në dorezën e procesit dhe përdoret kur caktohet prioritet në fijet e tij. Nëse një thread nuk inicohet nga një komandë përdoruesi, por si rezultat i një thread tjetër që ekzekuton një thirrje sistemi, atëherë OS duhet të marrë parasysh parametrat e thirrjes së sistemit për t'i dhënë përparësi asaj.

Kur planifikoni mirëmbajtjen e programit sipas algoritmeve të përshkruara më parë, mund të lindë një situatë kur disa detyra kontrolli ose menaxhimi nuk mund të zbatohen për një periudhë të gjatë kohore për shkak të rritjes së ngarkesës në sistem (veçanërisht në RTOS). Për më tepër, pasojat për shkak të përfundimit të parakohshëm të detyrave të tilla mund të jenë më të rënda sesa për shkak të mospërfundimit të disa programeve me prioritet më të lartë. Në këtë rast, do të ishte e këshillueshme që të ndryshoni përkohësisht prioritetin e detyrave "emergjente" (atyre të cilave u ka skaduar koha e përpunimit) dhe pas ekzekutimit të rivendosni vlerën e mëparshme. Futja e mekanizmave për ndryshimin dinamik të prioriteteve bën të mundur zbatimin e një përgjigjeje më të shpejtë të sistemit ndaj kërkesave të shkurtra të përdoruesve (që është e rëndësishme gjatë punës interaktive), por në të njëjtën kohë garanton përmbushjen e çdo kërkese.

Pra, prioriteti mund të jetë statike(i fiksuar) ose dinamike(ndryshimi i sistemit në varësi të situatës në të). E ashtuquajtura prioriteti i fillit bazë varet drejtpërdrejt nga prioriteti bazë i procesit që e ka gjeneruar atë. Në disa raste, sistemi mund të rrisë përparësinë e një thread (dhe në shkallë të ndryshme), për shembull, nëse pjesa kohore e procesorit që i është caktuar nuk është përdorur plotësisht, ose të ulë përparësinë ndryshe. Për shembull, OS u jep më shumë përparësi thread-ve që presin hyrjen në tastierë dhe më pak thread-ve që kryejnë operacione në disk. Në disa sisteme që përdorin një mekanizëm prioritar dinamik, përdoren formula mjaft komplekse për të ndryshuar përparësinë, të cilat përfshijnë vlerat e prioriteteve bazë, shkallën e ngarkesës së sistemit kompjuterik, vlerën fillestare të prioritetit të specifikuar nga përdoruesi, etj. .

Ekzistojnë dy lloje të planifikimit prioritar: mirëmbajtja me prioritete relative dhe shërbimi me prioritete absolute. Në të dyja rastet, zgjedhja e një filli për ekzekutim kryhet në të njëjtën mënyrë - zgjidhet filli me përparësinë më të lartë, dhe momenti i ndryshimit të fillit aktiv përcaktohet ndryshe. Në një sistem relativ prioritar, filli aktiv funksionon derisa të largohet nga procesori (ose pret, ndodh një gabim ose thread përfundon). Në një sistem me prioritete absolute, ndërprerja e fillit aktiv, përveç arsyeve të treguara, ndodh edhe nëse një thread me prioritet më të madh se ai aktiv shfaqet në radhën e thread-ve të gatshëm. Pastaj filli i rrjedhjes ndërpritet dhe vihet në gjendje gatishmërie.

Një sistem me planifikim relativ prioritar minimizon kostot e ndërrimit, por një detyrë e vetme mund të zërë procesorin për një kohë të gjatë. Ky modalitet shërbimi nuk është i përshtatshëm për sistemet e ndarjes në kohë dhe në kohë reale, por në sistemet e përpunimit të grupeve (për shembull, OS/360) përdoret gjerësisht. Planifikimi i prioritetit absolut është i përshtatshëm për sistemet e menaxhimit të objektit ku reagimi i shpejtë ndaj ngjarjeve është i rëndësishëm.

Lloji i planifikimit të përzier përdoret në shumë sisteme operative: algoritmet e planifikimit të bazuara në prioritet kombinohen me konceptin e kuantizimit.

ZHVILLIMI I MODULIT TË SISTEMIT OPERATIV TRAJNIMOR

Udhëzimet

për dizajnimin e kurseve në disiplinë

"OS"

për studentët me kohë të plotë

drejtimet

PREZANTIMI 4

1. Seksioni teorik. 4

1.1. Nënsistemi i kontrollit të procesit. 4

1.1.1. Konteksti dhe trajtimi i procesit. 5

1.1.2. Algoritmet e planifikimit të procesit. 6

1.1.3. Algoritmet e planifikimit parandalues ​​dhe jo parandalues. 9

1.1.4. Modeli i procesit dhe funksionet e nënsistemit të menaxhimit të procesit të sistemit operativ arsimor 12

1.2. Nënsistemi i menaxhimit të memories.. 17

1.2.1. Shpërndarja e faqeve. 18

1.2.2. Shpërndarja e segmentit. 22

1.2.3. Shpërndarja e segmentit të faqeve. 23

1.2.4. Algoritmet e zëvendësimit të faqeve. 24

1.3. Menaxhimi i skedarëve. tridhjetë

1.3.1. Emrat e skedarëve. tridhjetë

1.3.2. Llojet e skedarëve. 32

1.3.3. Organizimi fizik dhe adresa e dosjes. 33

2. Procedura për përfundimin e projektit të kursit. 38

3. Opsione për detyra. 39

Bibliografia 42

SHTOJCA A... 43

PREZANTIMI

Qëllimi i projektit të lëndës: të studiojë bazë teorike ndërtimi i moduleve të sistemit operativ. Fitoni aftësi praktike në zhvillimin e një programi që është pjesë e sistemit operativ.

Seksioni teorik

Funksionet e sistemit operativ të një kompjuteri të pavarur zakonisht grupohen ose sipas llojeve të burimeve lokale që menaxhon OS ose sipas detyrave specifike që zbatohen për të gjitha burimet. Ndonjëherë grupe të tilla funksionesh quhen nënsisteme. Nënsistemet më të rëndësishme janë nënsistemet e procesit, kujtesës, skedarëve dhe menaxhimit të pajisjeve të jashtme, dhe nënsistemet e përbashkëta për të gjitha burimet janë ndërfaqja e përdoruesit, mbrojtja e të dhënave dhe nënsistemet e administrimit.

Nënsistemi i kontrollit të procesit

Pjesa më e rëndësishme e sistemit operativ, e cila ndikon drejtpërdrejt në funksionimin e kompjuterit, është nënsistemi i kontrollit të procesit. Për çdo proces të krijuar rishtazi, OS gjeneron struktura informacioni të sistemit që përmbajnë të dhëna në lidhje me nevojat e procesit për burimet e sistemit kompjuterik, si dhe për burimet e alokuara në të vërtetë për të. Kështu, një proces mund të përkufizohet gjithashtu si një aplikim për konsumimin e burimeve të sistemit.

Në mënyrë që një proces të ekzekutohet, sistemi operativ duhet t'i caktojë atij një zonë RAM për të vendosur kodin dhe të dhënat e procesit dhe t'i sigurojë atij sasinë e kërkuar të kohës së procesorit. Përveç kësaj, procesi mund të ketë nevojë për qasje në burime të tilla si skedarë dhe pajisje hyrëse/dalëse.

Në një sistem multitasking, një proces mund të jetë në një nga tre gjendjet kryesore:

EKZEKUTIMI - gjendja aktive e një procesi, gjatë të cilit procesi ka të gjitha burimet e nevojshme dhe ekzekutohet drejtpërdrejt nga procesori;

WAITING është gjendja pasive e një procesi, procesi është i bllokuar, ai nuk mund të ekzekutohet për arsyet e tij të brendshme, ai pret që të ndodhë ndonjë ngjarje, për shembull, përfundimi i një operacioni I/O, marrja e një mesazhi nga një proces tjetër. , ose lirimin e disa burimeve që i nevojiten;

READY është gjithashtu një gjendje pasive e një procesi, por në këtë rast procesi është i bllokuar për shkak të rrethanave të jashtme: procesi ka të gjitha burimet e nevojshme për të, është gati për t'u ekzekutuar, por procesori është i zënë me ekzekutimin e një procesi tjetër.

Gjatë ciklit jetësor, çdo proces lëviz nga një gjendje në tjetrën në përputhje me algoritmin e planifikimit të procesit të zbatuar në një sistem operativ të caktuar. Një grafik tipik i gjendjes së procesit është paraqitur në Figurën 1.1.

Figura 1.1 — Grafiku i gjendjes së procesit në një mjedis me shumë detyra

Në një sistem me një procesor, mund të ketë vetëm një proces në gjendjen RUNNING, dhe në secilën nga gjendjet WAITING dhe READY mund të ketë disa procese; këto procese formojnë përkatësisht radhët e proceseve të pritjes dhe proceseve të gatshme.

Cikli i jetes procesi fillon me gjendjen READY, kur procesi është gati për t'u ekzekutuar dhe është në pritje të radhës. Kur aktivizohet, procesi shkon në gjendjen RUNNING dhe mbetet në të derisa ose të lëshojë vetë procesorin, duke shkuar në gjendjen e PRITJES për ndonjë ngjarje, ose të dëbohet me forcë nga procesori, për shembull, për shkak të shterimit të sasisë së caktuar. këtë proces Kuantike e kohës së CPU-së. Në rastin e fundit, procesi kthehet në gjendjen GATI. Procesi kalon në këtë gjendje nga gjendja PRIT pasi ndodh ngjarja e pritur.

Artikuj për të lexuar:

Bazat e programimit. Menaxhimi i procesit

izolimi i procesit;
  • planifikimi i ekzekutimit të proceseve dhe fijeve (në përgjithësi, duhet të flasim edhe për detyrat e planifikimit);
  • dispeçimi i fijeve;
  • organizimi i ndërveprimit ndërprocesor;
  • sinkronizimi i proceseve dhe fijeve;
  • përfundimi dhe shkatërrimi i proceseve dhe fijeve.
  • Pesë ngjarje kryesore çojnë në krijimin e një procesi:

  • përmbushja e kërkesës së një procesi në vazhdim për të krijuar një proces;
  • një kërkesë e përdoruesit për të krijuar një proces, si p.sh. kur regjistroheni në mënyrë interaktive;
  • filloni një punë grupore;
  • krijimi nga sistemi operativ i një procesi të nevojshëm për funksionimin e çdo shërbimi.
  • Në mënyrë tipike, kur niset OS, krijohen disa procese. Disa prej tyre janë procese me prioritet të lartë që ndërveprojnë me përdoruesit dhe kryejnë punën e caktuar. Proceset e mbetura janë procese në sfond, ato nuk lidhen me përdorues të veçantë, por kryejnë funksione të veçanta - për shembull, në lidhje me postën elektronike, faqet e internetit, printimin, transferimin e skedarëve përmes rrjetit, nisjen periodike të programeve (për shembull, defragmentimi i diskut) etj. Proceset e sfondit quhen demonë.

    Një proces i ri mund të krijohet me kërkesë të procesit aktual. Krijimi i proceseve të reja është i dobishëm në rastet kur detyra që kryhet më lehtë mund të formohet si një grup procesesh të ndërlidhura, por megjithatë të pavarura, ndërvepruese. Në sistemet interaktive, përdoruesi mund të nisë një program duke shtypur një komandë në tastierë ose duke klikuar dy herë në ikonën e programit. Në të dyja rastet, krijohet një proces i ri dhe programi niset në të. NË sistemet e përpunimit të grupeve në mainframe, përdoruesit paraqesin një punë (ndoshta duke përdorur qasje në distancë), dhe OS krijon një proces të ri dhe fillon punën tjetër nga radha kur burimet e nevojshme lirohen.

    Nga pikëpamja teknike, në të gjitha këto raste, një proces i ri formohet në të njëjtën mënyrë: procesi aktual përmbush një kërkesë të sistemit për të krijuar një proces të ri. Nënsistemi i menaxhimit të procesit dhe fijeve është përgjegjës për sigurimin e proceseve me burimet e nevojshme. Sistemi operativ ruan struktura të veçanta informacioni në memorie, në të cilat regjistron se cilat burime i ndahen secilit proces. Ai mund t'i caktojë burimet një procesi për përdorim të vetëm ose përdorim të përbashkët me procese të tjera. Disa nga burimet i ndahen procesit kur ai krijohet, dhe disa ndahen në mënyrë dinamike bazuar në kërkesat gjatë kohë të çojë. Burimet mund t'i alokohen një procesi për të gjithë jetën e tij ose vetëm për një periudhë të caktuar. Gjatë kryerjes së këtyre funksioneve, nënsistemi i kontrollit të procesit ndërvepron me nënsistemet e tjera OS përgjegjëse për të Manaxhimi i burimeve, të tilla si nënsistemi i menaxhimit të kujtesës, nënsistemi hyrës/dalës, sistemi i skedarëve.

    Për të parandaluar ndërhyrjen e proceseve Alokimi i burimeve, dhe gjithashtu nuk mund të dëmtonte kodet dhe të dhënat e njëri-tjetrit, detyra më e rëndësishme e OS është të izolojë një proces nga një tjetër. Për këtë sistemi operativ i siguron çdo procesi një hapësirë ​​të veçantë adresash virtuale në mënyrë që asnjë proces të mos mund të aksesojë drejtpërdrejt komandat dhe të dhënat e një procesi tjetër.

    Në një OS ku ekzistojnë procese dhe thread-e, një proces konsiderohet si një kërkesë për të konsumuar të gjitha llojet e burimeve, përveç kohës së një procesori. Ky burim kritik shpërndahet nga sistemi operativ midis njësive të tjera të punës - fijeve, të cilat kanë marrë emrin e tyre për faktin se ato përfaqësojnë sekuenca (fije ekzekutimi) komandash. Kalimi nga ekzekutimi i një filli në tjetrin kryhet si rezultat i planifikimi Dhe dërgimin. Puna për të përcaktuar se kur filli aktual duhet të ndërpritet dhe filli që duhet të lejohet të funksionojë quhet planifikim. Planifikimi i fijeve bëhet në bazë të informacionit të ruajtur në përshkruesit e procesit dhe thread-it. Gjatë planifikimit, merret parasysh prioriteti i fillit, koha e tyre e pritjes në radhë, e akumuluar kohë të çojë, intensiteti i aksesit I/O dhe faktorë të tjerë.

    Dispeçimi konsiston në zbatimin e zgjidhjes së gjetur si rezultat i planifikimit, d.m.th. në ndërrimin e procesorit nga një thread në tjetrin. Shpërndarja kryhet në tre faza:

    • ruajtja e kontekstit të fillit aktual;
    • ngarkimi i kontekstit të fillit të zgjedhur si rezultat i planifikimit;
    • nisja e një filli të ri për ekzekutim.

    Kur një sistem kryen disa detyra të pavarura njëkohësisht, lindin probleme shtesë. Megjithëse thread-et lindin dhe ekzekutohen në mënyrë sinkrone, ato mund të kenë nevojë të ndërveprojnë, si për shembull kur shkëmbejnë të dhëna. Për të komunikuar me njëri-tjetrin, proceset dhe thread-at mund të përdorin një gamë të gjerë mundësish: tuba (në UNIX), kuti postare (Windows), thirrje procedurash në distancë, priza (në Windows ato lidhin procese në makina të ndryshme). Përputhja e shpejtësive të file-ve është gjithashtu shumë e rëndësishme për të parandaluar kushtet e garës (ku tema të shumta përpiqen të modifikojnë të njëjtin skedar), bllokimet dhe përplasjet e tjera që ndodhin gjatë ndarjes së burimeve.

    Sinkronizimi threads është një nga funksionet më të rëndësishme të procesit dhe nënsistemit të menaxhimit të fijeve. Sistemet moderne operative ofrojnë një sërë mekanizmash sinkronizimi, duke përfshirë semaforë, mutexes, rajone kritike dhe ngjarje. Të gjithë këta mekanizma punojnë me fije, jo me procese. Pra, kur një thread bllokohet në një semafor, fijet e tjera në atë proces mund të vazhdojnë të funksionojnë.

    Sa herë që një proces del - për shkak të një prej ngjarjeve të mëposhtme: dalje normale, dalje gabimi, dalje nga gabimi fatal, vdekje nga një proces tjetër - OS ndërmerr hapa për të pastruar gjurmët e tij në sistem. Nënsistemi i menaxhimit të procesit mbyll të gjithë skedarët me të cilët ka punuar procesi, duke çliruar zonat e RAM-it të alokuara për kodet, të dhënat dhe strukturat e informacionit të sistemit të procesit. Të gjitha radhët e mundshme të sistemit operativ dhe një listë burimesh që kishin lidhje me procesin që përfundonte korrigjohen.

    Siç është përmendur tashmë, për të mbështetur multiprogramimi, OS duhet të projektojë për vete ato njësi të brendshme të punës midis të cilave procesori dhe burimet e tjera kompjuterike do të ndahen. Shtrohet pyetja: cili është ndryshimi thelbësor midis këtyre njësive të punës, çfarë efekti multiprogramues mund të merret nga përdorimi i tyre dhe në cilat raste duhet të krijohen këto njësi të punës së sistemit operativ?

    Natyrisht, çdo operacion i një sistemi kompjuterik konsiston në ekzekutimin e një programi. Prandaj, një kod i caktuar programi shoqërohet si me procesin ashtu edhe me fillin, i cili lëshohet në formën e një moduli të ekzekutueshëm. Në rastin më të thjeshtë, një proces përbëhet nga një fije e vetme, dhe disa sisteme moderne operative ende e kanë këtë situatë. Multiprogramimi në OS të tillë ajo kryhet në nivel procesi. Kur ndërveprimi është i nevojshëm, proceset i drejtohen sistemit operativ, i cili, duke vepruar si ndërmjetës, u siguron atyre mjete të komunikimit ndërprocesor - kanale, ndarje postare, seksione të kujtesës së përbashkët, etj.

    Megjithatë, në sistemet që nuk kanë konceptin e një filli, lindin probleme kur organizohen llogaritjet paralele brenda një procesi. Dhe një nevojë e tillë mund të lindë. Çështja është se një proces i vetëm nuk mund të ekzekutohet kurrë më shpejt se në modalitetin me një program. Megjithatë, një aplikacion që ekzekutohet brenda një procesi të vetëm mund të ketë paralelizmi i brendshëm, e cila, në parim, mund të përshpejtojë zgjidhjen e saj. Nëse, për shembull, programi ofron qasje në një pajisje të jashtme, atëherë gjatë këtij operacioni është e mundur të mos bllokohet ekzekutimi i të gjithë procesit, por të vazhdohen llogaritjet në një degë tjetër të programit.

    Kryerja e shumë punëve paralelisht brenda një aplikacioni të vetëm interaktiv përmirëson efikasitetin e përdoruesit. Pra, kur punoni me një redaktues teksti, është e dëshirueshme që të jeni në gjendje të kombinoni shtypjen e tekstit të ri me operacione të tilla të gjata si riformatimi i një pjese të konsiderueshme të tekstit, ruajtja e tij në një disk lokal ose të largët.

    Nuk është e vështirë të imagjinohet një version i ardhshëm i përpiluesit që mund të përpilojë automatikisht skedarët e kodit burimor gjatë pauzave gjatë shtypjes së një programi. Më pas do të shfaqeshin paralajmërimet dhe mesazhet e gabimit në kohë reale dhe përdoruesi do të shihte menjëherë se ku gaboi. Moderne spreadsheets rillogaritni të dhënat në sfond sapo përdoruesi të ndryshojë diçka. Përpunuesit e tekstit e ndajnë tekstin në faqe, e kontrollojnë atë për drejtshkrim dhe gabime gramatikore, duke shtypur në sfond, duke ruajtur tekstin çdo disa minuta, etj. Në të gjitha këto raste, thread-et përdoren si një mjet për paralelizimin e llogaritjeve.

    Këto detyra mund t'i caktohen një programuesi, i cili do të shkruante një program dispeçer që zbaton paralelizmin brenda një procesi të vetëm. Sidoqoftë, kjo është shumë e vështirë dhe vetë programi do të ishte shumë konfuz dhe i vështirë për t'u korrigjuar.

    Një zgjidhje tjetër është krijimi i disa proceseve për një aplikacion për secilën nga paralelet

    Një nga nënsistemet kryesore të çdo OS moderne multiprogramore që ndikon drejtpërdrejt në funksionimin e kompjuterit është nënsistemi i menaxhimit të procesit dhe fijeve. Funksionet kryesore të këtij nënsistemi:

      krijimi i proceseve dhe fijeve;

      sigurimi i proceseve dhe fijeve me burimet e nevojshme;

      izolimi i procesit;

      planifikimi i ekzekutimit të proceseve dhe fijeve (në përgjithësi, duhet të flasim edhe për detyrat e planifikimit);

      dispeçimi i fijeve;

      organizimi i komunikimit ndërprocesor;

      sinkronizimi i proceseve dhe fijeve;

      përfundimi dhe shkatërrimi i proceseve dhe fijeve.

    1. Pesë ngjarje kryesore çojnë në krijimin e një procesi:

      përmbushja e kërkesës së një procesi në vazhdim për të krijuar një proces;

      një kërkesë e përdoruesit për të krijuar një proces, si p.sh. kur regjistroheni në mënyrë interaktive;

      filloni një punë grupore;

      krijimi nga sistemi operativ i një procesi të nevojshëm për funksionimin e çdo shërbimi.

    Në mënyrë tipike, kur niset OS, krijohen disa procese. Disa prej tyre janë procese me prioritet të lartë që ndërveprojnë me përdoruesit dhe kryejnë punën e caktuar. Proceset e mbetura janë procese në sfond, ato nuk janë të lidhura me përdorues të veçantë, por kryejnë funksione të veçanta - për shembull, në lidhje me postën elektronike, faqet e internetit, daljen në vulë, transferimi i skedarëve Nga rrjeti, nisja periodike e programeve (për shembull, defragmentimi i diskut) etj. Proceset e sfondit quhen demonë.

    Mund të krijohet një proces i ri Nga kërkesë e procesit aktual. Krijimi i proceseve të reja është i dobishëm në rastet kur detyra që kryhet më lehtë mund të formohet si një grup procesesh të ndërlidhura, por megjithatë të pavarura, ndërvepruese. Në sistemet interaktive përdorues mund të nisë një program duke shtypur një komandë në tastierë ose duke klikuar dy herë në ikonën e programit. Në të dyja rastet krijohet një proces i ri dhe Nisja ka programe në të. NË sistemet e përpunimit të grupeve në mainframe, përdoruesit paraqesin një punë (ndoshta duke përdorur qasje në distancë), dhe OS krijon një proces të ri dhe fillon punën tjetër nga radha kur burimet e nevojshme lirohen.

    2. Nga pikëpamja teknike, në të gjitha këto raste, një proces i ri formohet në të njëjtën mënyrë: procesi aktual ekzekuton sistemin. kërkesë për të krijuar një proces të ri. Nënsistemi i menaxhimit të procesit dhe fijeve është përgjegjës për sigurimin e proceseve me burimet e nevojshme. Sistemi operativ ruan struktura të veçanta informacioni në memorie, në të cilat regjistron se cilat burime i ndahen secilit proces. Ai mund t'i caktojë burimet një procesi për përdorim të vetëm ose përdorim të përbashkët me procese të tjera. Disa nga burimet i ndahen procesit kur ai krijohet, dhe disa ndahen në mënyrë dinamike Nga hetime në kohë të çojë. Burimet mund t'i alokohen një procesi për të gjithë jetën e tij ose vetëm për një periudhë të caktuar. Gjatë kryerjes së këtyre funksioneve, nënsistemi i kontrollit të procesit ndërvepron me nënsistemet e tjera OS përgjegjëse për të Manaxhimi i burimeve, siç është nënsistemi i menaxhimit të kujtesës, nënsistemi hyrës/dalës, sistemi i skedarëve.

    3. Për të parandaluar ndërhyrjen e proceseve Alokimi i burimeve, dhe gjithashtu nuk mund të dëmtonte kodet dhe të dhënat e njëri-tjetrit, Detyra më e rëndësishme e OS është të izolojë një proces nga një tjetër. Për këtë sistemi operativ i siguron çdo procesi një hapësirë ​​të veçantë adresash virtuale në mënyrë që asnjë proces të mos mund të aksesojë drejtpërdrejt komandat dhe të dhënat e një procesi tjetër.

    4. Në një OS ku ekzistojnë procese dhe thread-e, një proces konsiderohet si një kërkesë për të konsumuar të gjitha llojet e burimeve, përveç kohës së një procesori. Kjo më e rëndësishmja burim shpërndahen nga sistemi operativ midis njësive të tjera të punës - fijeve, të cilat e kanë marrë emrin e tyre për faktin se ato përfaqësojnë sekuenca (fije ekzekutimi) komandash. Kalimi nga ekzekutimi i një filli në tjetrin kryhet si rezultat iplanifikimi Dhedërgimin . Punë Nga Përcaktimi i momentit në të cilin filli aktual duhet të ndërpritet dhe thread-i që duhet të lejohet të rrjedhë quhet scheduling. Planifikimi i fijeve bëhet në bazë të informacionit të ruajtur në përshkruesit e procesit dhe thread-it. Gjatë planifikimit, merret parasysh prioriteti i fillit, koha e tyre e pritjes në radhë, e akumuluar kohë të çojë, intensiteti i aksesit I/O dhe faktorë të tjerë.

    5. Dispeçimi konsiston në zbatimin e zgjidhjes së gjetur si rezultat i planifikimit, d.m.th. në ndërrimin e procesorit nga një thread në tjetrin. Shpërndarja kryhet në tre faza:

      ruajtja e kontekstit të fillit aktual;

      nisja e një filli të ri për ekzekutim.

    6. Kur një sistem kryen disa detyra të pavarura njëkohësisht, lindin probleme shtesë. Megjithëse thread-et lindin dhe ekzekutohen në mënyrë sinkrone, ato mund të kenë nevojë të ndërveprojnë, për shembull, kur shkëmbeni të dhëna. Për të komunikuar me njëri-tjetrin, proceset dhe thread-et mund të përdorin një gamë të gjerë aftësish: kanale (në UNIX), kuti postare ( Dritaret), telefonata e procedurës në distancë, prizat (in Dritaret lidhni proceset në makina të ndryshme). Përputhja e shpejtësisë së fijeve është gjithashtu shumë e rëndësishme për të parandaluar kushtet e garës (ku fijet e shumta përpiqen të ndryshojnë të njëjtën dosje), ngërçe dhe përplasje të tjera që ndodhin kur ndahen burimet.

    7. Sinkronizimi threads është një nga funksionet më të rëndësishme të procesit dhe nënsistemit të menaxhimit të fijeve. Sistemet moderne operative ofrojnë një sërë mekanizmash sinkronizimi, duke përfshirë semaforë, mutexes, rajone kritike dhe ngjarje. Të gjitha këto mekanizmat punoni me fije, jo me procese. Kjo është arsyeja pse kur rrjedhin blloqe në një semafor, temat e tjera në këtë proces mund të vazhdojnë të funksionojnë.

    8. Sa herë që përfundon procesi, – dhe kjo ndodh për shkak të një prej ngjarjeve të mëposhtme: normale dalje, dalje Nga gabim, dalje Nga gabim fatal, shkatërrim nga një proces tjetër - OS ndërmerr hapa për të "pastruar gjurmët" e pranisë së tij në sistem. Nënsistemi i menaxhimit të procesit mbyll të gjithë skedarët me të cilët ka punuar procesi, duke çliruar zonat e RAM-it të alokuara për kodet, të dhënat dhe strukturat e informacionit të sistemit të procesit. E kryer korrigjim të gjitha llojet e radhëve të OS dhe listë burimet që përmbanin lidhje me procesin që përfundon.

    Funksionet e sistemit operativ të një kompjuteri të pavarur zakonisht grupohen ose sipas llojeve të burimeve lokale që menaxhon OS ose sipas detyrave specifike që zbatohen për të gjitha burimet. Ndonjëherë grupe të tilla funksionesh quhen nënsisteme. Nënsistemet më të rëndësishme të menaxhimit të burimeve janë nënsistemet e menaxhimit të procesit, kujtesës, skedarëve dhe pajisjeve të jashtme, dhe nënsistemet e përbashkëta për të gjitha burimet janë ndërfaqja e përdoruesit, siguria e të dhënave dhe nënsistemet e administrimit. Pjesa më e rëndësishme e sistemit operativ, e cila ndikon drejtpërdrejt në funksionimin e kompjuterit, është nënsistemi i kontrollit të procesit. Për çdo proces të krijuar rishtazi, OS gjeneron struktura informacioni të sistemit që përmbajnë të dhëna në lidhje me nevojat e procesit për burimet e sistemit kompjuterik, si dhe për burimet e alokuara në të vërtetë për të. Kështu, një proces mund të përkufizohet gjithashtu si një aplikim për konsumimin e burimeve të sistemit. Në një sistem operativ me shumë programe, disa procese mund të ekzistojnë njëkohësisht. Disa procese krijohen me iniciativën e përdoruesve dhe aplikacioneve të tyre; procese të tilla zakonisht quhen procese përdoruesi. Proceset e tjera, të quajtura procese të sistemit, inicializohen nga vetë sistemi operativ për të kryer funksionet e tyre. Një detyrë e rëndësishme e sistemit operativ është të mbrojë burimet e alokuara për një proces të caktuar nga proceset e tjera. Një nga burimet e procesit më të mbrojtura me kujdes janë zonat e RAM-it në të cilat ruhen kodi i procesit dhe të dhënat. Kompleti i të gjitha zonave të RAM-it të alokuara nga sistemi operativ për një proces quhet hapësira e adresës së tij. Çdo proces thuhet se funksionon në hapësirën e vet të adresave, duke iu referuar mbrojtjes së hapësirave të adresave të ofruara nga OS. Llojet e tjera të burimeve mbrohen gjithashtu, si skedarët, pajisjet e jashtme, etj. Sistemi operativ jo vetëm që mund të mbrojë burimet e alokuara në një proces, por gjithashtu mund të organizojë ndarjen e tyre, për shembull, duke lejuar akses në një zonë të caktuar të \u200memoria nga disa procese. Gjatë jetës së procesit, ekzekutimi i tij mund të ndërpritet dhe të vazhdohet shumë herë. Për të rifilluar ekzekutimin e një procesi, është e nevojshme të rivendosni gjendjen e mjedisit të tij operativ. Gjendja e mjedisit të funksionimit identifikohet nga gjendja e regjistrave dhe numëruesit të programit, mënyra e funksionimit të procesorit, treguesit për hapjen e skedarëve, informacioni për operacionet hyrëse/dalëse të paplotësuara, kodet e gabimit të thirrjeve të sistemit të kryera nga një proces i caktuar, etj. . d) Ky informacion quhet konteksti i progresit. Ata thonë se kur një proces ndryshon, ndodh një ndërrim i kontekstit. Kështu, nënsistemi i menaxhimit të procesit planifikon ekzekutimin e proceseve, domethënë shpërndan kohën e procesorit midis disa proceseve ekzistuese në të njëjtën kohë në sistem, krijon dhe shkatërron proceset, siguron proceset me burimet e nevojshme të sistemit, ruan sinkronizimin e proceseve dhe gjithashtu siguron ndërveprim. ndërmjet proceseve.

    Ndani me miqtë ose kurseni për veten tuaj:

    Po ngarkohet...