You are on page 1of 39

Hyrje në Sistemin Operativ

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.

1.3 Struktura e sistemit operativ:


Struktura e sistemit operativ përbëhet nga 4 shtresa

 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

1.4 Përbërësit e sistemit kompjuterik:


Një sistem kompjuterik është një koleksion i përbërësve të harduerit dhe softuerit. Hardware i
referohet pajisjeve fizike të llogaritjes. Softueri i referohet programeve të shkruara për të ofruar
shërbime për përdoruesit e sistemit.

Çdo sistem kompjuterik përbëhet nga katër komponentë bazë.

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.

Fig 1.3 Pamje themelore e organizimit të hadrwerit të kompjuterit

1.5 Shërbimet e Ofruara nga Sistemi Operativ:


Një sistem operativ siguron një mjedis për ekzekutimin e programeve. Sistemi operativ ofron
shërbime të caktuara për programet dhe përdoruesit e atyre programeve. Funksionet e sistemit
operativ të ofruara për lehtësinë e programuesit për ta bërë më të lehtë detyrën e programimit janë
si më poshtë:
1. Ekzekutimi i Programit:
Përdoruesit do të duan të ekzekutojnë programe. Sistemi duhet të jetë në gjendje të ngarkojë një
program në memorie dhe ta ekzekutojë atë. Programi duhet të jetë në gjendje të përfundojë
ekzekutimin e tij normalisht ose jonormalisht.

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ë.

3. Manipulimi i sistemit të skedarëve:


Duhet të jetë e qartë që përdoruesi dëshiron të lexojë dhe shkruajë skedarë, gjithashtu dëshiron të
krijojë dhe fshijë skedarë sipas emrit, sistemi operativ siguron të gjitha operacionet e manipulimit të
skedarëve si krijimi i një skedari, leximi i një skedari, shkrimi në një skedar, fshirja e një skedari.

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.

1.6 Llojet e sistemit operativ:


Ekzistojnë shumë lloje të ndryshme të sistemit operativ në varësi të numrit të përdoruesve,
përpunuesve dhe mënyrës së ekzekutimit të programeve në memorie.
A) Sistemi i përpunimit serik:
Në sistemin e hershëm kompjuterik, kishte vetëm pajisje kompjuterike dhe nuk kishte sistem
operativ. Kompjuterët e hershëm ishin makina fizikisht shumë të mëdha që funksionojnë nga
tastiera. Programimi në gjuhën 1 dhe 0 (gjuhë makine) ishte mjaft i zakonshëm. Udhëzimet dhe të
dhënat futeshin në kompjuter me anë të çelsave të tastierës ose ndoshta përmes tastierës
heksadecimale, shiritave të letrës ose kartave të grushta. Pastaj butonat e duhur do të shtyheshin
për të ngarkuar adresën fillestare dhe për të filluar ekzekutimin e programit. ndërsa programi
funksiononte, programuesi/operatori mund të monitoronte ekzekutimin e tij nga dritat e ekranit në
tastierë. Nëse ndodh gabimi, gjendja e gabimit tregohet nga dritat. Programuesi shqyrton regjistrat
dhe kujtesën kryesore për të identifikuar shkakun e gabimit. Kur të përfundojë ekzekutimi, merrni
daljen në printer dhe programuesi ishte gati për ekzekutimin e programit tjetër.

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.

B) Sistemi i përpunimit të series (Batch Processing System):


Në sistemin e përpunimit të grupeve, punët me nevoja të ngjashme grumbullohen së bashku si një
grup dhe kalojnë nëpër kompjuter si grup.

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.

Vëzhgues rezident(Resident monitor):


Në përpunimin e grupeve gjatë kalimit nga një punë në tjetrën, CPU qëndron boshe. Për të
kapërcyer këtë kohë boshe renditja automatike e punës prezantohet dhe me të krijohet sistemi i
parë rudimentar i funksionimit. Ai përmban procedurën për transferimin automatik të kontrollit nga
një punë në punën tjetër. Për këtë qëllim krijohet një program i vogël i quajtur monitor banor.
Monitori rezident është gjithmonë në kujtesë.
Kur kompjuteri është i ndezur, kontrolli i sistemit kompjuterik qëndron në monitorin rezident, i cili
më pas e transferon atë në program. Kur programi përfundon, ai i kthen kontrollin monitorit
rezident, i cili pastaj kalon në programin tjetër. Kështu monitori rezident do të rendisë automatikisht
nga një program në tjetrin dhe do të formojë një punë në tjetrën.

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:

$ FTN: Ekzekutoni përpiluesin FORTRAN.

$ ASM: Ekzekutoni montuesin

$ 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ë:

$ JOB: Karta e parë e punës.

$ END: Karta e fundit e punës.

Fig 1.4 Paraqitja e kujtesës për Vëzhgues rezidentë


