Professional Documents
Culture Documents
1.1 Hyrje
Në skenarin më të thjeshtë, sistemi operativ është pjesa e parë e softuerit që funksionon në
kompjuter kur fillon. Detyra e tij është të koordinojë ekzekutimin e të gjithë softuerëve të tjerë,
kryesisht aplikacionet e përdoruesve. Ai gjithashtu siguron shërbime të ndryshme të zakonshme që
janë të nevojshme për përdoruesit dhe aplikacionet.
Një sistem operativ është një program i cili vepron si një ndërfaqe midis një përdoruesi të një
kompjuteri dhe pajisjeve kompjuterike. Qëllimi i një sistemi operativ është të sigurojë një mjedis në
të cilin një përdorues mund të ekzekutojë programin.
Një sistem operativ vepron si një menaxher burimesh dhe ndan burimet për programe të veçanta
dhe përdorues sipas nevojës për detyrën e tyre. Burimet e kërkuara zakonisht janë pajisjet
hyrëse/dalëse, kujtesa, hapësira për ruajtjen e skedarëve, koha e CPU -së etj.
Sistemi operativ duhet të sigurojë funksionimin korrekt të sistemit kompjuterik. Pajisja duhet të
sigurojë mekanizma të përshtatshëm për të parandaluar që programet e përdoruesve të ndërhyjnë
në funksionimin e duhur të sistemit
Sistemi operativ kontrollon dhe koordinon përdorimin e harduerit midis programeve të ndryshme të
aplikimit për përdoruesit e ndryshëm. Sistemi operativ siguron mjetet për përdorimin e duhur të
burimeve në operacionet e sistemit kompjuterik. Sistemi operativ nuk kryen asnjë funksion të
dobishëm në vetvete. Ai thjesht siguron një mjedis brenda të cilit programet e tjera mund të bëjnë
punë të dobishme. Sistemi operativ vepron si menaxher i këtyre burimeve dhe i ndan ato në
programe dhe përdorues të veçantë sipas nevojës për detyrën e tyre. Meqenëse mund të ketë
shumë kërkesa, ndoshta konfliktuale, për burime, sistemi operativ duhet të vendosë se cilat kërkesa
janë ndarë burime për të funksionuar në mënyrë efikase sistemin kompjuterik.
Një sistem operativ është një program kontrolli. Një program kontrolli kontrollon ekzekutimin e
programeve të përdoruesve për të parandaluar gabimet dhe përdorimin e pahijshëm të kompjuterit.
Ai është veçanërisht i shqetësuar me funksionimin dhe kontrollin e pajisjeve I/O.
Qëllimi themelor i sistemit kompjuterik është të ekzekutojë programet e përdoruesve dhe të zgjidhë
problemet e përdoruesve. Qëllimi kryesor i një sistemi operativ është të jetë i përshtatshëm për
përdoruesit.
1.2 Sistemi operativ kryen menaxhimin e burimeve Një nga karakteristikat kryesore të
sistemeve operative është mbështetja për multiprogramimin. Kjo do të thotë që shumë programe
mund të ekzekutohen "në të njëjtën kohë". Por duke pasur parasysh se ekziston vetëm një procesor,
ky ekzekutim i njëkohshëm është në fakt një trillim. Në realitet, sistemi operativ i kontrollon burimet
e sistemit midis programeve konkurruese, duke u përpjekur ta bëjë atë të duket sikur secili ka
kompjuterin për vete. Në zemër të programimit të shumëfishtë qëndron menaxhimi i burimeve duke
vendosur se cili program drejtues do të marrë çfarë burimesh. Menaxhimi i burimeve është i
ngjashëm me problemin e shkurtër: të gjithë duan të mbulohen, por batanije është shumë e
shkurtër për të mbuluar të gjithë menjëherë.
Burimet në një sistem kompjuterik përfshijnë pjesët e dukshme të harduerit të nevojshëm për
programet:
Vetë CPU.
Kujtesa për të ruajtur programet dhe të dhënat e tyre.
Hapësirë në disk për skedarët. Por ka edhe burime të brendshme të nevojshme për sistemin
operativ:
Hapësirë në disk për fshirjen e kujtesës.
Hyrjet në tabelat e sistemit, të tilla si tabela e procesit dhe tabela e skedarëve të hapur.
Të gjitha aplikacionet duan të funksionojnë në CPU, por vetëm një mund të funksionojë në të njëjtën
kohë. Prandaj sistemi operativ e lejon secilin të funksionojë për një kohë të shkurtër, dhe më pas e
parandalon atë dhe i jep CPU -së një tjetri. Kjo quhet prerje kohe. Vendimi se cili aplikacion do të
ekzekutohet është planifikimi.
Sa i përket kujtesës, secili aplikacion merr disa korniza memorie për të ruajtur kodin dhe të dhënat e
tij. Nëse shuma e kërkesave të të gjitha aplikacioneve është më shumë se kujtesa fizike e
disponueshme, përdoret paging: faqet e kujtesës që nuk përdoren aktualisht ruhen përkohësisht në
disk ..
Me hapësirën në disk (dhe ndoshta edhe me shënimet në tabelat e sistemit) zakonisht ka një kufi të
vështirë. Sistemi bën ndarjet për aq kohë sa të jetë e mundur. Kur burimi mbaron, kërkesat shtesë
dështojnë. Sidoqoftë, ata mund të provojnë përsëri më vonë, kur shpresojmë se disa burime janë
lëshuar nga përdoruesit e tyre.
Pajisjet kompjuterike
Sistemi operativ
Programi i sistemit
Programi i aplikimit
Programi i aplikimit Pjesët e harduerit përbëhen nga CPU, memoria, pajisjet I/O dhe ruajtja dytësore.
Mbi shtresën e harduerit ekziston Programi i sistemit operativ. Shtresa e tretë është programi i
sistemit i cili përbëhet nga përpiluesit., Assembler, linker etj. Së fundi shtresa e fundit janë
programet e aplikimit përmes të cilave përdoruesit mund të ndërveprojnë me sistemin kompjuterik,
kjo përbëhet nga sistemi i bazës së të dhënave, video lojërat, programet e biznesit etj (në varësi të
interesit të përdoruesve).
Fig 1.1 Pamje shtresore e strukturës së Sistemit Operativ
Ato janë hardueri (Memoria, njësia qendrore e përpunimit dhe njësia Input-output), sistemi
operativ, programi i sistemit, programi i aplikimit. Organizimi bazë i harduerit është paraqitur në fig
1.2.
Fig 1.2 Pamje abstrakte e komponenteve të kompjuterit
Pajisja siguron burimet bazë të llogaritjes. Programi i aplikacionit përcakton mënyrën në të cilën këto
burime përdoren për të zgjidhur problemet kompjuterike të përdoruesve. Programet e sistemit
përbëhen nga përpiluesit, montuesit, lidhësit etj., Sistemi operativ kontrollon dhe koordinon
përdorimin e harduerit midis programeve të ndryshme të aplikimit për përdoruesit e ndryshëm.
Sistemi operativ siguron një mjedis brenda të cilit programet e tjera mund të bëjnë punë të
dobishme dhe kontrollon pajisjet I/O. Qëllimi themelor i sistemit kompjuterik është të ekzekutojë
programet e përdoruesve dhe të zgjidhë problemet e përdoruesve.
2. Operacionet hyrëse/dalëse:
Një program në ekzekutim mund të kërkojë hyrje dhe dalje. Ky I/O mund të përfshijë një skedar ose
një pajisje I/O. Meqenëse një program përdorues nuk mund të ekzekutojë drejtpërdrejt operacionet
I/O, sistemi operativ duhet të sigurojë disa mjete për ta bërë këtë.
4. Zbulimi i gabimit:
Sistemi operativ duhet vazhdimisht të jetë i vetëdijshëm për gabimet e mundshme. Gabime mund të
ndodhin në CPU dhe harduerin e kujtesës siç është gabimi i kujtesës ose ndërprerja e energjisë dhe
në pajisjet hyrëse/dalëse të tilla si një printer pa letër ose në programin e përdoruesit siç është një
tejkalim aritmetik ose qasje në vendndodhjen e paligjshme të kujtesës.
Grupi i mëposhtëm i funksioneve të sistemit operativ ekzistojnë për funksionimin e vetë sistemit.
5. Shpërndarja e burimeve:
Kur ka shumë përdorues ose punë të shumta që funksionojnë në të njëjtën kohë, burimet duhet t'i
ndahen secilit prej tyre. Shumë lloje të ndryshme të burimeve menaxhohen nga sistemi operativ.
6. Kontabiliteti:
Në sistemin me shumë përdorues, sistemi operativ mban shënime se cili përdorues përdor sa dhe
çfarë lloj burimesh kompjuterike.
7. Mbrojtja:
Në sistemin me shumë përdorues, kur punët e më shumë se një përdoruesi ekzekutohen
njëkohësisht, nuk duhet të jetë e mundur që një punë të ndërhyjë me tjetrën.
Ky lloj përpunimi është i vështirë për përdoruesit, kërkon shumë kohë dhe programi tjetër duhet të
presë përfundimin e atij të mëparshëm. Programet i dorëzohen makinës njëra pas tjetrës, kështu që
kjo metodë thuhet se është përpunim serik.
Në sistemet e hershme, përpiluesit dhe montuesit mbaheshin normalisht në kaseta magnetike. Për
të ekzekutuar programin e veçantë të gjuhës, përdoruesi duhej të montonte së pari atë përpiluesin e
veçantë i cili prodhon kodin e gjuhës së asamblesë i cili më pas duhet të mblidhet. Kjo kërkonte
montimin e një kasete tjetër me montues.
Gjatë kohës që kasetat janë duke u montuar ose programuesi po punon me tastierën, CPU qëndron
në punë. Ashtu si në ditët e para kishte shumë pak kompjuterë dhe ata ishin shumë të shtrenjtë.
Koha e kompjuterit ishte shumë e vlefshme dhe pronari i kompjuterit donte që ato të
shfrytëzoheshin sa më shumë.
Pastaj u punësuan operatorët e parë profesionistë kompjuterikë. Meqenëse një operator kishte më
shumë përvojë me montimin e kasetave sesa programuesi, koha e konfigurimit u zvogëlua. Përsëri
për të zvogëluar kohën e konfigurimit punët me nevoja të ngjashme u grumbulluan së bashku dhe
kaluan nëpër kompjuter si grup.
Supozoni se për shembull operatori ka marrë një program FORTRAN, një program COBOL dhe një
program tjetër FORTRAN. Nëse i drejton ato në atë mënyrë, ai do të duhet të konfigurohet për
mjedisin e programit FORTRAN (ngarkimi i kasetave të përpiluesit FORTRAN) pastaj të konfigurojë
programin COBOL dhe më në fund të konfigurojë përsëri për programin FORTRAN. Nëse ai drejton
dy programet FORTRAN si grumbull, ai mund të konfigurojë vetëm një herë për FORTRAN, duke
kursyer kështu kohën e operatorit.
Operatorit i ishte dhënë një përshkrim i shkurtër i programeve që duheshin ekzekutuar në cilat të
dhëna. Për t'i dhënë këtij informacioni drejtpërdrejt banorëve të kartave të kontrollit u prezantuan.
Përveç programit ose të dhënave për një punë, programuesi përfshin karta speciale (karta kontrolli)
të cilat janë direktiva për monitoruesin rezident që tregojnë se çfarë programi do të drejtohet. Për
shembull, një program normal i përdoruesit mund të kërkojë një nga tre programet për tu
ekzekutuar, përpiluesi FORTRAN (FTN), montuesi (ASM) ose programi i përdoruesit. Ekziston një
kartë e veçantë kontrolli për secilën prej tyre:
$ RUN: Ekzekutoni kartën e kontrollit të programit të përdoruesit për secilën nga këto:
Për më tepër, ekzistojnë dy karta kontrolli për të përcaktuar kufijtë e secilës punë:
Tamponim(Buffering):
Tamponimi përpiqet të mbajë si CPU ashtu edhe pajisjet I/O të zëna gjatë gjithë kohës. Buffer
(tampon) është një pjesë e kujtesës, e përdorur për të ruajtur të dhënat përkohësisht. Pasi të jenë
lexuar të dhënat dhe CPU do të fillojë të funksionojë në të, pajisja hyrëse udhëzohet të fillojë
menjëherë hyrjen tjetër. CPU dhe pajisjet hyrëse janë më pas të zëna. Kur CPU është gati për
artikullin tjetër të të dhënave, pajisja hyrëse do të ketë përfunduar së lexuari. CPU mund të fillojë të
përpunojë të dhënat e sapo lexuara, ndërsa pajisja hyrëse fillon të lexojë të dhënat e mëposhtme.
Tamponim i ngjashëm mund të bëhet për daljen; CPU krijon të dhëna të cilat futen në një tampon
derisa një pajisje dalëse ta pranojë atë.
Buffering mban të dyja pajisjet CPU dhe I/O të zëna gjatë gjithë kohës. Nëse CPU po punon në një
regjistrim ndërsa një pajisje hyrëse po punon në një tjetër, ose CPU ose pajisja hyrëse do të
përfundojë së pari. Nëse CPU përfundoi e para, duhet të presë; nuk mund të vazhdojë derisa të
lexohet rekordi tjetër. Nëse pajisja hyrëse është më e shpejtë se CPU, tamponi do të bëhet i plotë
dhe pajisja hyrëse duhet të presë.
Zgjidhja për këtë problem është që operacioni i ardhshëm I/O mund të fillohet vetëm kur të ketë
përfunduar ai i mëparshmi. Ndërprerjet zgjidhin këtë problem. Kur pajisja I/O të përfundojë me një
operacion, ajo ndërpret CPU -në, atëherë CPU ndalon atë që po bën dhe transferohet menjëherë në
një vend fiks, ku rutina e shërbimit të ndërprerjes kontrollon për të parë nëse tamponi nuk është i
plotë (për një pajisje hyrëse ) ose bosh (për një pajisje dalëse), pastaj fillon kërkesën tjetër të I/O.
CPU mund të rifillojë llogaritjen e ndërprerjes. Në këtë mënyrë, pajisjet I/O dhe CPU mund të
operohen me shpejtësi të plotë.
Nëse CPU -ja është shumë më e shpejtë se një pajisje hyrëse, ruajtja është pak e dobishme. Nëse
CPU është gjithmonë më e shpejtë, atëherë gjithmonë do të gjejë një tampon bosh dhe duhet të
presë për pajisjen hyrëse. Për daljen, CPU mund të vazhdojë me shpejtësi të plotë derisa, të gjithë
tamponët e sistemit të jenë plot. Pastaj CPU duhet të presë për pajisjen dalëse.
Derdhje (Spooling):
Spooling qëndron për funksionimin e njëkohshëm periferik on-line. Buffer është një pjesë e vogël e
kujtesës e përdorur për të ruajtur të dhënat përkohësisht gjatë ekzekutimit të programit. Në
spooling disk përdoret si tampon i madh.
Për shembull, nëse dy ose më shumë përdorues lëshojnë komandën e printimit dhe në të njëjtën
kohë nëse printeri printon ndonjë punë tjetër, atëherë komandat e printimit të lëshuara do të
ngarkohen në diskun spool. Disku Spool është një tampon i përkohshëm; mund të lexojë të dhëna
drejtpërdrejt nga pajisjet e ruajtjes dytësore. Ndërsa shtypni daljen e një pune tjetër në të njëjtën
kohë CPU mund të ekzekutojë ndonjë punë tjetër në diskun e spoolit. Kështu, në të njëjtën kohë
përdoruesi po merr të dhëna përmes tastierës për një punë, CPU është e zënë me ekzekutimin e një
pune tjetër dhe printeri është i zënë me marrjen e prodhimit të ndonjë pune tjetër.
Avantazhi i spooling mbi buffering është se spooling mbivendos I/O të një pune me llogaritjen e
punës tjetër. Spooler mund të lexojë të dhënat e një pune ndërsa printon daljen e një pune të
ndryshme. Gjatë kësaj kohe, një punë tjetër mund të kryhet. Buferimi mund të mbivendosë vetëm
I/O të një pune me llogaritjen e vet dhe III/O; derdhja mund të mbivendoset I/O dhe llogaritjen e
shumë punëve.
Kur përdoret për sistemin me shumë përdorues, aplikacionet e të gjithë përdoruesve mbrohen nga
njëri-tjetri, burimet e sistemit ndahen midis shumë përdoruesve dhe sistemi operativ ruan kontrollin
mbi burimet, përdor mënyrat e mëposhtme të funksionimit
1. Mikrokerneli, i cili përmban kodin e modalitetit të kernelit është ende i vogël, modular,
ekzekutohet shpejt, etj.
2. Modulet e modalitetit të përdoruesit për menaxhimin e burimeve. Shpesh është e vërtetë që
pjesë të funksionalitetit të sistemit operativ mund të ekzekutohen jashtë modalitetit të kernelit. Për
shembull, sistemi i printimit mund të menaxhohet tërësisht si një nënsistem i nivelit të përdoruesit
pa ndikuar negativisht në funksionimin e sistemit në tërësi.
Komunikimi në këtë model bëhet përmes kalimit të mesazheve (edhe pse kujtesa e përbashkët
mund të jetë e disponueshme).
Avantazhi kryesor i kësaj qasjeje është fleksibiliteti i tij. Relativelyshtë relativisht e lehtë të
zëvendësosh modulet, duke ofruar përmirësime të performancës, etj. Modulet e nivelit të
përdoruesit teorikisht mund të zhvendosen në makina të tjera. Nënkuptimi është se ky model është
më i përshtatshëm për t'u adoptuar si një OS i shpërndarë. Në fakt, komunikimi i tij mesazhues, i cili
është një nga disavantazhet e tij, është një tregues tjetër i përshtatshmërisë së tij për zbatimin e
shpërndarë.
Disavantazhet e tij kanë të bëjnë me familjaritetin dhe performancën. Aspekti i familjaritetit është se
nuk është. Njerëzit kanë frikë nga ndryshimi. Performanca ka të bëjë me mesazhin që kalon në
formën e një komunikimi shtesë (midis moduleve disi të ndara, në vend të një strukture të unifikuar
monolit), gjë që rezulton në një humbje të performancës.
Një avantazh është xhiroja. Duke rritur numrin e përpunuesve, do të bënte më shumë punë në një
periudhë më të shkurtër kohore.
Një avantazh tjetër është besueshmëria e tij. Nëse funksionet mund të shpërndahen siç duhet midis
disa përpunuesve, atëherë dështimi i një procesori nuk do të ndalojë sistemin, por vetëm do ta
ngadalësojë atë. Nëse kemi dhjetë përpunues dhe njëri dështon, atëherë secili nga nëntë
përpunuesit e mbetur duhet të marrë një pjesë të punës së procesorit të dështuar. Kështu i gjithë
sistemi funksionon vetëm 10 përqind më ngadalë, në vend që të dështojë krejtësisht.
Hartimi i një sistemi multiprocesor është më i vështirë sesa dizajnimi i një sistemi të vetëm procesor.
Sistemet shumëprocesore kanë tre përparësi kryesore:
1. Rritje e xhiros.
Duke rritur numrin e përpunuesve, ne presim që të bëjmë më shumë punë në më pak kohë. Raporti
i shpejtësisë me përpunuesit N nuk është N, megjithatë; përkundrazi, është më pak se N. Kur
përpunues të shumtë bashkëpunojnë në një detyrë, një sasi e caktuar e shpenzimeve të tepërta
krijohet për të mbajtur të gjitha pjesët të punojnë në mënyrë korrekte. Kjo shpenzim i lartë, plus
grindjet për burimet e përbashkëta, ul fitimin e pritur nga përpunuesit shtesë. Në mënyrë të
ngjashme, programuesit N që punojnë ngushtë së bashku nuk prodhojnë N herë sasinë e punës që
do të prodhonte një programues i vetëm.
2. Ekonomia e shkallës.
Sistemet shumëprocesore mund të kushtojnë më pak se sistemet ekuivalente të shumëfishta me një
procesor, sepse ato mund të ndajnë pajisje periferike, ruajtje masive dhe furnizim me energji
elektrike. Nëse disa programe funksionojnë në të njëjtin grup të dhënash, është më e lirë t'i ruani ato
të dhëna në një disk dhe t'i keni të gjithë përpunuesit t'i ndajnë ato sesa të keni shumë kompjuterë
me disqe lokale dhe shumë kopje të të dhënave.
3. Rritja e besueshmërisë
Nëse funksionet mund të shpërndahen siç duhet midis disa përpunuesve, atëherë dështimi i një
procesori nuk do ta ndalojë sistemin, vetëm do ta ngadalësojë atë. Nëse kemi dhjetë përpunues dhe
njëri dështon, atëherë secili nga nëntë përpunuesit e mbetur mund të marrë një pjesë të punës së
procesorit të dështuar. Kështu, i gjithë sistemi funksionon vetëm 10 përqind më ngadalë, në vend që
të dështojë krejtësisht.
E) Sistemi i shumëprogramimit:
Aspekti më i rëndësishëm i planifikimit të punës është aftësia për të multiprogramuar. Në
përgjithësi, një përdorues i vetëm nuk mund të mbajë CPU ose pajisjet I/O të zëna gjatë gjithë kohës.
Multiprogramimi rrit përdorimin e CPU duke organizuar punë në mënyrë që CPU të ketë gjithmonë
një për të ekzekutuar.
Meqenëse ekziston vetëm një CPU, vetëm një program mund të ekzekutohet në të njëjtën kohë.
Sistemi operativ siguron një mekanizëm për të kaluar CPU nga një program në tjetrin. Sistemi
operativ zgjedh një punë nga kujtesa dhe fillon ta ekzekutojë atë. Përfundimisht, puna mund të
duhet të presë që të komandohet një komandë në tastierë, ose të përfundojnë operacionet I/O. Në
një sistem jo shumëprogramues (sistemi uniprogramming) CPU bëhet boshe. Por në sistemin e
shumëprogramimit, sistemi operativ thjesht do të kalojë në një punë tjetër në kujtesën kryesore dhe
do të fillojë ta ekzekutojë atë. Kur ajo punë duhet të presë, CPU kalon në një punë tjetër etj.
Përfundimisht puna e parë do të ketë përfunduar pritjen dhe do të marrë CPU mbrapa. Për sa kohë
që ka gjithmonë ndonjë punë për të ekzekutuar CPU -në nuk do të qëndrojë kurrë boshe.
Kjo ide është e zakonshme në situata të tjera të jetës. Një avokat nuk punon vetëm për një klient në
të njëjtën kohë, për shembull. Ndërsa një rast po pret të dalë në gjyq ose të shtypen letrat, avokati
mund të punojë në një rast tjetër. Nëse ai ka mjaft klientë, avokati nuk do të jetë kurrë boshe për
mungesë pune. (Juristët boshe priren të bëhen politikanë, kështu që ka një vlerë të caktuar
shoqërore në mbajtjen e avokatëve të zënë.
Për shembull supozoni se kemi dy punë, A dhe B, për t'u ekzekutuar. Çdo punë ekzekuton për një
sekondë, dhe pastaj pret për një sekondë. Ky model përsëritet 60 herë. Nëse ne kryejmë punën e
parë A dhe pastaj punën B, njëra pas tjetrës, do të duhen 4 minuta për të kryer dy punët, puna A
merr 2 minuta për të kandiduar dhe puna b merr 2 minuta për të kandiduar.
Sistemi operativ i ndarë në kohë përdor planifikimin dhe programimin e shumëfishtë të CPU -së. Çdo
përdorues ka një program të veçantë në memorie, dhe secili proces i përdoruesit ekzekutohet për
një njësi të vogël kohore të quajtur fetë kohore ose kuantike kohore.
Një sistem operativ i ndarë në kohë lejon shumë përdorues të ndajnë njëkohësisht kompjuterin.
Meqenëse secila punë e përdoruesve në sistemin e shpërndarë në kohë ekzekutohet vetëm për një
kohë të shkurtër të CPU -së, dhe kur kjo kohë skadon, sistemi kalon shpejt nga një përdorues në
përdoruesin tjetër. Përdoruesve u jepet përshtypja se secili ka kompjuterin e vet, ndërsa në fakt një
kompjuter ndahet mes shumë përdoruesve. Në këtë metodë, koha e CPU -së u nda nga të ndryshme
Ky sistem siguron përdorimin efikas të CPU -së. Disa shembuj të sistemit operativ të ndarë në kohë
janë UNIX, Linux, Multics etj.
Ndarja e kohës, ose multitaskimi, është një shtrirje logjike e programimit të shumëfishtë. CPU
ekzekuton punë të shumta duke kaluar midis tyre, por çelsat ndodhin aq shpesh sa që përdoruesit
mund të ndërveprojnë me secilin program ndërsa është duke u ekzekutuar.
Një OS me shumë detyra ju lejon të ekzekutoni procese (detyra) të shumta "njëkohësisht". Ata nuk
funksionojnë në të njëjtën kohë, natyrisht, pasi ekziston vetëm një CPU. Ajo që ndodh është se një
proces funksionon për një kohë, dhe më pas sistemi operativ hyn (përmes një ndërprerjeje), ruan
gjendjen (kontekstin) e procesit aktual, rikthen kontekstin e një tjetri dhe lejon që ai proces tjetër të
funksionojë për një ndërsa, etj. UNIX dhe MULTICS të dy janë sisteme operative me shumë detyra.
Por ata punonin me pajisje më të shtrenjta. MS-DOS është një shembull i një OS jo shumë-detyrash:
për sa kohë që jeni duke luajtur
Fig 1.12 Paraqitja e një sistemi me shumë detyra
Llogaritja paralele është një formë e llogaritjes në të cilën shumë llogaritje kryhen njëkohësisht, duke
vepruar në parimin që problemet e mëdha shpesh mund të ndahen në ato më të vogla, të cilat më
pas zgjidhen njëkohësisht ("paralelisht"). Me kompjuterët me një CPU, me një bërthamë, është e
mundur të kryhet përpunim paralel duke i lidhur kompjuterët në një rrjet. Sidoqoftë, ky lloj
përpunimi paralel kërkon softuer shumë të sofistikuar të quajtur softuer përpunimi të shpërndarë.
Përpunimi paralel quhet edhe llogaritja paralele. Termi përpunim paralel përdoret për të
përfaqësuar një klasë të madhe teknikash të cilat përdoren për të siguruar detyra të përpunimit të të
dhënave njëkohësisht me qëllim të rritjes së shpejtësisë llogaritëse të një sistemi kompjuterik.
Vini re se paralelizmi ndryshon nga përputhshmëria. Konkurenca është një term i përdorur në
sistemet operative dhe bashkësitë e bazave të të dhënave i cili i referohet vetisë së një sistemi në të
cilin detyra të shumta mbeten logjikisht aktive dhe bëjnë përparim në të njëjtën kohë duke ndërhyrë
në rendin e ekzekutimit të detyrave dhe duke krijuar kështu një iluzion të ekzekutimit të njëkohshëm
udhëzimet. Paralelizmi, nga ana tjetër, është një term që përdoret zakonisht nga komuniteti i
superkompjuterizmit për të përshkruar ekzekutimet që ekzekutojnë fizikisht njëkohësisht me
qëllimin për të zgjidhur një problem në më pak kohë ose zgjidhur një problem më të madh në të
njëjtën kohë. Paralelizmi shfrytëzon njëkohësinë
Kërkohet më shumë harduer, gjithashtu më shumë kërkesa për energji. Nuk është mirë për pajisjet
me fuqi të ulët dhe të lëvizshme.
Fig 1.13 Paraqitja e një sistemi me përpunim parallel
Sistemet e shpërndara janë grupe kompjuterash të rrjetëzuar, të cilët kanë të njëjtin qëllim për
punën e tyre. Përpunuesit në një sistem tipik të shpërndarë funksionojnë njëkohësisht paralelisht.
Llogaritja paralele mund të shihet si një formë e veçantë e kompjuterit të shpërndarë të lidhur
ngushtë, dhe llogaritja e shpërndarë mund të shihet si një formë e çiftuar dobët e llogaritjes
paralele. Sidoqoftë, është e mundur që të klasifikohen afërsisht sistemet e njëkohshme si "paralele"
ose "të shpërndara" duke përdorur kriteret e mëposhtme:
Ekzistojnë dy arsye kryesore për përdorimin e sistemeve të shpërndara dhe llogaritjen e shpërndarë.
Së pari, vetë natyra e aplikacionit mund të kërkojë përdorimin e një rrjeti komunikimi që lidh disa
kompjuterë. Për shembull, të dhënat prodhohen në një vend fizik dhe nevojiten në një vend tjetër.
Së dyti, ka shumë raste në të cilat përdorimi i një kompjuteri të vetëm do të ishte i mundur në parim,
por përdorimi i një sistemi të shpërndarë është i dobishëm për arsye praktike. Për shembull, mund
të jetë më kosto-efektive për të marrë nivelin e dëshiruar të performancës duke përdorur një grup të
disa kompjuterëve të nivelit të ulët, në krahasim me një kompjuter të vetëm të nivelit të lartë. Një
sistem i shpërndarë mund të jetë më i besueshëm se një sistem i shpërndarë, pasi nuk ka asnjë pikë
të vetme dështimi. Për më tepër, një sistem i shpërndarë mund të jetë më i lehtë për tu zgjeruar dhe
menaxhuar sesa një sistem uniprocesor monolit.
Shembuj të sistemeve të shpërndara dhe aplikimeve të llogaritjes së shpërndarë përfshijnë sa vijon:
Grupimi mund të strukturohet në mënyrë asimetrike ose simetrike. Në grupimin asimetrik, njëra
makinë është në modalitetin e gatishmërisë së nxehtë ndërsa tjetra po ekzekuton aplikacionet.
Makina pritëse e gatishmërisë nuk bën gjë tjetër veçse monitoron serverin aktiv. Nëse ai server
dështon, hosti i gatishmërisë së nxehtë bëhet server aktiv. Në grupimin simetrike, dy ose më shumë
host po ekzekutojnë aplikacione dhe ata po monitorojnë njëri -tjetrin. Kjo mënyrë është padyshim
më efikase, pasi përdor të gjithë pajisjet në dispozicion. Kërkon që të jenë në dispozicion më shumë
se një aplikacion për tu ekzekutuar.
Forma të tjera të grupimeve përfshijnë grupe paralele dhe grumbullim mbi një WAN. Grupet paralele
lejojnë që hostet e shumtë të kenë qasje në të dhënat e njëjta në ruajtjen e përbashkët. Për shkak se
shumicës së sistemeve operative u mungon mbështetja për qasje të njëkohshme të të dhënave nga
hostet e shumtë, grupet paralele zakonisht arrihen duke përdorur versione të veçanta të softuerit
dhe lëshime të veçanta të aplikacioneve. Për shembull, Oracle Parallel Server është një version i
bazës së të dhënave të Oracle që është krijuar për të funksionuar në një grup paralel. Çdo makinë
drejton Oracle, dhe një shtresë e softuerit gjurmon qasjen në diskun e përbashkët. Çdo makinë ka
qasje të plotë në të gjitha të dhënat në bazën e të dhënave. Për të siguruar këtë qasje të përbashkët
në të dhëna, sistemi gjithashtu duhet të sigurojë kontroll dhe kyçje të aksesit për të siguruar që nuk
ndodhin operacione konfliktuale. Ky funksion, i njohur zakonisht si menaxher i kyçjes së shpërndarë
(DLM), përfshihet në disa teknologji të grupimeve.
Për t'u konsideruar "në kohë reale", një sistem operativ duhet të ketë një kohë maksimale të njohur
për secilin nga operacionet kritike që kryen (ose të paktën të jetë në gjendje të garantojë atë
maksimumin shumicën e kohës). Disa nga këto operacione përfshijnë thirrjet në OS dhe trajtimin e
ndërprerë. Sistemet operative që mund të garantojnë absolutisht një kohë maksimale për këto
operacione zakonisht quhen "në kohë reale të vështira", ndërsa sistemet operative që mund të
garantojnë vetëm një maksimum në shumicën e kohës referohen si "kohë reale të buta". Në
praktikë, këto kategori të rrepta kanë dobinë e kufizuar - çdo zgjidhje e sistemit operativ në kohë
reale demonstron karakteristika unike të performancës.
Një sistem operativ në kohë reale mund të garantojë që një program të funksionojë me një kohë
shumë të qëndrueshme. Sistemet operative në kohë reale e bëjnë këtë duke u siguruar
programuesve një shkallë të lartë kontrolli se si u jepen përparësi detyrave, dhe zakonisht lejojnë
gjithashtu kontrollimin për t'u siguruar që afatet e rëndësishme janë përmbushur.
Pika kryesore është se, nëse programohet si duhet, Në përgjithësi, një sistem operativ (OS) është
përgjegjës për menaxhimin e burimeve të harduerit të një kompjuteri dhe pritjen e aplikacioneve që
funksionojnë në kompjuter. Një sistem operativ në kohë reale i kryen këto detyra, por gjithashtu
është krijuar posaçërisht për të drejtuar aplikacione me kohë shumë të saktë dhe një shkallë të lartë
besueshmërie. Kjo mund të jetë veçanërisht e rëndësishme në sistemet e matjes dhe automatizimit
ku koha e ndërprerjes është e kushtueshme ose një vonesë e programit mund të shkaktojë një rrezik
sigurie.
Proceset dhe Fijet (Process & Threads)
Hyrje
Një proces është një shembull i ekzekutimit të një aplikacioni. Aplikacioni mund të jetë një program i
shkruar nga një përdorues, ose një aplikim sistemi. Përdoruesit mund të ekzekutojnë shumë raste të
të njëjtit aplikacion në të njëjtën kohë, ose të ekzekutojnë shumë aplikacione të ndryshme. Çdo
aplikim i tillë drejtues është një proces. Procesi ekziston vetëm për kohëzgjatjen e ekzekutimit të
aplikacionit.
Një përdorues mund të jetë në gjendje të ekzekutojë disa programe në të njëjtën kohë: një
përpunues teksti, një shfletim në internet 1 dhe një paketë e-mail. Dhe edhe nëse përdoruesi mund
të ekzekutojë vetëm një program në të njëjtën kohë, sistemi operativ mund të ketë nevojë të
mbështesë aktivitetet e tij të brendshme të programuara, siç është menaxhimi i kujtesës. Në shumë
aspekte, të gjitha këto aktivitete janë të ngjashme, kështu që ne i quajmë të gjitha procese.
Një fije është pjesë e një procesi. Ajo përfaqëson rrjedhën aktuale të llogaritjes që po bëhet. Çdo
proces duhet të ketë të paktën një fije. Multithreading është gjithashtu i mundur, kur disa fije
ekzekutohen brenda kontekstit të të njëjtit proces, duke ekzekutuar udhëzime të ndryshme nga i
njëjti aplikacion.
Ky evolucion kërkonte kontroll më të fortë dhe më shumë ndarje të programeve të ndryshme; dhe
këto nevoja rezultuan në nocionin e një procesi/ i cili është një program në ekzekutim. Një proces
është njësia e punës në një sistem modern të ndarjes së kohës.
Një sistem përbëhet nga një koleksion procesesh. Një sistem operativ përpunon ekzekutimin e kodit
të sistemit dhe përdoruesi proceson ekzekutimin e kodit të përdoruesit. Potencialisht/ të gjitha këto
procese mund të ekzekutohen njëkohësisht/ me CPU (ose CPU) të shumëzuara mes tyre. Duke
ndërruar CPU -në mes proceseve, sistemi operativ mund ta bëjë kompjuterin më produktiv.
2.2 Procesi:
Një proces është një program në ekzekutim. Një proces është më shumë se kodi i programit, i cili
nganjëherë njihet si seksion teksti. Ai gjithashtu përfshin aktivitetin aktual, të përfaqësuar nga vlera
e numëruesit të programit dhe përmbajtja e regjistrave të procesorit. Një proces në përgjithësi
përfshin gjithashtu pirgun e procesit, i cili përmban të dhëna të përkohshme (të tilla si parametrat e
funksionit, adresat e kthimit dhe ndryshoret lokale), dhe një seksion të dhënash, i cili përmban
ndryshore globale. Një proces mund të përfshijë gjithashtu një grumbull, i cili është memorie që
ndahet në mënyrë dinamike gjatë kohës së funksionimit të procesit.
Një program në vetvete nuk është një proces; një program është një entitet pasiv, siç është një
skedar që përmban një listë udhëzimesh të ruajtura në disk, ndërsa një proces është një entitet
aktiv, me një numërues programi që specifikon udhëzimin tjetër për të ekzekutuar dhe një sërë
burimesh të lidhura.
State Gjendja e procesit: Gjendja mund të jetë e re, e gatshme, në punë, në pritje, e ndaluar, etj.
Ers Regjistrat e CPU: Regjistrat ndryshojnë në numër dhe lloj, në varësi të arkitekturës së
kompjuterit. Ato përfshijnë akumulatorët, regjistrat e indeksit, treguesit e rafteve dhe regjistrat me
qëllime të përgjithshme, plus çdo informacion të kodit të gjendjes. Së bashku me numëruesin e
programit, ky informacion i gjendjes duhet të ruhet kur ndodh një ndërprerje.
Information Informacioni kontabël: Ky informacion përfshin sasinë e CPU dhe kohën reale të
përdorur, kufijtë kohorë, numrat e llogarisë, numrat e punës ose procesit, etj.
Information Informacioni i statusit I/O: Ky informacion përfshin listën e pajisjeve I/O të alokuara për
procesin, një listë të skedarëve të hapur, etj. Përmbajtja e PCB ndryshon nga procesi në proces.
I ri Gati: Sistemi operativ krijon një proces dhe përgatit procesin për t'u ekzekutuar, atëherë
sistemi operativ e zhvendosi procesin në gjendje të gatshme.
Gati Po kryhet: Sistemi operativ zgjedh njërën nga punët nga radha e gatshme dhe e kalon
procesin nga gjendja e gatshme në gjendjen e funksionimit.
Po kryhetPërfunduar: Kur ekzekutimi i një procesi të ketë përfunduar, atëherë sisemi operativ e
përfundon atë proces nga gjendja e funksionimit. Ndonjëherë sistemi operativ përfundon procesin
për shkak të disa arsyeve të tjera si kujtesa e padisponueshme, shkelja e aksesit, gabimi i mbrojtjes,
dështimi i hyrjes/daljes, keqpërdorimi i të dhënave etj.
Po kryhet Gati: Kur skadon afati kohor i procesorit, ose nëse procesori ka marrë ndonjë sinjal
ndërprerjeje, atëherë sistemi operativ e kalon procesin e ekzekutimit në gjendje të gatshme.
Po kryhet Pritja: Një proces futet në gjendjen e pritjes, nëse procesi ka nevojë për një ngjarje ose
kërkon një pajisje I/O. Sistemi operativ nuk siguron I/o ose ngjarje menjëherë atëherë procesi kaloi
në gjendje pritjeje nga sistemi operativ.
Pritja Gati: Një proces në gjendjen e bllokuar zhvendoset në gjendjen e gatshme kur ndodh ngjarja
për të cilën është pritur. Për shembull, një proces është në gjendje pune, ka nevojë për një pajisje
I/O. Pastaj procesi kaloi në gjendjen e bllokuar ose të pritjes, kur pajisja I/O e siguruar nga sistemi
operativ procesi kaloi në gjendje të gatshme nga pritja ose gjendja e bllokuar.
Operacioni kryesor në procese është krijimi i një procesi të ri. Thirrja - krijoni proces - mund të
përdoret për të krijuar një proces të ri. Kur një përdorues fillon të ekzekutojë një program, sistemi
operativ krijon një proces për të përfaqësuar ekzekutimin e programit. Krijimi i programit të
ekzekutueshëm përfshin shumë hapa.
Afati kohor skadoi: Kur ekzekutimi i procesit nuk përfundon brenda kuantit kohor, atëherë procesi
përfundon nga gjendja e funksionimit. CPU zgjedh punën tjetër në radhë të gatshme për t'u
ekzekutuar.
Shkelja e kujtesës: Nëse procesi ka nevojë për më shumë memorie sesa kujtesa e disponueshme,
atëherë procesi përfundon nga gjendja e funksionimit.
Dështimi I/O: Një proces ka nevojë për një operacion I/O në kohën e ekzekutimit, por pajisja I/O nuk
është e disponueshme në atë kohë. Pastaj procesi kalon në gjendjen e pritjes. Sistemi operativ nuk
siguron pajisjen I/O, madje procesi qëndron në gjendje pritjeje, pastaj procesi përfundon.
Udhëzim i pavlefshëm: Nëse procesi që ka udhëzime të pavlefshme dhe CPU nuk arriti t'i ekzekutojë
ato udhëzime, atëherë Procesi përfundoi.
Në figurën (a) procesi1 fillon ekzekutimin e tij në kohën t0, procesi2 fillon ekzekutimin e tij vetëm
pasi procesi1 të ketë përfunduar ekzekutimin e tij, dhe procesi3 fillon ekzekutimin e tij vetëm kur
procesi2 përfundon ekzekutimin e tij. Këto procese thuhet se janë procese serike.
Në figurën (b), koha e ekzekutimit të procesit1, procesit2, procesit3 mbivendosen, kështu që këto
thuhet se janë përpunim i njëkohshëm.
Shembull i fijes:
Programuesi dëshiron të shtypë tekstin në përpunues teksti, pastaj programuesi të hapë një skedar
në përpunues teksti, dhe duke shtypur tekstin, është një fije, atëherë teksti formatohet
automatikisht, është një fije tjetër. Teksti automatikisht specifikon gabimet drejtshkrimore, është
përsëri një fije tjetër. Dhe së fundi skedari ruhet automatikisht në disk, i cili është përsëri një fije.
Kështu shtypja, formatimi, kontrollimi i drejtshkrimit, ruajtja e skedarit të gjitha këto janë fije.
Fig 2.5: Fijet (Threads)
Ky lloj fijesh të ngarkuara tërësisht në hapësirën e përdoruesit, kerneli nuk di asgjë për to. Kur fijet
menaxhohen në hapësirën e përdoruesit, secili proces ka tabelën e vet të fijeve private. Tabela e
fijeve përmban informacione si numëruesi i programit, regjistrat, gjendja etj. Kur fija zhvendoset në
gjendje të gatshme ose në gjendje të bllokuar, informacioni i nevojshëm për ta rinisur atë ruhet në
tabelën e fijeve.
Fijet e nivelit të përdoruesit lejojnë që secili proces të ketë algoritmin e vet të planifikimit. I gjithë
procesi ngarkohet në hapësirën e përdoruesit, kështu që procesi nuk kalon në modalitetin e kernelit
për të bërë menaxhimin e fijeve. Fijet e nivelit të përdoruesit mund të ekzekutohen në çdo sistem
operativ.
Kur fija e nivelit të përdoruesit ekzekuton një thirrje sistemi, të gjitha fijet me të në proces bllokohen.
Vetëm një fije e vetme me një proces mund të ekzekutohet në të njëjtën kohë, kështu që përpunimi i
Në fijet e nivelit të kernelit kerneli bën punë totale të lëvizjes së kokës. Nuk ka tabelë fije në secilin
proces. Kerneli ka një tabelë fije që mban gjurmët e të gjitha fijeve në sistem. Kur një fije dëshiron të
krijojë një fije të re ose të shkatërrojë ndonjë fije ekzistuese ajo bën thirrje në kernel, atëherë kerneli
ndërmerr veprimin.
Tabela e fijeve të kernelit mban çdo regjistër të fijeve, gjendjen dhe informacione të tjera.
Informacioni është i njëjtë me fijet e nivelit të përdoruesit, por tani është në kernel në vend të
hapësirës së përdoruesit.
Kerneli mund të caktojë njëkohësisht një fije të shumëfishtë nga i njëjti proces në procesorë të
shumtë. Nëse një fije në një proces është e bllokuar, atëherë kerneli mund të caktojë një fije tjetër të
të njëjtit proces.
Kërkon më shumë kosto për krijimin dhe shkatërrimin e fijeve në kernel. Transferimi i kontrollit nga
një fije në tjetrën brenda të njëjtit proces kërkon një kalim të modalitetit në kernel.
Planifikues afatgjatë:
Funksioni i planifikuesit afatgjatë është, zgjedh proceset nga grupi i punës dhe i ngarkon ato në
kujtesën kryesore (radhë e gatshme) për ekzekutim, kështu që planifikuesi afatgjatë quhet
programues i punës.
Për shembull, supozoni se një laborator kompjuterik i përbërë nga 20 nyje dumie të lidhura me
serverin duke përdorur rrjetin lokal, nga 20, dhjetë përdorues duan të ekzekutojnë punët e tyre,
atëherë këto dhjetë punë ngarkohen në spool disk. Planifikuesi afatgjatë zgjedh punët nga disku
spool dhe i ngarkon ato në kujtesën kryesore në radhën e gatshme.
Planifikues afatshkurtër:
Planifikues afatshkurtër, ose programuesi CPU, zgjedh një punë nga radha e gatshme (procese që
janë gati për t'u ekzekutuar) dhe ndan CPU në atë proces me ndihmën e dispeçerit. Metoda e
zgjedhjes së një procesi nga radha e gatshme (nga programuesi afatshkurtër) varet nga algoritmi i
planifikimit të CPU -së.
Dispeçer:
Dispeçer (Dispatcher) është një modul, i cili lidh CPU -në me procesin e zgjedhur nga programuesi
afatshkurtër. Funksioni kryesor i dispeçerit është kalimi i CPU -së nga një proces në një proces tjetër.
Një funksion tjetër i dispeçerit është të hidhet në vendin e duhur në programin e përdoruesit dhe të
jetë gati për të filluar ekzekutimin. Dispeçeri duhet të jetë i shpejtë, sepse thirret gjatë çdo ndërrimi
të procesit. Koha e marrë nga dispeçeri për të ndaluar një proces dhe për të filluar një proces tjetër
njihet si "vonesa e shpërndarjes". Shkalla e programimit të shumëfishtë varet nga vonesa e dërgimit.
Nëse vonesa e dërgimit po rritet, atëherë shkalla e multiprogramimit zvogëlohet.
Planifikues afatmesëm
Nëse procesi kërkon një I/O në mes të ekzekutimit, atëherë procesi hiqet nga memoria kryesore dhe
ngarkohet në radhën e pritjes. Kur përfundon operacioni I/O, atëherë puna kalon nga radha e pritjes
në radhë të gatshme. Këto dy operacione kryhen nga programuesi afatmesëm.
Programuesi afatshkurtër duhet të zgjedhë shpesh një proces të ri për CPU-në. Një proces mund të
ekzekutohet vetëm për disa milisekonda para se të presë për një kërkesë I/O. Shpesh, programuesi
afatshkurtër ekzekuton të paktën një herë në 100 milisekonda. Për shkak të kohës së shkurtër midis
ekzekutimeve, planifikuesi afatshkurtër duhet të jetë i shpejtë.
Planifikuesi afatgjatë ekzekuton shumë më rrallë; minutat mund të ndajnë krijimin e një procesi të ri
dhe të tjetrit.
Planifikuesi afatgjatë kontrollon shkallën e programimit të shumëfishtë (numrin e proceseve në
kujtesë). Nëse shkalla e programimit të shumëfishtë është e qëndrueshme, atëherë shkalla mesatare
e krijimit të procesit duhet të jetë e barabartë me normën mesatare të largimit të proceseve që
largohen nga sistemi. Kështu, planifikuesi afatgjatë mund të ketë nevojë të thirret vetëm kur një
proces të largohet nga sistemi.
Fig: 2.11 Ekzekutimi është një sekuencë alternative e shpërthimeve të CPU dhe I/O
Një program i lidhur me I/O zakonisht ka shumë shpërthime të shkurtra të CPU-së. Një program i
lidhur me CPU mund të ketë disa shpërthime të gjata të CPU. Kjo shpërndarje mund të jetë e
rëndësishme në zgjedhjen e një algoritmi të përshtatshëm të caktimit të procesorit.
Janë sugjeruar shumë kritere për krahasimin e algoritmeve të planifikimit të CPU -së. Këto kritere
përdoren për krahasimin midis algoritmeve për të zgjedhur më të mirën. Kriteret përfshijnë sa vijon:
Shfrytëzimi i CPU -së. Ne duam ta mbajmë CPU -në sa më të zënë. Përdorimi i CPU mund të shkojë
nga 0 në 100 për qind.
Në një sistem real, ai duhet të shkojë nga 40 përqind (për një sistem të ngarkuar lehtë) deri në 90
përqind (për një sistem të përdorur shumë).
Xhiroja. Nëse CPU është e zënë me ekzekutimin e proceseve, atëherë po punohet. Një masë
e punës është numri i proceseve që përfundojnë për njësi kohore, i quajtur xhiros. Për
procese të gjata, kjo normë mund të jetë një proces në orë; për transaksionet e shkurtra,
mund të jetë 10 procese në sekondë.
Koha e kthesës. Nga pikëpamja e një procesi të veçantë, kriteri i rëndësishëm është sa kohë
duhet për të ekzekutuar atë proces. Intervali nga koha e paraqitjes së një procesi deri në
kohën e përfundimit të atij procesi është koha e kthesës. Koha e kthesës është shuma e
periudhave të kaluara duke pritur për të hyrë në kujtesë, duke pritur në radhën e gatshme,
duke ekzekutuar në CPU dhe duke bërë I/O.
Koha e pritjes. Algoritmi i caktimit të procesorit nuk ndikon në sasinë e kohës gjatë së cilës
një proces ekzekuton ose bën I/O; ndikon vetëm në sasinë e kohës që kalon një proces duke
pritur në radhën e gatshme. Koha e pritjes është shuma e periudhave të kaluara duke pritur
në radhën e gatshme.
Koha e përgjigjes. Koha e përgjigjes është koha nga paraqitja e një kërkese deri në
prodhimin e përgjigjes së parë. Theshtë koha që duhet për të filluar përgjigjen, jo koha që
duhet për të dhënë përgjigjen. Koha e kthimit është përgjithësisht e kufizuar nga shpejtësia e
pajisjes dalëse. Është e dëshirueshme që të maksimizohet përdorimi dhe xhiroja e CPU -së
dhe të minimizohet koha e kthimit, koha e pritjes dhe koha e përgjigjes.
Nëse proceset mbërrijnë në rendin P1, P2, P3 dhe shërbehen në rendin FCFS, ne marrim rezultatin e
treguar në tabelën e mëposhtme Gantt, e cila është një tabelë me shtylla që ilustron një orar të
veçantë, duke përfshirë kohën e fillimit dhe mbarimit të secilit të proceseve pjesëmarrëse:
Koha e pritjes është 0 milisekonda për procesin P1, 24 milisekonda për procesin P2 dhe 27
milisekonda për procesin P3.
Nëse proceset arrijnë në rendin P2, P3, P1, megjithatë, rezultatet do të jenë siç tregohen në tabelën
e mëposhtme Gantt:
Koha mesatare e pritjes është tani (6 + 0 + 3)/3 = 3 milisekonda. Kjo ulje është thelbësore. Kështu,
koha mesatare e pritjes sipas një politike FCFS në përgjithësi nuk është minimale dhe mund të
ndryshojë në mënyrë thelbësore nëse proceset e shpërthimit të procesorit ndryshojnë shumë.
Konsideroni performancën e planifikimit të FCFS në një situatë dinamike. Supozoni se kemi një
proces të lidhur me CPU dhe shumë procese I/Obound. Procesi i lidhur me CPU do të marrë dhe
mbajë CPU. Gjatë kësaj kohe, të gjitha proceset e tjera do të përfundojnë hyrjen/daljen e tyre dhe do
të kalojnë në radhën e gatshme, duke pritur për CPU -në. Ndërsa proceset presin në radhën e
gatshme, pajisjet I/O janë të papunë. Përfundimisht, procesi i lidhur me CPU përfundon shpërthimin
e tij CPU dhe lëviz në një pajisje I/O. Të gjitha proceset e lidhura me I/O, të cilat kanë shpërthime të
shkurtra të CPU-së, ekzekutohen shpejt dhe kthehen në radhët e I/O. Në këtë pikë, CPU qëndron pa
punë. Procesi i lidhur me CPU-në më pas do të kthehet në radhën e gatshme dhe do t'i ndahet CPU-
ja. Përsëri, të gjitha proceset I/O përfundojnë duke pritur në radhën e gatshme derisa të përfundojë
procesi i lidhur me CPU. Ekziston një efekt konvoje pasi të gjitha proceset e tjera presin që një proces
i madh të dalë nga CPU. Ky efekt rezulton në përdorim më të ulët të CPU dhe pajisjeve I/O sesa
mund të jetë e mundur nëse proceset më të shkurtra lejohen të shkojnë së pari. Algoritmi i
planifikimit të FCFS nuk është parandalues. Pasi CPU -ja të jetë ndarë në një proces, ai proces e mban
CPU -në derisa ta lëshojë CPU -në, ose duke e përfunduar ose duke kërkuar I/0. Algoritmi FCFS është
veçanërisht shqetësues për sistemet e ndarjes së kohës, ku është e rëndësishme që secili përdorues
të marrë një pjesë të CPU -së në intervale të rregullta.
Koha e pritjes është 3 milisekonda për procesin P1, 16 milisekonda për procesin P2, 9 milisekonda
për procesin P3 dhe 0 milisekonda për procesin P4.
Algoritmi i planifikimit SJ F është vërtet optimal, sepse jep kohën mesatare minimale të pritjes për
një grup të caktuar procesesh. Zhvendosja e një procesi të shkurtër para një procesi të gjatë
zvogëlohet, koha e pritjes së procesit të shkurtër më shumë sesa rrit kohën e pritjes së procesit të
gjatë. Si pasojë, koha mesatare e pritjes zvogëlohet.
Vështirësia e vërtetë me algoritmin SJF është njohja e gjatësisë së kërkesës tjetër të CPU -së. Nuk ka
asnjë mënyrë për të ditur gjatësinë e plasjes së radhës të CPU -së.
Planifikimi parandalues i SJF nganjëherë quhet planifikim i shkurtër më i shkurtër i mbetur në kohë.
Si shembull, merrni parasysh katër proceset e mëposhtme, me gjatësinë e shpërthimit të CPU -së të
dhënë në milisekonda:
Process Arrival time Burst time
P1 0 8
P2 1 4
P3 2 9
P4 3 5
Nëse proceset mbërrijnë në radhën e gatshme në kohën e treguar dhe kanë nevojë për kohët e
treguara të shpërthimit, atëherë skema paraprake SJF që rezulton është siç përshkruhet në tabelën e
mëposhtme Gantt.
Procesi P1 fillon në kohën 0, pasi është procesi i vetëm në radhë. Procesi P2 arrin në kohën 1. Koha e
mbetur për procesin P1 (7 mili-sekonda) është më e madhe se koha e kërkuar nga procesi P2 (4
milisekonda), kështu që procesi P1 parandalohet dhe procesi P2 është planifikuar.
Planifikimi jo paraprak i SJF do të rezultonte në një kohë mesatare pritjeje prej 7.75 milisekonda.
Duke përdorur planifikimin prioritar, ne do t'i planifikonim këto procese sipas tabelës së mëposhtme
Gantt:
Planifikimi i përparësive mund të jetë ose parandalues ose jo parandalues. Kur një proces arrin në
radhën e gatshme, përparësia e tij krahasohet me përparësinë nëse procesi aktual po funksionon.
Një algoritëm i caktimit të prioriteteve parandaluese do të parandalojë CPU -në nëse përparësia e
procesit të sapoardhur është më e lartë se përparësia e procesit aktualisht në punë. Një algoritëm i
caktimit të prioriteteve jo-parandaluese thjesht do ta vendosë procesin e ri në krye të radhës së
gatshme.
Një problem i madh me algoritmet e planifikimit prioritar është bllokimi i pafund, ose uria. Një
proces që është gati për tu ekzekutuar por që pret CPU mund të konsiderohet i bllokuar. Një
algoritëm prioritar i planifikimit mund të lërë që disa procese me prioritet të ulët të presin
pafundësisht. Në një sistem kompjuterik të ngarkuar shumë, një rrjedhë e qëndrueshme e proceseve
me përparësi më të lartë mund të parandalojë marrjen e CPU-së nga një proces me përparësi të ulët.
Një zgjidhje për problemin e bllokimit të pacaktuar të proceseve me prioritet të ulët është plakja.
Plakja është një teknikë e rritjes graduale të përparësisë së proceseve që presin në sistem për një
kohë të gjatë. Për shembull, nëse përparësitë shkojnë nga 127 (të ulëta) në 0 (të larta), ne mund të
rrisim përparësinë e një procesi të pritjes me 1 çdo 15 minuta. Përfundimisht, edhe një proces me
një përparësi fillestare prej 127 do të kishte përparësinë më të lartë në sistem dhe do të
ekzekutohej.
2.9.5 Planifikimi Round-Robin:
Algoritmi i planifikimit të rrotullimit (RR) është krijuar veçanërisht për sistemet e ndarjes së kohës.
Është i ngjashëm me planifikimin e FCFS, por parablerja shtohet për të kaluar midis proceseve.
Përkufizohet një njësi e vogël e kohës, e quajtur kuantike ose fetë kohore. Një kuant i kohës është
përgjithësisht nga 10 në 100 milisekonda. Radha e gatshme trajtohet si një radhë rrethore.
Planifikuesi i CPU -së shkon rreth radhës së gatshme, duke e ndarë CPU -në në secilin proces për një
interval kohor deri në 1 kuantik kohor.
Për të zbatuar planifikimin RR, ne mbajmë radhën e gatshme si një radhë procesesh FIFO. Proceset e
reja i shtohen bishtit të radhës së gatshme. Planifikuesi i CPU -së zgjedh procesin e parë nga radha e
gatshme, vendos një kohëmatës për të ndërprerë pas 1 kuanti kohor dhe dërgon procesin.
Një nga dy gjërat do të ndodhë atëherë. Procesi mund të ketë një shpërthim të CPU -së më pak se 1
herë kuantik. Në këtë rast, vetë procesi do të lëshojë CPU vullnetarisht. Planifikuesi pastaj do të
vazhdojë në procesin tjetër në radhën e gatshme. Përndryshe, nëse shpërthimi i CPU i procesit
aktual është më i gjatë se 1 herë kuantik, kohëmatësi do të fiket dhe do të shkaktojë një ndërprerje
në sistemin operativ. Një ndërprerës konteksti do të ekzekutohet dhe procesi do të vendoset në
bishtin e radhës së gatshme. Planifikuesi i CPU -së më pas do të zgjedhë procesin tjetër në radhën e
gatshme.
Koha mesatare e pritjes sipas politikës RR është shpesh e gjatë. Konsideroni grupin e mëposhtëm të
proceseve që arrijnë në kohën 0, me gjatësinë e shpërthimit të CPU -së të dhënë në milisekonda:
Nëse përdorim një kuant kohor prej 4 milisekonda, atëherë procesi P1 merr 4 milisekondat e para.
Meqenëse kërkon 20 milisekonda të tjera, parandalohet pas kuantit të herës së parë dhe CPU i jepet
procesit tjetër në radhë, Procesi P2. Meqenëse procesi P1 nuk ka nevojë për 4 milisekonda, ai
pushon para skadimit të kuantit të tij. CPU i jepet procesit tjetër, procesit P3. Pasi secili proces ka
marrë 1 kuantik kohor, CPU kthehet në procesin P1 për një kuant shtesë kohor. Grafiku Gantt është
treguar në fig.
Përmbledhje:
Caktimi i rendit i pari vjen - i pari shërbehet është algoritmi më i thjeshtë i planifikimit, por mund të
bëjë që punët e shkurtra të presin për një kohë shumë të gjatë. Programimi më i shkurtër i punës më
të shkurtër është sigurisht optimale, duke siguruar kohën mesatare më të shkurtër të pritjes. Puna
më e shkurtër së pari është e vështirë të zbatohet sepse është e vështirë të parashikohet kohëzgjatja
e shpërthimit të ardhshëm të CPU -së. Shortest-Job-first është rast i veçantë i algoritmit të
planifikimit të përparësive të përgjithshme, i cili thjesht ndan CPU në procesin me përparësinë më të
lartë. Si programimi me përparësi ashtu edhe ai i punës më të shkurtër mund të vuajë nga uria.
Plakja është teknikë për të parandaluar urinë.
Planifikimi i rrotullimit është më i përshtatshëm për një sistem të ndarë me kohë. Round-robin
është një algoritëm parandalues. FCFS nuk është parandaluese. Algoritmet më të shkurtra për punën
e parë dhe prioritare mund të jenë ose parandaluese ose jo parandaluese. Round-robin ndan CPU-në
në procesin e parë në radhën e gatshme për njësitë e kohës q, ku q është kuanti i kohës. Pas njësive
të kohës q, CPU parandalohet dhe procesi vihet në bisht të radhës së gatshme. Problemi kryesor
është zgjedhja e kuantit të kohës. nëse kuanti është shumë i madh Round-robin degjeneron në
planifikimin e FCFS, nëse kuantiku është shumë i vogël, caktimi i shpenzimeve të përgjithshme në
formën e ndërrimit të kontekstit koha bëhet e tepërt.
Bllokimi (qorrsokak) Dhe Menagjimi I Memorjes (Dead Lock &
Memory Management )