Fig 1.5 Paraqitja e pakos së kartelave për sistemin e Vëzhguesit rezidentë

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.

Fig 1.6 Paraqitja e Derdhjes(Spooling)

C) Sistemi me një procesor:


Një sistem uniprocesor përcaktohet si një sistem kompjuterik që ka një njësi të vetme qendrore të
përpunimit që përdoret për të ekzekutuar udhëzimet. Sistemi Uniprocesor (Kompjuter personal
standard) përmban një CPU të vetme dhe kanale të vetme I/O dhe më së shpeshti përdoret si
makina me një përdorues të vetëm dhe gjithashtu mund të zbatohet si një sistem me shumë
përdorues.

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.

Fig 1.7 Paraqitja e sistemit me një procesor

D) Sistemi me shumë procesorë:


Sistemi standard është uniprocesor, domethënë, ka një CPU kryesore. Një sistem multiprocesor do
të kishte më shumë se një CPU, duke ndarë kujtesën dhe pajisjet periferike.

Ekzistojnë dy qasje të përdorura për sistemin operativ me shumë procesorë.

Qasja e mjeshtër/shërbyes (Master/slave):


Sistemet më të zakonshme multiprocesor i caktojnë secilit procesor një detyrë specifike. Ekziston një
kompjuter master. Ky kompjuter kryesor kontrollon sistemin. Përpunuesit e tjerë (skllevërit) ose
shikojnë tek mjeshtri për udhëzime ose kanë detyra të paracaktuara.

Kjo skemë përcakton një marrëdhënie mjeshtër/skllav.


Rrjeti kompjuterik:
Në këtë qasje, shumë sisteme kompjuterike të pavarura mund të komunikojnë, duke dërguar
skedarë dhe informacione mes tyre. Sidoqoftë, çdo sistem kompjuterik ka sistemin e vet operativ
dhe funksionon në mënyrë të pavarur.

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.

Fig 1.8 Paraqitja e sistemit me shumë procesor

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.

Në multiprogramming, një procesor i vetëm mund të ekzekutojë një numër programesh


njëkohësisht. Në këtë teknikë, kujtesa fizike ndahet në shumë ndarje, secila mban një program të
veçantë. Një nga këto ndarje është mbajtja e sistemit operativ.

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ë.

Fig 1.9 Paraqitja e shtresave të memorjes të një sistemi me shumë programe


Përfitimet e programimit të shumëfishtë janë përdorimi i shtuar i CPU -së dhe xhiroja më e lartë
totale e punës. Prodhimi është sasia e punës së kryer në intervalin e caktuar kohor.

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.

Fig 1.9.1 Kryerja e punëve te një system pa programim të shumëfisht

Nëse multiprogramojmë punën A dhe punën B, mund të përmirësojmë shumë performancën e


sistemit. Ne fillojmë me punën A, e cila ekzekutohet për një sekondë. Pastaj, ndërsa puna pret për
një sekondë, ne ekzekutojmë punën B. kur puna B pret, puna A është gati për të funksionuar. Tani
koha e kërkuar për të ekzekutuar të dyja punët është vetëm 2 minuta, dhe nuk ka kohë boshe të CPU
-së. Kështu ne kemi rritur përdorimin e CPU nga 50 në 100 për qind, duke rritur xhiros në të njëjtën
kohë.

Fig 1.10 Kryerja e punëve te një system me programim të shumëfisht

F) Sistemi i ndarjes së kohës:


Sistemet e grumbulluara me shumë programe siguruan një mjedis në të cilin burimet e ndryshme të
sistemit (për shembull, CPU, memoria, pajisjet periferike) u përdorën në mënyrë efektive, por nuk
siguroi ndërveprimin e përdoruesit me sistemin kompjuterik. Ndarja e kohës (ose multitaskimi) është
një shtrirje logjike e programimit të shumëfishtë. Në sistemet e ndarjes së kohës, 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.

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

proceset (ose përdoruesit) kështu që thuhet se është "sistem i përbashkët i kohës"

Ky sistem siguron përdorimin efikas të CPU -së. Disa shembuj të sistemit operativ të ndarë në kohë
janë UNIX, Linux, Multics etj.

Fig 1.11 Paraqitja e një systemi me ndarje kohore

G) Sistemi me shumë detyra (Multitasking System):


Sistemet operative me shumë detyra lejojnë që më shumë se një program të ekzekutohet në të
njëjtën kohë. Një sistem operativ me shumë detyra është një sistem operativ që lejon një përdorues
të kryejë njëkohësisht detyra të ndryshme në të njëjtën kohë. Në fakt nuk është kështu sepse ka
vetëm një CPU. Koncepti pas kësaj është ndarja e kohës. Sistemi operativ e ndan kohën e CPU -së
midis detyrave të ndryshme, por kjo kohë është shumë e vogël (nanosekonda) dhe secila detyrë
ekzekutohet për atë interval të vogël kohor dhe kështu përdoruesi mendon se të gjitha programet
ose detyrat po ekzekutohen njëkohësisht. Dhe kalimi midis detyrave/punëve/proceseve gjatë kohës
që ato janë duke u kryer është shumë i shpejtë.

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

H) Sistemi i përpunimit paralel:


Përpunimi paralel është përdorimi i njëkohshëm i më shumë se një CPU ose bërthamë procesori për
të ekzekutuar një program ose fije të shumta llogaritëse. Në mënyrë ideale, përpunimi paralel i bën
programet të funksionojnë më shpejt sepse ka më shumë motorë (CPU ose Bërthama) që e drejtojnë
atë. Në përgjithësi, përpunimi paralel nënkupton më shumë se një mikroprocesor që trajton pjesë të
një detyre të përgjithshme. Një shkencëtar kompjuterik ndan një problem kompleks në pjesë
përbërëse duke përdorur softuer special të krijuar posaçërisht për detyrën. Ai ose ajo pastaj ia
cakton secilën pjesë përbërëse një procesori të dedikuar. Çdo procesor zgjidh pjesën e tij të
problemit të përgjithshëm llogaritës. Softueri i bashkon të dhënat për të arritur në përfundimin
përfundimtar të problemit kompleks origjinal

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ë

Avantazhi i Sistemit Paralel të Përpunimit:- Koha më e shpejtë e ekzekutimit, kështu që xhiroja më e


lartë.

Disavantazhi i sistemit të përpunimit paralel:-

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

I) Sistemi i shpërndarë(Distributed system):


Një sistem i shpërndarë përbëhet nga Kompjuterë të shumtë që komunikojnë përmes një rrjeti
kompjuterik. Kompjuterët ndërveprojnë me njëri -tjetrin për të arritur një qëllim të përbashkët. Një
program kompjuterik që funksionon në një sistem të shpërndarë quhet një program i shpërndarë,
dhe programimi i shpërndarë është procesi i shkrimit të programeve të tilla. Një problem ndahet në
shumë detyra, secila prej të cilave zgjidhet nga një ose më shumë kompjuterë, të cilët komunikojnë
me njëri -tjetrin duke kaluar Mesazhin tek Në rrjetet kompjuterike kompjuterët individualë u
shpërndanë fizikisht brenda një zone gjeografike. Ekzistojnë disa njësi llogaritëse autonome, secila
prej të cilave ka kujtesën e vet lokale. Njësitë komunikojnë me njëri -tjetrin me kalimin e mesazhit.

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:

 Në llogaritjen paralele, të gjithë përpunuesit mund të kenë qasje në një memorie të


përbashkët për të shkëmbyer informacione midis përpunuesve.
 Në llogaritjen e shpërndarë, secili procesor ka kujtesën e tij private (Memorie e shpërndarë).
Informacioni shkëmbehet duke kaluar mesazhe midis përpunuesve.

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:

Rrjetet e telekomunikacionit, rrjetet telefonike, rrjetet celulare, rrjetet kompjuterike (Internet),


rrjetet e sensorëve pa tel, baza e të dhënave të shpërndara, sistemi i skedarëve të rrjetit, rrjeti
botëror, rrjeti peer to peer, Sistemet e shpërndara të përpunimit të informacionit siç janë sistemet
bankare dhe sistemet e rezervimit të linjave ajrore, Real- kontrollin e procesit të kohës.

Fig 1.14 Paraqitja e një sistemi me përpunim të shpërndarë

J) Sistemet e grupuara(Clustered Systems):


Ashtu si sistemet paralele, sistemet e grupuara mbledhin së bashku CPU të shumta për të kryer punë
llogaritëse. Sistemet e grupuara ndryshojnë nga sistemet paralele, megjithatë, në atë që ato
përbëhen nga dy ose më shumë sisteme individuale të shoqëruara së bashku. Përkufizimi i termit të
grupuar nuk është konkret; shumë pako komerciale luftojnë me atë që është një sistem i grupuar
dhe pse një formë është më e mirë se një tjetër. Përkufizimi i pranuar përgjithësisht është se
kompjuterët e grupuar ndajnë hapësirën ruajtëse dhe janë të lidhur ngushtë nëpërmjet rrjeteve LAN.

Grupimi zakonisht përdoret për të ofruar shërbime me disponueshmëri të lartë; domethënë,


shërbimi do të vazhdojë të ofrohet edhe nëse një ose më shumë sisteme në grup dështojnë.

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.

K) Sistemi në kohë reale(Real Time System):


Sistemi operativ në kohë reale shpesh përdoret si një pajisje kontrolli në një aplikacion të dedikuar.
Sensori sjell të dhëna në kompjuter. Kompjuteri duhet të analizojë të dhënat dhe ndoshta të
rregullojë kontrollet për të modifikuar hyrjet e sensorit. Sistemi i cili kontrollon eksperimentet
shkencore, sistemet kompjuterike mjekësore, sistemet e kontrollit industrial dhe disa sisteme të
ekranit janë sisteme në kohë reale. Një sistem i kohës reale i ka përcaktuar mirë kufizimet fikse të
kohës. Përpunimi duhet të bëhet brenda kufizimit të përcaktuar, përndryshe sistemi do të dështojë.

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.

2.1 Koncepti i procesit


Sistemet e hershme kompjuterike lejuan që të ekzekutohej vetëm një program në të njëjtën kohë.
Ky program kishte kontroll të plotë të sistemit dhe kishte qasje në të gjitha burimet e sistemit. Në të
kundërt, sistemet kompjuterike të ditëve të sotme lejojnë që shumë programe të ngarkohen në
memorie dhe të ekzekutohen njëkohësisht.

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.

2.2.1 Blloku i kontrollit të procesit:


Çdo proces përfaqësohet në sistemin operativ nga një bllok kontrolli procesesh (PCB) - i quajtur
gjithashtu një bllok kontrolli detyre. Ai përmban shumë pjesë të informacionit të lidhur me një
proces specifik, duke përfshirë këto:

State Gjendja e procesit: Gjendja mund të jetë e re, e gatshme, në punë, në pritje, e ndaluar, etj.

Counter Numëruesi i programit: Numëruesi tregon adresën e instruksionit tjetër që do të


ekzekutohet për këtë proces.

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 i planifikimit të CPU: Ky informacion përfshin një përparësi të procesit,


tregues për radhët e planifikimit dhe çdo parametër tjetër të planifikimit.

Information Informacioni i menaxhimit të kujtesës: Ky informacion mund të përfshijë informacione


të tilla si vlera e regjistrave bazë dhe limit, tabelat e faqeve ose tabelat e segmenteve, në varësi të
sistemit të kujtesës të përdorur nga sistemi operativ

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.

Fig:2.1 Bloku i kontrollit të procesit (Process control block)


2.2.2 Gjendja e procesit:
Ndërsa një proces ekzekutohet, ai ndryshon gjendjen. Gjendja e një procesi përcaktohet pjesërisht
nga aktiviteti aktual i atij procesi. Çdo proces mund të jetë në njërën nga gjendjet e mëposhtme:

 I ri(new): Procesi është duke u krijuar.


 Po kryhet(Running): Udhëzimet janë duke u ekzekutuar.
 Pritja(Waiting): Procesi është duke pritur që të ndodhë ndonjë ngjarje (siç është përfundimi
I/O ose marrja e një sinjali).
 Gati(Ready): Procesi po pret të caktohet në një procesor.
 Përfunduar(Terminated): Procesi ka përfunduar ekzekutimin.
Këta emra janë arbitrarë dhe ndryshojnë në sistemet operative. Sidoqoftë, gjendjet që ato
përfaqësojnë gjenden në të gjitha sistemet. Disa sisteme operative gjithashtu përcaktojnë më
hollësisht gjendjet e procesit. Importantshtë e rëndësishme të kuptohet se vetëm një proces mund
të ekzekutohet në çdo procesor në çdo moment. Megjithatë, shumë procese mund të jenë gati dhe
në pritje. Diagrami i gjendjes që korrespondon me këto gjendje është paraqitur në figurën vijuese.

Fig: 2.2 Diagrami i gjendjes së procesit (Process State diagram)

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 kryhetPë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.

2.3 Operacionet në Procese (Operations on Processes):


2.3.1 Krijo proces të ri (Create a new Process):

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.

Fig 2.3: Hapat për krjimin e procesit


Modulet burimore ose kodi burimor (një program i shkruar në gjuhë programimi) përkthehet në
programet e objekteve ose modulet e objekteve me ndihmën e përkthyesit (përpiluesit). Modulet e
objekteve të zhvendosura u shndërruan në programe absolute nga lidhësi. Programet absolute
shndërrohen në programe të ekzekutueshme nga ngarkuesit. Pastaj procesori ekzekuton këtë
program. Ky program ekzekutues quhet proces.
Procesi konsiston në imazhin e kodit të makinës të programit në memorje dhe strukturë PCB.

2.3.2 Përfundoni një proces ekzistues:


Dyfishi i krijimit të një procesi është përfundimi i tij. Një proces mund të përfundojë vetë duke u
kthyer nga funksioni i tij kryesor, ose duke thirrur thirrjen e sistemit dalës. Në përgjithësi, procesi
përfundon kur përfundon ekzekutimi. Disa shkaqe të tjera janë:
 Afati kohor ka skaduar
 Shkelje(Violation) e kujtesës
 Dështimi(Failure) I/O
 Udhëzim i pavlefshëm

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.

2.3.3 Pezullimi i ekzekutimit:


Një proces mund të pezullohet duke shkuar për të fjetur. Kjo do të thotë që i tregon sistemit se nuk
ka asgjë për të bërë tani, dhe për këtë arsye nuk duhet të funksionojë. Një gjumë lidhet me një kohë:
kur të vijë kjo kohë e ardhshme, sistemi do ta zgjojë procesin.

2.3.4 Dërgoni një sinjal ose mesazh:


Një operacion i zakonshëm midis proceseve është dërgimi i sinjaleve. Një sinjal shpesh përshkruhet
si një ndërprerje e softuerit: procesi i marrjes merr sinjalin në vend që të vazhdojë me atë që ishte
duke bërë më parë. Në shumë raste, sinjali përfundon procesin nëse procesi nuk ndërmerr ndonjë
veprim për ta parandaluar këtë.

2.4 Procesi i njëkohshëm


Përpunimi i njëkohshëm është një model informatik në të cilin procesorë të shumtë ekzekutojnë
udhëzime njëkohësisht për performancë më të mirë. Detyrat ndahen në nën detyra që më pas u
caktohen përpunuesve të veçantë për të kryer në të njëjtën kohë, në vend që ato të jenë të
njëpasnjëshme siç do të duhej të kryheshin nga një procesor i vetëm. Ndonjëherë thuhet se
përpunimi i njëkohshëm është sinonim i përpunimit paralel.

ekzekutuar paralelisht. Secili prej programeve të njëpasnjëshme të njëkohshme quhet proces.


Ekzekutimi i procesit, edhe pse në të njëjtën kohë, zakonisht nuk është i pavarur. Proceset mund të
ndikojnë në sjelljen e njëri -tjetrit përmes të dhënave të përbashkëta, burimeve të përbashkëta,
komunikimit dhe sinkronizimit.
Fig 2.4: Procesi i njëkohshëm (Concurrent process)

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.

2.5 Fijet (Threads)


Në shkencat kompjuterike, një fije ekzekutimi është sekuenca më e vogël e udhëzimeve të
programuara që mund të menaxhohen në mënyrë të pavarur nga një programues i sistemit operativ.
Një fije është një proces me peshë të lehtë. Zbatimi i fijeve dhe proceseve ndryshon nga një sistem
operativ në tjetrin, por në shumicën e rasteve, një fije përmbahet brenda një procesi. Fijet e shumta
mund të ekzistojnë brenda të njëjtit proces dhe të ndajnë burime të tilla si kujtesa, ndërsa procese të
ndryshme nuk i ndajnë këto burime.
Një proces ndahet në një numër procesesh me peshë të lehtë. Çdo proces me peshë të lehtë quhet
fije. Fije ka një numërues programi që mban gjurmët se cilin udhëzim për të ekzekutuar më pas, ka
regjistra, i cili mban variablat e tij aktualë të punës. Ka një pirg, i cili përmban historinë e ekzekutimit.
Numri i fijeve mund të ndajë hapësirën e kujtesës, të hapë skedarë dhe burime të tjera. Njësoj si
numri i proceseve që mund të ndajnë kujtesën fizike, diskun, printerët etj. Thread ka disa nga vetitë
e procesit dhe funksionon në shumë aspekte në të njëjtën mënyrë si procesi. Fijet mund të jenë në
njërën nga disa gjendjet: gati, të bllokuara, në punë ose të përfunduara. Fijet ndajnë CPU -në dhe
vetëm një fije mund të jetë aktive në të njëjtën kohë. Fijet nuk janë të pavarura nga njëra -tjetra. Të
gjitha fijet mund të kenë qasje në çdo adresë në detyrë. Një fije mund të lexojë ose të shkruajë mbi
çdo grumbull temash të tjera.
Fijet e programit të cilat mund të ekzekutohen njëkohësisht me fijet e tjera, kjo aftësi quhet multi
threading.

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)

2.6 Shumëfije (Multitreading):


Një proces ndahet në numrin e detyrave më të vogla, secila detyrë quhet fije. Numri i fijeve brenda
një procesi të ekzekutuar në një kohë quhet Multithreading. Në bazë të funksionalitetit fijet ndahen
në katër kategori:
1) Një me një
2) Një për shumë
3) Shumë për një
4) Shumë për shumë

Fig 2.6: Tipet e Shumëfijeve (Types of multithreading)

Një me një: (Një proces një fije)


Në këtë qasje, procesi mban vetëm një fije, kështu që quhet qasje e vetme e filetuar. Sistemi
operativ MS-DOS mbështet këtë lloj qasjeje.

Një për shumë: (Një proces, fije të shumta)


Në këtë qasje një proces ndahet në numrin e fijeve. Shembulli më i mirë i kësaj është mjedisi i kohës
së drejtimit JAVA.
Shumë për një: (Procese të shumëfishta, një fije për proces) Një sistem operativ mbështet procese
të shumta përdoruesi, por mbështet vetëm një fije për proces. Shembulli më i mirë është UNIX.

Shumë për shumë: (Procese të shumta, fije të shumta për proces)


Në këtë qasje secili proces ndahet në numrin e fijeve.
Shembuj janë Windows 2000, Solaris LINUX.
Ekzistojnë dy mënyra kryesore për të zbatuar fijet:
 Në hapësirën e përdoruesit
 Në hapësirën e Kernel

Fijet e nivelit të përdoruesit:

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

shumëfishtë nuk zbatohet.

Fig 2.7: Fijet e nivelit të përdoruesit (User Level Threads)

Fijet e nivelit të thelbit (kernelit):

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.

Fig 2.8: Fijet e nivelit të thelbit (Kernel level threads)

2.7 Orari (Itinerari) i procesorit (CPU scheduling)


Objektivi i multiprogramimit që funksionon është që të ketë një proces gjatë gjithë kohës, për të
maksimizuar përdorimin e CPU -së. Objektivi i ndarjes së kohës është kalimi i CPU -së midis
proceseve aq shpesh saqë përdoruesit mund të ndërveprojnë me secilin program gjatë funksionimit
të tij. Për të përmbushur këto objektiva, programuesi i procesit zgjedh një proces të disponueshëm
(ndoshta nga një grup i disa proceseve në dispozicion) për ekzekutimin e programit në CPU. Për një
sistem me një procesor të vetëm, nuk do të ketë kurrë më shumë se një proces drejtimi. Nëse ka më
shumë procese, pjesa tjetër do të duhet të presë derisa CPU të jetë e lirë dhe mund të riplanifikohet.

2.7.1 Radhat e planifikimit (Scheduling queues):


Ndërsa proceset hyjnë në sistem, ato futen në një radhë pune, e cila përbëhet nga të gjitha proceset
në sistem. Proceset që ndodhen në kujtesën kryesore dhe janë gati dhe presin të ekzekutohen
mbahen në një listë të quajtur radhë e gatshme. Kjo radhë në përgjithësi ruhet si një listë e lidhur.
Një kokë e gatshme e radhës përmban tregues për PCB-të e para dhe të fundit në listë. Çdo PCB
përfshin një fushë treguese që tregon PCB -në tjetër në radhën e gatshme.
Sistemi gjithashtu përfshin radhë të tjera. Kur një procesi i ndahet CPU -ja, ai ekzekuton për një kohë
dhe përfundimisht pushon, ndërpritet ose pret për ndodhjen e një ngjarje të veçantë, siç është
përfundimi i një kërkese I/O. Supozoni se procesi bën një kërkesë I/O për një pajisje të përbashkët,
të tillë si një disk. Meqenëse ka shumë procese në sistem, disku mund të jetë i zënë me kërkesën I/O
të ndonjë procesi tjetër. Prandaj procesi mund të duhet të presë për diskun. Lista e proceseve që
presin për një pajisje të veçantë I/O quhet radhë e pajisjes. Çdo pajisje ka radhën e vet të pajisjes.
Fig: 2.9 Radha e gatshme dhe llojet e ndryshme të radhëve të pajisjeve

2.7.2 Planifikues (Schedulers):


Ekzistojnë tre planifikues kryesorë
 Planifikues afatgjatë
 Planifikues afatshkurtër
 Planifikues afatmesëm

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.10: Diagrami i radhës i Programimit të CPU

2.7.3 Ndërrimi i kontekstit (Context Switch):


Kalimi i CPU në një proces tjetër kërkon ruajtjen e gjendjes së procesit të vjetër dhe ngarkimin e
gjendjes së ruajtur të procesit të ri. Kjo detyrë njihet si ndërrues konteksti. Konteksti i një procesi
përfaqësohet në PCB të procesit; ai përfshin vlerën e regjistrave të CPU -së, gjendjen e procesit dhe
informacionin e menaxhimit të kujtesës. Kur ndodh një ndërprerës konteksti, sistemi operativ ruan
kontekstin e procesit të vjetër në PCB -në e tij dhe ngarkon kontekstin e ruajtur të procesit të ri të
planifikuar për t'u ekzekutuar. Koha e ndërrimit të kontekstit është e pastër, sepse sistemi nuk bën
punë të dobishme gjatë ndërrimit. Shpejtësia e tij ndryshon nga makina në makinë, në varësi të
shpejtësisë së kujtesës, numrit të regjistrave që duhet të kopjohen dhe ekzistencës së udhëzimeve
speciale (siç është një udhëzim i vetëm për të ngarkuar ose ruajtur të gjithë regjistrat). Shpejtësitë
tipike janë më pak se 10 milisekonda.
2.7.4 Cikli i shpërthimit(Plasjes) të CPU dhe I/O(CPU & I/O burst cycle)
Suksesi i planifikimit të CPU varet nga vetia e vëzhguar e proceseve:
Ekzekutimi i procesit përbëhet nga një cikël i ekzekutimit të CPU dhe pritjes I/O. Proceset alternojnë
midis këtyre dy gjendjeve. Ekzekutimi i procesit fillon me një shpërthim të CPU. Kjo pasohet nga një
shpërthim I/O, i cili pasohet nga një hov tjetër i CPU -së, pastaj një tjetër I/O plasje, e kështu me
radhë. Përfundimisht, shpërthimi përfundimtar i CPU -së përfundon me një kërkesë të sistemit për të
përfunduar ekzekutimin.

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.

Pothuajse të gjitha proceset alternojnë shpërthimet e llogaritjes me (disk) kërkesat I/O.

Fig: 2.12 Histogrami i kohës së plasjes së CPU -së


2.8 Kriteret e planifikimit:
Algoritme të ndryshme të caktimit të procesorit kanë veti të ndryshme, dhe zgjedhja e një algoritmi
të veçantë mund të favorizojë një klasë të proceseve mbi një tjetër. Në zgjedhjen e algoritmit që do
të përdorim në një situatë të veçantë, duhet të kemi parasysh vetitë e algoritmeve të ndryshme.

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.

2.9 Algoritmet e planifikimit:


Planifikimi i CPU -së merret me problemin e vendosjes se cilit nga proceset në radhën e gatshme do
t'i ndahet CPU -ja. Ka shumë algoritme të ndryshme të caktimit të procesorit.

2.9.1 Planifikimi i Hyrjes së Parë, Shërbimit të Parë


Algoritmi më i thjeshtë i planifikimit të CPU-së është algoritmi i planifikimit të ardhjes, shërbimit të
parë (FCFS). Me këtë skemë, procesit që kërkon CPU së pari i ndahet CPU së pari. Zbatimi i politikës
së FCFS menaxhohet lehtësisht me një radhë FIFO. Kur një proces hyn në radhën e gatshme, PCB e tij
lidhet me bishtin e radhës. Kur CPU -ja është e lirë, ajo i alokohet procesit në krye të radhës. Procesi i
ekzekutimit hiqet më pas nga radha. Kodi për planifikimin e FCFS është i thjeshtë për tu shkruar dhe
kuptuar. Nga ana negative, koha mesatare e pritjes sipas politikës së FCFS është shpesh mjaft 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:
Process Burst Time
P1 24
P2 3
P3 3

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.

Kështu, koha mesatare e pritjes llogaritet si më poshtë

Koha mesatare e pritjes

Koha e pritjes = koha e fillimit - Koha e mbërritjes

Koha e pritjes për P1 = 0 - 0 = 0

Koha e pritjes për P2 = 24 - 0 = 24 Koha e pritjes për P3 = 27 - 0 = 27

Koha mesatare e pritjes = (0+24+27)/3 = 17 milisekonda.

Koha mesatare e kthesës

Koha e kthimit = Koha e përfundimit - Koha e mbërritjes

Koha e kthesës për P1 = 24 - 0 = 24

Koha e kthesës për P2 = 27 - 0 = 27

Koha e kthesës për P3 = 30 - 0 = 30

Koha mesatare e kthimit = (24+27+30)/3 = 27

Koha mesatare e përgjigjes

Koha e përgjigjes = Përgjigja e parë - Koha e mbërritjes

Koha e përgjigjes për P1 = 0 - 0 = 0

Koha e përgjigjes për P2 = 24 - 0 = 24


Koha e përgjigjes për P3 = 27 - 0 = 27

Koha mesatare e përgjigjes = (0+24+27)/3 = 17 milisekonda

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.

2.9.2 Planifikimi: Puna më i shkurtër e para kryhet


Në këtë qasje, CPU i caktohet procesit që ka kohën më të shkurtër të shpërthimit të CPU. Kur CPU -ja
është e disponueshme, i caktohet procesit që ka plasjen më të vogël të radhës të CPU -së. Nëse
shpërthimet e tjera të CPU -së të dy proceseve janë të njëjta, planifikimi i FCFS përdoret për të
prishur lidhjen.

Si shembull i planifikimit të SJF, merrni parasysh 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:

Process Burst Time


P1 6
P2 8
P3 7
P4 3
Grafiku i mëposhtëm Gantt ilustron procesin e planifikimit të SJF:

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.

Koha mesatare e pritjes

Koha e pritjes = koha e fillimit - Koha e mbërritjes

Koha e pritjes për P1 = 3 - 0 = 3

Koha e pritjes për P2 = 16 - 0 = 16

Koha e pritjes për P3 = 9 - 0 = 9

Koha e pritjes për P4 = 0 - 0 = 0

Koha mesatare e pritjes = (3+16+9+0)/4 = 7 milisekonda.

Kështu, koha mesatare e pritjes është (3 + 16 + 9 + 0) I 4 = 7 milisekonda. Për krahasim, nëse do të


ishim duke përdorur skemën e planifikimit FCFS, koha mesatare e pritjes do të ishte 10.25
milisekonda.

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ë.

2.9.3 Algoritmi parandalues i planifikimit SJF (mbetja më e shkurtër-


koha-së pari):
Algoritmi SJF mund të jetë ose parandalues ose jo parandalues. Zgjedhja lind kur një proces i ri arrin
në radhën e gatshme ndërsa një proces i mëparshëm është ende duke u ekzekutuar. Shpërthimi
tjetër i CPU -së i procesit të sapoardhur mund të jetë më i shkurtër se ai që ka mbetur nga procesi
aktual i ekzekutimit. Një algoritëm parandalues SJF do të paraprijë procesin aktual të ekzekutimit, ku
si një algoritëm SJF jo parandalues do të lejojë që procesi aktualisht në punë të përfundojë
shpërthimin e CPU -së së tij.

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.

Koha mesatare e pritjes

Koha e pritjes = koha e fillimit - Koha e mbërritjes

Koha e pritjes për P1 = 0 - 0 = 0

Koha e pritjes për P2 = 1 - 1 = 0

Koha e pritjes për P3 = 17 - 2 = 15

Koha e pritjes për P4 = 5 - 3 = 2

Koha mesatare e pritjes = (0+0+15+2)/4 = 4.25 milisekonda.

Planifikimi jo paraprak i SJF do të rezultonte në një kohë mesatare pritjeje prej 7.75 milisekonda.

2.9.4 Planifikimi i prioriteteve:


Algoritmi SJF është një rast i veçantë i algoritmit të planifikimit me përparësi të përgjithshme. Një
përparësi shoqërohet me secilin proces, dhe CPU i caktohet procesit me përparësinë më të lartë.
Proceset me përparësi të barabarta janë planifikuar në rendin e FCFS. Një algoritëm SJF është thjesht
një algoritëm prioritar ku përparësia (p) është e kundërta e shpërthimit të CPU -së (të parashikuar)
të ardhshëm. Sa më i madh të shpërthejë CPU, aq më i ulët është përparësia dhe anasjelltas.

Vini re se ne diskutojmë planifikimin në aspektin e përparësisë së lartë dhe përparësisë së ulët.


Prioritetet në përgjithësi tregohen nga një gamë fikse numrash, si 0 deri në 7 ose 0 deri në 4,095.
Megjithatë, nuk ka një marrëveshje të përgjithshme nëse 0 është prioriteti më i lartë apo më i ulët.
Disa sisteme përdorin numra të ulët për të përfaqësuar prioritet të ulët; të tjerët përdorin numra të
ulët për përparësi të lartë. Ky ndryshim mund të çojë në konfuzion. Në këtë tekst, ne supozojmë se
numrat e ulët përfaqësojnë përparësi të lartë. Si shembull, merrni parasysh grupin e mëposhtëm të
proceseve, të supozuar se kanë mbërritur në kohën 0, sipas rendit P1, P2, P3, P4, P5, me gjatësinë e
shpërthimit të CPU -së të dhënë në milisekonda:
Process Burst Time Priority
P1 10 3
P2 1 1
P3 2 4
P4 1 5
P5 5 2

Duke përdorur planifikimin prioritar, ne do t'i planifikonim këto procese sipas tabelës së mëposhtme
Gantt:

Koha mesatare e pritjes

Koha e pritjes = koha e fillimit - Koha e mbërritjes

Koha e pritjes për P1 = 6 - 0 = 6

Koha e pritjes për P2 = 0 - 0 = 0

Koha e pritjes për P3 = 16 - 0 = 16

Koha e pritjes për P4 = 18 - 0 = 18

Koha e pritjes për P5 = 1 - 0 = 1

Koha mesatare e pritjes = (6+0+16+18+1)/5 = 8.2 milisekonda.

Koha mesatare e pritjes është 8.2 milisekonda.

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:

Process Burst time


P1 24
P2 3
P3 3

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.

Koha mesatare e pritjes

Koha e pritjes = koha e fillimit - Koha e mbërritjes

Koha e pritjes për P1 = (0-0)+(10-4)+(14-14)+(18-18)+(22-22)+(2626)+(30-30) = 6

Koha e pritjes për P2 = 4 - 0 = 4 Koha e pritjes për P3 = 7 - 0 = 7

Koha mesatare e pritjes = (6+4+7)/3 = 5.66 Millisekonda.


Koha mesatare e pritjes është 17/3 = 5.66 milisekonda. Në algoritmin e planifikimit RR, asnjë procesi
nuk i ndahet CPU -ja për më shumë se 1 herë kuantike rresht (përveç nëse është i vetmi proces i
drejtueshëm). Nëse shpërthimi i CPU -së së një procesi tejkalon 1 kuantin kohor, ai proces
parandalohet dhe vendoset përsëri në radhën e gatshme. Algoritmi i planifikimit RR është kështu
parandalues.

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 )

You might also like